@ditojs/admin 1.2.0 → 1.4.1

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,6 +1,6 @@
1
- var As=Object.defineProperty,Ns=Object.defineProperties;var Us=Object.getOwnPropertyDescriptors;var et=Object.getOwnPropertySymbols;var zt=Object.prototype.hasOwnProperty,Ht=Object.prototype.propertyIsEnumerable;var ht=(t,e,s)=>e in t?As(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s,d=(t,e)=>{for(var s in e||(e={}))zt.call(e,s)&&ht(t,s,e[s]);if(et)for(var s of et(e))Ht.call(e,s)&&ht(t,s,e[s]);return t},S=(t,e)=>Ns(t,Us(e));var F=(t,e)=>{var s={};for(var n in t)zt.call(t,n)&&e.indexOf(n)<0&&(s[n]=t[n]);if(t!=null&&et)for(var n of et(t))e.indexOf(n)<0&&Ht.call(t,n)&&(s[n]=t[n]);return s};var pt=(t,e,s)=>(ht(t,typeof e!="symbol"?e+"":e,s),s);import A from"vue";import zs from"vue-js-modal";import Kt from"vue-router";import Hs from"vue-notification";import Ks from"axios";import{isInteger as W,normalizeDataPath as z,parseDataPath as N,getValueAtDataPath as J,isFunction as b,isArray as x,isPlainObject as Wt,isBoolean as Ws,isNumber as st,isString as V,isDate as mt,isObject as C,isRegExp as ft,asArray as T,pickBy as Jt,labelize as U,equals as _t,format as Js,hyphenate as Q,isCreditCard as Qs,isEmail as Gs,isHostname as Xs,isDomain as Ys,isUrl as Zs,camelize as Qt,clone as nt,isPromise as vt,isModule as tn,getCommonPrefix as en,stripTags as sn,capitalize as G,deindent as nn,merge as gt,escapeHtml as Gt,debounceAsync as an,debounce as rn,underscore as on,defaultFormats as ln,isAbsoluteUrl as un}from"@ditojs/utils";import{nanoid as cn}from"nanoid";import{addEvents as Xt,TransitionHeight as dn,Pagination as hn,Trigger as pn,DatePicker as mn,TimePicker as fn,DateTimePicker as _n,Icon as vn,InputField as bt,SwitchButton as gn}from"@ditojs/ui";import yt from"vuedraggable";import bn from"codeflask";import $t from"tinycolor2";import{Sketch as yn}from"vue-color";import{EditorContent as $n,EditorMenuBar as Cn,Editor as Dn,Mark as wn}from"tiptap";import{toggleMark as Pn}from"tiptap-commands";import{Bold as xn,Italic as Sn,Underline as On,Strike as En,Code as jn,Blockquote as Vn,CodeBlock as kn,HardBreak as Ln,Heading as Bn,HorizontalRule as Fn,ListItem as Tn,BulletList as Rn,OrderedList as In,History as qn,Link as Mn}from"tiptap-extensions";import An from"vue-multiselect";import Nn from"vue-upload-component";import Un from"filesize-parser";import zn from"filesize";var Yt={title:"",routeComponents:[],user:null,loadCache:{},activeLabel:null,clipboardData:null};function B(t,e){return t?`${t}/${e}`:e}function Hn(t){const e=N(t);return e==null||e.pop(),e}function Ct(t,e=!1){return e?Hn(t):N(t)}function Kn(t,e=!1){return z(Ct(t,e))}function Zt(t,e=!1){const s=Ct(t,e);if(s){let n;do n=s.pop();while(n!=null&&W(+n));if(n!=null)return s}return null}function Wn(t,e=!1){return z(Zt(t,e))}function Dt(t,e,s=!1){const n=Ct(e,s);return n?J(t,n):null}function wt(t,e,s=!1){const n=Zt(e,s);return n?J(t,n):null}function te(t){const e=N(t);return e[e.length-1]}function Jn(t){const e=te(t);return e==null||W(+e)?null:e}function Pt(t){const e=te(t),s=e==null?null:+e;return W(s)?s:null}let Qn=0;function Gn(t,e="id"){t[e]=`@${++Qn}`}function at(t){return/^@/.test(t)}function Xn(t,e="id"){return(t==null?void 0:t[e])!=null&&Object.keys(t).length===1}const xt=new WeakMap;function D(t,e,s){const n=xt.get(t),a=n[e];return a!==void 0||n.hasOwnProperty(e)?a:b(s)?s():s}function Yn(t,e,s){xt.get(t)[e]=s}class O{constructor(e,s){var a;s=s?b(s)?s():d({},s):{},(a=s.nested)!=null||(s.nested=!0),s.component=e;const n=Object.setPrototypeOf(s,e);xt.set(this,n)}static get(e,s){return s instanceof O?s:new O(e,s)}get nested(){return D(this,"nested",!0)}get value(){return D(this,"value",void 0)}get dataPath(){return D(this,"dataPath","")}get name(){return D(this,"name",()=>Jn(this.dataPath))}get index(){return D(this,"index",()=>Pt(this.dataPath))}get itemDataPath(){return Kn(this.dataPath,this.nested)}get parentItemDataPath(){return Wn(this.dataPath,this.nested)}get itemIndex(){return Pt(this.itemDataPath)}get parentItemIndex(){return Pt(this.parentItemDataPath)}get item(){return D(this,"data",()=>Dt(this.rootItem,this.dataPath,this.nested))}get parentItem(){const e=wt(this.rootItem,this.dataPath,this.nested)||null;return e!==this.item?e:null}get rootItem(){return D(this,"rootData",null)}get processedItem(){return D(this,"processedData",null)}get clipboardItem(){return D(this,"clipboardData",null)}get user(){return D(this,"user",null)}get api(){return D(this,"api",null)}get views(){return D(this,"views",null)}get itemLabel(){return D(this,"itemLabel",null)}get formLabel(){return D(this,"formLabel",null)}get component(){return D(this,"component",null)}get schemaComponent(){return D(this,"schemaComponent",null)}get formComponent(){return D(this,"formComponent",null)}get viewComponent(){return D(this,"viewComponent",null)}get dialogComponent(){return D(this,"dialogComponent",null)}get panelComponent(){return D(this,"panelComponent",null)}get resourceComponent(){return D(this,"resourceComponent",null)}get sourceComponent(){return D(this,"sourceComponent",null)}get option(){return D(this,"option",void 0)}get options(){return D(this,"options",void 0)}get query(){return D(this,"query",void 0)}get error(){return D(this,"error",void 0)}get wasNotified(){return D(this,"wasNotified",!1)}get request(){return e=>this.component.request(e)}get format(){return(e,s)=>this.component.format(e,s)}get navigate(){return e=>this.component.navigate(e)}get download(){return e=>this.component.download(e)}get getResourceUrl(){return e=>this.component.getResourceUrl(e)}get notify(){return e=>{this.component.notify(e),Yn(this,"wasNotified",!0)}}}var Zn={data(){return{$events:null}},methods:{on(t,e){if(x(t))for(const s of t)this.on(s,e);else if(Wt(t))for(const s in t)this.on(s,t[s]);else{const s=this.$events||(this.$events=Object.create(null)),{callbacks:n}=s[t]||(s[t]={callbacks:[],queue:[]});n.push(e)}return this},once(t,e){const s=(...n)=>(this.off(t,s),e.apply(this,n));return s.callback=e,this.on(t,s)},off(t,e){var s;if(!arguments.length)delete this.$events;else if(x(t))for(const n of t)this.off(n,e);else if(Wt(t))for(const n in t)this.off(n,t[n]);else{const n=(s=this.$events)==null?void 0:s[t];if(n)if(!e)delete this.$events[t];else{const{callbacks:a}=n,r=a.findIndex(i=>i===e||i.callback===e);r!==-1&&a.splice(r,1)}}return this},emit(t,...e){var n;const s=(n=this.$events)==null?void 0:n[t];if(s){const{queue:a,callbacks:r}=s;return new Promise(i=>{const o=async()=>{const u=a.shift();if(u){let l;for(const c of r)try{const _=await c.apply(this,u.args);_!==void 0&&(l=_)}catch(_){console.error(`Error during event handler for '${t}':`,_)}u.resolve(l),o()}};a.push({args:e,resolve:i}),a.length===1&&o()})}},hasListeners(t){var e;if(x(t)){for(const s of t)if(!this.hasListeners(s))return!1;return t.length>0}else return!!((e=this.$events)!=null&&e[t])},delegate(t,e){if(e)if(x(t))for(const s of t)this.delegate(s,e);else this.on(t,(...s)=>e.emit(t,...s));return this}}};const St={Boolean:Ws,Number:st,String:V,Date:mt,Array:x,Object:C,RegExp:ft,Function:b},ta=t=>!!t,ea=t=>+t,sa=t=>String(t),na=t=>mt(t)?t:new Date(t),aa=t=>x(t)?t:V(t)?t.split(","):T(t),ra=t=>C(t)?t:t===!0?{}:null,ia=t=>ft(t)?t:new RegExp(t),oa={Boolean:ta,Number:ea,String:sa,Date:na,Array:aa,Object:ra,RegExp:ia};function Ot(t,e){var s;if(t&&e!=null){for(const n of t)if((s=St[n.name])!=null&&s.call(St,e))return!0}return!1}function la(t,e){const s=t&&oa[t.name||t];return s?s(e):e}function ee(t){return!!I(t.resource)}function I(t,e={}){var r;const a=e,{parent:s}=a,n=F(a,["parent"]);return t=C(t)?d(d({},n),t):V(t)?S(d({},n),{path:t}):null,t&&s!==void 0&&t.parent===void 0&&!((r=t.path)!=null&&r.startsWith("/"))&&(t.parent=s,t.path||(t.path=".")),t}function Et(t,e){return t!=null&&(e==null?void 0:e.type)==="collection"?S(d({type:"member"},Jt(e,(s,n)=>["method","path","parent"].includes(n))),{id:`${t}`}):null}const se=new Set;function ua(t){se.has(t)||(se.add(t),console.warn(t))}var jt={mixins:[Zn],inject:["api","$verbs","$views","$isPopulated","$schemaComponent","$routeComponent","$dataComponent","$sourceComponent","$resourceComponent","$dialogComponent","$panelComponent","$tabComponent"],provide(){return this.providesData?{$dataComponent:()=>this}:{}},data(){return{appState:Yt,overrides:null}},computed:{sourceSchema(){var t;return(t=this.meta)==null?void 0:t.schema},user(){return Yt.user},verbs(){return this.$verbs()},views(){return this.$views()},isPopulated(){return this.$isPopulated()},locale(){return this.api.locale},context(){return new O(this,{nested:!1})},rootComponent(){return this.$root.$children[0]},schemaComponent(){return this.$schemaComponent()},routeComponent(){return this.$routeComponent()},formComponent(){const t=this.routeComponent;return t!=null&&t.isForm?t:null},viewComponent(){const t=this.routeComponent;return t!=null&&t.isView?t:null},dataComponent(){return this.providesData?this:this.$dataComponent()},sourceComponent(){return this.$sourceComponent()},resourceComponent(){return this.$resourceComponent()},dialogComponent(){return this.$dialogComponent()},panelComponent(){return this.$panelComponent()},tabComponent(){return this.$tabComponent()},parentSchemaComponent(){var t;return(t=this.schemaComponent)==null?void 0:t.$parent.schemaComponent},parentRouteComponent(){var t;return(t=this.routeComponent)==null?void 0:t.$parent.routeComponent},parentFormComponent(){var t;return(t=this.formComponent)==null?void 0:t.$parent.formComponent},rootData(){var t;return(t=this.dataComponent)==null?void 0:t.data}},beforeCreate(){this.$uid=++ca},methods:{getStore(t){return this.store[t]},setStore(t,e){return this.$set(this.store,t,e)},getChildStore(t){return this.getStore(t)||this.setStore(t,{})},getSchemaValue(t,{type:e,default:s,schema:n=this.schema,callback:a=!0}={}){const r=e&&T(e);let i=n?x(t)?J(n,t,()=>{}):n[t]:void 0;if(i===void 0&&s!==void 0)return a&&b(s)&&!Ot(r,s)&&(s=s.call(this,this.context)),s;if(Ot(r,i))return i;if(a&&b(i)&&(i=i.call(this,this.context)),r&&i!=null&&!Ot(r,i))for(const o of r){const u=la(o,i);if(u!==i)return u}return i},getLabel(t,e){return t?this.getSchemaValue("label",{type:String,schema:t})||U(e||t.name):U(e)||""},labelize:U,getButtonAttributes(t,e){const s=this.verbs[t]||t;return{class:`dito-button-${s}`,title:(e==null?void 0:e.text)||U(s)}},getDragOptions(t,e=!1){return{animation:150,disabled:!t,handle:".dito-button-drag",dragClass:"dito-drag-active",chosenClass:"dito-drag-chosen",ghostClass:"dito-drag-ghost",fallbackClass:"dito-drag-fallback",forceFallback:e}},getQueryLink(t){return{query:t,hash:this.$route.hash}},shouldRender(t=null){return!!t&&this.getSchemaValue("if",{type:Boolean,default:!0,schema:t})},showDialog({components:t,buttons:e,data:s,settings:n={width:480,height:"auto",clickToClose:!1}}){return new Promise((a,r)=>{this.$modal.show(v.component("dito-dialog"),{components:t,buttons:e,data:s,promise:{resolve:a,reject:r}},n)})},getResourcePath(t){var e;return t=I(t),t.parent===void 0&&(t.parent=(e=this.dataComponent)==null?void 0:e.resource),this.api.resources.any(I(t))},getResourceUrl(t){const e=this.getResourcePath(t);let s=null;if(e){s=`${this.api.url.replace(/\/+$/,"")}/${e.replace(/^\/+/,"")}`;const{query:n}=t;if(n){const a=Object.entries(n).map(([r,i])=>`${encodeURIComponent(r)}=${encodeURIComponent(i)}`);s=`${s}?${a.join("&")}`}}return s},async sendRequest({method:t,url:e,resource:s,data:n,params:a,internal:r}){e=e||this.getResourcePath(s),t=t||(s==null?void 0:s.method);const i=!r&&this.api.isApiRequest(e);i&&await this.rootComponent.ensureUser();const o=await this.api.request({method:t,url:e,data:n,params:a});return i&&t==="patch"&&_t(s,Et(this.user.id,this.api.users))&&await this.rootComponent.fetchUser(),o},request(s){var n=s,{cache:t}=n,e=F(n,["cache"]);const a=t&&{global:this.appState,local:this.dataComponent}[t],r=a==null?void 0:a.loadCache,i=r&&`${e.method||"get"} ${e.url} ${JSON.stringify(e.params||"")} ${JSON.stringify(e.data||"")}`;if(r&&i in r)return r[i];const o=this.sendRequest(e).then(u=>u.data).catch(u=>{var c;const l=(c=u.response)==null?void 0:c.data;throw l?Object.assign(new Error(l.message),l):u});return r&&(r[i]=o),o},load(t){return ua("load() is deprecated. Use request() instead."),this.request(t)},format(t,a={}){var r=a,{locale:e=this.api.locale,defaults:s=this.api.formats}=r,n=F(r,["locale","defaults"]);return Js(t,d({locale:e,defaults:s},n))},async navigate(t){return new Promise(e=>{this.$router.push(t,()=>e(!0),()=>e(!1))})},download(t={}){V(t)&&(t={url:t});const{url:e,filename:s}=t,n=document.createElement("a");n.href=e,s&&(n.download=s);const{body:a}=document;a.appendChild(n),n.click(),a.removeChild(n)},notify(t){this.rootComponent.notify(t)},closeNotifications(){this.rootComponent.closeNotifications()},setupSchemaFields(){this.setupMethods(),this.setupComputed(),this.setupEvents()},setupMethods(){for(const[t,e]of Object.entries(this.schema.methods||{}))b(e)?this[t]=e:console.error(`Invalid method definition: ${t}: ${e}`)},setupComputed(){for(const[t,e]of Object.entries(this.schema.computed||{})){const s=b(e)?{get:e}:C(e)&&b(e.get)?e:null;s?Object.defineProperty(this,t,s):console.error(`Invalid computed property definition: ${t}: ${e}`)}},setupEvents(){const{watch:t,events:e}=this.schema;if(t){const n=b(t)?t.call(this):t;C(n)&&this.$nextTick(()=>{for(const[a,r]of Object.entries(n)){const i=this.schemaComponent.getComponentByName(a)?`data.${a}`:a;this.$watch(i,r)}})}const s=(n,a,r)=>{b(r)?this.on(Q(a),r):console.error(`Invalid event definition: ${n}: ${r}`)};if(e)for(const[n,a]of Object.entries(e))s(n,n,a);for(const[n,a]of Object.entries(this.schema))/^on[A-Z]/.test(n)&&s(n,n.slice(2),a)},async emitEvent(t,{context:e=null,parent:s=null}={}){const n=this.hasListeners(t),a=s==null?void 0:s.hasListeners(t);if(n||a){["load","change"].includes(t)&&await this.$nextTick();const r=()=>e=O.get(this,e),i=n?await this.emit(t,r()):void 0;return a&&i!==!1&&s.emit(t,r()),i}},emitSchemaEvent(t,e){return this.schemaComponent.emitEvent(t,e)}}};let ca=0;const da={validate:t=>Qs(t),message:"is invalid"},ha={validate:(t,e)=>{const s=e==="*"?"+":`{1,${e}}`;return new RegExp(`^[-+]?\\d*(\\.\\d${s})?$`).test(t)},message:(t,e)=>`must be numeric and may contain ${!e||e==="*"?"":e} decimal points`},pa={validate:t=>Gs(t),message:"must be a valid email"},ma={validate:t=>Xs(t),message:"is not a host name"},fa={validate:t=>Ys(t),message:"is not a domain"},_a={validate:t=>W(t),message:"must be whole number"},va={validate:(t,e)=>t<=e,message(t,e){return`must be ${e} or less`}},ga={validate:(t,e)=>t>=e,message(t,e){return`must be ${e} or more`}},ba={validate:()=>!0},ya={validate:(t,[e,s])=>t>=e&&t<=s,message(t,[e,s]){return`must be between ${e} and ${s}`}},$a={validate:(t,e,{password:s})=>t!=null&&t!==""||s&&t===void 0,message:"is required",nullish:!0},Ca={validate:t=>Zs(t),message:"is not a valid URL"};var Da=Object.freeze(Object.defineProperty({__proto__:null,creditcard:da,decimals:ha,email:pa,hostname:ma,domain:fa,integer:_a,max:va,min:ga,password:ba,range:ya,required:$a,url:Ca},Symbol.toStringTag,{value:"Module"})),wa={data(){return{isTouched:!1,isDirty:!1,isValidated:!1,isValid:!1,errors:null}},computed:{events(){return{focus:()=>{this.isTouched=!0},blur:()=>{this.validate()},change:()=>{this.markDirty()},input:()=>{this.markDirty()}}}},methods:{resetValidation(){this.isTouched=!1,this.isDirty=!1,this.isValidated=!1,this.isValid=!1,this.clearErrors()},validate(t=!0){let e=!0;t&&this.clearErrors();const{value:s}=this;for(const[n,a]of Object.entries(this.validations)){const r=Da[n];if(r&&(r.nullish||s!=null)){const{validate:i,message:o}=r;if(!i(s,a,this.validations)&&(e=!1,t)){const u=b(o)?o(s,a,this):o;this.addError(u,!0)}}}return t&&(this.isValidated=!0,this.isValid=e),e},verify(){return this.validate(!1)},markDirty(){this.isDirty=!0,this.isValidated=!1,this.isValid=!1,this.clearErrors()},addError(t,e=!1){this.errors||(this.errors=[]),e&&(t=`The ${this.label||this.placeholder||this.name} field ${t}.`),this.errors.push(t),this.$emit("errors",this.errors)},showValidationErrors(t,e){this.errors=[];for(const{message:s}of t)this.addError(s,!0);return e&&this.focus(),!0},getErrors(){return this.errors?[...this.errors]:null},clearErrors(){this.errors=null,this.$emit("errors",this.errors)}}};function h(t,{type:e,default:s,get:n,set:a,callback:r=!0}={}){V(t)&&t.includes(".")&&(t=N(t));const i=z(t);return{get(){const o=!n||n.length>0?this.overrides&&i in this.overrides?this.overrides[i]:this.getSchemaValue(t,{type:e,default:s,callback:r}):void 0;return n?n.call(this,o):o},set(o){a?a.call(this,o):(this.overrides||(this.overrides={}),this.$set(this.overrides,i,o))}}}function Vt(t,{default:e,get:s,set:n}={}){return{get(){let a=this.getStore(t);return a===void 0&&e!==void 0&&(a=b(e)?e.call(this,this.context):e,this[t]=a,this.getStore(t)),s?s.call(this,a):a},set(a){(!n||(a=n.call(this,a))!==void 0)&&this.setStore(t,a)}}}const ne=new WeakMap;let Pa=0;function xa(t,e){let s=ne.get(t);return s||(s=s=e||`@${++Pa}`,ne.set(t,s)),s}class Sa{constructor(){pt(this,"graph",{});pt(this,"references",{})}set(e,s,n){var r;e=N(e);let a=this.graph;for(const i of e){const o=W(+i)?"*":i;a=(r=a[o])!=null?r:a[o]={}}a.$settings=d(d(d({},n),a.$settings),s)}addSource(e,s){this.set(e,{type:"source",schema:s},{related:!1})}setSourceRelated(e){this.set(e,{related:!0,reference:this.getReferencePrefix(e)})}addRelation(e,s,n){this.set(e,{type:"relation",schema:n,internal:!!s,reference:this.getReferencePrefix(s)})}getReferencePrefix(e){var s,n;return e?(n=(s=this.references)[e])!=null?n:s[e]=cn(6):null}flatten(){const e=s=>{const n=[];for(const a of Object.entries(s)){const[o,r]=a,i=r,{$settings:u}=i,l=F(i,["$settings"]);u&&n.push([o,u]);for(const[c,_]of e(l))n.push([`${o}/${c}`,_])}return n};return e(this.graph)}process(e,s,{target:n}){const a=n==="clipboard";a&&delete s[e.idKey||"id"];for(const[r,i]of this.flatten()){const{type:o,schema:u,internal:l,related:c,reference:_}=i,f=o==="source",y=o==="relation";if(f||y&&l){const m=J(s,r,()=>null),w=a&&f&&!c,j=a&&(y&&l||f&&c);for(const P of T(m).flat()){const g=f&&u.idKey||y&&u.relateBy||"id";let E=P==null?void 0:P[g];if(E!=null&&(w&&delete P[g],j||at(E))){at(E)&&(E=E.slice(1));const L=a?g:f?"#id":"#ref",k=a?`@${E}`:_?`${_}-${E}`:E;P[L]=k,L!==g&&delete P[g]}}}}return s}}const ae={},re={};function Oa(t,e){ae[t]=e}function kt(t,e=!1){const s=ae[t]||null;if(!s&&!e&&!re[t])throw re[t]=!0,new Error(`Unknown Dito component type: '${t}'`);return s}function ie(t,e){const s=[...Object.values((t==null?void 0:t.tabs)||{}),t];for(const n of s)if(n){const a=e(n);if(a!==void 0)return a}}function oe(t,e){return ie(t,s=>{for(const[n,a]of Object.entries(s.components||{})){const r=e(a,n);if(r!==void 0)return r}})}function Ea(t,e){return oe(t,(s,n)=>e(s,n)?!0:void 0)===!0}async function Lt(t,e=!1){if(b(t)&&(t=t()),vt(t)&&(t=await t),tn(t)&&(t=d({},t),!t.name&&(e||t.default))){const s=Object.keys(t);if(s.length===1){const n=s[0];t=t[n],t.name=n}}return t}async function Bt(t,e=Lt){let s=b(t)?t():t;return s=await Lt(s,!1),x(s)?s=Object.fromEntries(await Promise.all(s.map(async n=>{const a=await e(n,!0);return[a.name,a]}))):C(s)&&(s=Object.fromEntries(await Promise.all(Object.entries(s).map(async([n,a])=>{const r=await e(a,!0);return[n,r]})))),s}async function le(t){const{panels:e}=t;t.panels&&(t.panels=await Bt(e))}async function ja(t,e,s,n,a){const r=[];ce(e,s,n),await le(s),he(s)?await ue(e,s,n,r,0):await Ft(e,s,r,1),a.push({path:`/${s.path}`,children:r,component:t,meta:{api:e,schema:s}})}function ue(t,e,s,n,a){var r,i;return e.level=a,(i=(r=q(e))==null?void 0:r.processSchema)==null?void 0:i.call(r,t,e,s,n,a)}function ce(t,e,s){e.name=s,e.path=e.path||t.normalizePath(s)}async function Ft(t,e,s,n){const a=[];oe(e,(r,i)=>{a.push(ue(t,r,i,s,n))}),await Promise.all(a)}async function Va(t,e,s){let{form:n,forms:a,components:r}=e;a?a=e.forms=await Bt(a,de):n?n=e.form=await de(n):r&&C(r)&&(n={components:r}),a||(a={default:n});const i=[];for(const o of Object.values(a))await Ft(t,o,i,s+1);return i}async function de(t){return t=await Lt(t,!0),t&&await le(t),t}function he(t){return!!t.type}function H(t){return C(t)&&!!(t.form||t.forms||t.components)}function ka(t){return Object.keys((t==null?void 0:t.forms)||{}).length>1}function Tt(t,e){const{view:s}=t,n=s&&e.views[s];return n?H(n)?n:ie(n,a=>{var i;const r=(i=a.components)==null?void 0:i[s];if(H(r))return r}):null}function La(t,e){const s=Tt(t,e);return s?s.level===0?`/${s.path}`:`/${s.path}/${s.path}`:null}function X(t,e,s){const n=Tt(t,e);if(n)t=n;else if(t.view)throw new Error(`Unknown view: '${t.view}'`);let{form:a,forms:r,components:i,compact:o}=t;if(!a&&!r)if(i)a={components:i,compact:o};else return{};return r||(r={default:a}),Object.fromEntries(Object.entries(r).map(([u,l])=>{var c;return b(l.components)&&(l=S(d({},l),{components:l.components(e)})),[u,(c=s==null?void 0:s(l))!=null?c:l]}))}function pe(t,e){return t[e==null?void 0:e.type]||t.default||null}function Rt(t,e,s){return pe(X(t,s),e)}function Ba(t){return t.label!==!1}function me(t){return!!t.compact}function It(t){return!!(t.inlined||t.components)}function fe(t){var e;return!!(t.nested||((e=q(t))==null?void 0:e.defaultNested)===!0)}function Fa(t){var e;return!!((e=q(t))!=null&&e.omitPadding)}function _e(t){var n;const e=t.default,s=e!==void 0?e:(n=q(t))==null?void 0:n.defaultValue;return b(s)?s(t):nt(s)}function ve(t){var s;const e=q(t);return!!((e==null?void 0:e.excludeValue)||((s=e==null?void 0:e.ignoreMissingValue)==null?void 0:s.call(e,t)))}function Ta(t){const e=s=>Object.values(s||{}).some(Ba);return e(t.components)||Object.values(t.tabs||{}).some(e)}function ge(t,e={},s){return rt(t,e,null,null,(r,i,o)=>{!(o in i)&&!ve(r)&&(i[o]=_e(r))},null,{component:s,rootData:e})}function be(t,e,s,n,{component:a=null,rootData:r=a==null?void 0:a.rootData}={}){const{compute:i}=t;if(i){const o=i(O.get(a,{value:e[s],name:s,data:e,dataPath:n,rootData:r}));o!==void 0&&A.set(e,s,o)}return!(s in e)&&!ve(t)&&A.set(e,s,_e(t)),e[s]}function ye(t,e,s){if(s.schemaOnly){const n={},{idKey:a="id",orderKey:r}=t,i=e[a];return i!==void 0&&(n[a]=i),ka(t)&&(n.type=e.type),r&&(n[r]=e[r]),n}else return d({},e)}function Ra(t,e,s,n,{component:a,schemaOnly:r,target:i}={}){const o={component:a,schemaOnly:r,target:i,rootData:s},u=ye(e,s,o),l=new Sa;return rt(t,s,n,u,(f,y,m,w,j)=>{let P=be(f,y,m,w,o);if(x(P)){const{wrapPrimitives:g,orderKey:E,idKey:L="id"}=f;g?P=P.map(k=>({[g]:k})):P=[...P],E&&i==="clipboard"&&P.sort((k,M)=>{const R=k==null?void 0:k[L],dt=M==null?void 0:M[L];return R==null||at(R)?1:dt==null||at(dt)?-1:R-dt})}j[m]=P},(f,y,m,w,j)=>{const{wrapPrimitives:P,exclude:g,process:E}=f;let L=j[m];const k=q(f),M=()=>O.get(a,{value:L,name:m,data:y,dataPath:w,rootData:o.rootData,processedData:j});if(P&&x(L)&&(L=L.map(R=>R[P])),E&&(L=E(M())),(k==null?void 0:k.excludeValue)||g===!0||b(g)&&g(M()))delete j[m];else{const R=k==null?void 0:k.processValue;R&&(L=R(f,L,w,l)),j[m]=L}},o),l.process(e,u,o)}function rt(t,e,s,n,a,r,i){const o=u=>{const l=(c,_)=>c!=null?B(c,_):null;if(u)for(const[c,_]of Object.entries(u))if(!fe(_))rt(_,e,s,n,a,r,i);else{const f=l(s,c),y=(w,j=null)=>{var M;const P=j!==null?l(f,j):f,g=O.get(i.component,{data:e,value:w,dataPath:P,index:j,rootData:i.rootData}),L=(((M=q(_))==null?void 0:M.getFormSchemasForProcessing)||X)(_,g),k=pe(L,w);if(k){const R=n?ye(_,w,i):null;return rt(k,w,P,R,a,r,i)}else return d({},w)};a==null||a(_,e,c,f,n);let m=n?n[c]:e[c];m!=null&&H(_)&&(x(m)?m=n?m.map(y):m.forEach(y):m=y(m),n&&(n[c]=m)),r==null||r(_,e,c,f,n)}};if(o(t.components),t.tabs)for(const u of Object.values(t.tabs))o(u.components);for(const u of Pe(t,s))o(u.schema.components);return n||e}function K(t,e){const s=(n,a)=>n.length>0?n.reduce((r,i)=>{const o=a(i);return o&&(r[o.name]=o&&e?d(d({},e),o):o),r},{}):null;return x(t)?s(t,n=>C(n)?n:{name:Qt(n,!1)}):C(t)?s(Object.entries(t),([n,a])=>C(a)?d({name:n},a):V(a)?{name:n,label:a}:null):null}function it(t){return K(t,{type:"button"})}function $e(t){return C(t)?t.type:t}function q(t){var e,s;return(s=(e=kt($e(t),!0))==null?void 0:e.options)!=null?s:null}function Ce(t){var e,s,n;return(n=(s=(e=q(t))==null?void 0:e.getSourceType)==null?void 0:s.call(e,$e(t)))!=null?n:null}function De(t,e,s){return t?{schema:t,dataPath:t.name?B(e,t.name):e,tabComponent:s}:null}function we(t,e,s,n=[]){if(t)for(const[a,r]of Object.entries(t)){const i=De(r,B(e,a),s);i&&n.push(i)}return n}function Pe(t,e,s=null,n=null){var i,o;const a=(o=(i=q(t))==null?void 0:i.getPanelSchema)==null?void 0:o.call(i,t,e,s),r=a?[De(a,e,n)]:[];return we(t.panels,e,n,r),r}function Y(t){return Ce(t)==="object"}function Z(t){return Ce(t)==="list"}function xe(t,e){const s=e[t.idKey||"id"];return s!=null?String(s):void 0}function Ia(t,e){return xa(e,xe(t,e))}var ot={mixins:[wa],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},data(){return{parsedValue:null,focused:!1}},computed:{name(){return this.schema.name},type(){return this.schema.type},component(){return this.resolveTypeComponent(this.schema.component)},context(){return new O(this,{nested:this.nested})},value:{get(){const t=be(this.schema,this.data,this.name,this.dataPath,{component:this}),{format:e}=this.schema;return e?e.call(this,new O(this,{value:t})):t},set(t){const{parse:e}=this.schema;this.parsedValue=e?e.call(this,new O(this,{value:t})):t,this.$set(this.data,this.name,this.parsedValue)}},item(){return Dt(this.rootItem,this.dataPath,this.nested)},parentItem(){return wt(this.rootItem,this.dataPath,this.nested)},rootItem(){return this.rootData},processedItem(){const{schemaComponent:t}=this;return Dt(t.processedItem,this.dataPath.slice(t.dataPath.length),this.nested)},label:h("label",{type:[String,Boolean],get(t){return V(t)?t:t!==!1&&this.$options.generateLabel?this.getLabel(this.schema):null}}),width:h("width",{type:[String,Number]}),visible:h("visible",{type:Boolean,default(){return this.typeOptions.defaultVisible}}),exclude:h("exclude",{type:Boolean,default:!1}),required:h("required",{type:Boolean,default:!1}),readonly:h("readonly",{type:Boolean,default:!1}),autofocus:h("autofocus",{type:Boolean,default:!1}),clearable:h("clearable",{type:Boolean,default:!1}),placeholder:h("placeholder",{type:String}),autocomplete:h("autocomplete",{type:String}),attributes(){const{nativeField:t,textField:e}=this.$options,s={disabled:this.disabled};return t&&(s.name=this.name,this.label&&(s.title=this.label),s.readonly=this.readonly,s.autofocus=this.autofocus,e&&(s.placeholder=this.placeholder,s.autocomplete=this.autocomplete)),s},listeners(){const t=this.getListeners(),{events:e={}}=this.schema;if(e)for(const s of Object.keys(e))t[s]||(t[s]=()=>this.emitEvent(s));return t},validations(){const t=d({},this.getValidations());this.required&&(t.required=!0);for(const[e,s]of Object.entries(this.schema.rules||{}))s===void 0?delete t[e]:t[e]=s;return t},providesData(){return!1},showClearButton(){return this.clearable&&this.value!=null}},created(){this._register(!0),this.setupSchemaFields()},beforeDestroy(){this._register(!1)},methods:{_register(t){this.nested&&(this.schemaComponent._registerComponent(this,t),this[t?"on":"off"](this.events))},getListeners(){return{focus:this.onFocus,blur:this.onBlur,input:this.onInput,change:this.onChange}},getValidations(){return null},focusElement(){const[t]=T(this.$refs.element);t&&this.$nextTick(()=>{var e,s;t.focus(),this.disabled&&((s=(e=t.$el||t).scrollIntoView)==null||s.call(e))})},focus(){var t;this.schemaComponent.focus(),(t=this.tabComponent)==null||t.focus(),this.focusElement()},clear(){this.value=null,this.onChange()},onFocus(){this.focused=!0,this.emitEvent("focus")},onBlur(){this.focused=!1,this.emitEvent("blur")},onInput(){this.emitEvent("input")},onChange(){this.emitEvent("change",{context:this.parsedValue!==void 0?{value:this.parsedValue}:null,parent:this.schemaComponent})}}};const lt={},v=A.extend({components:lt,mixins:[jt],methods:{getTypeComponent:kt,resolveComponent(t,e=[]){return t&&(async()=>{let s=b(t)?await t():vt(t)?await t:t;return s=(s==null?void 0:s.default)||s,s.mixins=e,s.components=lt,s})},resolveDitoComponent(t){return this.resolveComponent(t,[jt])},resolveTypeComponent(t){return this.resolveComponent(t,[jt,ot])}}});v.component=function(t,e){if(e){e=d({name:t},e);const s=this.extend(e);return lt[t]=s,s}else return lt[t]||A.component(t)};class qa{hasRole(...e){if(this.roles){for(const s of e)if(this.roles.includes(s))return!0}return!1}}var Se={provide(){return{$schemaParentComponent:()=>this}},data(){return{schemaComponents:[]}},computed:{mainSchemaComponent(){return this.schemaComponents[0]}},methods:{_registerSchemaComponent(t,e){const{schemaComponents:s}=this;e?s.push(t):s.splice(s.indexOf(t),1)}}},Oe={mixins:[Se],computed:{errors(){return this.schemaComponents.reduce((t,{errors:e})=>e&&t?t.concat(e):e,null)},isTouched(){return this.schemaComponents.some(t=>t.isTouched)},isDirty(){return this.schemaComponents.some(t=>t.isDirty)},isValid(){return this.schemaComponents.every(t=>t.isValid)},isValidated(){return this.schemaComponents.every(t=>t.isValid)}},methods:{validateAll(t,e=!0){return this.schemaComponents.every(s=>s.validateAll(t,e))},verifyAll(t){return this.schemaComponents.every(e=>e.verifyAll(t))},resetValidation(){this.schemaComponents.forEach(t=>t.resetValidation())},clearErrors(){this.schemaComponents.forEach(t=>t.clearErrors())},showValidationErrors(t,e){this.schemaComponents.forEach(s=>s.showValidationErrors(t,e))}}},Ee={mixins:[Oe],provide(){return{$routeComponent:()=>this}},beforeRouteUpdate(t,e,s){this.beforeRouteChange(t,e,s)},beforeRouteLeave(t,e,s){this.beforeRouteChange(t,e,s)},data(){return{reload:!1,store:{},loadCache:{}}},computed:{routeComponent(){return this},routeRecord(){return this.$route.matched[this.$vnode.data.routerViewDepth]},isLastRoute(){const{matched:t}=this.$route;return this.routeRecord===t[t.length-1]},isLastUnnestedRoute(){const{matched:t}=this.$route;for(let e=t.length-1;e>=0;e--){const s=t[e];if(!s.meta.nested)return this.routeRecord===s}return!1},isNestedRoute(){return this.meta.nested},meta(){var t;return(t=this.routeRecord)==null?void 0:t.meta},path(){return this.getRoutePath(this.routeRecord.path)},label(){return this.getLabel(this.schema)},breadcrumb(){const{breadcrumb:t}=this.schema||{};return t||`${this.breadcrumbPrefix} ${this.label}`},breadcrumbPrefix(){return""},param(){var t;return this.$route.params[(t=this.meta)==null?void 0:t.param]||null},doesMutate(){return!1}},created(){this.appState.routeComponents.push(this)},destroyed(){const{routeComponents:t}=this.appState;t.splice(t.indexOf(this),1)},methods:{beforeRouteChange(t,e,s){let n=!0;e.path.startsWith(this.path)&&!t.path.startsWith(this.path)&&e.path!==t.path&&(this.isFullRouteChange(t,e)||t.path.length<=e.path.length)&&(this.doesMutate?n=this.isValidated||this.validateAll():this.isDirty&&(n=window.confirm(`You have unsaved changes. Do you really want to ${this.verbs.cancel}?`))),s(n)},getRoutePath(t){return this.$route.path.split("/").slice(0,t.split("/").length).join("/")},getChildPath(t){return`${this.path}/${t}`},isFullRouteChange(t,e){const s=this.path.match(/^(\/[^/]*)/)[1];return!en(t.path,e.path).startsWith(s)}}},Ma=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isLastRoute?t.shouldRender(t.viewSchema)?s("div",{staticClass:"dito-view dito-scroll-parent"},[s("dito-schema",{staticClass:"dito-scroll",attrs:{schema:t.viewSchema,data:t.data,meta:t.meta,store:t.getChildStore(t.name),disabled:t.isLoading,generateLabels:!1,menuHeader:!0}})],1):t._e():s("router-view",{key:t.name})},Aa=[];function p(t,e,s,n,a,r,i,o){var u=typeof t=="function"?t.options:t;e&&(u.render=e,u.staticRenderFns=s,u._compiled=!0),n&&(u.functional=!0),r&&(u._scopeId="data-v-"+r);var l;if(i?(l=function(f){f=f||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,!f&&typeof __VUE_SSR_CONTEXT__!="undefined"&&(f=__VUE_SSR_CONTEXT__),a&&a.call(this,f),f&&f._registeredComponents&&f._registeredComponents.add(i)},u._ssrRegister=l):a&&(l=o?function(){a.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:a),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(y,m){return l.call(m),c(y,m)}}else{var _=u.beforeCreate;u.beforeCreate=_?[].concat(_,l):[l]}return{exports:t,options:u}}const Na=v.component("dito-view",{mixins:[Ee],provide(){return{$sourceComponent:()=>{var t;return((t=this.mainComponent)==null?void 0:t.sourceComponent)||null},$resourceComponent:()=>{var t;return((t=this.mainComponent)==null?void 0:t.resourceComponent)||null}}},data(){return{isView:!0,isLoading:!1,data:{}}},computed:{schema(){return this.meta.schema},name(){return this.schema.name},isSingleComponentView(){return he(this.schema)},mainComponent(){return this.mainSchemaComponent.getComponentByDataPath(this.name)},viewSchema(){const{schema:t}=this;return this.isSingleComponentView?{name:t.name,components:{[t.name]:S(d({},t),{label:!1})}}:t},providesData(){return Ea(this.viewSchema,t=>ee(t))}},watch:{$route(t,e){this.isFullRouteChange(t,e)&&(this.isLoading=!1,this.data={})}},methods:{setData(t){this.data=t},getChildPath(t){return this.isSingleComponentView?this.path:`${this.path}/${t}`},setLoading(t){this.isLoading=!!t}}}),je={};var Ua=p(Na,Ma,Aa,!1,za,null,null,null);function za(t){for(let e in je)this[e]=je[e]}var Ve=function(){return Ua.exports}(),tt={data(){return{domHandlers:[]}},beforeDestroy(){for(const{remove:t}of this.domHandlers)t();this.domHandlers=[]},methods:{domOn(t,e,s){const n=Xt(t,C(e)?e:{[e]:s});return this.domHandlers.push(n),n}}},Ha=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-root"},[s("modals-container"),s("notifications",{ref:"notifications",staticClass:"dito-notifications",attrs:{position:"top right",classes:"dito-notification"}}),s("dito-menu"),s("main",{staticClass:"dito-page dito-scroll-parent"},[s("dito-header",{attrs:{spinner:t.options.spinner,isLoading:t.isLoading}},[t.user?s("dito-account"):t.allowLogin?s("a",{staticClass:"dito-login",on:{click:function(n){return t.rootComponent.login()}}},[s("span",[t._v("Login")])]):t._e()],1),s("router-view")],1)],1)},Ka=[],_d="";const Wa=v.component("dito-root",{mixins:[tt],provide(){return{$views:()=>this.resolvedViews}},props:{unresolvedViews:{type:[Object,Function,Promise],required:!0},options:{type:Object,default:()=>({})}},data(){return{resolvedViews:{},allowLogin:!1,loadingCount:0}},computed:{notifications(){return this.$refs.notifications},isLoading(){return this.loadingCount>0}},created(){this.appState.title=document.title||"Dito.js Admin",this.appState.routeComponents=[]},async mounted(){this.domOn(document,{click:t=>{t.target.closest(".dito-label")||(this.appState.activeLabel=null)},keyup:t=>{t.code==="Tab"&&(this.appState.activeLabel=null)}});try{this.allowLogin=!1,await this.fetchUser()?await this.resolveViews():await this.login()}catch(t){console.error(t)}this.allowLogin=!0},methods:{notify({type:t="info",title:e,text:s}={}){e||(e={warning:"Warning",error:"Error",info:"Information",success:"Success"}[t]||"Notification"),s=`<p>${T(s).join("</p> <p>")}</p>`.replace(/\n|\r\n|\r/g,"<br>");const n={warning:"warn",error:"error",info:"log",success:"log"}[t]||"error";console[n](sn(s));const{notifications:a=!0}=this.api;if(a){const{durationFactor:r=20}=a,i=(40+s.length+e.length)*r;this.$notify({type:t,title:e,text:s,duration:i})}},closeNotifications(){this.notifications.destroyAll()},registerLoading(t){this.loadingCount+=t?1:-1},async login(){var n,a;this.allowLogin=!0;const{additionalComponents:t,redirectAfterLogin:e}=this.options.login||{},s=await this.showDialog({components:d({username:{type:"text",autofocus:!0},password:{type:"password"}},t),buttons:{cancel:{},login:{type:"submit"}}});if(s)try{const r=await this.sendRequest({resource:this.api.users.login,data:s,internal:!0});e?location.replace(e):(this.setUser(r.data.user),await this.resolveViews())}catch(r){const i=(a=(n=r.response)==null?void 0:n.data)==null?void 0:a.error;this.notify({type:"error",title:"Authentication Error",text:i||r}),i||console.error(r,r.response),this.login()}},navigateHome(){return this.navigate("/")},async logout(){try{(await this.sendRequest({resource:this.api.users.logout,internal:!0})).data.success&&(this.setUser(null),this.navigateHome())}catch(t){console.error(t)}},async fetchUser(){let t=null;try{t=(await this.sendRequest({resource:this.api.users.session,internal:!0})).data.user||null}catch(e){this.notify({type:"error",title:"Authentication Error",text:e})}return this.setUser(t),t},setUser(t){this.appState.user=t&&Object.setPrototypeOf(t,qa.prototype),t||(this.resolvedViews={},this.navigateHome())},async ensureUser(){await this.fetchUser()||await this.login()},async resolveViews(){try{this.resolvedViews=await Bt(this.unresolvedViews)}catch(s){return s.request||console.error(s),this.login()}const t=[],e=[];for(const[s,n]of Object.entries(this.resolvedViews))e.push(ja(Ve,this.api,n,s,t));await Promise.all(e);for(const s of t)this.$router.addRoute(s)}}}),ke={};var Ja=p(Wa,Ha,Ka,!1,Qa,null,null,null);function Qa(t){for(let e in ke)this[e]=ke[e]}var qt=function(){return Ja.exports}(),Ga=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("nav",{staticClass:"dito-menu dito-scroll-parent"},[s("h1",[t._v(t._s(t.appState.title))]),s("ul",{staticClass:"dito-scroll"},t._l(t.views,function(n){return s("li",[t.shouldRender(n)?s("router-link",{staticClass:"dito-link",attrs:{to:"/"+n.path,"active-class":"dito-active"}},[t._v(t._s(t.getLabel(n)))]):t._e()],1)}),0)])},Xa=[],vd="";const Ya=v.component("dito-menu",{}),Le={};var Za=p(Ya,Ga,Xa,!1,tr,null,null,null);function tr(t){for(let e in Le)this[e]=Le[e]}var er=function(){return Za.exports}(),sr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"show",rawName:"v-show",value:t.loading,expression:"loading"}],staticClass:"v-spinner"},[s("div",{staticClass:"v-pulse v-pulse1",style:[t.spinnerStyle,t.spinnerDelay1]}),s("div",{staticClass:"v-pulse v-pulse2",style:[t.spinnerStyle,t.spinnerDelay2]}),s("div",{staticClass:"v-pulse v-pulse3",style:[t.spinnerStyle,t.spinnerDelay3]})])},nr=[],gd="";const ar={name:"PulseLoader",props:{loading:{type:Boolean,default:!0},color:{type:String,default:"#5dc596"},size:{type:String,default:"15px"},margin:{type:String,default:"2px"},radius:{type:String,default:"100%"}},data(){return{spinnerStyle:{backgroundColor:this.color,width:this.size,height:this.size,margin:this.margin,borderRadius:this.radius,display:"inline-block",animationName:"v-pulseStretchDelay",animationDuration:"0.75s",animationIterationCount:"infinite",animationTimingFunction:"cubic-bezier(.2,.68,.18,1.08)",animationFillMode:"both"},spinnerDelay1:{animationDelay:"0.12s"},spinnerDelay2:{animationDelay:"0.24s"},spinnerDelay3:{animationDelay:"0.36s"}}}},Be={};var rr=p(ar,sr,nr,!1,ir,null,null,null);function ir(t){for(let e in Be)this[e]=Be[e]}var or=function(){return rr.exports}(),lr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("nav",{staticClass:"dito-header"},[s("div",{staticClass:"dito-trail"},[s("ul",t._l(t.trail,function(n,a){return s("li",[a===t.trail.length-1?[s("span",{class:t.getBreadcrumbClass(n)},[t._v(t._s(n.breadcrumb))])]:s("router-link",{staticClass:"dito-breadcrumb",attrs:{to:n.path}},[s("span",{class:t.getBreadcrumbClass(n)},[t._v(t._s(n.breadcrumb))])])],2)}),0),t.isLoading?s("spinner",{staticClass:"dito-spinner"}):t._e()],1),t._t("default")],2)},ur=[],bd="";const Fe=v.component("spinner",or),cr=v.component("dito-header",{components:{Spinner:Fe},props:{spinner:{type:Object,default:null},isLoading:{type:Boolean,default:!1}},computed:{trail(){return this.appState.routeComponents.filter(t=>!!t.routeRecord)}},created(){const{size:t="8px",color:e="#999"}=this.spinner||{},{props:s}=Fe.options;s.size.default=t,s.color.default=e},methods:{getBreadcrumbClass(t){return{"dito-dirty":t.isDirty}}}}),Te={};var dr=p(cr,lr,ur,!1,hr,null,null,null);function hr(t){for(let e in Te)this[e]=Te[e]}var pr=function(){return dr.exports}(),Re={mixins:[tt],data(){return{pulldown:{open:!1,startTime:0,checkTime:!0,events:{mousedown:()=>{this.setPulldownOpen(!1),this.pulldown.handlers.remove()},mouseup:()=>{this.onPulldownMouseUp(null)&&this.pulldown.handlers.remove()}},handlers:null}}},methods:{onPulldownMouseDown(t){t?this.checkTime=!1:(this.setPulldownOpen(!0),this.checkTime=!0)},onPulldownMouseUp(t){const{startTime:e}=this.pulldown;if(!this.checkTime||e&&Date.now()-e>250)return this.setPulldownOpen(!1),t&&this.onPulldownSelect(t),!0},onPulldownSelect(){},setPulldownOpen(t){this.pulldown.open=t,this.pulldown.startTime=t?Date.now():0,t&&(this.pulldown.handlers=this.domOn(document,this.pulldown.events))}}},mr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-account"},[s("a",{on:{mousedown:function(n){return n.stopPropagation(),t.onPulldownMouseDown()}}},[s("span",[t._v(t._s(t.user.username))])]),s("ul",{staticClass:"dito-pulldown",class:{"dito-open":t.pulldown.open}},t._l(t.items,function(n,a){return s("li",[s("a",{on:{mousedown:function(r){return r.stopPropagation(),t.onPulldownMouseDown(a)},mouseup:function(r){return t.onPulldownMouseUp(a)}}},[t._v(t._s(n))])])}),0)])},fr=[],yd="";const _r=v.component("dito-account",{mixins:[Re],data(){return{items:{settings:"Settings",logout:"Logout"}}},methods:{onPulldownSelect(t){switch(t){case"logout":this.rootComponent.logout();break;case"settings":console.info("TODO: Implement Settings");break}}}}),Ie={};var vr=p(_r,mr,fr,!1,gr,null,null,null);function gr(t){for(let e in Ie)this[e]=Ie[e]}var br=function(){return vr.exports}(),yr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("form",{staticClass:"dito-dialog",on:{submit:function(n){n.preventDefault()}}},[s("dito-schema",{staticClass:"dito-scroll",attrs:{schema:t.schema,data:t.dialogData}},[s("dito-buttons",{staticClass:"dito-buttons-large",attrs:{slot:"buttons",buttons:t.buttonSchemas,data:t.dialogData},slot:"buttons"})],1)],1)},$r=[],$d="";const Cr=v.component("dito-dialog",{provide(){return{$dialogComponent:()=>this}},props:{components:{type:Object,required:!0},buttons:{type:Object,required:!0},promise:{type:Object,required:!0},data:{type:Object,default:()=>({})}},data(){const t=nt(this.data);for(const e in this.components)e in t||(t[e]=null);return{windowEvents:null,dialogData:t}},computed:{dialogComponent(){return this},name(){return this.$parent.name},schema(){return{components:this.components}},buttonSchemas(){return Object.entries(it(this.buttons)).reduce((t,[e,s])=>{const{type:n,events:a}=s;if(!a){const r=n==="submit"?()=>this.accept():e==="cancel"?()=>this.cancel():null;r&&(s=S(d({},s),{events:{click:r}}))}return t[e]=s,t},{})},hasCancel(){return Object.keys(this.buttonSchemas).includes("cancel")}},mounted(){this.windowEvents=Xt(window,{keyup:()=>{event.keyCode===27&&this.cancel()}})},destroyed(){this.windowEvents.remove()},methods:{hide(){this.$modal.hide(this.name)},resolve(t){this.promise.resolve(t),this.hide()},reject(t){this.promise.reject(t),this.hide()},accept(){this.resolve(this.dialogData)},cancel(){this.hasCancel&&this.resolve(null)}}}),qe={};var Dr=p(Cr,yr,$r,!1,wr,null,null,null);function wr(t){for(let e in qe)this[e]=qe[e]}var Pr=function(){return Dr.exports}(),xr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.content?s(t.options.tag||t.tag,{tag:"component",class:t.classes,style:t.styles},[t._v(t._s(t.options.text))]):t._e()},Sr=[],Cd="";const Or=v.component("dito-element",{props:{tag:{type:String,default:"span"},content:{type:[String,Object]}},computed:{options(){const{content:t}=this;return C(t)?t:{text:t}},classes(){return d(d({},this.$attrs.class),Me(this.options.class))},styles(){return d(d({},this.$attrs.style),Me(this.options.style))}}});function Me(t){return T(t).reduce((e,s)=>(V(s)?e[s]=!0:C(s)&&Object.assign(e,s),e),{})}const Ae={};var Er=p(Or,xr,Sr,!1,jr,null,null,null);function jr(t){for(let e in Ae)this[e]=Ae[e]}var Vr=function(){return Er.exports}(),kr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.text||t.collapsible?s(t.tag,t._g({tag:"component",staticClass:"dito-label",class:{"dito-active":t.isActive}},t.listeners),[t.collapsible?s("div",{staticClass:"dito-chevron",class:{"dito-opened":!t.collapsed}}):t._e(),t._l(t.prefixes,function(n,a){return s("dito-element",{key:"prefix-"+a,staticClass:"dito-label-prefix",attrs:{tag:"span",content:n}})}),s("label",{attrs:{for:t.dataPath},domProps:{innerHTML:t._s(t.text)}}),t._l(t.suffixes,function(n,a){return s("dito-element",{key:"suffix-"+a,staticClass:"dito-label-suffix",attrs:{tag:"span",content:n}})}),t._t("edit-buttons")],2):t._e()},Lr=[],Dd="";const Br=v.component("dito-label",{props:{label:{type:[String,Object],default:null},dataPath:{type:String,default:null},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1}},computed:{tag(){return this.collapsible?"a":"div"},text(){const{label:t}=this;return C(t)?t==null?void 0:t.text:t},prefixes(){var t;return T((t=this.label)==null?void 0:t.prefix)},suffixes(){var t;return T((t=this.label)==null?void 0:t.suffix)},listeners(){return d({},this.collapsible&&{click:this.onClick})},isActive(){return this.appState.activeLabel===this}},methods:{onClick(){this.appState.activeLabel=this,this.$emit("expand",this.collapsed)}}}),Ne={};var Fr=p(Br,kr,Lr,!1,Tr,null,null,null);function Tr(t){for(let e in Ne)this[e]=Ne[e]}var Rr=function(){return Fr.exports}(),Mt={methods:{getItemFormSchema:Rt,getItemUid:Ia,getItemId(t,e,s=null){return this.isTransient&&s!==null?String(s):xe(t,e)},getItemDataPath(t,e){let{dataPath:s}=this;return t!==this.schema&&(s=B(s,t.name)),e!=null&&(s=B(s,e)),s},findItemIdIndex(t,e,s){const n=this.isTransient?s:e==null?void 0:e.findIndex((a,r)=>this.getItemId(t,a,r)===s);return n!==-1?n:null},getItemLabel(t,e,{index:s=null,extended:n=!1,asObject:a=!1}={}){const{itemLabel:r}=t;if(!e||!n&&r===!1)return null;let i;const o=()=>i||(i=this.getItemDataPath(t,s));let u;const l=()=>u||(u=this.getLabel(Rt(t,e,this.context)));let c,_,f;if(b(r)){const m=r.call(this,new O(this,{nested:!1,data:e,value:e,index:s,get dataPath(){return o()},get formLabel(){return l()}}));C(m)?{text:c,prefix:_,suffix:f}=m:c=m,n=!1}else{const{columns:m}=t,w=V(r)&&r||Z(t)&&m&&Object.keys(m)[0]||"name";c=e[w]}const y=!!c;if(c=c||"",c||(n=!0,Z(t)&&s!==null&&(c=`${s+1}`)),n){const m=l();m&&(c=`${m} ${y?`'${c}'`:c}`)}return a?{text:c,prefix:_,suffix:f}:c}}},Ir=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-schema"},[s("div",{staticClass:"dito-schema-content"},[t.hasLabel||t.hasTabs||t.clipboard?s("div",{staticClass:"dito-schema-header",class:{"dito-schema-menu-header":t.menuHeader}},[t.hasLabel?s("dito-label",{attrs:{label:t.label,dataPath:t.dataPath,collapsible:t.collapsible,collapsed:!t.opened},on:{expand:t.onExpand},scopedSlots:t._u([t.inlined?{key:"edit-buttons",fn:function(){return[t._t("edit-buttons")]},proxy:!0}:null],null,!0)}):t._e(),t.tabs?s("dito-tabs",{attrs:{tabs:t.tabs,selectedTab:t.selectedTab}}):t._e(),s("dito-clipboard",{attrs:{clipboard:t.clipboard,dataPath:t.dataPath,data:t.data}})],1):t._e(),t._l(t.tabs,function(n,a){return t.hasTabs?s("dito-pane",{key:a,ref:"tabs",refInFor:!0,staticClass:"dito-pane-tab",attrs:{visible:t.selectedTab===a,tab:a,schema:n,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:!t.inlined&&!t.hasMainPane,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e()}),s("transition-height",{attrs:{enabled:t.inlined}},[t.hasMainPane&&t.opened?s("dito-pane",{ref:"components",staticClass:"dito-pane-main",attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:!t.inlined&&!t.hasTabs,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e()],1),!t.inlined&&t.isPopulated?t._t("buttons"):t._e()],2),t.inlined?[t.hasLabel?t._e():t._t("edit-buttons")]:t.isPopulated?[s("dito-panels",{attrs:{panels:t.panelSchemas,data:t.data,meta:t.meta,store:t.store,disabled:t.disabled}})]:t._e()],2)},qr=[],wd="";const Mr=v.component("dito-schema",{components:{TransitionHeight:dn},mixins:[Mt],provide(){return{$schemaComponent:()=>this}},inject:["$schemaParentComponent"],props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},label:{type:[String,Object],default:null},inlined:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!0},hasOwnData:{type:Boolean,default:!1},menuHeader:{type:Boolean,default:!1}},data(){const{data:t}=this.schema;return S(d({},t&&b(t)?t.call(this,this.context):t),{componentsRegistry:{},panesRegistry:{},panelsRegistry:{}})},computed:{schemaComponent(){return this},parentSchemaComponent(){return this.hasOwnData?null:this.$parent.schemaComponent},panelSchemas(){const t=we(this.schema.panels,"");for(const e of this.panes)t.push(...e.panelSchemas);return t},tabs(){return K(this.schema.tabs)},selectedTab(){var s,n;const t=((s=this.$route.hash)==null?void 0:s.slice(1))||null,e=t&&this.shouldRender(this.tabs[t])?t:((n=this.defaultTab)==null?void 0:n.name)||null;return e!==t&&this.$router.replace({hash:e}),e},defaultTab(){if(this.tabs){let t=null;for(const e of Object.values(this.tabs)){const{defaultTab:s}=e;if(b(s)?s.call(this,this.context):s)return e;t||(t=e)}return t}},clipboard(){var t;return(t=this.schema)==null?void 0:t.clipboard},processedData(){return this.processData({target:"server",schemaOnly:!0})},clipboardData(){return d({$schema:this.schema.name},this.processData({target:"clipboard",schemaOnly:!0}))},item(){return this.data},rootItem(){return this.rootData},processedItem(){return this.processedData},clipboardItem(){return this.clipboardData},parentItem(){return wt(this.rootData,this.dataPath,!1)},formLabel(){return this.getLabel(this.getItemFormSchema(this.sourceSchema,this.data,this.context))},isDirty(){return this.someComponent(t=>t.isDirty)},isTouched(){return this.someComponent(t=>t.isTouched)},isValid(){return this.everyComponent(t=>t.isValid)},isValidated(){return this.everyComponent(t=>t.isValidated)},hasData(){return!!this.data},hasLabel(){return!!this.label||this.collapsible},hasTabs(){return!this.inlined&&!!this.tabs},hasMainPane(){const{components:t}=this.schema;return!!t&&Object.keys(t).length>0},opened:Vt("opened",{default(){return!this.collapsed}}),components(){return Object.values(this.componentsRegistry)},panes(){return Object.values(this.panesRegistry)},panels(){return Object.values(this.panelsRegistry)},componentsByDataPath(){return this._listEntriesByDataPath(this.componentsRegistry)},panesByDataPath(){return this._listEntriesByDataPath(this.panesRegistry)},panelsByDataPath(){return this._listEntriesByDataPath(this.panelsRegistry)}},created(){this._register(!0),this.setupSchemaFields(),this.delegate("change",this.parentSchemaComponent),this.emitEvent("initialize")},beforeDestroy(){this.emitEvent("destroy"),this._register(!1)},methods:{getComponentsByDataPath(t,e){return this._getEntriesByDataPath(this.componentsByDataPath,t,e)},getComponentByDataPath(t,e){return this.getComponentsByDataPath(t,e)[0]||null},getComponentsByName(t,e){return this._getEntriesByName(this.componentsByDataPath,t,e)},getComponentByName(t,e){return this.getComponentsByName(t,e)[0]||null},getComponents(t,e){return this._getEntries(this.componentsByDataPath,t,e)},getComponent(t,e){return this.getComponents(t,e)[0]||null},getPanelsByDataPath(t,e){return this._getEntriesByDataPath(this.panelsByDataPath,t,e)},getPanelByDataPath(t,e){return this.getPanelsByDataPath(t,e)[0]||null},getPanels(t,e){return this._getEntries(this.panelsByDataPath,t,e)},getPanel(t,e){return this.getPanels(t,e)[0]||null},someComponent(t){return this.isPopulated&&this.components.some(t)},everyComponent(t){return this.isPopulated&&this.components.every(t)},onExpand(t){this.emitEvent("expand",{context:{expand:t}}),(!this.opened||t||this.validateAll())&&(this.opened=t)},onChange(){this.emitEvent("change")},resetValidation(){for(const t of this.components)t.resetValidation()},clearErrors(){for(const t of this.components)t.clearErrors()},focus(){var t;(t=this.parentSchemaComponent)==null||t.focus(),this.opened=!0},validateAll(t,e=!0){const{componentsByDataPath:s}=this;let n;if(t){const i=b(t)?t:ft(t)?o=>t.test(o):null;n=i?Object.keys(s).filter(i):x(t)?t:[t]}e&&this.clearErrors();let a=!0,r=!0;n||(n=Object.keys(s));for(const i of n){const o=this.getComponentsByDataPath(i);for(const u of o)u.validate(e)||(e&&r&&u.focus(),r=!1,a=!1)}return e&&!a&&this.notifyErrors(),a},verifyAll(t){return this.validateAll(t,!1)},async showValidationErrors(t,e){var a;this.clearErrors();let s=!0;const n=[];for(const[r,i]of Object.entries(t)){const o=this.hasOwnData?B(this.dataPath,r):r,u=N(o);let l=!1;const c=this.getComponentsByDataPath(u);for(const _ of c)_.showValidationErrors(i,s&&e)&&(l=!0,s=!1);if(!l){const _=u.pop();for(;u.length>0;){const y=this.getComponentsByDataPath(u);for(const m of y)if(await((a=m.navigateToComponent)==null?void 0:a.call(m,o,w=>{let j=!1;for(const P of w){const g=t[P.dataPath];g&&P.showValidationErrors(g,s&&e)&&(j=!0,s=!1)}return j})))return;u.pop()}const f=U(_);for(const y of i){const m=f?`The field ${f}`:`The ${this.formLabel}`;n.push(`${m} ${y.message}`)}}s=!1}s||this.notifyErrors(n.join(`
2
- `))},notifyErrors(t){this.notify({type:"error",title:"Validation Errors",text:t||"Please correct the highlighted errors."})},resetData(){Object.assign(this.data,ge(this.schema,{},this)),this.clearErrors()},setData(t){for(const e in t)if(e in this.data){this.$set(this.data,e,t[e]);for(const s of this.getComponentsByName(e))s.markDirty()}},filterData(t){const e={};for(const[s,n]of Object.entries(t))(x(n)||C(n))&&this.getComponentsByName(s).some(r=>r.providesData)||(e[s]=n);return e},processData({target:t="clipboard",schemaOnly:e=!0}={}){return Ra(this.schema,this.sourceSchema,this.data,this.dataPath,{component:this,schemaOnly:e,target:t})},_register(t){var e;(e=this.$schemaParentComponent())==null||e._registerSchemaComponent(this,t)},_registerComponent(t,e){var s;this._registerEntry(this.componentsRegistry,t,e),(s=this.parentSchemaComponent)==null||s._registerComponent(t,e)},_registerPane(t,e){this._registerEntry(this.panesRegistry,t,e)},_registerPanel(t,e){this._registerEntry(this.panelsRegistry,t,e)},_registerEntry(t,e,s){const n=e.$uid;s?this.$set(t,n,e):this.$delete(t,n)},_listEntriesByDataPath(t){return Object.values(t).reduce((e,s)=>{const{dataPath:n}=s;return(e[n]||(e[n]=[])).push(s),e},{})},_getEntries(t,e,s){return z(e).startsWith(this.dataPath)?this._getEntriesByDataPath(t,e,s):this._getEntriesByName(t,e,s)},_getEntriesByDataPath(t,e,s){return this._filterEntries(t[z(e)]||[],s)},_getEntriesByName(t,e,s){return this._filterEntries(t[B(this.dataPath,e)]||[],s)},_filterEntries(t,e){return e?t.filter(e):t}}}),Ue={};var Ar=p(Mr,Ir,qr,!1,Nr,null,null,null);function Nr(t){for(let e in Ue)this[e]=Ue[e]}var Ur=function(){return Ar.exports}(),zr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-schema",{staticClass:"dito-schema-inlined",class:{"dito-schema-compact":t.isCompact},attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,label:t.isCompact?null:t.label,inlined:!0,disabled:t.disabled,collapsed:t.collapsed,collapsible:t.collapsible},scopedSlots:t._u([{key:"edit-buttons",fn:function(){return[t.deletable||t.draggable||t.editable?s("dito-edit-buttons",{attrs:{deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.editPath,schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store},on:{delete:function(n){return t.$emit("delete")}}}):t._e()]},proxy:!0}])})},Hr=[],Pd="";const Kr=v.component("dito-schema-inlined",{props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},label:{type:[String,Object],default:null},disabled:{type:Boolean,required:!0},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null}},computed:{isCompact(){return me(this.schema)},hasLabel(){return!this.isCompact&&!!this.label}}}),ze={};var Wr=p(Kr,zr,Hr,!1,Jr,null,null,null);function Jr(t){for(let e in ze)this[e]=ze[e]}var Qr=function(){return Wr.exports}(),Gr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isPopulated&&t.componentSchemas.length>0?s("div",{directives:[{name:"show",rawName:"v-show",value:t.visible,expression:"visible"}],staticClass:"dito-pane"},[t._l(t.componentSchemas,function(n){var a=n.schema,r=n.dataPath,i=n.nestedDataPath,o=n.nested,u=n.store;return[a.break==="before"?s("div",{staticClass:"dito-break"}):t._e(),t.shouldRender(a)?s("dito-container",{key:i,attrs:{schema:a,dataPath:r,data:t.data,meta:t.meta,store:u,single:t.isSingleComponent,nested:o,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e(),a.break==="after"?s("div",{staticClass:"dito-break"}):t._e()]})],2):t._e()},Xr=[],xd="";const Yr=v.component("dito-pane",{provide(){return{$tabComponent:()=>this.tabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0},tab:{type:String,default:null},single:{type:Boolean,default:!1},visible:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!0}},computed:{tabComponent(){return this.tab?this:this.$tabComponent()},componentSchemas(){var e,s;const t=(e=this.sourceSchema)==null?void 0:e.wrapPrimitives;return Object.entries(((s=this.schema)==null?void 0:s.components)||{}).map(([n,a])=>{a.name=n;const r=fe(a),i=B(this.dataPath,n);return{schema:a,dataPath:r&&!t?i:this.dataPath,nestedDataPath:i,nested:r,store:r?this.getChildStore(n):this.store}})},panelSchemas(){return this.componentSchemas.flatMap(({schema:t,nestedDataPath:e})=>Pe(t,e,this.schemaComponent,this.tabComponent))},isSingleComponent(){return this.single&&this.componentSchemas.length===1}},created(){this._register(!0)},beforeDestroy(){this._register(!1)},methods:{_register(t){this.schemaComponent._registerPane(this,t)},focus(){this.tab&&this.$router.push({hash:this.tab})}}}),He={};var Zr=p(Yr,Gr,Xr,!1,ti,null,null,null);function ti(t){for(let e in He)this[e]=He[e]}var ei=function(){return Zr.exports}();function si(t){const e=V(t)&&t.match(/^\s*([+-]?\d+)\s*\/\s*([+-]?\d+)\s*$/);if(e){const[,s,n]=e;return parseFloat(s)/parseFloat(n)}else return parseFloat(t)}var ni=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"show",rawName:"v-show",value:t.componentVisible,expression:"componentVisible"}],staticClass:"dito-container",class:t.containerClass,style:t.containerStyle},[t.label?s("dito-label",{class:t.componentClass,attrs:{label:t.label,dataPath:t.labelDataPath}}):t._e(),s(t.getTypeComponent(t.schema.type),{tag:"component",staticClass:"dito-component",class:t.componentClass,attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:t.single,nested:t.nested,disabled:t.componentDisabled},on:{errors:t.onErrors}}),s("dito-errors",{attrs:{errors:t.errors}})],1)},ai=[],Sd="";const ri=v.component("dito-container",{props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,required:!0},generateLabels:{type:Boolean,default:!0}},data(){return{errors:null}},computed:{context(){return new O(this,{nested:this.nested})},typeOptions(){return q(this.schema)||{}},hasLabel(){const{schema:t}=this,{label:e}=t;return e!==!1&&(!!e||this.typeOptions.generateLabel&&this.generateLabels)},label(){return this.hasLabel?this.getLabel(this.schema):null},labelDataPath(){return this.nested?this.dataPath:null},componentWidth:h("width",{type:[String,Number],default(){return this.typeOptions.defaultWidth},get(t){return t===void 0?1:V(t)?t.match(/^\s*[<>]?\s*(.*)$/)[1]:t}}),componentWidthOperator:h("width",{type:String,get(t){return V(t)&&t.match(/^\s*([<>]?)/)[1]||null}}),componentVisible:h("visible",{type:Boolean,default(){return this.typeOptions.defaultVisible}}),componentDisabled:h("disabled",{type:Boolean,default:!1,get(t){return t||this.disabled}}),containerClass(){const{class:t}=this.schema;return d({"dito-single":this.single,"dito-omit-padding":Fa(this.schema)},V(t)?{[t]:!0}:t)},componentBasis(){const t=this.componentWidth,e=[null,"auto","fill"].includes(t)?"auto":/%$/.test(t)?parseFloat(t):/[a-z]/.test(t)?t:si(t)*100;return st(e)?`${e}%`:e},containerStyle(){const t=this.componentWidthOperator===">"||this.componentWidth==="fill",e=this.componentWidthOperator==="<";return{flex:`${t?1:0} ${e?1:0} ${this.componentBasis}`}},componentClass(){const t=this.componentBasis==="auto";return{"dito-single":this.single,"dito-disabled":this.componentDisabled,"dito-width-fill":!t||this.componentWidth==="fill","dito-width-auto":t,"dito-has-errors":!!this.errors}}},methods:{onErrors(t){this.errors=t}}}),Ke={};var ii=p(ri,ni,ai,!1,oi,null,null,null);function oi(t){for(let e in Ke)this[e]=Ke[e]}var li=function(){return ii.exports}(),ui=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tabs"},t._l(t.tabs,function(n,a){return t.shouldRender(n)?s("router-link",{key:a,staticClass:"dito-link",attrs:{to:{hash:a},"active-class":"dito-active"}},[t._v(t._s(t.getLabel(n,a)))]):t._e()}),1)},ci=[],Od="";const di=v.component("dito-tabs",{props:{tabs:{type:Object,default:null},selectedTab:{type:String,default:null}}}),We={};var hi=p(di,ui,ci,!1,pi,null,null,null);function pi(t){for(let e in We)this[e]=We[e]}var mi=function(){return hi.exports}(),fi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s(t.panelTag,{directives:[{name:"show",rawName:"v-show",value:t.visible&&(!t.panelTabComponent||t.panelTabComponent.visible),expression:"visible && (!panelTabComponent || panelTabComponent.visible)"}],tag:"component",staticClass:"dito-panel",on:{submit:function(n){n.preventDefault()}}},[s("label",{staticClass:"dito-panel-title"},[t._v(t._s(t.getLabel(t.schema)))]),s("dito-schema",{staticClass:"dito-panel-schema",attrs:{schema:t.panelSchema,dataPath:t.panelDataPath,data:t.panelData,meta:t.meta,store:t.store,disabled:t.disabled,hasOwnData:t.hasOwnData}},[s("dito-buttons",{attrs:{slot:"buttons",buttons:t.buttonSchemas,dataPath:t.panelDataPath,data:t.panelData,meta:t.meta,store:t.store,disabled:t.disabled},slot:"buttons"})],1)],1)},_i=[],Ed="";const vi=v.component("dito-panel",{mixins:[Oe],provide(){return{$panelComponent:()=>this,$tabComponent:()=>this.panelTabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0},panelTabComponent:{type:v,default:null}},data(){return{ownData:null}},computed:{panelComponent(){return this},tabComponent(){return this.panelTabComponent},buttonSchemas(){return it(this.schema.buttons)},target(){return this.schema.target||this.dataPath},hasOwnData(){return!!this.ownData},panelData(){return this.ownData||this.data},panelSchema(){if(this.hasOwnData)return this.schema;{const t=this.schema,{data:e}=t;return F(t,["data"])}},panelTag(){return this.hasOwnData?"form":"div"},panelDataPath(){return this.hasOwnData?this.dataPath:this.schemaComponent.dataPath},visible:h("visible",{type:Boolean,default:!0})},created(){this._register(!0);const{data:t}=this.schema;t&&(this.ownData=b(t)?t.call(this,this.context):t)},beforeDestroy(){this._register(!1)},methods:{_register(t){this.schemaComponent._registerPanel(this,t)}}}),Je={};var gi=p(vi,fi,_i,!1,bi,null,null,null);function bi(t){for(let e in Je)this[e]=Je[e]}var yi=function(){return gi.exports}(),$i=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.panels.length>0?s("div",{staticClass:"dito-panels"},t._l(t.panels,function(n){var a=n.schema,r=n.dataPath,i=n.tabComponent;return t.shouldRender(a)?s("dito-panel",{key:t.getPanelKey(r,i),attrs:{schema:a,dataPath:r,data:t.data,meta:t.meta,store:t.getChildStore(a.name),disabled:a.disabled!=null?a.disabled:t.disabled,panelTabComponent:i}}):t._e()}),1):t._e()},Ci=[],jd="";const Di=v.component("dito-panels",{props:{panels:{type:Array,default:null},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0}},methods:{getPanelKey(t,e){return e?`${e.tab}_${t}`:t}}}),Qe={};var wi=p(Di,$i,Ci,!1,Pi,null,null,null);function Pi(t){for(let e in Qe)this[e]=Qe[e]}var xi=function(){return wi.exports}(),Si=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.buttonSchemas||t.$slots.default?s("div",t._g({staticClass:"dito-buttons"},t.$listeners),[t._l(t.buttonSchemas,function(n,a){return t.shouldRender(n)?s("dito-container",{key:a,attrs:{schema:n,dataPath:a,data:t.data,meta:t.meta,store:t.getChildStore(n.name),disabled:t.disabled,generateLabels:!1}}):t._e()}),t._l(t.$slots.default,function(n){return n.tag?s("div",{staticClass:"dito-container"},[s("dito-vnode",{attrs:{node:n}})],1):t._e()})],2):t._e()},Oi=[],Vd="";const Ei=v.component("dito-buttons",{provide:{$tabComponent:()=>null},props:{buttons:{type:Object,default:null},dataPath:{type:String,default:""},data:{type:[Object,Array],default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},disabled:{type:Boolean,default:!1}},computed:{buttonSchemas(){const{dataPath:t,buttons:e}=this;return e?Object.values(e).reduce((s,n)=>(s[B(t,n.name)]=n,s),{}):null}}}),Ge={};var ji=p(Ei,Si,Oi,!1,Vi,null,null,null);function Vi(t){for(let e in Ge)this[e]=Ge[e]}var ki=function(){return ji.exports}(),Li=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-buttons",{staticClass:"dito-edit-buttons dito-buttons-round",attrs:{buttons:t.buttons,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store},on:{click:function(n){n.stopPropagation()}}},[t.isDraggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.isEditable?s("router-link",t._b({staticClass:"dito-button",attrs:{to:{path:t.editPath},append:""}},"router-link",t.getButtonAttributes(t.verbs.edit),!1)):t._e(),t.isCreatable?s("dito-create-button",{attrs:{schema:t.schema,path:t.createPath,verb:t.verbs.create,text:t.createButtonText}}):t._e(),t.isDeletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){return t.$emit("delete")}}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()],1)},Bi=[],kd="";const Fi=v.component("dito-edit-buttons",{props:{draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},creatable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null},createPath:{type:String,default:null},buttons:{type:Object,default:null},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0}},computed:{formLabel(){return this.getLabel(this.schema.form)},isDraggable(){return this.hasOption("draggable")},isEditable(){return this.hasOption("editable")&&!!this.editPath},isCreatable(){return this.hasOption("creatable")&&!!this.createPath},isDeletable(){return this.hasOption("deletable")},createButtonText(){var t;return((t=this.schema.creatable)==null?void 0:t.label)||this.formLabel&&`${G(this.verbs.create)} ${this.formLabel}`||null}},methods:{hasOption(t){return!!(this[t]&&this.schema[t]!==!1)}}}),Xe={};var Ti=p(Fi,Li,Bi,!1,Ri,null,null,null);function Ri(t){for(let e in Xe)this[e]=Xe[e]}var Ii=function(){return Ti.exports}(),qi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-create-button"},[t.showPulldown?[s("button",{staticClass:"dito-button",class:"dito-button-"+t.verb,attrs:{type:"button",title:t.labelize(t.verb)},on:{mousedown:function(n){return n.stopPropagation(),t.onPulldownMouseDown()}}},[t._v(t._s(t.text))]),s("ul",{staticClass:"dito-pulldown",class:{"dito-open":t.pulldown.open}},t._l(t.forms,function(n,a){return s("li",[t.isCreatable(n)?s("a",{class:"dito-type-"+a,on:{mousedown:function(r){return r.stopPropagation(),t.onPulldownMouseDown(a)},mouseup:function(r){return t.onPulldownMouseUp(a)}}},[t._v(t._s(t.getLabel(n)))]):t._e()])}),0)]:s("button",{staticClass:"dito-button",class:"dito-button-"+t.verb,attrs:{type:t.isInlined?"button":"submit",title:t.labelize(t.verb)},on:{click:function(n){return t.createItem(t.forms.default)}}},[t._v(t._s(t.text))])],2)},Mi=[],Ld="";const Ai=v.component("dito-create-button",{mixins:[Re],props:{schema:{type:Object,required:!0},path:{type:String,required:!0},verb:{type:String,required:!0},text:{type:String,default:null}},computed:{forms(){return X(this.schema,this.context)},isInlined(){return It(this.schema)},showPulldown(){return Object.keys(this.forms).length>1||!this.forms.default}},methods:{isCreatable(t){return t.creatable!==!1},createItem(t,e=null){if(this.isCreatable(t))this.isInlined?this.sourceComponent.createItem(t,e):this.$router.push({path:`${this.path}/create`,query:{type:e},append:!0});else throw new Error("Not allowed to create item for given form")},onPulldownSelect(t){this.createItem(this.forms[t],t),this.setPulldownOpen(!1)}}}),Ye={};var Ni=p(Ai,qi,Mi,!1,Ui,null,null,null);function Ui(t){for(let e in Ye)this[e]=Ye[e]}var zi=function(){return Ni.exports}(),Hi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.clipboard?s("div",{staticClass:"dito-clipboard dito-buttons dito-buttons-round"},[s("button",{ref:"copyData",staticClass:"dito-button dito-button-copy",attrs:{type:"button",title:"Copy Data",disabled:!t.copyEnabled},on:{click:t.onCopy}}),s("button",{staticClass:"dito-button dito-button-paste",attrs:{type:"button",title:"Paste Data",disabled:!t.pasteEnabled},on:{click:t.onPaste}})]):t._e()},Ki=[];const Wi=v.component("dito-clipboard",{mixins:[tt],props:{clipboard:{type:[Boolean,Object],default:!1},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null}},data(){return{copyEnabled:!1,pasteEnabled:!1,fixClipboard:!0}},computed:{clipboardOptions(){return C(this.clipboard)?this.clipboard:{}},copyData(){const{copy:t}=this.clipboardOptions;return t?e=>t.call(this,new O(this,{clipboardData:e})):e=>nt(e)},pasteData(){const{paste:t}=this.clipboardOptions;return t?e=>t.call(this,new O(this,{clipboardData:e})):e=>e}},mounted(){this.domOn(document,{copy:this.checkClipboard}),this.domOn(window,{focus:this.checkClipboard}),this.$watch("data",{immediate:!0,handler:(t,e)=>{t!==e&&this.checkClipboard()}})},methods:{async getClipboardData(t){var a,r,i,o,l;let{clipboardData:e}=this.appState;try{const c=await((r=(a=navigator.clipboard)==null?void 0:a.readText)==null?void 0:r.call(a));this.fixClipboard&&c&&(await((o=(i=navigator.clipboard)==null?void 0:i.writeText)==null?void 0:o.call(i,c)),this.fixClipboard=!1),c&&(e=JSON.parse(c))}catch(c){t&&(console.error(c,c.name,c.message),c.name==="SyntaxError"&&alert(nn`
1
+ var As=Object.defineProperty,Ns=Object.defineProperties;var Us=Object.getOwnPropertyDescriptors;var et=Object.getOwnPropertySymbols;var zt=Object.prototype.hasOwnProperty,Ht=Object.prototype.propertyIsEnumerable;var ht=(t,e,s)=>e in t?As(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s,d=(t,e)=>{for(var s in e||(e={}))zt.call(e,s)&&ht(t,s,e[s]);if(et)for(var s of et(e))Ht.call(e,s)&&ht(t,s,e[s]);return t},S=(t,e)=>Ns(t,Us(e));var F=(t,e)=>{var s={};for(var n in t)zt.call(t,n)&&e.indexOf(n)<0&&(s[n]=t[n]);if(t!=null&&et)for(var n of et(t))e.indexOf(n)<0&&Ht.call(t,n)&&(s[n]=t[n]);return s};var pt=(t,e,s)=>(ht(t,typeof e!="symbol"?e+"":e,s),s);import A from"vue";import zs from"vue-js-modal";import Kt from"vue-router";import Hs from"vue-notification";import Ks from"axios";import{isInteger as W,normalizeDataPath as z,parseDataPath as N,getValueAtDataPath as J,isFunction as b,isArray as x,isPlainObject as Wt,isBoolean as Ws,isNumber as st,isString as V,isDate as mt,isObject as C,isRegExp as ft,asArray as T,pickBy as Jt,labelize as U,equals as _t,format as Js,hyphenate as Q,isCreditCard as Qs,isEmail as Gs,isHostname as Xs,isDomain as Ys,isUrl as Zs,camelize as Qt,clone as nt,isPromise as vt,isModule as tn,getCommonPrefix as en,stripTags as sn,capitalize as G,deindent as nn,merge as gt,escapeHtml as Gt,debounceAsync as an,debounce as rn,underscore as on,defaultFormats as ln,isAbsoluteUrl as un}from"@ditojs/utils";import{nanoid as cn}from"nanoid";import{addEvents as Xt,TransitionHeight as dn,Pagination as hn,Trigger as pn,DatePicker as mn,TimePicker as fn,DateTimePicker as _n,Icon as vn,InputField as bt,SwitchButton as gn}from"@ditojs/ui";import yt from"vuedraggable";import bn from"codeflask";import $t from"tinycolor2";import{Sketch as yn}from"vue-color";import{EditorContent as $n,EditorMenuBar as Cn,Editor as Dn,Mark as wn}from"tiptap";import{toggleMark as Pn}from"tiptap-commands";import{Bold as xn,Italic as Sn,Underline as On,Strike as En,Code as jn,Blockquote as Vn,CodeBlock as kn,HardBreak as Ln,Heading as Bn,HorizontalRule as Fn,ListItem as Tn,BulletList as Rn,OrderedList as In,History as qn,Link as Mn}from"tiptap-extensions";import An from"vue-multiselect";import Nn from"vue-upload-component";import Un from"filesize-parser";import zn from"filesize";var Yt={title:"",routeComponents:[],user:null,loadCache:{},activeLabel:null,clipboardData:null};function B(t,e){return t?`${t}/${e}`:e}function Hn(t){const e=N(t);return e==null||e.pop(),e}function Ct(t,e=!1){return e?Hn(t):N(t)}function Kn(t,e=!1){return z(Ct(t,e))}function Zt(t,e=!1){const s=Ct(t,e);if(s){let n;do n=s.pop();while(n!=null&&W(+n));if(n!=null)return s}return null}function Wn(t,e=!1){return z(Zt(t,e))}function Dt(t,e,s=!1){const n=Ct(e,s);return n?J(t,n):null}function wt(t,e,s=!1){const n=Zt(e,s);return n?J(t,n):null}function te(t){const e=N(t);return e[e.length-1]}function Jn(t){const e=te(t);return e==null||W(+e)?null:e}function Pt(t){const e=te(t),s=e==null?null:+e;return W(s)?s:null}let Qn=0;function Gn(t,e="id"){t[e]=`@${++Qn}`}function at(t){return/^@/.test(t)}function Xn(t,e="id"){return(t==null?void 0:t[e])!=null&&Object.keys(t).length===1}const xt=new WeakMap;function D(t,e,s){const n=xt.get(t),a=n[e];return a!==void 0||n.hasOwnProperty(e)?a:b(s)?s():s}function Yn(t,e,s){xt.get(t)[e]=s}class O{constructor(e,s){var a;s=s?b(s)?s():d({},s):{},(a=s.nested)!=null||(s.nested=!0),s.component=e;const n=Object.setPrototypeOf(s,e);xt.set(this,n)}static get(e,s){return s instanceof O?s:new O(e,s)}get nested(){return D(this,"nested",!0)}get value(){return D(this,"value",void 0)}get dataPath(){return D(this,"dataPath","")}get name(){return D(this,"name",()=>Jn(this.dataPath))}get index(){return D(this,"index",()=>Pt(this.dataPath))}get itemDataPath(){return Kn(this.dataPath,this.nested)}get parentItemDataPath(){return Wn(this.dataPath,this.nested)}get itemIndex(){return Pt(this.itemDataPath)}get parentItemIndex(){return Pt(this.parentItemDataPath)}get item(){return D(this,"data",()=>Dt(this.rootItem,this.dataPath,this.nested))}get parentItem(){const e=wt(this.rootItem,this.dataPath,this.nested)||null;return e!==this.item?e:null}get rootItem(){return D(this,"rootData",null)}get processedItem(){return D(this,"processedData",null)}get clipboardItem(){return D(this,"clipboardData",null)}get user(){return D(this,"user",null)}get api(){return D(this,"api",null)}get views(){return D(this,"views",null)}get itemLabel(){return D(this,"itemLabel",null)}get formLabel(){return D(this,"formLabel",null)}get component(){return D(this,"component",null)}get schemaComponent(){return D(this,"schemaComponent",null)}get formComponent(){return D(this,"formComponent",null)}get viewComponent(){return D(this,"viewComponent",null)}get dialogComponent(){return D(this,"dialogComponent",null)}get panelComponent(){return D(this,"panelComponent",null)}get resourceComponent(){return D(this,"resourceComponent",null)}get sourceComponent(){return D(this,"sourceComponent",null)}get option(){return D(this,"option",void 0)}get options(){return D(this,"options",void 0)}get query(){return D(this,"query",void 0)}get error(){return D(this,"error",void 0)}get wasNotified(){return D(this,"wasNotified",!1)}get request(){return e=>this.component.request(e)}get format(){return(e,s)=>this.component.format(e,s)}get navigate(){return e=>this.component.navigate(e)}get download(){return e=>this.component.download(e)}get getResourceUrl(){return e=>this.component.getResourceUrl(e)}get notify(){return e=>{this.component.notify(e),Yn(this,"wasNotified",!0)}}}var Zn={data(){return{$events:null}},methods:{on(t,e){if(x(t))for(const s of t)this.on(s,e);else if(Wt(t))for(const s in t)this.on(s,t[s]);else{const s=this.$events||(this.$events=Object.create(null)),{callbacks:n}=s[t]||(s[t]={callbacks:[],queue:[]});n.push(e)}return this},once(t,e){const s=(...n)=>(this.off(t,s),e.apply(this,n));return s.callback=e,this.on(t,s)},off(t,e){var s;if(!arguments.length)delete this.$events;else if(x(t))for(const n of t)this.off(n,e);else if(Wt(t))for(const n in t)this.off(n,t[n]);else{const n=(s=this.$events)==null?void 0:s[t];if(n)if(!e)delete this.$events[t];else{const{callbacks:a}=n,r=a.findIndex(i=>i===e||i.callback===e);r!==-1&&a.splice(r,1)}}return this},emit(t,...e){var n;const s=(n=this.$events)==null?void 0:n[t];if(s){const{queue:a,callbacks:r}=s;return new Promise(i=>{const o=async()=>{const u=a.shift();if(u){let l;for(const c of r)try{const _=await c.apply(this,u.args);_!==void 0&&(l=_)}catch(_){console.error(`Error during event handler for '${t}':`,_)}u.resolve(l),o()}};a.push({args:e,resolve:i}),a.length===1&&o()})}},hasListeners(t){var e;if(x(t)){for(const s of t)if(!this.hasListeners(s))return!1;return t.length>0}else return!!((e=this.$events)!=null&&e[t])},delegate(t,e){if(e)if(x(t))for(const s of t)this.delegate(s,e);else this.on(t,(...s)=>e.emit(t,...s));return this}}};const St={Boolean:Ws,Number:st,String:V,Date:mt,Array:x,Object:C,RegExp:ft,Function:b},ta=t=>!!t,ea=t=>+t,sa=t=>String(t),na=t=>mt(t)?t:new Date(t),aa=t=>x(t)?t:V(t)?t.split(","):T(t),ra=t=>C(t)?t:t===!0?{}:null,ia=t=>ft(t)?t:new RegExp(t),oa={Boolean:ta,Number:ea,String:sa,Date:na,Array:aa,Object:ra,RegExp:ia};function Ot(t,e){var s;if(t&&e!=null){for(const n of t)if((s=St[n.name])!=null&&s.call(St,e))return!0}return!1}function la(t,e){const s=t&&oa[t.name||t];return s?s(e):e}function ee(t){return!!I(t.resource)}function I(t,e={}){var r;const a=e,{parent:s}=a,n=F(a,["parent"]);return t=C(t)?d(d({},n),t):V(t)?S(d({},n),{path:t}):null,t&&s!==void 0&&t.parent===void 0&&!((r=t.path)!=null&&r.startsWith("/"))&&(t.parent=s,t.path||(t.path=".")),t}function Et(t,e){return t!=null&&(e==null?void 0:e.type)==="collection"?S(d({type:"member"},Jt(e,(s,n)=>["method","path","parent"].includes(n))),{id:`${t}`}):null}const se=new Set;function ua(t){se.has(t)||(se.add(t),console.warn(t))}var jt={mixins:[Zn],inject:["api","$verbs","$views","$isPopulated","$schemaComponent","$routeComponent","$dataComponent","$sourceComponent","$resourceComponent","$dialogComponent","$panelComponent","$tabComponent"],provide(){return this.providesData?{$dataComponent:()=>this}:{}},data(){return{appState:Yt,overrides:null}},computed:{sourceSchema(){var t;return(t=this.meta)==null?void 0:t.schema},user(){return Yt.user},verbs(){return this.$verbs()},views(){return this.$views()},isPopulated(){return this.$isPopulated()},locale(){return this.api.locale},context(){return new O(this,{nested:!1})},rootComponent(){return this.$root.$children[0]},schemaComponent(){return this.$schemaComponent()},routeComponent(){return this.$routeComponent()},formComponent(){const t=this.routeComponent;return t!=null&&t.isForm?t:null},viewComponent(){const t=this.routeComponent;return t!=null&&t.isView?t:null},dataComponent(){return this.providesData?this:this.$dataComponent()},sourceComponent(){return this.$sourceComponent()},resourceComponent(){return this.$resourceComponent()},dialogComponent(){return this.$dialogComponent()},panelComponent(){return this.$panelComponent()},tabComponent(){return this.$tabComponent()},parentSchemaComponent(){var t;return(t=this.schemaComponent)==null?void 0:t.$parent.schemaComponent},parentRouteComponent(){var t;return(t=this.routeComponent)==null?void 0:t.$parent.routeComponent},parentFormComponent(){var t;return(t=this.formComponent)==null?void 0:t.$parent.formComponent},rootData(){var t;return(t=this.dataComponent)==null?void 0:t.data}},beforeCreate(){this.$uid=++ca},methods:{getStore(t){return this.store[t]},setStore(t,e){return this.$set(this.store,t,e)},getChildStore(t){return this.getStore(t)||this.setStore(t,{})},getSchemaValue(t,{type:e,default:s,schema:n=this.schema,callback:a=!0}={}){const r=e&&T(e);let i=n?x(t)?J(n,t,()=>{}):n[t]:void 0;if(i===void 0&&s!==void 0)return a&&b(s)&&!Ot(r,s)&&(s=s.call(this,this.context)),s;if(Ot(r,i))return i;if(a&&b(i)&&(i=i.call(this,this.context)),r&&i!=null&&!Ot(r,i))for(const o of r){const u=la(o,i);if(u!==i)return u}return i},getLabel(t,e){return t?this.getSchemaValue("label",{type:String,schema:t})||U(e||t.name):U(e)||""},labelize:U,getButtonAttributes(t,e){const s=this.verbs[t]||t;return{class:`dito-button-${s}`,title:(e==null?void 0:e.text)||U(s)}},getDragOptions(t,e=!1){return{animation:150,disabled:!t,handle:".dito-button-drag",dragClass:"dito-drag-active",chosenClass:"dito-drag-chosen",ghostClass:"dito-drag-ghost",fallbackClass:"dito-drag-fallback",forceFallback:e}},getQueryLink(t){return{query:t,hash:this.$route.hash}},shouldRender(t=null){return!!t&&this.getSchemaValue("if",{type:Boolean,default:!0,schema:t})},showDialog({components:t,buttons:e,data:s,settings:n={width:480,height:"auto",clickToClose:!1}}){return new Promise((a,r)=>{this.$modal.show(v.component("dito-dialog"),{components:t,buttons:e,data:s,promise:{resolve:a,reject:r}},n)})},getResourcePath(t){var e;return t=I(t),t.parent===void 0&&(t.parent=(e=this.dataComponent)==null?void 0:e.resource),this.api.resources.any(I(t))},getResourceUrl(t){const e=this.getResourcePath(t);let s=null;if(e){s=`${this.api.url.replace(/\/+$/,"")}/${e.replace(/^\/+/,"")}`;const{query:n}=t;if(n){const a=Object.entries(n).map(([r,i])=>`${encodeURIComponent(r)}=${encodeURIComponent(i)}`);s=`${s}?${a.join("&")}`}}return s},async sendRequest({method:t,url:e,resource:s,data:n,params:a,internal:r}){e=e||this.getResourcePath(s),t=t||(s==null?void 0:s.method);const i=!r&&this.api.isApiRequest(e);i&&await this.rootComponent.ensureUser();const o=await this.api.request({method:t,url:e,data:n,params:a});return i&&t==="patch"&&_t(s,Et(this.user.id,this.api.users))&&await this.rootComponent.fetchUser(),o},request(s){var n=s,{cache:t}=n,e=F(n,["cache"]);const a=t&&{global:this.appState,local:this.dataComponent}[t],r=a==null?void 0:a.loadCache,i=r&&`${e.method||"get"} ${e.url} ${JSON.stringify(e.params||"")} ${JSON.stringify(e.data||"")}`;if(r&&i in r)return r[i];const o=this.sendRequest(e).then(u=>u.data).catch(u=>{var c;const l=(c=u.response)==null?void 0:c.data;throw l?Object.assign(new Error(l.message),l):u});return r&&(r[i]=o),o},load(t){return ua("load() is deprecated. Use request() instead."),this.request(t)},format(t,a={}){var r=a,{locale:e=this.api.locale,defaults:s=this.api.formats}=r,n=F(r,["locale","defaults"]);return Js(t,d({locale:e,defaults:s},n))},async navigate(t){return new Promise(e=>{this.$router.push(t,()=>e(!0),()=>e(!1))})},download(t={}){V(t)&&(t={url:t});const{url:e,filename:s}=t,n=document.createElement("a");n.href=e,s&&(n.download=s);const{body:a}=document;a.appendChild(n),n.click(),a.removeChild(n)},notify(t){this.rootComponent.notify(t)},closeNotifications(){this.rootComponent.closeNotifications()},setupSchemaFields(){this.setupMethods(),this.setupComputed(),this.setupEvents()},setupMethods(){for(const[t,e]of Object.entries(this.schema.methods||{}))b(e)?this[t]=e:console.error(`Invalid method definition: ${t}: ${e}`)},setupComputed(){for(const[t,e]of Object.entries(this.schema.computed||{})){const s=b(e)?{get:e}:C(e)&&b(e.get)?e:null;s?Object.defineProperty(this,t,s):console.error(`Invalid computed property definition: ${t}: ${e}`)}},setupEvents(){const{watch:t,events:e}=this.schema;if(t){const n=b(t)?t.call(this):t;C(n)&&this.$nextTick(()=>{for(const[a,r]of Object.entries(n)){const i=this.schemaComponent.getComponentByName(a)?`data.${a}`:a;this.$watch(i,r)}})}const s=(n,a,r)=>{b(r)?this.on(Q(a),r):console.error(`Invalid event definition: ${n}: ${r}`)};if(e)for(const[n,a]of Object.entries(e))s(n,n,a);for(const[n,a]of Object.entries(this.schema))/^on[A-Z]/.test(n)&&s(n,n.slice(2),a)},async emitEvent(t,{context:e=null,parent:s=null}={}){const n=this.hasListeners(t),a=s==null?void 0:s.hasListeners(t);if(n||a){["load","change"].includes(t)&&await this.$nextTick();const r=()=>e=O.get(this,e),i=n?await this.emit(t,r()):void 0;return a&&i!==!1&&s.emit(t,r()),i}},emitSchemaEvent(t,e){return this.schemaComponent.emitEvent(t,e)}}};let ca=0;const da={validate:t=>Qs(t),message:"is invalid"},ha={validate:(t,e)=>{const s=e==="*"?"+":`{1,${e}}`;return new RegExp(`^[-+]?\\d*(\\.\\d${s})?$`).test(t)},message:(t,e)=>`must be numeric and may contain ${!e||e==="*"?"":e} decimal points`},pa={validate:t=>Gs(t),message:"must be a valid email"},ma={validate:t=>Xs(t),message:"is not a host name"},fa={validate:t=>Ys(t),message:"is not a domain"},_a={validate:t=>W(t),message:"must be whole number"},va={validate:(t,e)=>t<=e,message(t,e){return`must be ${e} or less`}},ga={validate:(t,e)=>t>=e,message(t,e){return`must be ${e} or more`}},ba={validate:()=>!0},ya={validate:(t,[e,s])=>t>=e&&t<=s,message(t,[e,s]){return`must be between ${e} and ${s}`}},$a={validate:(t,e,{password:s})=>t!=null&&t!==""||s&&t===void 0,message:"is required",nullish:!0},Ca={validate:t=>Zs(t),message:"is not a valid URL"};var Da=Object.freeze(Object.defineProperty({__proto__:null,creditcard:da,decimals:ha,email:pa,hostname:ma,domain:fa,integer:_a,max:va,min:ga,password:ba,range:ya,required:$a,url:Ca},Symbol.toStringTag,{value:"Module"})),wa={data(){return{isTouched:!1,isDirty:!1,isValidated:!1,isValid:!1,errors:null}},computed:{events(){return{focus:()=>{this.isTouched=!0},blur:()=>{this.validate()},change:()=>{this.markDirty()},input:()=>{this.markDirty()}}}},methods:{resetValidation(){this.isTouched=!1,this.isDirty=!1,this.isValidated=!1,this.isValid=!1,this.clearErrors()},validate(t=!0){let e=!0;t&&this.clearErrors();const{value:s}=this;for(const[n,a]of Object.entries(this.validations)){const r=Da[n];if(r&&(r.nullish||s!=null)){const{validate:i,message:o}=r;if(!i(s,a,this.validations)&&(e=!1,t)){const u=b(o)?o(s,a,this):o;this.addError(u,!0)}}}return t&&(this.isValidated=!0,this.isValid=e),e},verify(){return this.validate(!1)},markDirty(){this.isDirty=!0,this.isValidated=!1,this.isValid=!1,this.clearErrors()},addError(t,e=!1){this.errors||(this.errors=[]),e&&(t=`The ${this.label||this.placeholder||this.name} field ${t}.`),this.errors.push(t),this.$emit("errors",this.errors)},showValidationErrors(t,e){this.errors=[];for(const{message:s}of t)this.addError(s,!0);return e&&this.focus(),!0},getErrors(){return this.errors?[...this.errors]:null},clearErrors(){this.errors=null,this.$emit("errors",this.errors)}}};function h(t,{type:e,default:s,get:n,set:a,callback:r=!0}={}){V(t)&&t.includes(".")&&(t=N(t));const i=z(t);return{get(){const o=!n||n.length>0?this.overrides&&i in this.overrides?this.overrides[i]:this.getSchemaValue(t,{type:e,default:s,callback:r}):void 0;return n?n.call(this,o):o},set(o){a?a.call(this,o):(this.overrides||(this.overrides={}),this.$set(this.overrides,i,o))}}}function Vt(t,{default:e,get:s,set:n}={}){return{get(){let a=this.getStore(t);return a===void 0&&e!==void 0&&(a=b(e)?e.call(this,this.context):e,this[t]=a,this.getStore(t)),s?s.call(this,a):a},set(a){(!n||(a=n.call(this,a))!==void 0)&&this.setStore(t,a)}}}const ne=new WeakMap;let Pa=0;function xa(t,e){let s=ne.get(t);return s||(s=s=e||`@${++Pa}`,ne.set(t,s)),s}class Sa{constructor(){pt(this,"graph",{});pt(this,"references",{})}set(e,s,n){var r;e=N(e);let a=this.graph;for(const i of e){const o=W(+i)?"*":i;a=(r=a[o])!=null?r:a[o]={}}a.$settings=d(d(d({},n),a.$settings),s)}addSource(e,s){this.set(e,{type:"source",schema:s},{related:!1})}setSourceRelated(e){this.set(e,{related:!0,reference:this.getReferencePrefix(e)})}addRelation(e,s,n){this.set(e,{type:"relation",schema:n,internal:!!s,reference:this.getReferencePrefix(s)})}getReferencePrefix(e){var s,n;return e?(n=(s=this.references)[e])!=null?n:s[e]=cn(6):null}flatten(){const e=s=>{const n=[];for(const a of Object.entries(s)){const[o,r]=a,i=r,{$settings:u}=i,l=F(i,["$settings"]);u&&n.push([o,u]);for(const[c,_]of e(l))n.push([`${o}/${c}`,_])}return n};return e(this.graph)}process(e,s,{target:n}){const a=n==="clipboard";a&&delete s[e.idKey||"id"];for(const[r,i]of this.flatten()){const{type:o,schema:u,internal:l,related:c,reference:_}=i,f=o==="source",y=o==="relation";if(f||y&&l){const m=J(s,r,()=>null),w=a&&f&&!c,j=a&&(y&&l||f&&c);for(const P of T(m).flat()){const g=f&&u.idKey||y&&u.relateBy||"id";let E=P==null?void 0:P[g];if(E!=null&&(w&&delete P[g],j||at(E))){at(E)&&(E=E.slice(1));const L=a?g:f?"#id":"#ref",k=a?`@${E}`:_?`${_}-${E}`:E;P[L]=k,L!==g&&delete P[g]}}}}return s}}const ae={},re={};function Oa(t,e){ae[t]=e}function kt(t,e=!1){const s=ae[t]||null;if(!s&&!e&&!re[t])throw re[t]=!0,new Error(`Unknown Dito component type: '${t}'`);return s}function ie(t,e){const s=[...Object.values((t==null?void 0:t.tabs)||{}),t];for(const n of s)if(n){const a=e(n);if(a!==void 0)return a}}function oe(t,e){return ie(t,s=>{for(const[n,a]of Object.entries(s.components||{})){const r=e(a,n);if(r!==void 0)return r}})}function Ea(t,e){return oe(t,(s,n)=>e(s,n)?!0:void 0)===!0}async function Lt(t,e=!1){if(b(t)&&(t=t()),vt(t)&&(t=await t),tn(t)&&(t=d({},t),!t.name&&(e||t.default))){const s=Object.keys(t);if(s.length===1){const n=s[0];t=t[n],t.name=n}}return t}async function Bt(t,e=Lt){let s=b(t)?t():t;return s=await Lt(s,!1),x(s)?s=Object.fromEntries(await Promise.all(s.map(async n=>{const a=await e(n,!0);return[a.name,a]}))):C(s)&&(s=Object.fromEntries(await Promise.all(Object.entries(s).map(async([n,a])=>{const r=await e(a,!0);return[n,r]})))),s}async function le(t){const{panels:e}=t;t.panels&&(t.panels=await Bt(e))}async function ja(t,e,s,n,a){const r=[];ce(e,s,n),await le(s),he(s)?await ue(e,s,n,r,0):await Ft(e,s,r,1),a.push({path:`/${s.path}`,children:r,component:t,meta:{api:e,schema:s}})}function ue(t,e,s,n,a){var r,i;return e.level=a,(i=(r=q(e))==null?void 0:r.processSchema)==null?void 0:i.call(r,t,e,s,n,a)}function ce(t,e,s){e.name=s,e.path=e.path||t.normalizePath(s)}async function Ft(t,e,s,n){const a=[];oe(e,(r,i)=>{a.push(ue(t,r,i,s,n))}),await Promise.all(a)}async function Va(t,e,s){let{form:n,forms:a,components:r}=e;a?a=e.forms=await Bt(a,de):n?n=e.form=await de(n):r&&C(r)&&(n={components:r}),a||(a={default:n});const i=[];for(const o of Object.values(a))await Ft(t,o,i,s+1);return i}async function de(t){return t=await Lt(t,!0),t&&await le(t),t}function he(t){return!!t.type}function H(t){return C(t)&&!!(t.form||t.forms||t.components)}function ka(t){return Object.keys((t==null?void 0:t.forms)||{}).length>1}function Tt(t,e){const{view:s}=t,n=s&&e.views[s];return n?H(n)?n:ie(n,a=>{var i;const r=(i=a.components)==null?void 0:i[s];if(H(r))return r}):null}function La(t,e){const s=Tt(t,e);return s?s.level===0?`/${s.path}`:`/${s.path}/${s.path}`:null}function X(t,e,s){const n=Tt(t,e);if(n)t=n;else if(t.view)throw new Error(`Unknown view: '${t.view}'`);let{form:a,forms:r,components:i,compact:o}=t;if(!a&&!r)if(i)a={components:i,compact:o};else return{};return r||(r={default:a}),Object.fromEntries(Object.entries(r).map(([u,l])=>{var c;return b(l.components)&&(l=S(d({},l),{components:l.components(e)})),[u,(c=s==null?void 0:s(l))!=null?c:l]}))}function pe(t,e){return t[e==null?void 0:e.type]||t.default||null}function Rt(t,e,s){return pe(X(t,s),e)}function Ba(t){return t.label!==!1}function me(t){return!!t.compact}function It(t){return!!(t.inlined||t.components)}function fe(t){var e;return!!(t.nested||((e=q(t))==null?void 0:e.defaultNested)===!0)}function Fa(t){var e;return!!((e=q(t))!=null&&e.omitPadding)}function _e(t){var n;const e=t.default,s=e!==void 0?e:(n=q(t))==null?void 0:n.defaultValue;return b(s)?s(t):nt(s)}function ve(t){var s;const e=q(t);return!!((e==null?void 0:e.excludeValue)||((s=e==null?void 0:e.ignoreMissingValue)==null?void 0:s.call(e,t)))}function Ta(t){const e=s=>Object.values(s||{}).some(Ba);return e(t.components)||Object.values(t.tabs||{}).some(e)}function ge(t,e={},s){return rt(t,e,null,null,(r,i,o)=>{!(o in i)&&!ve(r)&&(i[o]=_e(r))},null,{component:s,rootData:e})}function be(t,e,s,n,{component:a=null,rootData:r=a==null?void 0:a.rootData}={}){const{compute:i}=t;if(i){const o=i(O.get(a,{value:e[s],name:s,data:e,dataPath:n,rootData:r}));o!==void 0&&A.set(e,s,o)}return!(s in e)&&!ve(t)&&A.set(e,s,_e(t)),e[s]}function ye(t,e,s){if(s.schemaOnly){const n={},{idKey:a="id",orderKey:r}=t,i=e[a];return i!==void 0&&(n[a]=i),ka(t)&&(n.type=e.type),r&&(n[r]=e[r]),n}else return d({},e)}function Ra(t,e,s,n,{component:a,schemaOnly:r,target:i}={}){const o={component:a,schemaOnly:r,target:i,rootData:s},u=ye(e,s,o),l=new Sa;return rt(t,s,n,u,(f,y,m,w,j)=>{let P=be(f,y,m,w,o);if(x(P)){const{wrapPrimitives:g,orderKey:E,idKey:L="id"}=f;g?P=P.map(k=>({[g]:k})):P=[...P],E&&i==="clipboard"&&P.sort((k,M)=>{const R=k==null?void 0:k[L],dt=M==null?void 0:M[L];return R==null||at(R)?1:dt==null||at(dt)?-1:R-dt})}j[m]=P},(f,y,m,w,j)=>{const{wrapPrimitives:P,exclude:g,process:E}=f;let L=j[m];const k=q(f),M=()=>O.get(a,{value:L,name:m,data:y,dataPath:w,rootData:o.rootData,processedData:j});if(P&&x(L)&&(L=L.map(R=>R[P])),E&&(L=E(M())),(k==null?void 0:k.excludeValue)||g===!0||b(g)&&g(M()))delete j[m];else{const R=k==null?void 0:k.processValue;R&&(L=R(f,L,w,l)),j[m]=L}},o),l.process(e,u,o)}function rt(t,e,s,n,a,r,i){const o=u=>{const l=(c,_)=>c!=null?B(c,_):null;if(u)for(const[c,_]of Object.entries(u))if(!fe(_))rt(_,e,s,n,a,r,i);else{const f=l(s,c),y=(w,j=null)=>{var M;const P=j!==null?l(f,j):f,g=O.get(i.component,{data:e,value:w,dataPath:P,index:j,rootData:i.rootData}),L=(((M=q(_))==null?void 0:M.getFormSchemasForProcessing)||X)(_,g),k=pe(L,w);if(k){const R=n?ye(_,w,i):null;return rt(k,w,P,R,a,r,i)}else return d({},w)};a==null||a(_,e,c,f,n);let m=n?n[c]:e[c];m!=null&&H(_)&&(x(m)?m=n?m.map(y):m.forEach(y):m=y(m),n&&(n[c]=m)),r==null||r(_,e,c,f,n)}};if(o(t.components),t.tabs)for(const u of Object.values(t.tabs))o(u.components);for(const u of Pe(t,s))o(u.schema.components);return n||e}function K(t,e){const s=(n,a)=>n.length>0?n.reduce((r,i)=>{const o=a(i);return o&&(r[o.name]=o&&e?d(d({},e),o):o),r},{}):null;return x(t)?s(t,n=>C(n)?n:{name:Qt(n,!1)}):C(t)?s(Object.entries(t),([n,a])=>C(a)?d({name:n},a):V(a)?{name:n,label:a}:null):null}function it(t){return K(t,{type:"button"})}function $e(t){return C(t)?t.type:t}function q(t){var e,s;return(s=(e=kt($e(t),!0))==null?void 0:e.options)!=null?s:null}function Ce(t){var e,s,n;return(n=(s=(e=q(t))==null?void 0:e.getSourceType)==null?void 0:s.call(e,$e(t)))!=null?n:null}function De(t,e,s){return t?{schema:t,dataPath:t.name?B(e,t.name):e,tabComponent:s}:null}function we(t,e,s,n=[]){if(t)for(const[a,r]of Object.entries(t)){const i=De(r,B(e,a),s);i&&n.push(i)}return n}function Pe(t,e,s=null,n=null){var i,o;const a=(o=(i=q(t))==null?void 0:i.getPanelSchema)==null?void 0:o.call(i,t,e,s),r=a?[De(a,e,n)]:[];return we(t.panels,e,n,r),r}function Y(t){return Ce(t)==="object"}function Z(t){return Ce(t)==="list"}function xe(t,e){const s=e[t.idKey||"id"];return s!=null?String(s):void 0}function Ia(t,e){return xa(e,xe(t,e))}var ot={mixins:[wa],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},data(){return{parsedValue:null,focused:!1}},computed:{name(){return this.schema.name},type(){return this.schema.type},component(){return this.resolveTypeComponent(this.schema.component)},context(){return new O(this,{nested:this.nested})},value:{get(){const t=be(this.schema,this.data,this.name,this.dataPath,{component:this}),{format:e}=this.schema;return e?e.call(this,new O(this,{value:t})):t},set(t){const{parse:e}=this.schema;this.parsedValue=e?e.call(this,new O(this,{value:t})):t,this.$set(this.data,this.name,this.parsedValue)}},item(){return Dt(this.rootItem,this.dataPath,this.nested)},parentItem(){return wt(this.rootItem,this.dataPath,this.nested)},rootItem(){return this.rootData},processedItem(){const{schemaComponent:t}=this;return Dt(t.processedItem,this.dataPath.slice(t.dataPath.length),this.nested)},label:h("label",{type:[String,Boolean],get(t){return V(t)?t:t!==!1&&this.$options.generateLabel?this.getLabel(this.schema):null}}),width:h("width",{type:[String,Number]}),visible:h("visible",{type:Boolean,default(){return this.typeOptions.defaultVisible}}),exclude:h("exclude",{type:Boolean,default:!1}),required:h("required",{type:Boolean,default:!1}),readonly:h("readonly",{type:Boolean,default:!1}),autofocus:h("autofocus",{type:Boolean,default:!1}),clearable:h("clearable",{type:Boolean,default:!1}),placeholder:h("placeholder",{type:String}),autocomplete:h("autocomplete",{type:String}),attributes(){const{nativeField:t,textField:e}=this.$options,s={disabled:this.disabled};return t&&(s.name=this.name,this.label&&(s.title=this.label),s.readonly=this.readonly,s.autofocus=this.autofocus,e&&(s.placeholder=this.placeholder,s.autocomplete=this.autocomplete)),s},listeners(){const t=this.getListeners(),{events:e={}}=this.schema;if(e)for(const s of Object.keys(e))t[s]||(t[s]=()=>this.emitEvent(s));return t},validations(){const t=d({},this.getValidations());this.required&&(t.required=!0);for(const[e,s]of Object.entries(this.schema.rules||{}))s===void 0?delete t[e]:t[e]=s;return t},providesData(){return!1},showClearButton(){return this.clearable&&this.value!=null}},created(){this._register(!0),this.setupSchemaFields()},beforeDestroy(){this._register(!1)},methods:{_register(t){this.nested&&(this.schemaComponent._registerComponent(this,t),this[t?"on":"off"](this.events))},getListeners(){return{focus:this.onFocus,blur:this.onBlur,input:this.onInput,change:this.onChange}},getValidations(){return null},focusElement(){const[t]=T(this.$refs.element);t&&this.$nextTick(()=>{var e,s;t.focus(),this.disabled&&((s=(e=t.$el||t).scrollIntoView)==null||s.call(e))})},focus(){var t;this.schemaComponent.focus(),(t=this.tabComponent)==null||t.focus(),this.focusElement()},clear(){this.value=null,this.onChange()},onFocus(){this.focused=!0,this.emitEvent("focus")},onBlur(){this.focused=!1,this.emitEvent("blur")},onInput(){this.emitEvent("input")},onChange(){this.emitEvent("change",{context:this.parsedValue!==void 0?{value:this.parsedValue}:null,parent:this.schemaComponent})}}};const lt={},v=A.extend({components:lt,mixins:[jt],methods:{getTypeComponent:kt,resolveComponent(t,e=[]){return t&&(async()=>{let s=b(t)?await t():vt(t)?await t:t;return s=(s==null?void 0:s.default)||s,s.mixins=e,s.components=lt,s})},resolveDitoComponent(t){return this.resolveComponent(t,[jt])},resolveTypeComponent(t){return this.resolveComponent(t,[jt,ot])}}});v.component=function(t,e){if(e){e=d({name:t},e);const s=this.extend(e);return lt[t]=s,s}else return lt[t]||A.component(t)};class qa{hasRole(...e){if(this.roles){for(const s of e)if(this.roles.includes(s))return!0}return!1}}var Se={provide(){return{$schemaParentComponent:()=>this}},data(){return{schemaComponents:[]}},computed:{mainSchemaComponent(){return this.schemaComponents[0]}},methods:{_registerSchemaComponent(t,e){const{schemaComponents:s}=this;e?s.push(t):s.splice(s.indexOf(t),1)}}},Oe={mixins:[Se],computed:{errors(){return this.schemaComponents.reduce((t,{errors:e})=>e&&t?t.concat(e):e,null)},isTouched(){return this.schemaComponents.some(t=>t.isTouched)},isDirty(){return this.schemaComponents.some(t=>t.isDirty)},isValid(){return this.schemaComponents.every(t=>t.isValid)},isValidated(){return this.schemaComponents.every(t=>t.isValid)}},methods:{validateAll(t,e=!0){return this.schemaComponents.every(s=>s.validateAll(t,e))},verifyAll(t){return this.schemaComponents.every(e=>e.verifyAll(t))},resetValidation(){this.schemaComponents.forEach(t=>t.resetValidation())},clearErrors(){this.schemaComponents.forEach(t=>t.clearErrors())},showValidationErrors(t,e){this.schemaComponents.forEach(s=>s.showValidationErrors(t,e))}}},Ee={mixins:[Oe],provide(){return{$routeComponent:()=>this}},beforeRouteUpdate(t,e,s){this.beforeRouteChange(t,e,s)},beforeRouteLeave(t,e,s){this.beforeRouteChange(t,e,s)},data(){return{reload:!1,store:{},loadCache:{}}},computed:{routeComponent(){return this},routeRecord(){return this.$route.matched[this.$vnode.data.routerViewDepth]},isLastRoute(){const{matched:t}=this.$route;return this.routeRecord===t[t.length-1]},isLastUnnestedRoute(){const{matched:t}=this.$route;for(let e=t.length-1;e>=0;e--){const s=t[e];if(!s.meta.nested)return this.routeRecord===s}return!1},isNestedRoute(){return this.meta.nested},meta(){var t;return(t=this.routeRecord)==null?void 0:t.meta},path(){return this.getRoutePath(this.routeRecord.path)},label(){return this.getLabel(this.schema)},breadcrumb(){const{breadcrumb:t}=this.schema||{};return t||`${this.breadcrumbPrefix} ${this.label}`},breadcrumbPrefix(){return""},param(){var t;return this.$route.params[(t=this.meta)==null?void 0:t.param]||null},doesMutate(){return!1}},created(){this.appState.routeComponents.push(this)},destroyed(){const{routeComponents:t}=this.appState;t.splice(t.indexOf(this),1)},methods:{beforeRouteChange(t,e,s){let n=!0;e.path.startsWith(this.path)&&!t.path.startsWith(this.path)&&e.path!==t.path&&(this.isFullRouteChange(t,e)||t.path.length<=e.path.length)&&(this.doesMutate?n=this.isValidated||this.validateAll():this.isDirty&&(n=window.confirm(`You have unsaved changes. Do you really want to ${this.verbs.cancel}?`))),s(n)},getRoutePath(t){return this.$route.path.split("/").slice(0,t.split("/").length).join("/")},getChildPath(t){return`${this.path}/${t}`},isFullRouteChange(t,e){const s=this.path.match(/^(\/[^/]*)/)[1];return!en(t.path,e.path).startsWith(s)}}},Ma=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isLastRoute?t.shouldRender(t.viewSchema)?s("div",{staticClass:"dito-view dito-scroll-parent"},[s("dito-schema",{staticClass:"dito-scroll",attrs:{schema:t.viewSchema,data:t.data,meta:t.meta,store:t.getChildStore(t.name),disabled:t.isLoading,generateLabels:!1,menuHeader:!0}})],1):t._e():s("router-view",{key:t.name})},Aa=[];function p(t,e,s,n,a,r,i,o){var u=typeof t=="function"?t.options:t;e&&(u.render=e,u.staticRenderFns=s,u._compiled=!0),n&&(u.functional=!0),r&&(u._scopeId="data-v-"+r);var l;if(i?(l=function(f){f=f||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,!f&&typeof __VUE_SSR_CONTEXT__!="undefined"&&(f=__VUE_SSR_CONTEXT__),a&&a.call(this,f),f&&f._registeredComponents&&f._registeredComponents.add(i)},u._ssrRegister=l):a&&(l=o?function(){a.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:a),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(y,m){return l.call(m),c(y,m)}}else{var _=u.beforeCreate;u.beforeCreate=_?[].concat(_,l):[l]}return{exports:t,options:u}}const Na=v.component("dito-view",{mixins:[Ee],provide(){return{$sourceComponent:()=>{var t;return((t=this.mainComponent)==null?void 0:t.sourceComponent)||null},$resourceComponent:()=>{var t;return((t=this.mainComponent)==null?void 0:t.resourceComponent)||null}}},data(){return{isView:!0,isLoading:!1,data:{}}},computed:{schema(){return this.meta.schema},name(){return this.schema.name},isSingleComponentView(){return he(this.schema)},mainComponent(){return this.mainSchemaComponent.getComponentByDataPath(this.name)},viewSchema(){const{schema:t}=this;return this.isSingleComponentView?{name:t.name,components:{[t.name]:S(d({},t),{label:!1})}}:t},providesData(){return Ea(this.viewSchema,t=>ee(t))}},watch:{$route(t,e){this.isFullRouteChange(t,e)&&(this.isLoading=!1,this.data={})}},methods:{setData(t){this.data=t},getChildPath(t){return this.isSingleComponentView?this.path:`${this.path}/${t}`},setLoading(t){this.isLoading=!!t}}}),je={};var Ua=p(Na,Ma,Aa,!1,za,null,null,null);function za(t){for(let e in je)this[e]=je[e]}var Ve=function(){return Ua.exports}(),tt={data(){return{domHandlers:[]}},beforeDestroy(){for(const{remove:t}of this.domHandlers)t();this.domHandlers=[]},methods:{domOn(t,e,s){const n=Xt(t,C(e)?e:{[e]:s});return this.domHandlers.push(n),n}}},Ha=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-root"},[s("modals-container"),s("notifications",{ref:"notifications",staticClass:"dito-notifications",attrs:{position:"top right",classes:"dito-notification"}}),s("dito-menu"),s("main",{staticClass:"dito-page dito-scroll-parent"},[s("dito-header",{attrs:{spinner:t.options.spinner,isLoading:t.isLoading}},[t.user?s("dito-account"):t.allowLogin?s("a",{staticClass:"dito-login",on:{click:function(n){return t.rootComponent.login()}}},[s("span",[t._v("Login")])]):t._e()],1),s("router-view")],1)],1)},Ka=[],_d="";const Wa=v.component("dito-root",{mixins:[tt],provide(){return{$views:()=>this.resolvedViews}},props:{unresolvedViews:{type:[Object,Function,Promise],required:!0},options:{type:Object,default:()=>({})}},data(){return{resolvedViews:{},allowLogin:!1,loadingCount:0}},computed:{notifications(){return this.$refs.notifications},isLoading(){return this.loadingCount>0}},created(){this.appState.title=document.title||"Dito.js Admin",this.appState.routeComponents=[]},async mounted(){this.domOn(document,{click:t=>{t.target.closest(".dito-label")||(this.appState.activeLabel=null)},keyup:t=>{t.code==="Tab"&&(this.appState.activeLabel=null)}});try{this.allowLogin=!1,await this.fetchUser()?await this.resolveViews():await this.login()}catch(t){console.error(t)}this.allowLogin=!0},methods:{notify({type:t="info",title:e,text:s}={}){e||(e={warning:"Warning",error:"Error",info:"Information",success:"Success"}[t]||"Notification"),s=`<p>${T(s).join("</p> <p>")}</p>`.replace(/\n|\r\n|\r/g,"<br>");const n={warning:"warn",error:"error",info:"log",success:"log"}[t]||"error";console[n](sn(s));const{notifications:a=!0}=this.api;if(a){const{durationFactor:r=20}=a,i=(40+s.length+e.length)*r;this.$notify({type:t,title:e,text:s,duration:i})}},closeNotifications(){this.notifications.destroyAll()},registerLoading(t){this.loadingCount+=t?1:-1},async login(){var n,a;this.allowLogin=!0;const{additionalComponents:t,redirectAfterLogin:e}=this.options.login||{},s=await this.showDialog({components:d({username:{type:"text",autofocus:!0},password:{type:"password"}},t),buttons:{cancel:{},login:{type:"submit"}}});if(s)try{const r=await this.sendRequest({resource:this.api.users.login,data:s,internal:!0});e?location.replace(e):(this.setUser(r.data.user),await this.resolveViews())}catch(r){const i=(a=(n=r.response)==null?void 0:n.data)==null?void 0:a.error;this.notify({type:"error",title:"Authentication Error",text:i||r}),i||console.error(r,r.response),this.login()}},navigateHome(){return this.navigate("/")},async logout(){try{(await this.sendRequest({resource:this.api.users.logout,internal:!0})).data.success&&(this.setUser(null),this.navigateHome())}catch(t){console.error(t)}},async fetchUser(){let t=null;try{t=(await this.sendRequest({resource:this.api.users.session,internal:!0})).data.user||null}catch(e){this.notify({type:"error",title:"Authentication Error",text:e})}return this.setUser(t),t},setUser(t){this.appState.user=t&&Object.setPrototypeOf(t,qa.prototype),t||(this.resolvedViews={},this.navigateHome())},async ensureUser(){await this.fetchUser()||await this.login()},async resolveViews(){try{this.resolvedViews=await Bt(this.unresolvedViews)}catch(s){return s.request||console.error(s),this.login()}const t=[],e=[];for(const[s,n]of Object.entries(this.resolvedViews))e.push(ja(Ve,this.api,n,s,t));await Promise.all(e);for(const s of t)this.$router.addRoute(s)}}}),ke={};var Ja=p(Wa,Ha,Ka,!1,Qa,null,null,null);function Qa(t){for(let e in ke)this[e]=ke[e]}var qt=function(){return Ja.exports}(),Ga=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("nav",{staticClass:"dito-menu dito-scroll-parent"},[s("h1",[t._v(t._s(t.appState.title))]),s("ul",{staticClass:"dito-scroll"},t._l(t.views,function(n){return s("li",[t.shouldRender(n)?s("router-link",{staticClass:"dito-link",attrs:{to:"/"+n.path,"active-class":"dito-active"}},[t._v(t._s(t.getLabel(n)))]):t._e()],1)}),0)])},Xa=[],vd="";const Ya=v.component("dito-menu",{}),Le={};var Za=p(Ya,Ga,Xa,!1,tr,null,null,null);function tr(t){for(let e in Le)this[e]=Le[e]}var er=function(){return Za.exports}(),sr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"show",rawName:"v-show",value:t.loading,expression:"loading"}],staticClass:"v-spinner"},[s("div",{staticClass:"v-pulse v-pulse1",style:[t.spinnerStyle,t.spinnerDelay1]}),s("div",{staticClass:"v-pulse v-pulse2",style:[t.spinnerStyle,t.spinnerDelay2]}),s("div",{staticClass:"v-pulse v-pulse3",style:[t.spinnerStyle,t.spinnerDelay3]})])},nr=[],gd="";const ar={name:"PulseLoader",props:{loading:{type:Boolean,default:!0},color:{type:String,default:"#5dc596"},size:{type:String,default:"15px"},margin:{type:String,default:"2px"},radius:{type:String,default:"100%"}},data(){return{spinnerStyle:{backgroundColor:this.color,width:this.size,height:this.size,margin:this.margin,borderRadius:this.radius,display:"inline-block",animationName:"v-pulseStretchDelay",animationDuration:"0.75s",animationIterationCount:"infinite",animationTimingFunction:"cubic-bezier(.2,.68,.18,1.08)",animationFillMode:"both"},spinnerDelay1:{animationDelay:"0.12s"},spinnerDelay2:{animationDelay:"0.24s"},spinnerDelay3:{animationDelay:"0.36s"}}}},Be={};var rr=p(ar,sr,nr,!1,ir,null,null,null);function ir(t){for(let e in Be)this[e]=Be[e]}var or=function(){return rr.exports}(),lr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("nav",{staticClass:"dito-header"},[s("div",{staticClass:"dito-trail"},[s("ul",t._l(t.trail,function(n,a){return s("li",[a===t.trail.length-1?[s("span",{class:t.getBreadcrumbClass(n)},[t._v(t._s(n.breadcrumb))])]:s("router-link",{staticClass:"dito-breadcrumb",attrs:{to:n.path}},[s("span",{class:t.getBreadcrumbClass(n)},[t._v(t._s(n.breadcrumb))])])],2)}),0),t.isLoading?s("spinner",{staticClass:"dito-spinner"}):t._e()],1),t._t("default")],2)},ur=[],bd="";const Fe=v.component("spinner",or),cr=v.component("dito-header",{components:{Spinner:Fe},props:{spinner:{type:Object,default:null},isLoading:{type:Boolean,default:!1}},computed:{trail(){return this.appState.routeComponents.filter(t=>!!t.routeRecord)}},created(){const{size:t="8px",color:e="#999"}=this.spinner||{},{props:s}=Fe.options;s.size.default=t,s.color.default=e},methods:{getBreadcrumbClass(t){return{"dito-dirty":t.isDirty}}}}),Te={};var dr=p(cr,lr,ur,!1,hr,null,null,null);function hr(t){for(let e in Te)this[e]=Te[e]}var pr=function(){return dr.exports}(),Re={mixins:[tt],data(){return{pulldown:{open:!1,startTime:0,checkTime:!0,events:{mousedown:()=>{this.setPulldownOpen(!1),this.pulldown.handlers.remove()},mouseup:()=>{this.onPulldownMouseUp(null)&&this.pulldown.handlers.remove()}},handlers:null}}},methods:{onPulldownMouseDown(t){t?this.checkTime=!1:(this.setPulldownOpen(!0),this.checkTime=!0)},onPulldownMouseUp(t){const{startTime:e}=this.pulldown;if(!this.checkTime||e&&Date.now()-e>250)return this.setPulldownOpen(!1),t&&this.onPulldownSelect(t),!0},onPulldownSelect(){},setPulldownOpen(t){this.pulldown.open=t,this.pulldown.startTime=t?Date.now():0,t&&(this.pulldown.handlers=this.domOn(document,this.pulldown.events))}}},mr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-account"},[s("a",{on:{mousedown:function(n){return n.stopPropagation(),t.onPulldownMouseDown()}}},[s("span",[t._v(t._s(t.user.username))])]),s("ul",{staticClass:"dito-pulldown",class:{"dito-open":t.pulldown.open}},t._l(t.items,function(n,a){return s("li",[s("a",{on:{mousedown:function(r){return r.stopPropagation(),t.onPulldownMouseDown(a)},mouseup:function(r){return t.onPulldownMouseUp(a)}}},[t._v(t._s(n))])])}),0)])},fr=[],yd="";const _r=v.component("dito-account",{mixins:[Re],data(){return{items:{settings:"Settings",logout:"Logout"}}},methods:{onPulldownSelect(t){switch(t){case"logout":this.rootComponent.logout();break;case"settings":console.info("TODO: Implement Settings");break}}}}),Ie={};var vr=p(_r,mr,fr,!1,gr,null,null,null);function gr(t){for(let e in Ie)this[e]=Ie[e]}var br=function(){return vr.exports}(),yr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("form",{staticClass:"dito-dialog",on:{submit:function(n){n.preventDefault()}}},[s("dito-schema",{staticClass:"dito-scroll",attrs:{schema:t.schema,data:t.dialogData}},[s("dito-buttons",{staticClass:"dito-buttons-large",attrs:{slot:"buttons",buttons:t.buttonSchemas,data:t.dialogData},slot:"buttons"})],1)],1)},$r=[],$d="";const Cr=v.component("dito-dialog",{provide(){return{$dialogComponent:()=>this}},props:{components:{type:Object,required:!0},buttons:{type:Object,required:!0},promise:{type:Object,required:!0},data:{type:Object,default:()=>({})}},data(){const t=nt(this.data);for(const e in this.components)e in t||(t[e]=null);return{windowEvents:null,dialogData:t}},computed:{dialogComponent(){return this},name(){return this.$parent.name},schema(){return{components:this.components}},buttonSchemas(){return Object.entries(it(this.buttons)).reduce((t,[e,s])=>{const{type:n,events:a}=s;if(!a){const r=n==="submit"?()=>this.accept():e==="cancel"?()=>this.cancel():null;r&&(s=S(d({},s),{events:{click:r}}))}return t[e]=s,t},{})},hasCancel(){return Object.keys(this.buttonSchemas).includes("cancel")}},mounted(){this.windowEvents=Xt(window,{keyup:()=>{event.keyCode===27&&this.cancel()}})},destroyed(){this.windowEvents.remove()},methods:{hide(){this.$modal.hide(this.name)},resolve(t){this.promise.resolve(t),this.hide()},reject(t){this.promise.reject(t),this.hide()},accept(){this.resolve(this.dialogData)},cancel(){this.hasCancel&&this.resolve(null)}}}),qe={};var Dr=p(Cr,yr,$r,!1,wr,null,null,null);function wr(t){for(let e in qe)this[e]=qe[e]}var Pr=function(){return Dr.exports}(),xr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.content?s(t.options.tag||t.tag,{tag:"component",class:t.classes,style:t.styles},[t._v(t._s(t.options.text))]):t._e()},Sr=[];const Or=v.component("dito-element",{props:{tag:{type:String,default:"span"},content:{type:[String,Object]}},computed:{options(){const{content:t}=this;return C(t)?t:{text:t}},classes(){return d(d({},this.$attrs.class),Me(this.options.class))},styles(){return d(d({},this.$attrs.style),Me(this.options.style))}}});function Me(t){return T(t).reduce((e,s)=>(V(s)?e[s]=!0:C(s)&&Object.assign(e,s),e),{})}const Ae={};var Er=p(Or,xr,Sr,!1,jr,null,null,null);function jr(t){for(let e in Ae)this[e]=Ae[e]}var Vr=function(){return Er.exports}(),kr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.text||t.collapsible?s(t.tag,t._g({tag:"component",staticClass:"dito-label",class:{"dito-active":t.isActive}},t.listeners),[t.collapsible?s("div",{staticClass:"dito-chevron",class:{"dito-opened":!t.collapsed}}):t._e(),t._l(t.prefixes,function(n,a){return s("dito-element",{key:"prefix-"+a,staticClass:"dito-label-prefix",attrs:{tag:"span",content:n}})}),s("label",{attrs:{for:t.dataPath},domProps:{innerHTML:t._s(t.text)}}),t._l(t.suffixes,function(n,a){return s("dito-element",{key:"suffix-"+a,staticClass:"dito-label-suffix",attrs:{tag:"span",content:n}})}),t._t("edit-buttons")],2):t._e()},Lr=[],Cd="";const Br=v.component("dito-label",{props:{label:{type:[String,Object],default:null},dataPath:{type:String,default:null},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1}},computed:{tag(){return this.collapsible?"a":"div"},text(){const{label:t}=this;return C(t)?t==null?void 0:t.text:t},prefixes(){var t;return T((t=this.label)==null?void 0:t.prefix)},suffixes(){var t;return T((t=this.label)==null?void 0:t.suffix)},listeners(){return d({},this.collapsible&&{click:this.onClick})},isActive(){return this.appState.activeLabel===this}},methods:{onClick(){this.appState.activeLabel=this,this.$emit("expand",this.collapsed)}}}),Ne={};var Fr=p(Br,kr,Lr,!1,Tr,null,null,null);function Tr(t){for(let e in Ne)this[e]=Ne[e]}var Rr=function(){return Fr.exports}(),Mt={methods:{getItemFormSchema:Rt,getItemUid:Ia,getItemId(t,e,s=null){return this.isTransient&&s!==null?String(s):xe(t,e)},getItemDataPath(t,e){let{dataPath:s}=this;return t!==this.schema&&(s=B(s,t.name)),e!=null&&(s=B(s,e)),s},findItemIdIndex(t,e,s){const n=this.isTransient?s:e==null?void 0:e.findIndex((a,r)=>this.getItemId(t,a,r)===s);return n!==-1?n:null},getItemLabel(t,e,{index:s=null,extended:n=!1,asObject:a=!1}={}){const{itemLabel:r}=t;if(!e||!n&&r===!1)return null;let i;const o=()=>i||(i=this.getItemDataPath(t,s));let u;const l=()=>u||(u=this.getLabel(Rt(t,e,this.context)));let c,_,f;if(b(r)){const m=r.call(this,new O(this,{nested:!1,data:e,value:e,index:s,get dataPath(){return o()},get formLabel(){return l()}}));C(m)?{text:c,prefix:_,suffix:f}=m:c=m,n=!1}else{const{columns:m}=t,w=V(r)&&r||Z(t)&&m&&Object.keys(m)[0]||"name";c=e[w]}const y=!!c;if(c=c||"",c||(n=!0,Z(t)&&s!==null&&(c=`${s+1}`)),n){const m=l();m&&(c=`${m} ${y?`'${c}'`:c}`)}return a?{text:c,prefix:_,suffix:f}:c}}},Ir=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-schema"},[s("div",{staticClass:"dito-schema-content"},[t.hasLabel||t.hasTabs||t.clipboard?s("div",{staticClass:"dito-schema-header",class:{"dito-schema-menu-header":t.menuHeader}},[t.hasLabel?s("dito-label",{attrs:{label:t.label,dataPath:t.dataPath,collapsible:t.collapsible,collapsed:!t.opened},on:{expand:t.onExpand},scopedSlots:t._u([t.inlined?{key:"edit-buttons",fn:function(){return[t._t("edit-buttons")]},proxy:!0}:null],null,!0)}):t._e(),t.tabs?s("dito-tabs",{attrs:{tabs:t.tabs,selectedTab:t.selectedTab}}):t._e(),s("dito-clipboard",{attrs:{clipboard:t.clipboard,dataPath:t.dataPath,data:t.data}})],1):t._e(),t._l(t.tabs,function(n,a){return t.hasTabs?s("dito-pane",{key:a,ref:"tabs",refInFor:!0,staticClass:"dito-pane-tab",attrs:{visible:t.selectedTab===a,tab:a,schema:n,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:!t.inlined&&!t.hasMainPane,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e()}),s("transition-height",{attrs:{enabled:t.inlined}},[t.hasMainPane&&t.opened?s("dito-pane",{ref:"components",staticClass:"dito-pane-main",attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:!t.inlined&&!t.hasTabs,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e()],1),!t.inlined&&t.isPopulated?t._t("buttons"):t._e()],2),t.inlined?[t.hasLabel?t._e():t._t("edit-buttons")]:t.isPopulated?[s("dito-panels",{attrs:{panels:t.panelSchemas,data:t.data,meta:t.meta,store:t.store,disabled:t.disabled}})]:t._e()],2)},qr=[],Dd="";const Mr=v.component("dito-schema",{components:{TransitionHeight:dn},mixins:[Mt],provide(){return{$schemaComponent:()=>this}},inject:["$schemaParentComponent"],props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},label:{type:[String,Object],default:null},inlined:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!0},hasOwnData:{type:Boolean,default:!1},menuHeader:{type:Boolean,default:!1}},data(){const{data:t}=this.schema;return S(d({},t&&b(t)?t.call(this,this.context):t),{componentsRegistry:{},panesRegistry:{},panelsRegistry:{}})},computed:{schemaComponent(){return this},parentSchemaComponent(){return this.hasOwnData?null:this.$parent.schemaComponent},panelSchemas(){const t=we(this.schema.panels,"");for(const e of this.panes)t.push(...e.panelSchemas);return t},tabs(){return K(this.schema.tabs)},selectedTab(){var s,n;const t=((s=this.$route.hash)==null?void 0:s.slice(1))||null,e=t&&this.shouldRender(this.tabs[t])?t:((n=this.defaultTab)==null?void 0:n.name)||null;return e!==t&&this.$router.replace({hash:e}),e},defaultTab(){if(this.tabs){let t=null;for(const e of Object.values(this.tabs)){const{defaultTab:s}=e;if(b(s)?s.call(this,this.context):s)return e;t||(t=e)}return t}},clipboard(){var t;return(t=this.schema)==null?void 0:t.clipboard},processedData(){return this.processData({target:"server",schemaOnly:!0})},clipboardData(){return d({$schema:this.schema.name},this.processData({target:"clipboard",schemaOnly:!0}))},item(){return this.data},rootItem(){return this.rootData},processedItem(){return this.processedData},clipboardItem(){return this.clipboardData},parentItem(){return wt(this.rootData,this.dataPath,!1)},formLabel(){return this.getLabel(this.getItemFormSchema(this.sourceSchema,this.data,this.context))},isDirty(){return this.someComponent(t=>t.isDirty)},isTouched(){return this.someComponent(t=>t.isTouched)},isValid(){return this.everyComponent(t=>t.isValid)},isValidated(){return this.everyComponent(t=>t.isValidated)},hasData(){return!!this.data},hasLabel(){return!!this.label||this.collapsible},hasTabs(){return!this.inlined&&!!this.tabs},hasMainPane(){const{components:t}=this.schema;return!!t&&Object.keys(t).length>0},opened:Vt("opened",{default(){return!this.collapsed}}),components(){return Object.values(this.componentsRegistry)},panes(){return Object.values(this.panesRegistry)},panels(){return Object.values(this.panelsRegistry)},componentsByDataPath(){return this._listEntriesByDataPath(this.componentsRegistry)},panesByDataPath(){return this._listEntriesByDataPath(this.panesRegistry)},panelsByDataPath(){return this._listEntriesByDataPath(this.panelsRegistry)}},created(){this._register(!0),this.setupSchemaFields(),this.delegate("change",this.parentSchemaComponent),this.emitEvent("initialize")},beforeDestroy(){this.emitEvent("destroy"),this._register(!1)},methods:{getComponentsByDataPath(t,e){return this._getEntriesByDataPath(this.componentsByDataPath,t,e)},getComponentByDataPath(t,e){return this.getComponentsByDataPath(t,e)[0]||null},getComponentsByName(t,e){return this._getEntriesByName(this.componentsByDataPath,t,e)},getComponentByName(t,e){return this.getComponentsByName(t,e)[0]||null},getComponents(t,e){return this._getEntries(this.componentsByDataPath,t,e)},getComponent(t,e){return this.getComponents(t,e)[0]||null},getPanelsByDataPath(t,e){return this._getEntriesByDataPath(this.panelsByDataPath,t,e)},getPanelByDataPath(t,e){return this.getPanelsByDataPath(t,e)[0]||null},getPanels(t,e){return this._getEntries(this.panelsByDataPath,t,e)},getPanel(t,e){return this.getPanels(t,e)[0]||null},someComponent(t){return this.isPopulated&&this.components.some(t)},everyComponent(t){return this.isPopulated&&this.components.every(t)},onExpand(t){this.emitEvent("expand",{context:{expand:t}}),(!this.opened||t||this.validateAll())&&(this.opened=t)},onChange(){this.emitEvent("change")},resetValidation(){for(const t of this.components)t.resetValidation()},clearErrors(){for(const t of this.components)t.clearErrors()},focus(){var t;(t=this.parentSchemaComponent)==null||t.focus(),this.opened=!0},validateAll(t,e=!0){const{componentsByDataPath:s}=this;let n;if(t){const i=b(t)?t:ft(t)?o=>t.test(o):null;n=i?Object.keys(s).filter(i):x(t)?t:[t]}e&&this.clearErrors();let a=!0,r=!0;n||(n=Object.keys(s));for(const i of n){const o=this.getComponentsByDataPath(i);for(const u of o)u.validate(e)||(e&&r&&u.focus(),r=!1,a=!1)}return e&&!a&&this.notifyErrors(),a},verifyAll(t){return this.validateAll(t,!1)},async showValidationErrors(t,e){var a;this.clearErrors();let s=!0;const n=[];for(const[r,i]of Object.entries(t)){const o=this.hasOwnData?B(this.dataPath,r):r,u=N(o);let l=!1;const c=this.getComponentsByDataPath(u);for(const _ of c)_.showValidationErrors(i,s&&e)&&(l=!0,s=!1);if(!l){const _=u.pop();for(;u.length>0;){const y=this.getComponentsByDataPath(u);for(const m of y)if(await((a=m.navigateToComponent)==null?void 0:a.call(m,o,w=>{let j=!1;for(const P of w){const g=t[P.dataPath];g&&P.showValidationErrors(g,s&&e)&&(j=!0,s=!1)}return j})))return;u.pop()}const f=U(_);for(const y of i){const m=f?`The field ${f}`:`The ${this.formLabel}`;n.push(`${m} ${y.message}`)}}s=!1}s||this.notifyErrors(n.join(`
2
+ `))},notifyErrors(t){this.notify({type:"error",title:"Validation Errors",text:t||"Please correct the highlighted errors."})},resetData(){Object.assign(this.data,ge(this.schema,{},this)),this.clearErrors()},setData(t){for(const e in t)if(e in this.data){this.$set(this.data,e,t[e]);for(const s of this.getComponentsByName(e))s.markDirty()}},filterData(t){const e={};for(const[s,n]of Object.entries(t))(x(n)||C(n))&&this.getComponentsByName(s).some(r=>r.providesData)||(e[s]=n);return e},processData({target:t="clipboard",schemaOnly:e=!0}={}){return Ra(this.schema,this.sourceSchema,this.data,this.dataPath,{component:this,schemaOnly:e,target:t})},_register(t){var e;(e=this.$schemaParentComponent())==null||e._registerSchemaComponent(this,t)},_registerComponent(t,e){var s;this._registerEntry(this.componentsRegistry,t,e),(s=this.parentSchemaComponent)==null||s._registerComponent(t,e)},_registerPane(t,e){this._registerEntry(this.panesRegistry,t,e)},_registerPanel(t,e){this._registerEntry(this.panelsRegistry,t,e)},_registerEntry(t,e,s){const n=e.$uid;s?this.$set(t,n,e):this.$delete(t,n)},_listEntriesByDataPath(t){return Object.values(t).reduce((e,s)=>{const{dataPath:n}=s;return(e[n]||(e[n]=[])).push(s),e},{})},_getEntries(t,e,s){return z(e).startsWith(this.dataPath)?this._getEntriesByDataPath(t,e,s):this._getEntriesByName(t,e,s)},_getEntriesByDataPath(t,e,s){return this._filterEntries(t[z(e)]||[],s)},_getEntriesByName(t,e,s){return this._filterEntries(t[B(this.dataPath,e)]||[],s)},_filterEntries(t,e){return e?t.filter(e):t}}}),Ue={};var Ar=p(Mr,Ir,qr,!1,Nr,null,null,null);function Nr(t){for(let e in Ue)this[e]=Ue[e]}var Ur=function(){return Ar.exports}(),zr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-schema",{staticClass:"dito-schema-inlined",class:{"dito-schema-compact":t.isCompact},attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,label:t.isCompact?null:t.label,inlined:!0,disabled:t.disabled,collapsed:t.collapsed,collapsible:t.collapsible},scopedSlots:t._u([{key:"edit-buttons",fn:function(){return[t.deletable||t.draggable||t.editable?s("dito-edit-buttons",{attrs:{deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.editPath,schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store},on:{delete:function(n){return t.$emit("delete")}}}):t._e()]},proxy:!0}])})},Hr=[],wd="";const Kr=v.component("dito-schema-inlined",{props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},label:{type:[String,Object],default:null},disabled:{type:Boolean,required:!0},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null}},computed:{isCompact(){return me(this.schema)},hasLabel(){return!this.isCompact&&!!this.label}}}),ze={};var Wr=p(Kr,zr,Hr,!1,Jr,null,null,null);function Jr(t){for(let e in ze)this[e]=ze[e]}var Qr=function(){return Wr.exports}(),Gr=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isPopulated&&t.componentSchemas.length>0?s("div",{directives:[{name:"show",rawName:"v-show",value:t.visible,expression:"visible"}],staticClass:"dito-pane"},[t._l(t.componentSchemas,function(n){var a=n.schema,r=n.dataPath,i=n.nestedDataPath,o=n.nested,u=n.store;return[a.break==="before"?s("div",{staticClass:"dito-break"}):t._e(),t.shouldRender(a)?s("dito-container",{key:i,attrs:{schema:a,dataPath:r,data:t.data,meta:t.meta,store:u,single:t.isSingleComponent,nested:o,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e(),a.break==="after"?s("div",{staticClass:"dito-break"}):t._e()]})],2):t._e()},Xr=[],Pd="";const Yr=v.component("dito-pane",{provide(){return{$tabComponent:()=>this.tabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0},tab:{type:String,default:null},single:{type:Boolean,default:!1},visible:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!0}},computed:{tabComponent(){return this.tab?this:this.$tabComponent()},componentSchemas(){var e,s;const t=(e=this.sourceSchema)==null?void 0:e.wrapPrimitives;return Object.entries(((s=this.schema)==null?void 0:s.components)||{}).map(([n,a])=>{a.name=n;const r=fe(a),i=B(this.dataPath,n);return{schema:a,dataPath:r&&!t?i:this.dataPath,nestedDataPath:i,nested:r,store:r?this.getChildStore(n):this.store}})},panelSchemas(){return this.componentSchemas.flatMap(({schema:t,nestedDataPath:e})=>Pe(t,e,this.schemaComponent,this.tabComponent))},isSingleComponent(){return this.single&&this.componentSchemas.length===1}},created(){this._register(!0)},beforeDestroy(){this._register(!1)},methods:{_register(t){this.schemaComponent._registerPane(this,t)},focus(){this.tab&&this.$router.push({hash:this.tab})}}}),He={};var Zr=p(Yr,Gr,Xr,!1,ti,null,null,null);function ti(t){for(let e in He)this[e]=He[e]}var ei=function(){return Zr.exports}();function si(t){const e=V(t)&&t.match(/^\s*([+-]?\d+)\s*\/\s*([+-]?\d+)\s*$/);if(e){const[,s,n]=e;return parseFloat(s)/parseFloat(n)}else return parseFloat(t)}var ni=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{directives:[{name:"show",rawName:"v-show",value:t.componentVisible,expression:"componentVisible"}],staticClass:"dito-container",class:t.containerClass,style:t.containerStyle},[t.label?s("dito-label",{class:t.componentClass,attrs:{label:t.label,dataPath:t.labelDataPath}}):t._e(),s(t.getTypeComponent(t.schema.type),{tag:"component",staticClass:"dito-component",class:t.componentClass,attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,single:t.single,nested:t.nested,disabled:t.componentDisabled},on:{errors:t.onErrors}}),s("dito-errors",{attrs:{errors:t.errors}})],1)},ai=[],xd="";const ri=v.component("dito-container",{props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,required:!0},generateLabels:{type:Boolean,default:!0}},data(){return{errors:null}},computed:{context(){return new O(this,{nested:this.nested})},typeOptions(){return q(this.schema)||{}},hasLabel(){const{schema:t}=this,{label:e}=t;return e!==!1&&(!!e||this.typeOptions.generateLabel&&this.generateLabels)},label(){return this.hasLabel?this.getLabel(this.schema):null},labelDataPath(){return this.nested?this.dataPath:null},componentWidth:h("width",{type:[String,Number],default(){return this.typeOptions.defaultWidth},get(t){return t===void 0?1:V(t)?t.match(/^\s*[<>]?\s*(.*)$/)[1]:t}}),componentWidthOperator:h("width",{type:String,get(t){return V(t)&&t.match(/^\s*([<>]?)/)[1]||null}}),componentVisible:h("visible",{type:Boolean,default(){return this.typeOptions.defaultVisible}}),componentDisabled:h("disabled",{type:Boolean,default:!1,get(t){return t||this.disabled}}),containerClass(){const{class:t}=this.schema;return d({"dito-single":this.single,"dito-omit-padding":Fa(this.schema)},V(t)?{[t]:!0}:t)},componentBasis(){const t=this.componentWidth,e=[null,"auto","fill"].includes(t)?"auto":/%$/.test(t)?parseFloat(t):/[a-z]/.test(t)?t:si(t)*100;return st(e)?`${e}%`:e},containerStyle(){const t=this.componentWidthOperator===">"||this.componentWidth==="fill",e=this.componentWidthOperator==="<";return{flex:`${t?1:0} ${e?1:0} ${this.componentBasis}`}},componentClass(){const t=this.componentBasis==="auto";return{"dito-single":this.single,"dito-disabled":this.componentDisabled,"dito-width-fill":!t||this.componentWidth==="fill","dito-width-auto":t,"dito-has-errors":!!this.errors}}},methods:{onErrors(t){this.errors=t}}}),Ke={};var ii=p(ri,ni,ai,!1,oi,null,null,null);function oi(t){for(let e in Ke)this[e]=Ke[e]}var li=function(){return ii.exports}(),ui=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tabs"},t._l(t.tabs,function(n,a){return t.shouldRender(n)?s("router-link",{key:a,staticClass:"dito-link",attrs:{to:{hash:a},"active-class":"dito-active"}},[t._v(t._s(t.getLabel(n,a)))]):t._e()}),1)},ci=[],Sd="";const di=v.component("dito-tabs",{props:{tabs:{type:Object,default:null},selectedTab:{type:String,default:null}}}),We={};var hi=p(di,ui,ci,!1,pi,null,null,null);function pi(t){for(let e in We)this[e]=We[e]}var mi=function(){return hi.exports}(),fi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s(t.panelTag,{directives:[{name:"show",rawName:"v-show",value:t.visible&&(!t.panelTabComponent||t.panelTabComponent.visible),expression:"visible && (!panelTabComponent || panelTabComponent.visible)"}],tag:"component",staticClass:"dito-panel",on:{submit:function(n){n.preventDefault()}}},[s("label",{staticClass:"dito-panel-title"},[t._v(t._s(t.getLabel(t.schema)))]),s("dito-schema",{staticClass:"dito-panel-schema",attrs:{schema:t.panelSchema,dataPath:t.panelDataPath,data:t.panelData,meta:t.meta,store:t.store,disabled:t.disabled,hasOwnData:t.hasOwnData}},[s("dito-buttons",{attrs:{slot:"buttons",buttons:t.buttonSchemas,dataPath:t.panelDataPath,data:t.panelData,meta:t.meta,store:t.store,disabled:t.disabled},slot:"buttons"})],1)],1)},_i=[],Od="";const vi=v.component("dito-panel",{mixins:[Oe],provide(){return{$panelComponent:()=>this,$tabComponent:()=>this.panelTabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0},panelTabComponent:{type:v,default:null}},data(){return{ownData:null}},computed:{panelComponent(){return this},tabComponent(){return this.panelTabComponent},buttonSchemas(){return it(this.schema.buttons)},target(){return this.schema.target||this.dataPath},hasOwnData(){return!!this.ownData},panelData(){return this.ownData||this.data},panelSchema(){if(this.hasOwnData)return this.schema;{const t=this.schema,{data:e}=t;return F(t,["data"])}},panelTag(){return this.hasOwnData?"form":"div"},panelDataPath(){return this.hasOwnData?this.dataPath:this.schemaComponent.dataPath},visible:h("visible",{type:Boolean,default:!0})},created(){this._register(!0);const{data:t}=this.schema;t&&(this.ownData=b(t)?t.call(this,this.context):t)},beforeDestroy(){this._register(!1)},methods:{_register(t){this.schemaComponent._registerPanel(this,t)}}}),Je={};var gi=p(vi,fi,_i,!1,bi,null,null,null);function bi(t){for(let e in Je)this[e]=Je[e]}var yi=function(){return gi.exports}(),$i=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.panels.length>0?s("div",{staticClass:"dito-panels"},t._l(t.panels,function(n){var a=n.schema,r=n.dataPath,i=n.tabComponent;return t.shouldRender(a)?s("dito-panel",{key:t.getPanelKey(r,i),attrs:{schema:a,dataPath:r,data:t.data,meta:t.meta,store:t.getChildStore(a.name),disabled:a.disabled!=null?a.disabled:t.disabled,panelTabComponent:i}}):t._e()}),1):t._e()},Ci=[],Ed="";const Di=v.component("dito-panels",{props:{panels:{type:Array,default:null},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0}},methods:{getPanelKey(t,e){return e?`${e.tab}_${t}`:t}}}),Qe={};var wi=p(Di,$i,Ci,!1,Pi,null,null,null);function Pi(t){for(let e in Qe)this[e]=Qe[e]}var xi=function(){return wi.exports}(),Si=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.buttonSchemas||t.$slots.default?s("div",t._g({staticClass:"dito-buttons"},t.$listeners),[t._l(t.buttonSchemas,function(n,a){return t.shouldRender(n)?s("dito-container",{key:a,attrs:{schema:n,dataPath:a,data:t.data,meta:t.meta,store:t.getChildStore(n.name),disabled:t.disabled,generateLabels:!1}}):t._e()}),t._l(t.$slots.default,function(n){return n.tag?s("div",{staticClass:"dito-container"},[s("dito-vnode",{attrs:{node:n}})],1):t._e()})],2):t._e()},Oi=[],jd="";const Ei=v.component("dito-buttons",{provide:{$tabComponent:()=>null},props:{buttons:{type:Object,default:null},dataPath:{type:String,default:""},data:{type:[Object,Array],default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},disabled:{type:Boolean,default:!1}},computed:{buttonSchemas(){const{dataPath:t,buttons:e}=this;return e?Object.values(e).reduce((s,n)=>(s[B(t,n.name)]=n,s),{}):null}}}),Ge={};var ji=p(Ei,Si,Oi,!1,Vi,null,null,null);function Vi(t){for(let e in Ge)this[e]=Ge[e]}var ki=function(){return ji.exports}(),Li=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-buttons",{staticClass:"dito-edit-buttons dito-buttons-round",attrs:{buttons:t.buttons,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store},on:{click:function(n){n.stopPropagation()}}},[t.isDraggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.isEditable?s("router-link",t._b({staticClass:"dito-button",attrs:{to:{path:t.editPath},append:""}},"router-link",t.getButtonAttributes(t.verbs.edit),!1)):t._e(),t.isCreatable?s("dito-create-button",{attrs:{schema:t.schema,path:t.createPath,verb:t.verbs.create,text:t.createButtonText}}):t._e(),t.isDeletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){return t.$emit("delete")}}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()],1)},Bi=[],Vd="";const Fi=v.component("dito-edit-buttons",{props:{draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},creatable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null},createPath:{type:String,default:null},buttons:{type:Object,default:null},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0}},computed:{formLabel(){return this.getLabel(this.schema.form)},isDraggable(){return this.hasOption("draggable")},isEditable(){return this.hasOption("editable")&&!!this.editPath},isCreatable(){return this.hasOption("creatable")&&!!this.createPath},isDeletable(){return this.hasOption("deletable")},createButtonText(){var t;return((t=this.schema.creatable)==null?void 0:t.label)||this.formLabel&&`${G(this.verbs.create)} ${this.formLabel}`||null}},methods:{hasOption(t){return!!(this[t]&&this.schema[t]!==!1)}}}),Xe={};var Ti=p(Fi,Li,Bi,!1,Ri,null,null,null);function Ri(t){for(let e in Xe)this[e]=Xe[e]}var Ii=function(){return Ti.exports}(),qi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-create-button"},[t.showPulldown?[s("button",{staticClass:"dito-button",class:"dito-button-"+t.verb,attrs:{type:"button",title:t.labelize(t.verb)},on:{mousedown:function(n){return n.stopPropagation(),t.onPulldownMouseDown()}}},[t._v(t._s(t.text))]),s("ul",{staticClass:"dito-pulldown",class:{"dito-open":t.pulldown.open}},t._l(t.forms,function(n,a){return s("li",[t.isCreatable(n)?s("a",{class:"dito-type-"+a,on:{mousedown:function(r){return r.stopPropagation(),t.onPulldownMouseDown(a)},mouseup:function(r){return t.onPulldownMouseUp(a)}}},[t._v(t._s(t.getLabel(n)))]):t._e()])}),0)]:s("button",{staticClass:"dito-button",class:"dito-button-"+t.verb,attrs:{type:t.isInlined?"button":"submit",title:t.labelize(t.verb)},on:{click:function(n){return t.createItem(t.forms.default)}}},[t._v(t._s(t.text))])],2)},Mi=[],kd="";const Ai=v.component("dito-create-button",{mixins:[Re],props:{schema:{type:Object,required:!0},path:{type:String,required:!0},verb:{type:String,required:!0},text:{type:String,default:null}},computed:{forms(){return X(this.schema,this.context)},isInlined(){return It(this.schema)},showPulldown(){return Object.keys(this.forms).length>1||!this.forms.default}},methods:{isCreatable(t){return t.creatable!==!1},createItem(t,e=null){if(this.isCreatable(t))this.isInlined?this.sourceComponent.createItem(t,e):this.$router.push({path:`${this.path}/create`,query:{type:e},append:!0});else throw new Error("Not allowed to create item for given form")},onPulldownSelect(t){this.createItem(this.forms[t],t),this.setPulldownOpen(!1)}}}),Ye={};var Ni=p(Ai,qi,Mi,!1,Ui,null,null,null);function Ui(t){for(let e in Ye)this[e]=Ye[e]}var zi=function(){return Ni.exports}(),Hi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.clipboard?s("div",{staticClass:"dito-clipboard dito-buttons dito-buttons-round"},[s("button",{ref:"copyData",staticClass:"dito-button dito-button-copy",attrs:{type:"button",title:"Copy Data",disabled:!t.copyEnabled},on:{click:t.onCopy}}),s("button",{staticClass:"dito-button dito-button-paste",attrs:{type:"button",title:"Paste Data",disabled:!t.pasteEnabled},on:{click:t.onPaste}})]):t._e()},Ki=[];const Wi=v.component("dito-clipboard",{mixins:[tt],props:{clipboard:{type:[Boolean,Object],default:!1},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null}},data(){return{copyEnabled:!1,pasteEnabled:!1,fixClipboard:!0}},computed:{clipboardOptions(){return C(this.clipboard)?this.clipboard:{}},copyData(){const{copy:t}=this.clipboardOptions;return t?e=>t.call(this,new O(this,{clipboardData:e})):e=>nt(e)},pasteData(){const{paste:t}=this.clipboardOptions;return t?e=>t.call(this,new O(this,{clipboardData:e})):e=>e}},mounted(){this.domOn(document,{copy:this.checkClipboard}),this.domOn(window,{focus:this.checkClipboard}),this.$watch("data",{immediate:!0,handler:(t,e)=>{t!==e&&this.checkClipboard()}})},methods:{async getClipboardData(t){var a,r,i,o,l;let{clipboardData:e}=this.appState;try{const c=await((r=(a=navigator.clipboard)==null?void 0:a.readText)==null?void 0:r.call(a));this.fixClipboard&&c&&(await((o=(i=navigator.clipboard)==null?void 0:i.writeText)==null?void 0:o.call(i,c)),this.fixClipboard=!1),c&&(e=JSON.parse(c))}catch(c){t&&(console.error(c,c.name,c.message),c.name==="SyntaxError"&&alert(nn`
3
3
  The data in the clipboard appears to be malformed:
4
4
  ${c.message}
5
- `))}const u=e||{},{$schema:s}=u,n=F(u,["$schema"]);return s===((l=this.schemaComponent)==null?void 0:l.schema.name)?n:null},async checkClipboard(){this.copyEnabled=!!this.data,this.pasteEnabled=!!await this.getClipboardData(!1)},async onCopy(){var e,s,n;let t=(e=this.schemaComponent)==null?void 0:e.clipboardData;try{t=t&&this.copyData(t),this.appState.clipboardData=t;try{const a=JSON.stringify(t,null,2);await((n=(s=navigator.clipboard)==null?void 0:s.writeText)==null?void 0:n.call(s,a)),await this.checkClipboard()}catch(a){console.error(a,a.name,a.message)}}catch(a){console.error(a),alert(a.message)}},async onPaste(){let t=await this.getClipboardData(!0);try{t=t&&this.pasteData(t),t&&this.schemaComponent.setData(t)}catch(e){console.error(e),alert(e.message)}}}}),Ze={};var Ji=p(Wi,Hi,Ki,!1,Qi,null,null,null);function Qi(t){for(let e in Ze)this[e]=Ze[e]}var Gi=function(){return Ji.exports}(),ts={data(){return{isLoading:!1}},methods:{setLoading(t,{updateRoot:e=!1,updateView:s=!1}={}){!this.isLoading^!t&&(this.isLoading=!!t,e&&this.rootComponent.registerLoading(t),s&&this.viewComponent.setLoading(this.isLoading))}}},es={mixins:[Mt,ts],provide(){return{$resourceComponent:()=>this,$verbs:()=>this.verbs,$isPopulated:()=>this.hasData}},data(){return{loadedData:null}},computed:{resourceComponent(){return this},resource(){return this.getResource()},providesData(){return!!this.resource},linksToView(){return!1},isTransient(){const t=this.formComponent;return!this.providesData&&!this.linksToView||t&&(t.isTransient||t.isCreating)},transientNote(){return this.isTransient&&"<b>Note</b>: the parent still needs to be saved in order to persist this change."},shouldLoad(){return!this.isTransient&&!this.isLoading},hasData(){return!!this.loadedData},verbs(){return this.getVerbs()},paginationRange(){const{paginate:t}=this.sourceSchema;if(this.isListSource&&t){const{page:e=0}=this.query||{},s=e*t;return[s,s+t-1]}},queryParams(){const t=this.paginationRange,n=this.query||{},{page:e}=n,s=F(n,["page"]);return d(d({},s),t&&{range:t.join(",")})}},created(){(this.providesData||this.isCreating)&&this.setupData()},methods:{getResource(){var t,e,s;return I((t=this.sourceSchema)==null?void 0:t.resource,{type:"collection",parent:(s=(e=this.parentFormComponent)==null?void 0:e.resource)!=null?s:null})},getVerbs(){const t=this.$verbs();return this.isTransient?S(d({},t),{create:"add",created:"added",save:"apply",saved:"applied",delete:"remove",deleted:"removed"}):t},clearData(){this.loadedData=null},setData(t){this.loadedData=t},setupData(){this.ensureData()},ensureData(){this.shouldLoad&&(this.hasData?this.reloadData():this.loadData(!0))},reloadData(){this.loadData(!1)},loadData(t){this.isTransient||(t&&this.clearData(),this.requestData())},createData(t,e){return ge(t,e?{type:e}:{},this)},requestData(){const t=this.queryParams;this.handleRequest({method:"get",params:t},(e,s)=>{var n;if(e){if(s){const{data:a}=s;if((a==null?void 0:a.type)==="FilterValidation"&&((n=this.onFilterErrors)==null?void 0:n.call(this,a.errors)))return!0;if(this.isUnauthorizedError(s))return!0}}else this.setData(s.data),this.emitSchemaEvent("load")})},isValidationError(t){return(t==null?void 0:t.status)===400},isUnauthorizedError(t){return(t==null?void 0:t.status)===401},async handleRequest({method:t,resource:e=this.resource,data:s,params:n},a){const r={updateRoot:!0,updateView:this.isInView};this.setLoading(!0,r);const i={method:t,resource:e,data:s,params:n};try{const o=await this.sendRequest(i);a(null,o)}catch(o){const{response:u}=o;if(!a(o,u)){const l=u==null?void 0:u.data;l&&V(l.type)?this.notify({type:"error",title:U(l.type),text:l.message||o}):this.notify({type:"error",title:"Request Error",text:o})}}this.setLoading(!1,r)},getPayloadData(t,e){return["post","put","patch"].includes(e)&&(t.getSchemaValue(["resource","data"])||t.processedItem)},async submit(t){const e=I(t.schema.resource,{parent:this.resource});if(e){const{method:s}=e,n=this.getPayloadData(t,s);return this.submitResource(t,e,s,n)}return!1},async submitResource(t,e,s,n,{setData:a=!1,onSuccess:r,onError:i,notifySuccess:o=()=>this.notify({type:"success",title:"Request Successful",text:"Request was successfully sent."}),notifyError:u=l=>this.notify({type:"error",title:"Request Error",text:[`Unable to send request${l?":":""}`,(l==null?void 0:l.message)||l]})}={}){return new Promise(l=>{this.handleRequest({method:s,data:n,resource:e},async(c,_)=>{const f=_==null?void 0:_.data;if(c){const y=this.isValidationError(_)&&f.errors;if(y)await this.showValidationErrors(y,!0);else{const m=C(f)?f:c;i==null||i(m),await this.emitButtonEvent(t,"error",{notify:u,error:m})}l(!1)}else a&&f&&this.setData(f),r==null||r(),await this.emitButtonEvent(t,"success",{notify:o}),l(!0)})})},async emitButtonEvent(t,e,{notify:s,error:n}){const a=new O(t,{nested:!1,data:this.data,itemLabel:this.itemLabel,error:n}),r=await t.emitEvent(e,{context:a});return s&&r===void 0&&!a.wasNotified&&s(n),r}}},Xi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-form dito-scroll-parent",class:{"dito-form-nested":t.isNestedRoute}},[t.isLastUnnestedRoute||t.isNestedRoute?t._e():s("router-view",{directives:[{name:"show",rawName:"v-show",value:!t.isActive,expression:"!isActive"}]}),s(t.isNestedRoute?"div":"form",{directives:[{name:"show",rawName:"v-show",value:t.isActive,expression:"isActive"}],tag:"component",staticClass:"dito-scroll",on:{submit:function(n){n.preventDefault()}}},[s("button",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}],attrs:{type:"submit",disabled:"true","aria-hidden":"true"}}),s("dito-schema",{attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,disabled:t.isLoading,menuHeader:!0}},[s("dito-buttons",{staticClass:"dito-buttons-round dito-buttons-main dito-buttons-large",attrs:{slot:"buttons",buttons:t.buttonSchemas,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,disabled:t.isLoading},slot:"buttons"})],1)],1)],1)},Yi=[];const Zi=v.component("dito-form",{mixins:[Ee,es],data(){return{createdData:null,clonedData:void 0,sourceKey:null,isForm:!0}},computed:{verbs(){const t=this.getVerbs(),{isCreating:e,providesData:s}=this;return S(d({},t),{submit:e?t.create:t.save,submitted:e?t.created:t.saved,cancel:s?t.cancel:t.close,cancelled:s?t.cancelled:t.closed})},schema(){return this.getItemFormSchema(this.sourceSchema,this.data||{type:this.type},this.context)||{}},buttonSchemas(){return it(gt({cancel:{type:"button",events:{click:()=>this.cancel()}},submit:!this.doesMutate&&{type:"submit",closeForm:!0,events:{click:({component:t})=>t.submit()}}},this.schema.buttons))},isActive(){return this.isLastRoute||this.isLastUnnestedRoute},isTransient(){return!this.providesData},isCreating(){return this.param==="create"},isDirty(){var t;return!this.doesMutate&&!!((t=this.mainSchemaComponent)!=null&&t.isDirty)},selectedTab(){var t;return((t=this.mainSchemaComponent)==null?void 0:t.selectedTab)||null},doesMutate(){return this.sourceSchema.mutate},type(){return this.$route.query.type},itemId(){var t;return this.isCreating?null:(t=this.param)!=null?t:null},method(){return this.isCreating?"post":"patch"},resource(){const t=this.getResource();return Et(this.itemId,t)||t},breadcrumbPrefix(){return G(this.isCreating?this.verbs.create:this.verbs.edit)},data(){return this.createdData||this.loadedData||this.inheritedData||null},dataPath(){return this.getDataPathFrom(this.dataComponent)},sourceData(){let{data:t}=this.parentRouteComponent;if(t){const e=N(this.getDataPathFrom(this.parentRouteComponent)),s=this.routeRecord.path.split("/"),n=s.slice(s.length-e.length);this.sourceKey=null;const a=e[e.length-1];Y(this.sourceSchema)&&a==="create"&&e.length--;for(let r=0,i=e.length;r<i&&t;r++){const o=e[r],u=/^:id/.test(n[r])?o==="create"?null:this.findItemIdIndex(this.sourceSchema,t,o):o;r===i-1?this.sourceKey=u:t=t[u]}}return t},inheritedData(){if(this.isTransient&&this.clonedData===void 0&&this.sourceData&&this.sourceKey!==null){let t=this.sourceData[this.sourceKey];return this.doesMutate||(this.clonedData=t=nt(t)),t===null&&!this.isCreating&&Y(this.sourceSchema)&&this.$router.push({path:"create",append:!0}),t}return this.clonedData},hasData(){return!!this.data},itemLabel(){return this.getItemLabel(this.sourceSchema,this.data,{extended:!0})}},watch:{sourceData:"clearClonedData",create:"setupData"},methods:{emitSchemaEvent(t,e){return this.mainSchemaComponent.emitEvent(t,e)},getDataPathFrom(t){return this.api.denormalizePath(this.path.slice((t.isView?0:t.path.length)+1))},setupData(){this.isCreating?this.createdData=this.createdData||this.createData(this.schema,this.type):this.ensureData()},setSourceData(t){if(this.sourceData&&this.sourceKey!==null){const{mainSchemaComponent:e}=this;return this.$set(this.sourceData,this.sourceKey,e.filterData(t)),e.onChange(),!0}return!1},addSourceData(t){var e;return Y(this.sourceSchema)?this.setSourceData(t):!!((e=this.sourceData)!=null&&e.push(t))},clearData(){this.setData(null)},setData(t){this.isTransient?this.setSourceData(t):(this.createdData=null,this.loadedData=t)},clearClonedData(t,e){t!==e&&(this.clonedData=void 0)},async cancel(){return this.close()},async close(){return this.navigate(this.parentRouteComponent.path)},getSubmitVerb(t=!0){return this.isCreating?t?"create":"created":t?"submit":"submitted"},async submit(t,{validate:e=!0,closeForm:s=!1}={}){if(e&&!this.validateAll())return!1;const n=l=>this.verbs[this.getSubmitVerb(l)],a=I(t.schema.resource,{parent:this.resource}),r=a||this.resource,i=(r==null?void 0:r.method)||this.method,o=this.getPayloadData(t,i);let u;if(!a&&this.isTransient?u=await this.submitTransient(t,r,i,o,{onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:l=>this.emitSchemaEvent("error",{context:{error:l}}),notifySuccess:()=>{const l=n(!1);this.notify({type:"info",title:this.isCreating?`Item ${G(l)}`:`Change ${G(l)}`,text:[this.isCreating?`${this.itemLabel} was ${l}.`:`Changes to ${this.itemLabel} were ${l}.`,this.transientNote]})},notifyError:()=>{const l=n(!0);this.notify({type:"error",title:"Request Error",text:`Unable to ${l} ${this.itemLabel}.`})}}):u=await this.submitResource(t,r,i,o,{setData:!0,onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:l=>this.emitSchemaEvent("error",{context:{error:l}}),notifySuccess:()=>{const l=n(!1);this.notify({type:"success",title:`Successfully ${G(l)}`,text:`${this.itemLabel} was ${l}.`})},notifyError:l=>{const c=n(!0);this.notify({type:"error",title:"Request Error",text:[`Unable to ${c} ${this.itemLabel}${l?":":""}`,(l==null?void 0:l.message)||l]})}}),u){if(this.resetValidation(),s||t.closeForm)this.close();else if(this.isCreating){const l=this.getItemId(this.schema,this.data);this.$router.replace({path:`../${l}`,append:!0})}}return u},async submitTransient(t,e,s,n,{onSuccess:a,onError:r,notifySuccess:i,notifyError:o}){const u=this.isCreating?this.addSourceData(n):this.setSourceData(n);if(u)a==null||a(),await this.emitButtonEvent(t,"success",{notify:i});else{const l="Could not submit transient item";r==null||r(l),await this.emitButtonEvent(t,"error",{notify:o,error:l})}return u}}}),ss={};var to=p(Zi,Xi,Yi,!1,eo,null,null,null);function eo(t){for(let e in ss)this[e]=ss[e]}var ns=function(){return to.exports}(),Bd="";const so=ns.component("dito-form-nested",{});let no,ao;const as={};var ro=p(so,no,ao,!1,io,null,null,null);function io(t){for(let e in as)this[e]=as[e]}var oo=function(){return ro.exports}(),lo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.errors?s("div",{staticClass:"dito-errors"},[s("ul",t._l(t.errors,function(n){return s("li",[t._v(t._s(n))])}),0)]):t._e()},uo=[],Fd="";const co=v.component("dito-errors",{props:{errors:{type:Array,default:null}}}),rs={};var ho=p(co,lo,uo,!1,po,null,null,null);function po(t){for(let e in rs)this[e]=rs[e]}var mo=function(){return ho.exports}(),fo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-scopes"},t._l(t.scopes,function(n,a){return s("router-link",{key:a,attrs:{to:t.getScopeLink(n),custom:""},scopedSlots:t._u([{key:"default",fn:function(r){var i=r.navigate;return[s("button",{staticClass:"dito-button",class:{"dito-selected":n.name===t.query.scope},attrs:{type:"button",title:n.hint||t.getLabel(n)},on:{click:i}},[t._v(t._s(t.getLabel(n)))])]}}],null,!0)})}),1)},_o=[],Td="";const vo=v.component("dito-scopes",{props:{query:{type:Object,required:!0},scopes:{type:Object,required:!0}},methods:{getScopeLink(t){const e=S(d({},this.query),{scope:t.name});return e.page&&(e.page=0),this.getQueryLink(e)}}}),is={};var go=p(vo,fo,_o,!1,bo,null,null,null);function bo(t){for(let e in is)this[e]=is[e]}var yo=function(){return go.exports}(),$o=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("pagination",{attrs:{pageSize:t.limit,total:t.total,page:t.page},on:{"update:page":function(n){t.page=n}}})},Co=[];const Do=v.component("dito-pagination",{components:{Pagination:hn},props:{query:{type:Object,required:!0},limit:{type:Number,required:!0},total:{type:Number,required:!0}},computed:{page:{get(){return(+this.query.page||0)+1},set(t){this.page!==t&&this.$router.push(this.getQueryLink(S(d({},this.query),{page:t-1})))}}}}),os={};var wo=p(Do,$o,Co,!1,Po,null,null,null);function Po(t){for(let e in os)this[e]=os[e]}var xo=function(){return wo.exports}(),At={mixins:[Mt],data(){return{dragging:!1}},methods:{onStartDrag(){this.dragging=!0},onEndDrag({oldIndex:t,newIndex:e}){this.dragging=!1,t!==e&&this.onChange()},updateOrder(t,e,s){const{orderKey:n}=t;if(n){const a=(s==null?void 0:s[0])||0;for(let r=0;r<e.length;r++)e[r][n]=r+a}return e}}},So=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tree-item",class:{"dito-dragging":t.dragging,"dito-active":t.active},style:t.level>0&&{"--level":t.level},attrs:{id:t.dataPath}},[t.label?s("div",{staticClass:"dito-tree-header"},[t.numEntries?s("div",{staticClass:"dito-tree-branch",on:{click:function(n){n.stopPropagation(),t.opened=!t.opened}}},[t.numEntries?s("div",{staticClass:"dito-chevron",class:{"dito-opened":t.opened}}):t._e(),s("div",{staticClass:"dito-tree-label",domProps:{innerHTML:t._s(t.label)}}),t.details?s("div",{staticClass:"dito-tree-info"},[t._v(t._s(t.details))]):t._e()]):s("div",{staticClass:"dito-tree-leaf"},[s("div",{staticClass:"dito-tree-label",domProps:{innerHTML:t._s(t.label)}})]),t.hasEditButtons?s("div",{staticClass:"dito-buttons dito-buttons-small"},[t.draggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.editable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:t.onEdit}},"button",t.getButtonAttributes(t.verbs.edit),!1)):t._e(),t.deletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:t.onDelete}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()]):t._e()]):t._e(),t.properties?s("table",{directives:[{name:"show",rawName:"v-show",value:t.opened,expression:"opened"}],staticClass:"dito-properties"},t._l(t.properties,function(n){return s("tr",[s("td",[n.label!==!1?s("dito-label",{attrs:{dataPath:t.getPropertyDataPath(n),label:t.getLabel(n)}}):t._e()],1),s("dito-table-cell",{attrs:{cell:n,schema:n,dataPath:t.getPropertyDataPath(n),data:t.data,meta:t.nestedMeta,store:t.store,disabled:t.disabled}})],1)}),0):t._e(),t.childrenSchema?s("vue-draggable",t._b({directives:[{name:"show",rawName:"v-show",value:t.opened,expression:"opened"}],attrs:{list:t.updateOrder(t.childrenSchema,t.childrenList)},on:{start:t.onStartDrag,end:function(n){return t.onEndDrag(n,t.childrenSchema)}}},"vue-draggable",t.getDragOptions(t.childrenDraggable,!0),!1),t._l(t.childrenItems,function(n,a){return s("dito-tree-item",{key:t.getItemUid(t.childrenSchema,n.data),attrs:{schema:t.childrenSchema,dataPath:t.getItemDataPath(t.childrenSchema,a),data:n.data,path:n.path,open:n.open,active:n.active,draggable:t.childrenDraggable,label:t.getItemLabel(t.childrenSchema,n.data,{index:a}),level:t.level+1}})}),1):t._e()],1)},Oo=[],Rd="";const Eo=v.component("dito-tree-item",{components:{VueDraggable:yt},mixins:[At],inject:["container"],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Array,Object],default:null},path:{type:String,default:""},open:{type:Boolean,default:!1},active:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},label:{type:String,default:null},level:{type:Number,default:0}},data(){return{opened:this.open||this.schema.open}},computed:{meta(){return this.container.meta},store(){return this.container.store},disabled(){return this.container.disabled},nestedMeta(){return S(d({},this.meta),{schema:this.schema})},properties(){return K(this.schema.properties)},childrenSchema(){return this.schema.children},childrenList(){var e;const t=(e=this.childrenSchema)==null?void 0:e.name;return t&&this.data[t]},childrenDraggable(){var t;return((t=this.childrenList)==null?void 0:t.length)>1&&this.getSchemaValue("draggable",{type:Boolean,default:!1,schema:this.childrenSchema})},numChildren(){var t;return((t=this.childrenList)==null?void 0:t.length)||0},numProperties(){var t;return((t=this.properties)==null?void 0:t.length)||0},numEntries(){return this.numProperties+this.numChildren},childrenItems(){var e;const{childrenSchema:t}=this;if(t){const{editPath:s}=this.container,n=!this.path&&t.open;return((e=this.childrenList)==null?void 0:e.map((a,r)=>{const i=t.path&&`${this.path}/${t.path}/${r}`,o=n||s.startsWith(i)&&i.length<s.length;return{data:a,path:i,open:o,active:s===i}}))||[]}},details(){const{numChildren:t}=this;return t&&`${t} ${t===1?"item":"items"}`},hasEditButtons(){return this.draggable||this.editable||this.deletable},creatable:h("creatable",{type:Boolean,default:!1,get(t){return t&&H(this.schema)}}),editable:h("editable",{type:Boolean,default:!1,get(t){return t&&H(this.schema)}}),deletable:h("deletable",{type:Boolean,default:!1})},methods:{getPropertyDataPath(t){return B(this.dataPath,t.name)},onEdit(){this.$router.push({path:`${this.container.path}${this.path}`,query:this.$route.query})},onDelete(){},onChange(){this.container.onChange()}}}),ls={};var jo=p(Eo,So,Oo,!1,Vo,null,null,null);function Vo(t){for(let e in ls)this[e]=ls[e]}var ko=function(){return jo.exports}(),Lo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("thead",{staticClass:"dito-table-head"},[s("tr",[t._l(t.columns,function(n,a){return t.shouldRender(n)?s("th",{class:t.getColumnClass(n)},[n.sortable?s("router-link",{attrs:{to:t.getSortLink(n),custom:""},scopedSlots:t._u([{key:"default",fn:function(r){var i=r.navigate;return[s("button",{staticClass:"dito-button",class:t.getSortClass(n),attrs:{type:"button"},on:{click:i}},[s("div",{staticClass:"dito-order-arrows"}),s("span",[t._v(t._s(t.getLabel(n)))])])]}}],null,!0)}):s("span",[t._v(t._s(t.getLabel(n)))])],1):t._e()}),t.hasEditButtons?s("th",[s("span")]):t._e()],2)])},Bo=[],Id="";const Fo=v.component("dito-table-head",{props:{query:{type:Object,required:!0},columns:{type:Object,required:!0},hasEditButtons:{type:Boolean,required:!0}},computed:{sort(){const t=(this.query.order||"").split(/\s+/);return{name:t[0],order:t[1]}}},methods:{getColumnClass(t){return`dito-column-${Q(t.name)}`},getSortClass(t){return this.sort.name===t.name?`dito-selected dito-order-${this.sort.order}`:null},getSortLink(t){const e=this.sort.name===t.name&&this.sort.order==="asc"?"desc":"asc";return this.getQueryLink(S(d({},this.query),{order:`${t.name} ${e}`}))}}}),us={};var To=p(Fo,Lo,Bo,!1,Ro,null,null,null);function Ro(t){for(let e in us)this[e]=us[e]}var Io=function(){return To.exports}(),qo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("td",{class:t.cell.class,style:t.cell.style},[t.component?s(t.component,{tag:"component",attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,nested:t.nested,disabled:t.disabled}}):s("span",{domProps:{innerHTML:t._s(t.renderCell(t.data))}})],1)},Mo=[];const Ao=v.component("dito-table-cell",{props:{cell:{type:Object,required:!0},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},computed:{component(){return this.resolveTypeComponent(this.cell.component)}},methods:{renderCell(t){const{name:e,render:s}=this.cell,n=t[e];return s?s.call(this,new O(this,{name:e,value:n,data:t,dataPath:B(this.dataPath,e)})):Gt(n)}}}),cs={};var No=p(Ao,qo,Mo,!1,Uo,null,null,null);function Uo(t){for(let e in cs)this[e]=cs[e]}var zo=function(){return No.exports}();const Ho=v.component("dito-vnode",{functional:!0,render:(t,e)=>e.props.node});let Ko,Wo;const ds={};var Jo=p(Ho,Ko,Wo,!1,Qo,null,null,null);function Qo(t){for(let e in ds)this[e]=ds[e]}var Go=function(){return Jo.exports}(),Xo=Object.freeze(Object.defineProperty({__proto__:null,DitoRoot:qt,DitoMenu:er,DitoHeader:pr,DitoAccount:br,DitoDialog:Pr,DitoElement:Vr,DitoLabel:Rr,DitoSchema:Ur,DitoSchemaInlined:Qr,DitoPane:ei,DitoContainer:li,DitoTabs:mi,DitoPanel:yi,DitoPanels:xi,DitoButtons:ki,DitoEditButtons:Ii,DitoCreateButton:zi,DitoClipboard:Gi,DitoView:Ve,DitoForm:ns,DitoFormNested:oo,DitoErrors:mo,DitoScopes:yo,DitoPagination:xo,DitoTreeItem:ko,DitoTableHead:Io,DitoTableCell:zo,DitoVNode:Go},Symbol.toStringTag,{value:"Module"}));const $=v.extend({mixins:[ot],nativeField:!1,textField:!1,defaultValue:null,defaultNested:!0,defaultVisible:!0,generateLabel:!0,excludeValue:!1,ignoreMissingValue:null,omitPadding:!1});$.register=function(t,e={}){t=T(t);const s=this.component(`dito-type-${t[0]}`,e);for(const n of t)Oa(n,s);return s},$.get=kt;var Yo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("button",t._g(t._b({ref:"element",staticClass:"dito-button",class:"dito-button-"+t.verb,attrs:{id:t.dataPath,type:t.type,title:t.text}},"button",t.attributes,!1),t.listeners),[t._v(t._s(t.text))])},Zo=[];const tl=$.register(["button","submit"],{defaultValue:()=>{},excludeValue:!0,defaultWidth:"auto",computed:{verb(){return this.verbs[this.name]||this.name},text:h("text",{type:String,get(t){return t||U(this.verb)}}),closeForm:h("closeForm",{type:Boolean,default:!1})},methods:{getListeners(){return{focus:this.onFocus,blur:this.onBlur,click:this.onClick}},async submit(t){var e;return(e=this.resourceComponent)==null?void 0:e.submit(this,t)},async onClick(){await this.emitEvent("click",{parent:this.schemaComponent})===void 0&&ee(this.schema)&&await this.submit()}}}),hs={};var el=p(tl,Yo,Zo,!1,sl,null,null,null);function sl(t){for(let e in hs)this[e]=hs[e]}var nl=function(){return el.exports}(),al=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.value,expression:"value"}],ref:"element",staticClass:"dito-checkbox",attrs:{id:t.dataPath,type:"checkbox"},domProps:{checked:Array.isArray(t.value)?t._i(t.value,null)>-1:t.value},on:{change:function(n){var a=t.value,r=n.target,i=!!r.checked;if(Array.isArray(a)){var o=null,u=t._i(a,o);r.checked?u<0&&(t.value=a.concat([o])):u>-1&&(t.value=a.slice(0,u).concat(a.slice(u+1)))}else t.value=i}}},"input",t.attributes,!1),t.listeners))},rl=[],qd="";const il=$.register("checkbox",{nativeField:!0}),ps={};var ol=p(il,al,rl,!1,ll,null,null,null);function ll(t){for(let e in ps)this[e]=ps[e]}var ul=function(){return ol.exports}(),ms={mixins:[ts],data(){return{isLoading:!1,asyncDataEntries:{}}},methods:{handleDataSchema(t,e,a={}){var r=a,{resolveCounter:s=1}=r,n=F(r,["resolveCounter"]);var l;C(t)||(t={data:t});let{data:i=void 0,dataPath:o=null}=t;const u=this.asyncDataEntries[e]||this.$set(this.asyncDataEntries,e,{dependencyFunction:null,resolveCounter:0,resolvedData:null,resolving:!1});if((l=u.dependencyFunction)==null||l.call(this,this.context),u.resolveCounter>0){const{resolvedData:c}=u;return--u.resolveCounter===0&&(u.resolvedData=null),c}if(u.resolving)i=null;else if(i){if(b(i)){const c=i.call(this,this.context);b(c)?(u.dependencyFunction=i,i=c.call(this,this.context)):i=c}vt(i)&&(u.resolving=!0,this.resolveData(i,n).then(c=>{u.resolveCounter=s,u.resolvedData=c,u.resolving=!1}),i=null)}else o&&(i=J(this.rootData,z(`${this.dataPath}/${o}`)));return i},async resolveData(t,e={}){this.setLoading(!0,e);let s=null;try{s=await(b(t)?t():t)}catch(n){this.addError(n.message||n)}return this.setLoading(!1,e),s}}},ut={mixins:[ms],data(){return{hasOptions:!1}},computed:{selectedValue:{get(){const t=s=>this.relate?this.hasOption(s)?this.getValueForOption(s):null:s,e=x(this.value)?this.value.map(t).filter(s=>s!==null):t(this.value);return this.relate&&this.hasOptions&&(e===null&&this.value!==null||Xn(this.value))&&(this.selectedValue=e),e},set(t){const e=s=>this.relate?this.getOptionForValue(s):s;this.value=x(t)?t.map(e):e(t)}},selectedOption(){return this.getOptionForValue(this.selectedValue)},options(){var e;const t=(e=this.handleDataSchema(this.schema.options,"options",{resolveCounter:1}))!=null?e:[];if(!x(t))throw new Error(`Invalid options data, should be array: ${t}`);return this.hasOptions=t.length>0,this.processOptions(t)},activeOptions(){return this.options},relate:h("relate",{type:Boolean,default:!1,callback:!1}),groupBy:h("groupBy",{type:String,default:null}),optionLabel:h("options.label",{type:[String,Function],default:null,get(t){return t||this.getOptionKey("label")||null}}),optionValue:h("options.value",{type:[String,Function],default:null,get(t){return t||this.relate&&"id"||this.getOptionKey("value")||null}}),searchFilter:h("search",{type:[Object,Function],default:null,get(t){if(t){const{filter:e,debounce:s}=b(t)?{filter:t}:t;return s?an(e,s):e}}}),groupByLabel(){return this.groupBy?"label":null},groupByOptions(){return this.groupBy?"options":null}},methods:{getOptionKey(t){const[e]=this.activeOptions;return C(e)&&t in e?t:null},processOptions(t){if(t.length){if(this.relate)for(const e of t)"id"in e||Gn(e,"id");if(this.groupBy){const e={};t=t.reduce((s,n)=>{const a=n[this.groupBy];let r=e[a];return r||(r=e[a]={[this.groupByLabel]:a,[this.groupByOptions]:[]},s.push(r)),r.options.push(n),s},[])}}return t},hasOption(t){return!!this.getOptionForValue(this.getValueForOption(t))},getOptionForValue(t){const e=(s,n,a)=>{for(const r of s)if(a){const i=e(r.options,n,null);if(i)return i}else if(n===this.getValueForOption(r))return r};return this.optionValue?e(this.activeOptions,t,this.groupBy):t},getValueForOption(t){const{optionValue:e}=this;return V(e)?t==null?void 0:t[e]:b(e)?e.call(this,new O(this,{option:t})):t},getLabelForOption(t){const{optionLabel:e}=this;return V(e)?t==null?void 0:t[e]:b(e)?e.call(this,new O(this,{option:t})):U(`${t}`)}},processValue(t,e,s,n){var a;if(t.relate){const r=(a=t.options)==null?void 0:a.dataPath,i=r?z(`${s}/${r}`):null;n.addRelation(s,i,t),i&&n.setSourceRelated(i);const o=u=>u&&{id:u.id};e=x(e)?e.map(o):o(e)}return e}},cl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ul",{staticClass:"dito-checkboxes",class:"dito-layout-"+(t.schema.layout||"vertical"),attrs:{id:t.dataPath}},t._l(t.options,function(n){return s("li",[s("label",[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedOptions,expression:"selectedOptions"}],ref:"element",refInFor:!0,staticClass:"dito-checkbox",attrs:{type:"checkbox"},domProps:{value:t.getValueForOption(n),checked:Array.isArray(t.selectedOptions)?t._i(t.selectedOptions,t.getValueForOption(n))>-1:t.selectedOptions},on:{change:function(a){var r=t.selectedOptions,i=a.target,o=!!i.checked;if(Array.isArray(r)){var u=t.getValueForOption(n),l=t._i(r,u);i.checked?l<0&&(t.selectedOptions=r.concat([u])):l>-1&&(t.selectedOptions=r.slice(0,l).concat(r.slice(l+1)))}else t.selectedOptions=o}}},"input",t.attributes,!1),t.listeners)),t._v(t._s(t.getLabelForOption(n)))])])}),0)},dl=[],Md="";const hl=$.register("checkboxes",{mixins:[ut],nativeField:!0,defaultValue:[],computed:{selectedOptions:{get(){return(this.selectedValue||[]).filter(t=>t)},set(t){this.selectedValue=t||[]}}}}),fs={};var pl=p(hl,cl,dl,!1,ml,null,null,null);function ml(t){for(let e in fs)this[e]=fs[e]}var fl=function(){return pl.exports}(),_l=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{ref:"code",staticClass:"dito-code",style:t.style,attrs:{id:t.dataPath}})},vl=[],Ad="";const gl=$.register("code",{mixins:[tt],computed:{lines(){return this.schema.lines||3},style(){return`height: calc(${this.lines}em * var(--line-height))`}},mounted(){const t=new bn(this.$refs.code,{language:this.schema.language||"javascript",tabSize:this.schema.indentSize||2,lineNumbers:!1});let e=!1,s=!1,n=!1;const a=()=>{!this.focused&&e&&(e=!1,this.onChange())},r=()=>this.onFocus(),i=()=>{this.onBlur(),a()};this.domOn(this.$refs.code.querySelector("textarea"),{focus:r,blur:i});const o=l=>{l!==t.code&&(n=!0,t.updateCode(l))},u=l=>{l!==this.value&&(s=!0,this.value=l,e=!0,a())};t.onUpdate(l=>{n?n=!1:u(l)}),this.$watch("value",l=>{s?s=!1:o(l||"")}),o(this.value||"")},methods:{focusElement(){var t;(t=this.$el.querySelector("textarea"))==null||t.focus()}}}),_s={};var bl=p(gl,_l,vl,!1,yl,null,null,null);function yl(t){for(let e in _s)this[e]=_s[e]}var $l=function(){return bl.exports}(),Cl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("trigger",{staticClass:"dito-color",attrs:{trigger:"click",show:t.showPopup},on:{"update:show":function(n){t.showPopup=n}}},[s("div",{staticClass:"dito-input",class:{"dito-focus":t.showPopup},attrs:{slot:"trigger"},slot:"trigger"},[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.hexValue,expression:"hexValue"}],ref:"element",attrs:{id:t.dataPath,type:"input",size:"8"},domProps:{value:t.hexValue},on:{input:function(n){n.target.composing||(t.hexValue=n.target.value)}}},"input",t.attributes,!1),t.listeners)),t.value?s("div",{staticClass:"dito-color-preview dito-inherit-focus"},[s("div",{style:{background:"#"+(t.hexValue||"00000000")}})]):t._e(),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{disabled:t.disabled},on:{click:function(n){return n.stopPropagation(),t.clear.apply(null,arguments)}}}):t._e()]),s("sketch-picker",{staticClass:"dito-color-picker",attrs:{slot:"popup","disable-alpha":!t.alpha,"disable-fields":!t.inputs,"preset-colors":t.presets},slot:"popup",model:{value:t.colorValue,callback:function(n){t.colorValue=n},expression:"colorValue"}})],1)},Dl=[],Nd="";const wl=$.register("color",{components:{Trigger:pn,SketchPicker:yn},data(){return{showPopup:!1,convertedHexValue:null}},computed:{colorValue:{get(){return this.value||{}},set(t){const e=this.colorFormat,s={hex:(t==null?void 0:t.a)<1?"hex8":"hex",rgb:"rgba"}[e]||e;s?this.value=t[s]:this.value=$t(t).toString(e),this.onChange()}},hexValue:{get(){if(this.value==null)this.convertedHexValue=null;else if(!this.focused){const t=$t(this.value);t.isValid()&&(this.convertedHexValue=t.toString(t.getAlpha()<1?"hex8":"hex6").slice(1).toUpperCase())}return this.convertedHexValue},set(t){this.convertedHexValue=t}},colorFormat:h("format",{type:String,default:"hex"}),alpha:h("alpha",{type:Boolean,default:!1}),inputs:h("inputs",{type:Boolean,default:!0}),presets:h("presets",{type:Array,default:["#ffffff","#c3c3c3","#7f7f7f","#000000","#880015","#ed1c24","#ff7f27","#fff200","#22b14c","#00a2e8","#3f48cc","#a349a4","#b97a57","#ffaec9","#ffc90e","#00000000"]})},watch:{focused(t){if(!t&&this.convertedHexValue){const e=$t(`#${this.convertedHexValue}`);e!=null&&e.isValid()&&(this.value=e.toString(this.colorFormat),this.onChange())}}}}),vs={};var Pl=p(wl,Cl,Dl,!1,xl,null,null,null);function xl(t){for(let e in vs)this[e]=vs[e]}var Sl=function(){return Pl.exports}(),Ol=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s(t.component,t._b({tag:"component"},"component",t.$props,!1))},El=[];const jl=$.register("component",{defaultValue:()=>{},ignoreMissingValue:t=>!("default"in t)}),gs={};var Vl=p(jl,Ol,El,!1,kl,null,null,null);function kl(t){for(let e in gs)this[e]=gs[e]}var Ll=function(){return Vl.exports}(),Bl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input",{ref:"element",staticClass:"dito-text dito-input",attrs:{id:t.dataPath,name:t.name,type:"text",disabled:t.disabled,readonly:!0},domProps:{value:t.value}})},Fl=[];const Tl=$.register(["computed","data","hidden"],{mixins:[ms],defaultValue:()=>{},defaultVisible:!1,computed:{value:{get(){const{schema:t}=this;if(t.data||t.dataPath){const e=this.handleDataSchema(t,"schema",{resolveCounter:2});this.$set(this.data,this.name,e)}return ot.computed.value.get.call(this)},set(t){ot.computed.value.set.call(this,t)}}}}),bs={};var Rl=p(Tl,Bl,Fl,!1,Il,null,null,null);function Il(t){for(let e in bs)this[e]=bs[e]}var ql=function(){return Rl.exports}(),Ml=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-date"},[s(t.getComponent(t.type),t._g(t._b({ref:"element",tag:"component",attrs:{id:t.dataPath,locale:t.locale,dateFormat:Object.assign({},t.api.formats.date,t.dateFormat)},model:{value:t.dateValue,callback:function(n){t.dateValue=n},expression:"dateValue"}},"component",t.attributes,!1),t.listeners))],1)},Al=[];const Nl=$.register(["date","datetime","time"],{components:{DatePicker:mn,TimePicker:fn,DateTimePicker:_n},nativeField:!0,textField:!0,computed:{dateValue:{get(){const{value:t}=this;return t&&new Date(t)},set(t){this.value=t}},dateFormat:h("dateFormat",{type:Object,default:null})},methods:{getComponent(t){return{date:"date-picker",time:"time-picker",datetime:"date-time-picker"}[t]}},processValue(t,e){return mt(e)?e.toISOString():e}}),ys={};var Ul=p(Nl,Ml,Al,!1,zl,null,null,null);function zl(t){for(let e in ys)this[e]=ys[e]}var Hl=function(){return Ul.exports}(),ct={mixins:[es,Se],defaultValue(t){return Z(t)?[]:null},provide(){return{$sourceComponent:()=>this}},data(){return{wrappedPrimitives:null,unwrappingPrimitives:!1,ignoreRouteChange:!1}},computed:{sourceComponent(){return this},isObjectSource(){return Y(this.type)},isListSource(){return Z(this.type)},hasData(){return!!this.value},isReady(){return this.hasData||!this.providesData},isInView(){return!!this.viewComponent},wrapPrimitives(){return this.schema.wrapPrimitives},listData:{get(){let t=this.value;this.isObjectSource?t=t!=null?[t]:[]:t=this.unwrapListData(t)||t,t=t||[];const{wrapPrimitives:e}=this;return e?(this.unwrappingPrimitives?this.unwrappingPrimitives=!1:this.wrappedPrimitives=t.map(s=>({[e]:s})),this.wrappedPrimitives):t},set(t){this.wrapPrimitives?this.wrappedPrimitives=t:this.value=this.isObjectSource?t&&t.length>0?t[0]:null:t}},objectData:{get(){return this.listData[0]||null},set(t){this.listData=t?[t]:[]}},sourceSchema(){return this.schema},path(){return this.routeComponent.getChildPath(this.schema.path)},defaultQuery(){const{defaultOrder:t}=this;return t?{order:t}:{}},query:Vt("query",{get(t){return d(d({},this.defaultQuery),t)},set(t){var n;const{scope:e=(n=this.defaultScope)==null?void 0:n.name,page:s=this.schema.page}=this.query;return t=d(d(d(d({},this.query),e!=null&&{scope:e}),s!=null&&{page:s}),t),_t(t,this.$route.query)||(this.ignoreRouteChange=!0,this.$router.replace({query:t,hash:this.$route.hash})),t}}),total:Vt("total"),columns(){return K(this.schema.columns)},scopes(){return K(this.schema.scopes)},defaultScope(){if(this.scopes){let t=null;for(const e of Object.values(this.scopes)){if(e.defaultScope)return e;t||(t=e)}return t}},defaultOrder(){if(this.columns)for(const t of Object.values(this.columns)){const{defaultSort:e}=t;if(e){const s=V(e)?e:"asc";return`${t.name} ${s}`}}},nestedMeta(){return S(d({},this.meta),{schema:this.schema})},forms(){return Object.values(X(this.schema,this.context))},view(){return Tt(this.schema,this.context)},linksToView(){return!!this.view},buttonSchemas(){return it(this.schema.buttons)},hasLabels(){return this.forms.some(Ta)},isCompact(){return this.forms.every(me)},isInlined(){return It(this.schema)},paginate:h("paginate",{type:Number}),render:h("render",{type:Function,default:null}),creatable:h("creatable",{type:Boolean,default:!1,get(t){return t&&H(this.schema)?this.isObjectSource?!this.value:!0:!1}}),editable:h("editable",{type:Boolean,default:!1,get(t){return t&&!this.isInlined}}),deletable:h("deletable",{type:Boolean,default:!1}),draggable:h("draggable",{type:Boolean,default:!1,get(t){return this.isListSource&&this.listData.length>1&&t}}),collapsible:h("collapsible",{type:Boolean,default:null,get(t){return this.isInlined&&!!(t!=null?t:this.collapsed!==null)}}),collapsed:h("collapsed",{type:Boolean,default:null})},watch:{$route(t,e){if(this.ignoreRouteChange){this.ignoreRouteChange=!1;return}e.path===t.path&&e.hash===t.hash&&(this.query=t.query,this.loadData(!1))},wrappedPrimitives:{deep:!0,handler(t,e){const{wrapPrimitives:s}=this;s&&e!==null&&(this.unwrappingPrimitives=!0,this.value=t.map(n=>n[s]))}}},methods:{setupData(){this.query=this.$route.query,this.ensureData()},clearData(){this.total=0,this.value=null},setData(t){!t||this.isListSource&&x(t)||this.isObjectSource&&C(t)?this.value=t:this.unwrapListData(t)||C(t)&&this.isInView&&this.viewComponent.setData(t)},unwrapListData(t){if(this.isListSource&&C(t)&&st(t.total)&&x(t.results))return this.total=t.total,this.value=t.results,this.value},createItem(t,e){const s=this.createData(t,e);return this.isObjectSource?this.objectData=s:this.listData.push(s),this.collapsible&&this.$nextTick(()=>this.openSchemaComponent(-1)),this.onChange(),s},removeItem(t){if(this.isObjectSource)this.objectData=null,this.onChange();else{const{listData:e}=this,s=e&&e.indexOf(t);s>=0&&(e.splice(s,1),this.onChange())}},deleteItem(t,e){const s=t&&this.getItemLabel(this.schema,t,{index:e,extended:!0}),n=()=>this.notify({type:this.isTransient?"info":"success",title:"Successfully Removed",text:[`${s} was ${this.verbs.deleted}.`,this.transientNote]});if(t&&window.confirm(`Do you really want to ${this.verbs.delete} ${s}?`))if(this.isTransient)this.removeItem(t),n();else{const a=this.getItemId(this.schema,t),r=Et(a,this.resource);r&&this.handleRequest({method:"delete",resource:r},i=>{i||(this.removeItem(t),n()),this.reloadData()})}},getSchemaComponent(t){const{schemaComponents:e}=this,{length:s}=e;return e[(t%s+s)%s]},openSchemaComponent(t){const e=this.getSchemaComponent(t);e&&(e.opened=!0)},async navigateToComponent(t,e){var s,n;if(this.collapsible){const a=t.startsWith(this.dataPath)?this.isListSource?(s=N(t.slice(this.dataPath.length+1))[0])!=null?s:null:0:null;if(a!==null&&st(+a)){const r=this.getSchemaComponent(+a);if(r){const{opened:i}=r;i||(r.opened=!0,await this.$nextTick());const o=r.getComponentsByDataPath(t);if(o.length>0&&((n=e==null?void 0:e(o))!=null?n:!0))return!0;r.opened=i}}}return this.navigateToRouteComponent(t,e)},navigateToRouteComponent(t,e){return new Promise((s,n)=>{const a=()=>{var u;const{routeComponents:i}=this.appState,o=i[i.length-1];s((u=e==null?void 0:e([o]))!=null?u:!0)},r=N(t);for(;r.length>0;){const i=this.routeComponent.getChildPath(this.api.normalizePath(z(r))),{matched:o}=this.$router.match(i);o.length&&(this.$route.path===i?a():this.$router.push({path:i},()=>{this.$nextTick(a)},n)),r.pop()}s(!1)})}},async processSchema(t,e,s,n,a,r=!1,i=!1,o=null){ce(t,e,s);const u=It(e);if(u&&e.resource)throw new Error("Lists with nested forms cannot load data from their own resources");const l=`id${a+1}`,c={api:t,schema:e},_=S(d({},c),{flatten:i,nested:r,param:l}),f=await Va(t,e,a);if(o&&await o(f,a+1),H(e)&&!u){const y=(g,E)=>E?g?`${g}/:${E}`:`:${E}`:g,m=a===0?"":e.path,w={path:y(m,Z(e)&&l),component:v.component(r?"dito-form-nested":"dito-form"),meta:_};Y(e)&&n.push(S(d({},w),{path:y(m,l)})),m&&n.push({path:m,redirect:".",meta:c});const[j,P]=f.reduce((g,E)=>(g[E.meta.flatten?0:1].push(E),g),[[],[]]);if(P.length&&(w.children=P),n.push(w),j.length)for(const g of j)n.push(S(d({},g.redirect?g:w),{path:`${w.path}/${g.path}`,meta:S(d({},g.meta),{flatten:i})}))}},processValue(t,e,s,n){return n.addSource(s,t),e}};const Nt={text(t){const e=[{label:"contains",value:"contains"},{label:"equals",value:"equals"},{label:"starts with",value:"starts-with"},{label:"ends with",value:"ends-with"}];return{operator:t.operators?{type:"select",options:x(t.operators)?e.filter(s=>t.operators.includes(s.value)):e,width:"40%"}:null,text:{type:"text",width:t.operators?"60%":"fill"}}},"date-range"(){const t={day:"2-digit",month:"2-digit",year:"numeric"};return{from:{type:"datetime",width:"50%",dateFormat:t},to:{type:"datetime",width:"50%",dateFormat:t}}}};function Kl(t,e,s){const n={label:"Filters",name:"$filters",target:e,disabled:!1,data(){return Ql(n,s.query)},components:Wl(t),buttons:{clear:{text:"Clear",events:{click({schemaComponent:a}){a.resetData(),a.applyFilters()}}},filter:{type:"submit",text:"Filter",events:{click({schemaComponent:a}){a.applyFilters()}}}},methods:{applyFilters(){s.query=S(d({},s.query),{filter:Jl(this.schema,this.data),page:void 0})}}};return n}function Wl(t){var n;const e={};for(const a of Object.values(t||{})){const s=a,{filter:r}=s,i=F(s,["filter"]),o=r?(n=Nt[r])==null?void 0:n.call(Nt,a):a.components;if(o){i.components={};for(const[u,l]of Object.entries(o))if(l){const c=l.label||U(l.name||u);i.components[u]=S(d({},l),{label:!1,placeholder:c})}e[a.name]={label:i.label,type:"object",default:()=>({}),form:i,inlined:!0}}else throw new Error(`Invalid filter '${a.name}': Unknown filter type '${r}'.`)}return e}function $s(t,e){var n;const s=t.components[e];return(n=s==null?void 0:s.form)==null?void 0:n.components}function Jl(t,e){const s=[];for(const n in e){const a=e[n];if(a){const r=Object.keys($s(t,n)).map(i=>{var o;return(o=a[i])!=null?o:null});r.some(i=>i!==null)&&s.push(`${n}:${r.map(JSON.stringify).join(",")}`)}}return s.length?s:void 0}function Ql(t,e){const s={};if(e)for(const a of T(e.filter)){const[,r,i]=a.match(/^(\w+):(.*)$/);try{s[r]=T(JSON.parse(`[${i}]`))}catch{}}const n={};for(const a in t.components){const r={},i=s[a];if(i){const o=$s(t,a);if(o){let u=0;for(const l in o)r[l]=i[u++]}}n[a]=r}return n}var Gl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isReady?s("div",{staticClass:"dito-list",class:t.schema.class,style:t.schema.style,attrs:{id:t.dataPath}},[s("div",{staticClass:"dito-navigation"},[t.scopes?s("dito-scopes",{attrs:{query:t.query,scopes:t.scopes}}):t.paginate?s("div",{staticClass:"dito-spacer"}):t._e(),t.paginate?s("dito-pagination",{attrs:{query:t.query,limit:t.paginate,total:t.total||0}}):t._e()],1),s("table",{staticClass:"dito-table",class:{"dito-table-separators":t.isInlined,"dito-table-larger-padding":t.hasEditButtons&&!t.isInlined,"dito-table-alternate-colors":!t.isInlined,"dito-table-even-count":t.hasEvenCount}},[t.columns?s("dito-table-head",{attrs:{query:t.query,columns:t.columns,hasEditButtons:t.hasEditButtons}}):t._e(),s("vue-draggable",t._b({attrs:{tag:"tbody",list:t.updateOrder(t.sourceSchema,t.listData,t.paginationRange)},on:{start:t.onStartDrag,end:t.onEndDrag}},"vue-draggable",t.getDragOptions(t.draggable),!1),t._l(t.listData,function(n,a){return s("tr",{key:t.getItemUid(t.schema,n),attrs:{id:t.getDataPath(a)}},[t.columns?t._l(t.columns,function(r){return t.shouldRender(r)?s("dito-table-cell",{key:r.name,class:t.getCellClass(r),attrs:{cell:r,schema:t.schema,dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.store,nested:!1,disabled:t.disabled||t.isLoading}}):t._e()}):[s("td",[t.isInlined?s("dito-schema-inlined",{attrs:{label:t.getItemLabel(t.schema,n,{index:a,asObject:!0}),schema:t.getItemFormSchema(t.schema,n,t.context),dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.getChildStore(a),disabled:t.disabled||t.isLoading,collapsed:t.collapsed,collapsible:t.collapsible,deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.getEditPath(n,a)},on:{delete:function(r){return t.deleteItem(n,a)}}}):t.component?s(t.component,{tag:"component",attrs:{dataPath:t.getDataPath(a),data:n,nested:!1}}):t.render?s("span",{domProps:{innerHTML:t._s(t.render(t.getContext(n,a)))}}):s("span",{domProps:{innerHTML:t._s(t.getItemLabel(t.schema,n,{index:a}))}})],1)],t.hasCellEditButtons?s("td",{staticClass:"dito-cell-edit-buttons"},[s("dito-edit-buttons",{attrs:{deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.getEditPath(n,a),schema:t.getItemFormSchema(t.schema,n,t.context),dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.getChildStore(a)},on:{delete:function(r){return t.deleteItem(n,a)}}})],1):t._e()],2)}),0),t.hasListButtons&&!t.single?s("tfoot",[s("tr",[s("td",{staticClass:"dito-cell-edit-buttons",attrs:{colspan:t.numColumns}},[s("dito-edit-buttons",{attrs:{creatable:t.creatable,createPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.listData,meta:t.meta,store:t.store}})],1)])]):t._e()],1),t.hasListButtons&&t.single?s("dito-edit-buttons",{staticClass:"dito-buttons-main dito-buttons-large",attrs:{creatable:t.creatable,createPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.listData,meta:t.meta,store:t.store}}):t._e()],1):t._e()},Xl=[],Ud="";const Yl=$.register("list",{components:{VueDraggable:yt},mixins:[ct,At],getSourceType(t){return t},getPanelSchema(t,e,s){const{filters:n}=t;if(n){const a=()=>s.getComponentByDataPath(e,r=>r.type==="list");return Kl(K(n),e,{get query(){var r;return(r=a())==null?void 0:r.query},set query(r){const i=a();if(i){const o=u=>Jt(u,l=>l!==void 0);_t(o(r),o(i.query))||(i.query=r,i.loadData(!1))}}})}},computed:{hasListButtons(){return!!(this.buttonSchemas||this.creatable)},hasEditButtons(){const{listData:t}=this;return t.length>0&&(this.editable||this.deletable||this.draggable)},hasCellEditButtons(){return!this.isInlined&&this.hasEditButtons},hasEvenCount(){return!(this.listData.length%2)},numColumns(){return(this.columns?Object.keys(this.columns).length:1)+(this.hasCellEditButtons?1:0)}},methods:{getDataPath(t){return B(this.dataPath,t)},getEditPath(t,e){if(this.editable){const s=La(this.schema,this.context)||this.path,n=this.getItemId(this.schema,t,e);return`${s}/${n}`}return null},getCellClass(t){return`dito-cell-${Q(t.name)}`},getContext(t,e){return new O(this,{data:t,value:t,index:e,dataPath:this.getDataPath(e)})},onFilterErrors(t){const e=B(this.dataPath,"$filters"),s=this.schemaComponent.getPanelByDataPath(e);if(s)return s.showValidationErrors(t,!0),!0}}}),Cs={};var Zl=p(Yl,Gl,Xl,!1,tu,null,null,null);function tu(t){for(let e in Cs)this[e]=Cs[e]}var eu=function(){return Zl.exports}(),su=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-label",{staticClass:"dito-label-component",attrs:{label:t.value,dataPath:t.dataPath}})},nu=[],zd="";const au=$.register("label",{generateLabel:!1}),Ds={};var ru=p(au,su,nu,!1,iu,null,null,null);function iu(t){for(let e in Ds)this[e]=Ds[e]}var ou=function(){return ru.exports}(),lu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-markup",attrs:{id:t.dataPath}},[s("editor-menu-bar",{staticClass:"dito-markup-toolbar",attrs:{editor:t.editor}},[t.groupedButtons.length>0?s("div",{staticClass:"dito-buttons dito-buttons-toolbar"},t._l(t.groupedButtons,function(n){return s("div",{staticClass:"dito-button-group"},t._l(n,function(a){a.name;var r=a.icon,i=a.isActive,o=a.onClick;return s("button",{staticClass:"dito-button",class:{"dito-active":i},on:{click:o}},[s("icon",{attrs:{name:r}})],1)}),0)}),0):t._e()]),s("editor-content",{ref:"editor",staticClass:"dito-markup-editor",style:t.styles,attrs:{editor:t.editor}}),t.resizable?s("div",{staticClass:"dito-resize",on:{mousedown:function(n){return n.stopPropagation(),n.preventDefault(),t.onDragResize.apply(null,arguments)}}}):t._e()],1)},uu=[],Hd="";const cu=$.register("markup",{components:{EditorContent:$n,EditorMenuBar:Cn,Icon:vn},mixins:[tt],data(){return{editor:null,height:null}},computed:{lines(){return this.schema.lines||10},styles(){return{height:this.height||`calc(${this.lines}em * var(--line-height))`}},markButtons(){return this.getButtons("marks",{bold:!0,italic:!0,underline:!0,strike:!0,small:!0,code:!0,link:{onClick:t=>this.onClickLink(t)}})},basicNodeButtons(){return this.getButtons("nodes",{paragraph:{ignoreActive:()=>this.otherNodeButtons.some(t=>t.isActive)},heading:{attr:"level",values:[1,2,3,4,5,6]}})},otherNodeButtons(){return this.getButtons("nodes",{bulletList:!0,orderedList:!0,blockquote:!0,codeBlock:!0})},toolButtons(){return this.getButtons("tools",{undo:!0,redo:!0})},groupedButtons(){const{markButtons:t,basicNodeButtons:e,otherNodeButtons:s,toolButtons:n}=this;return[t,e,s,n].filter(a=>a.length>0)},parseOptions(){return{preserveWhitespace:{collapse:!1,preserve:!0,"preserve-all":"full"}[this.whitespace]}},editorOptions(){return{editable:!this.readyonly,autoFocus:this.autofocus,disableInputRules:!this.enableRules.input,disablePasteRules:!this.enableRules.paste,parseOptions:this.parseOptions}},resizable:h("resizable",{type:Boolean,default:!1}),whitespace:h("whitespace",{type:String,default:"collapse"}),enableRules:h("enableRules",{type:[Object,Boolean],default:!1,get(t){return C(t)?t:{input:!!t,paste:!!t}}})},watch:{readyonly:"updateEditorOptions",autofocus:"updateEditorOptions",enableRules:"updateEditorOptions"},created(){let t=!1,e=!1;const s=()=>{!this.focused&&t&&(t=!1,this.onChange())},n=()=>this.onFocus(),a=()=>{this.onBlur(),s()},r=rn(o=>{e=!0,this.value=o(),t=!0,s()},100),i=({getHTML:o})=>{r(o),this.onInput()};this.$watch("value",o=>{e?e=!1:this.editor.setContent(o,!1,this.parseOptions)}),this.editor=new Dn(S(d({},this.editorOptions),{onFocus:n,onBlur:a,onUpdate:i,extensions:this.createExtensions(),content:this.value||""}))},beforeDestroy(){this.editor.destroy()},methods:{onDragResize(t){const e=({clientX:i,clientY:o})=>({x:i,y:o});let s=e(t).y,n=parseFloat(getComputedStyle(this.$refs.editor.$el).height);const a=i=>{const{y:o}=e(i);n+=o-s,s=o,this.height=`${Math.max(n,0)}px`},r=this.domOn(document,{mousemove:a,mouseup(i){a(i),r.remove()}})},updateEditorOptions(){this.editor.setOptions(this.editorOptions)},async onClickLink(t){const e=await this.showDialog({components:{href:{type:"url",label:"Link",autofocus:!0},title:{type:"text",label:"Title"}},buttons:{cancel:{},apply:{type:"submit"},remove:{events:{click({dialogComponent:s}){s.resolve({href:null,title:null})}}}},data:this.editor.getMarkAttrs("link")});if(e){let{href:s,title:n}=e;if(s)try{new URL(s)}catch{s=`http://${s}`}t({href:s,title:n})}},createExtensions(){const{marks:t={},nodes:e={},tools:s={}}=this.schema;return[t.bold&&new xn,t.italic&&new Sn,t.underline&&new On,t.strike&&new En,t.small&&new du,t.code&&new jn,t.link&&new hu,e.blockquote&&new Vn,e.codeBlock&&new kn,new Ln,e.heading&&new Bn({levels:e.heading}),e.horizontalRule&&new Fn,(e.orderedList||e.bulletList)&&new Tn,e.bulletList&&new Rn,e.orderedList&&new In,s.history&&new qn].filter(n=>!!n)},getButtons(t,e){const s=[],n=({name:r,icon:i,attrs:o,ignoreActive:u,onClick:l})=>{const c=this.editor.isActive[r],_=this.editor.commands[r];s.push({name:r,icon:i,isActive:(c==null?void 0:c(o))&&(u==null||!u()),onClick:()=>l?l(_,o):_(o)})},a=this.schema[t];if(a)for(const[r,i]of Object.entries(e)){const o=["undo","redo"].includes(r)?"history":r,u=a[o],l=on(r),c=Q(r);if(u){if(i===!0)n({name:l,icon:c});else if(C(i)){const{attr:_,values:f,ignoreActive:y,onClick:m}=i;if(_){if(x(f)&&x(u))for(const w of f)u.includes(w)&&n({name:l,icon:`${c}-${w}`,attrs:{[_]:w},ignoreActive:y,onClick:m})}else n({name:l,icon:c,ignoreActive:y,onClick:m})}}}return s},focusElement(){var t,e;(e=(t=this.$el).scrollIntoView)==null||e.call(t),this.editor.focus()}}});class du extends wn{get name(){return"small"}get schema(){return{parseDOM:[{tag:"small"}],toDOM:()=>["small",0]}}commands({type:e}){return()=>Pn(e)}}class hu extends Mn{get schema(){return{attrs:{href:{default:null},title:{default:null}},inclusive:!1,parseDOM:[{tag:"a",getAttrs:e=>({href:e.getAttribute("href"),title:e.getAttribute("title")})}],toDOM:e=>["a",e.attrs,0]}}}const ws={};var pu=p(cu,lu,uu,!1,mu,null,null,null);function mu(t){for(let e in ws)this[e]=ws[e]}var fu=function(){return pu.exports}(),Kd="",_u=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-multiselect",class:{"dito-multiselect-single":!t.multiple,"dito-multiselect-multiple":t.multiple}},[s("vue-multiselect",t._g(t._b({ref:"element",attrs:{"show-labels":!1,placeholder:t.placeholder,"tag-placeholder":"Press enter to add new tag",options:t.populate&&t.activeOptions||[],"custom-label":t.getLabelForOption,"track-by":t.optionValue,"group-label":t.groupByLabel,"group-values":t.groupByOptions,multiple:t.multiple,taggable:t.taggable,searchable:t.searchable,"internal-search":!t.searchFilter,"preserve-search":!!t.searchFilter,"clear-on-select":!t.searchFilter,"close-on-select":!t.stayOpen,loading:t.isLoading},on:{open:function(n){t.populate=!0},tag:t.onAddTag,"search-change":t.onSearchChange},model:{value:t.selectedOptions,callback:function(n){t.selectedOptions=n},expression:"selectedOptions"}},"vue-multiselect",t.attributes,!1),t.listeners)),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{type:"button",disabled:t.disabled},on:{click:t.clear}}):t._e()],1)},vu=[],Wd="";const gu=$.register("multiselect",{components:{VueMultiselect:An},mixins:[ut],data(){return{searchedOptions:null,populate:!1}},computed:{selectedOptions:{get(){return this.multiple?(this.selectedValue||[]).map(t=>this.getOptionForValue(t)||this.addTagOption(t)).filter(t=>t):this.selectedOption},set(t){this.selectedValue=this.multiple?(t||[]).map(e=>this.getValueForOption(e)):this.getValueForOption(t)}},activeOptions(){return this.searchedOptions||this.options},multiple:h("multiple",{type:Boolean,default:!1}),searchable:h("searchable",{type:Boolean,default:!1}),taggable:h("taggable",{type:Boolean,default:!1}),stayOpen:h("stayOpen",{type:Boolean,default:!1}),placeholder(){const{placeholder:t,searchable:e,taggable:s}=this.schema;return t||(e&&s?"Search or add a tag":e?"Select or search entry":void 0)}},mounted(){this.autofocus&&this.focus()},methods:{getListeners(){return{focus:this.onFocus,blur:this.onBlur,input:this.onChange}},addTagOption(t){if(this.taggable){const{optionLabel:e,optionValue:s}=this,n=e&&s?{[e]:t,[s]:t}:t;return this.options.push(n),n}},focusElement(){this.$refs.element.activate()},onAddTag(t){const e=this.addTagOption(t);e&&this.value.push(this.getValueForOption(e))},async onSearchChange(t){this.searchFilter&&(t?(this.searchedOptions=[],this.searchedOptions=await this.resolveData(()=>this.searchFilter(new O(this,{query:t})))):this.searchedOptions=null)}}}),Ps={};var bu=p(gu,_u,vu,!1,yu,null,null,null);function yu(t){for(let e in Ps)this[e]=Ps[e]}var $u=function(){return bu.exports}(),Ut={computed:{inputValue:{get(){return this.value!==null?this.value:""},set(t){this.value=t!==""?this.isInteger?parseInt(t,10):parseFloat(t):null}},isInteger(){return!1},stepValue(){return this.step==null&&!this.isInteger?"any":this.step},decimals:h("decimals",{type:Number}),step:h("step",{type:Number,get(t){return this.isInteger&&t!=null?Math.ceil(t):t}}),min:h("min",{type:Number,get(t){var e;return t=t===void 0?(e=this.getSchemaValue("range",{type:Array}))==null?void 0:e[0]:t,this.isInteger&&t!=null?Math.floor(t):t}}),max:h("max",{type:Number,get(t){var e;return t=t===void 0?(e=this.getSchemaValue("range",{type:Array}))==null?void 0:e[1]:t,this.isInteger&&t!=null?Math.ceil(t):t}}),range:h("range",{type:Array,get(){const{min:t,max:e}=this;return t!=null&&e!=null?[t,e]:void 0},set(t){x(t)&&([this.min,this.max]=t)}})},methods:{getValidations(){const t={},{range:e,min:s,max:n,decimals:a,step:r}=this;if(e?t.range=e:(s!=null&&(t.min=s),n!=null&&(t.max=n)),a!=null)t.decimals=a;else if(r){const i=(`${r}`.split(".")[1]||"").length;i>0?t.decimals=i:t.integer=!0}return this.isInteger&&(t.integer=!0),t}}},Cu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input-field",t._g(t._b({ref:"element",staticClass:"dito-number",attrs:{id:t.dataPath,type:"number",min:t.min,max:t.max,step:t.stepValue},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners))},Du=[],Jd="";const wu=$.register(["number","integer"],{components:{InputField:bt},mixins:[Ut],nativeField:!0,textField:!0,computed:{isInteger(){return this.type==="integer"}}}),xs={};var Pu=p(wu,Cu,Du,!1,xu,null,null,null);function xu(t){for(let e in xs)this[e]=xs[e]}var Su=function(){return Pu.exports}(),Ou=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isReady?s("div",{staticClass:"dito-object",class:t.schema.class,style:t.schema.style,attrs:{id:t.dataPath}},[t.objectData?s("div",{staticClass:"dito-object-content"},[t.isInlined?s("dito-schema-inlined",{attrs:{schema:t.getItemFormSchema(t.schema,t.objectData,t.context),dataPath:t.dataPath,data:t.objectData,meta:t.nestedMeta,store:t.store,disabled:t.disabled||t.isLoading,collapsed:t.collapsed,collapsible:t.collapsible}}):t.component?s(t.component,{tag:"component",attrs:{dataPath:t.dataPath,data:t.objectData,nested:!1}}):t.render?s("span",{domProps:{innerHTML:t._s(t.render(t.getContext()))}}):s("span",{domProps:{innerHTML:t._s(t.getItemLabel(t.schema,t.objectData))}})],1):t._e(),s("dito-edit-buttons",{attrs:{creatable:t.creatable,deletable:t.objectData&&t.deletable,editable:t.objectData&&t.editable,createPath:t.path,editPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.objectData,path:t.path,meta:t.meta,store:t.store},on:{delete:function(n){return t.deleteItem(t.objectData)}}})],1):t._e()},Eu=[],Qd="";const ju=$.register("object",{mixins:[ct],getSourceType(t){return t},methods:{getContext(){return new O(this,{data:this.objectData})}}}),Ss={};var Vu=p(ju,Ou,Eu,!1,ku,null,null,null);function ku(t){for(let e in Ss)this[e]=Ss[e]}var Lu=function(){return Vu.exports}();const Bu=$.register("panel",{defaultValue:()=>{},excludeValue:!0,generateLabel:!1,omitPadding:!0,getPanelSchema(t){const n=t,{name:e}=n;return F(n,["name"])}});let Fu,Tu;const Os={};var Ru=p(Bu,Fu,Tu,!1,Iu,null,null,null);function Iu(t){for(let e in Os)this[e]=Os[e]}var qu=function(){return Ru.exports}(),Mu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("progress",t._g(t._b({ref:"element",staticClass:"dito-progress",attrs:{id:t.dataPath,max:t.progressMax},domProps:{value:t.progressValue}},"progress",t.attributes,!1),t.listeners))},Au=[];const Nu=$.register("progress",{mixins:[Ut],computed:{progressValue(){let{value:t,range:e,step:s}=this;return t!==null?(e&&(t-=e[0]),s&&(t=Math.round(t/s)*s)):t="",t},progressMax(){const{range:t}=this;if(t)return t[1]-t[0]}}}),Es={};var Uu=p(Nu,Mu,Au,!1,zu,null,null,null);function zu(t){for(let e in Es)this[e]=Es[e]}var Hu=function(){return Uu.exports}(),Ku=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ul",{staticClass:"dito-radio-buttons",class:"dito-layout-"+(t.schema.layout||"vertical"),attrs:{id:t.dataPath}},t._l(t.options,function(n){return s("li",[s("label",[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedValue,expression:"selectedValue"}],ref:"element",refInFor:!0,staticClass:"dito-radio-button",attrs:{type:"radio"},domProps:{value:t.getValueForOption(n),checked:t._q(t.selectedValue,t.getValueForOption(n))},on:{change:function(a){t.selectedValue=t.getValueForOption(n)}}},"input",t.attributes,!1),t.listeners)),t._v(t._s(t.getLabelForOption(n)))])])}),0)},Wu=[],Gd="";const Ju=$.register("radio",{mixins:[ut],nativeField:!0}),js={};var Qu=p(Ju,Ku,Wu,!1,Gu,null,null,null);function Gu(t){for(let e in js)this[e]=js[e]}var Xu=function(){return Qu.exports}(),Yu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-section",class:{"dito-section-labelled":!!t.schema.label}},[s("dito-pane",{staticClass:"dito-section-pane",attrs:{schema:t.getItemFormSchema(t.schema,t.item,t.context),dataPath:t.dataPath,data:t.item,meta:t.meta,store:t.store,disabled:t.disabled}})],1)},Zu=[],Xd="";const tc=$.register("section",{defaultValue:()=>{},ignoreMissingValue:t=>!t.nested&&!("default"in t),defaultNested:!1,generateLabel:!1,omitFlexGrow:!0,computed:{item(){return this.nested?this.value:this.data}},methods:{getItemFormSchema:Rt},async processSchema(t,e,s,n,a){await Ft(t,e,n,a)}}),Vs={};var ec=p(tc,Yu,Zu,!1,sc,null,null,null);function sc(t){for(let e in Vs)this[e]=Vs[e]}var nc=function(){return ec.exports}(),ac=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-select"},[s("select",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedValue,expression:"selectedValue"}],ref:"element",attrs:{id:t.dataPath},on:{mousedown:function(n){t.populate=!0},focus:function(n){t.populate=!0},change:function(n){var a=Array.prototype.filter.call(n.target.options,function(r){return r.selected}).map(function(r){var i="_value"in r?r._value:r.value;return i});t.selectedValue=n.target.multiple?a:a[0]}}},"select",t.attributes,!1),t.listeners),[t.populate?[t._l(t.options,function(n){return[t.groupBy?s("optgroup",{attrs:{label:n[t.groupByLabel]}},t._l(n[t.groupByOptions],function(a){return s("option",{domProps:{value:t.getValueForOption(a)}},[t._v(t._s(t.getLabelForOption(a)))])}),0):s("option",{domProps:{value:t.getValueForOption(n)}},[t._v(t._s(t.getLabelForOption(n)))])]})]:t.selectedOption?[s("option",{domProps:{value:t.selectedValue}},[t._v(t._s(t.getLabelForOption(t.selectedOption)))])]:t._e()],2),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{disabled:t.disabled},on:{click:t.clear}}):t._e()])},rc=[],Yd="";const ic=$.register("select",{mixins:[ut],nativeField:!0,data(){return{populate:!0}}}),ks={};var oc=p(ic,ac,rc,!1,lc,null,null,null);function lc(t){for(let e in ks)this[e]=ks[e]}var uc=function(){return oc.exports}(),cc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-slider"},[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.inputValue,expression:"inputValue"}],ref:"element",staticClass:"dito-range",attrs:{id:t.dataPath,type:"range",min:t.min,max:t.max,step:t.stepValue},domProps:{value:t.inputValue},on:{__r:function(n){t.inputValue=n.target.value}}},"input",t.attributes,!1),t.listeners)),t.input?s("input-field",t._g(t._b({staticClass:"dito-number",attrs:{type:"number",min:t.min,max:t.max,step:t.stepValue},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners)):t._e()],1)},dc=[],Zd="";const hc=$.register("slider",{components:{InputField:bt},mixins:[Ut],nativeField:!0,computed:{input:h("input",{type:Boolean,default:!0})}}),Ls={};var pc=p(hc,cc,dc,!1,mc,null,null,null);function mc(t){for(let e in Ls)this[e]=Ls[e]}var fc=function(){return pc.exports}(),_c=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("switch-button",t._g(t._b({ref:"element",staticClass:"dito-switch",attrs:{id:t.dataPath,sync:!0,labels:t.labels},model:{value:t.value,callback:function(n){t.value=n},expression:"value"}},"switch-button",t.attributes,!1),t.listeners))},vc=[],th="";const gc=$.register("switch",{defaultValue:!1,defaultWidth:"auto",components:{SwitchButton:gn},computed:{labels(){return this.schema.labels}}}),Bs={};var bc=p(gc,_c,vc,!1,yc,null,null,null);function yc(t){for(let e in Bs)this[e]=Bs[e]}var $c=function(){return bc.exports}(),Cc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input-field",t._g(t._b({ref:"element",staticClass:"dito-text",attrs:{id:t.dataPath,type:t.inputType},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners))},Dc=[];const wc="****************",Pc=$.register(["text","email","url","hostname","domain","tel","password","creditcard"],{components:{InputField:bt},nativeField:!0,textField:!0,ignoreMissingValue:t=>t.type==="password",computed:{inputType(){return{creditcard:"text",hostname:"text",domain:"text"}[this.type]||this.type},inputValue:{get(){return this.type==="password"&&this.value===void 0&&!this.focused?wc:this.value},set(t){this.value=t}}},methods:{getValidations(){const t={email:"email",url:"url",hostname:"hostname",domain:"domain",password:"password",creditcard:"creditcard"}[this.type];return t?{[t]:!0}:{}}}}),Fs={};var xc=p(Pc,Cc,Dc,!1,Sc,null,null,null);function Sc(t){for(let e in Fs)this[e]=Fs[e]}var Oc=function(){return xc.exports}(),Ec=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("textarea",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.value,expression:"value"}],ref:"element",staticClass:"dito-textarea dito-input",class:{"dito-resizable":t.resizable},attrs:{id:t.dataPath,rows:t.lines},domProps:{value:t.value},on:{input:function(n){n.target.composing||(t.value=n.target.value)}}},"textarea",t.attributes,!1),t.listeners))},jc=[],eh="";const Vc=$.register("textarea",{nativeField:!0,textField:!0,computed:{lines(){return this.schema.lines||4},resizable:h("resizable",{type:Boolean,default:!1})}}),Ts={};var kc=p(Vc,Ec,jc,!1,Lc,null,null,null);function Lc(t){for(let e in Ts)this[e]=Ts[e]}var Bc=function(){return kc.exports}(),Fc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tree-list"},[t.scopes?s("dito-scopes",{attrs:{query:t.query,scopes:t.scopes}}):t._e(),s("div",{staticClass:"dito-tree-panel"},[s("dito-tree-item",{attrs:{schema:t.treeSchema,dataPath:t.treeDataPath,data:t.treeData,draggable:t.draggable,open:!0}}),t.hasEditableForms?s("div",{staticClass:"dito-tree-form-container"},[s("router-view")],1):t._e()],1)],1)},Tc=[],sh="";const Rc=$.register(["tree-list","tree-object"],{mixins:[ct],provide(){return{container:this}},getSourceType(t){return t==="tree-object"?"object":"list"},computed:{path(){var t;return(t=this.formComponent)==null?void 0:t.path},editPath(){var t;return this.$route.path.slice((t=this.path)==null?void 0:t.length)},treeData(){return this.isListSource?{[this.name]:this.value}:this.value},treeDataPath(){return this.isListSource?this.dataPath.slice(0,this.dataPath.length-this.name.length):this.dataPath},treeSchema(){return this.isListSource?{children:d({name:this.name},this.schema)}:this.schema},hasEditableForms(){const t=e=>H(e)&&(this.getSchemaValue("editable",{type:Boolean,default:!1,schema:e})||e.children&&t(e.children));return t(this.schema)}},async processSchema(t,e,s,n,a,r=!0,i=!1,o=null){return ct.processSchema(t,e,s,n,a,r,i,(u,l)=>{const{children:c}=e;if(c)return c.type="tree-list",this.processSchema(t,c,c.name,u,l,r,!0,o)})},getFormSchemasForProcessing(t,e){const{children:s}=t;return X(t,e,s?n=>S(d({},n),{components:S(d({},n.components),{[s.name]:s})}):null)}}),Rs={};var Ic=p(Rc,Fc,Tc,!1,qc,null,null,null);function qc(t){for(let e in Rs)this[e]=Rs[e]}var Mc=function(){return Ic.exports}();function Is(t){return zn(t,{base:10})}var Ac=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-upload"},[s("table",{staticClass:"dito-table dito-table-separators dito-table-background"},[t._m(0),s("vue-draggable",t._b({attrs:{tag:"tbody",list:t.files},on:{start:t.onStartDrag,end:t.onEndDrag}},"vue-draggable",t.getDragOptions(t.draggable),!1),t._l(t.files,function(n,a){return s("tr",{key:n.key},[s("td",{domProps:{innerHTML:t._s(t.renderFile(n,a))}}),s("td",[t._v(t._s(t._f("formatFileSize")(n.size)))]),s("td",[n.upload?[n.upload.error?[t._v("Error: "+t._s(n.upload.error))]:n.upload.active?[t._v("Uploading...")]:n.upload.success?[t._v("Uploaded")]:t._e()]:[t._v("Stored")]],2),s("td",{staticClass:"dito-cell-edit-buttons"},[s("div",{staticClass:"dito-buttons dito-buttons-round"},[t.draggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.deletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:function(r){return t.deleteFile(n,a)}}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()])])])}),0),s("tfoot",[s("tr",[s("td",{attrs:{colspan:4}},[s("div",{staticClass:"dito-upload-footer"},[t.isUploadActive?s("progress",{staticClass:"dito-progress",attrs:{max:"100"},domProps:{value:t.uploadProgress}}):t._e(),s("div",{staticClass:"dito-buttons dito-buttons-round"},[t.isUploadActive?s("button",{staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){n.preventDefault(),t.upload.active=!1}}},[t._v("Cancel All")]):t.isUploadReady?s("button",{staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){n.preventDefault(),t.upload.active=!0}}},[t._v("Upload All")]):t._e(),s("vue-upload",{ref:"upload",staticClass:"dito-button dito-button-add-upload",attrs:{"input-id":t.dataPath,name:t.dataPath,disabled:t.disabled,"post-action":t.uploadPath,extensions:t.extensions,accept:t.accept,multiple:t.multiple,size:t.maxSize,title:"Upload Files"},on:{"input-filter":t.inputFilter,"input-file":t.inputFile},model:{value:t.uploads,callback:function(n){t.uploads=n},expression:"uploads"}})],1)])])])])],1)])},Nc=[function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("thead",{staticClass:"dito-table-head"},[s("tr",[s("th",[s("span",[t._v("Name")])]),s("th",[s("span",[t._v("Size")])]),s("th",[s("span",[t._v("Status")])]),s("th",[s("span")])])])}],nh="";const Uc=$.register("upload",{components:{VueUpload:Nn,VueDraggable:yt},filters:{formatFileSize:Is},mixins:[At],data(){return{uploads:[]}},computed:{upload(){return this.$refs.upload},files(){return qs(this.value)},multiple:h("multiple",{type:Boolean,default:!1,callback:!1}),extensions:h("extensions",{type:[Array,String,RegExp]}),accept:h("accept",{type:Array,get(t){return x(t)?t.join(","):t}}),maxSize:h("maxSize",{type:[String,Number],get(t){return t?Un(t):void 0}}),draggable:h("draggable",{type:Boolean,default:!1,get(t){return t&&this.files.length>1}}),deletable:h("deletable",{type:Boolean,default:!1}),isUploadReady(){return this.uploads.length&&!(this.upload.active||this.upload.uploaded)},isUploadActive(){return this.uploads.length&&this.upload.active},uploadProgress(){return this.uploads.reduce((t,e)=>t+e.progress,0)/this.uploads.length},uploadPath(){return this.getResourceUrl({type:"upload",path:this.api.normalizePath(this.dataPath)})}},methods:{renderFile(t,e){const{render:s}=this.schema;return s?s.call(this,new O(this,{value:t,data:this.files,index:e,dataPath:B(this.dataPath,e)})):Gt(t.name)},deleteFile(t,e){const{name:s}=t;t&&window.confirm(`Do you really want to ${this.verbs.remove} ${s}?`)&&(this.multiple?this.value.splice(e,1):this.value=null,t.upload&&this.upload.remove(t.upload),this.onChange(),this.notify({type:"info",title:"Successfully Removed",text:`${s} was ${this.verbs.deleted}.`}))},getFileIndex(t){return this.multiple&&this.value?this.value.findIndex(e=>e.id===t.id):-1},addFile(t){this.multiple?this.value?this.value.push(t):this.value=[t]:this.value=t},replaceFile(t,e){if(this.multiple){const s=this.getFileIndex(t);s>=0&&(e?this.$set(this.value,s,e):this.value.splice(s,1))}else this.value=e},removeFile(t){this.replaceFile(t,null)},inputFile(t,e){if(t&&!e){const{id:s,name:n,size:a}=t;this.addFile({id:s,name:n,size:a,upload:t})}if(t&&e){const{success:s,error:n}=t;if(s){this.onChange();const a=t.response[0];a?(a.upload=t,this.replaceFile(t,a)):this.removeFile(t)}else if(n){const a={abort:"Upload aborted",denied:"Upload denied",extension:`Unsupported file-type: ${t.name}`,network:"Network error encountered during upload",server:"Server error occurred during upload",size:`File is too large: ${Is(t.size)}`,timeout:"Timeout occurred during upload"}[n]||`Unknown File Upload Error: '${n}'`;this.notify({type:"error",title:"File Upload Error",text:a}),this.removeFile(t)}}},inputFilter(t){var s;const e=t==null?void 0:t.xhr;((s=this.api.cors)==null?void 0:s.credentials)&&e&&!e.withCredentials&&(e.withCredentials=!0)}},processValue(t,e){const s=qs(e).map(r=>{var i=r,{upload:n}=i,a=F(i,["upload"]);return!n||n.success?a:null}).filter(n=>n);return t.multiple?s:s[0]||null}});function qs(t){return t?T(t):[]}const Ms={};var zc=p(Uc,Ac,Nc,!1,Hc,null,null,null);function Hc(t){for(let e in Ms)this[e]=Ms[e]}var Kc=function(){return zc.exports}(),Wc=Object.freeze(Object.defineProperty({__proto__:null,TypeButton:nl,TypeCheckbox:ul,TypeCheckboxes:fl,TypeCode:$l,TypeColor:Sl,TypeComponent:Ll,TypeComputed:ql,TypeDate:Hl,TypeList:eu,TypeLabel:ou,TypeMarkup:fu,TypeMultiselect:$u,TypeNumber:Su,TypeObject:Lu,TypePanel:qu,TypeProgress:Hu,TypeRadio:Xu,TypeSection:nc,TypeSelect:uc,TypeSlider:fc,TypeSwitch:$c,TypeText:Oc,TypeTextarea:Bc,TypeTreeList:Mc,TypeUpload:Kc},Symbol.toStringTag,{value:"Module"})),Jc=["create","created","save","saved","submit","submitted","delete","deleted","edit","edited","close","closed","cancel","cancelled","drag","dragged"].reduce((t,e)=>(t[e]=e,t),{});A.config.productionTip=!1,A.use(Kt),A.use(zs,{dynamic:!0}),A.use(Hs);class Qc{constructor(e,i={}){var o=i,{dito:s={},api:n,views:a={}}=o,r=F(o,["dito","api","views"]);this.el=e,this.api=n=gt({base:"/"},s.api,n),this.options=r,n.locale||(n.locale="en-US"),n.formats=gt({},ln,n.formats),n.request||(n.request=l=>this.request(l)),n.normalizePath=n.normalizePath||n.normalizePaths?Q:l=>l,n.denormalizePath=n.denormalizePath||n.normalizePaths?Qt:l=>l;const u=n.users=I(n.users,{type:"collection"})||{};u.login=I(u.login||"login",{method:"post",parent:u}),u.logout=I(u.logout||"logout",{method:"post",parent:u}),u.session=I(u.session||"session",{method:"get",parent:u}),n.resources=d({any(l){const c=this[l==null?void 0:l.type]||this.default;return l&&c.call(this,l)},default(l){const c=this.any(l.parent);return c?`${c}/${l.path}`:l.path},collection(l){return this.default(l)},member(l){return`${l.path}/${l.id}`},upload(l){return`${this.collection(l.parent)}/upload/${l.path}`}},n.resources),n.headers=d({"Content-Type":"application/json"},n.headers),n.isApiRequest=n.isApiRequest||function(l){return!un(l)||l.startsWith(n.url)},V(e)&&(e=document.querySelector(e)),this.root=new A({el:e,router:new Kt({mode:"history",base:s.base,linkActiveClass:"",linkExactActiveClass:""}),components:{DitoRoot:qt},provide:{api:n,$verbs:()=>Jc,$views:()=>{},$isPopulated:()=>!0,$schemaComponent:()=>null,$schemaParentComponent:()=>null,$routeComponent:()=>null,$dataComponent:()=>null,$sourceComponent:()=>null,$resourceComponent:()=>null,$dialogComponent:()=>null,$panelComponent:()=>null,$tabComponent:()=>null},render:l=>l(qt,{attrs:{id:e.id},props:{unresolvedViews:a,options:r},components:d(d({},Xo),Wc)})})}register(e,s){return $.register(e,s)}request({url:e,method:s="get",data:n=null,params:a=null,headers:r=null}){var o;const i=this.api.isApiRequest(e);return Ks.request(S(d({url:e,method:s,params:a},n&&{data:n}),{baseURL:i?this.api.url:null,headers:d(d({},i&&this.api.headers),r),withCredentials:i&&!!((o=this.api.cors)!=null&&o.credentials)}))}}export{Qc as default};
6
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL3V0aWxzL2RlcHJlY2F0ZS5qcyIsIi4uL3NyYy9taXhpbnMvRGl0b01peGluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19jcmVkaXRjYXJkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kZWNpbWFscy5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZW1haWwuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2hvc3RuYW1lLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kb21haW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2ludGVnZXIuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21heC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19wYXNzd29yZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmFuZ2UuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JlcXVpcmVkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL191cmwuanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRpb25NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9hY2Nlc3Nvci5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvc2NoZW1hLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvRGl0b0NvbXBvbmVudC5qcyIsIi4uL3NyYy9EaXRvVXNlci5qcyIsIi4uL3NyYy9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzIiwiLi4vc3JjL21peGlucy9Sb3V0ZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWUiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSGVhZGVyLnZ1ZSIsIi4uL3NyYy9taXhpbnMvUHVsbGRvd25NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9BY2NvdW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlIiwiLi4vc3JjL3V0aWxzL21hdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NyZWF0ZUJ1dHRvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY29wZXMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvbWl4aW5zL09yZGVyZWRNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlSGVhZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlQ2VsbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVk5vZGUudnVlIiwiLi4vc3JjL1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRGF0YU1peGluLmpzIiwiLi4vc3JjL21peGlucy9PcHRpb25zTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbG9yLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvZmlsdGVyLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxhYmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTWFya3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTXVsdGlzZWxlY3QudnVlIiwiLi4vc3JjL21peGlucy9OdW1iZXJNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVPYmplY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2xpZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVVcGxvYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWUiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIHJldHVybiBpc1RlbXBvcmFyeUlkKGRhdGE/LltpZEtleV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW1EYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSwgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSwgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQoY29udGV4dClcbiAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAvLyBJZiBgb2JqZWN0YCBleHBsaWNpdGx5IHNldHMgdGhlIGtleSB0byBgdW5kZWZpbmVkYCwgcmV0dXJuIGl0LlxuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCB8fCBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgID8gdmFsdWVcbiAgICA6IGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgPyBkZWZhdWx0VmFsdWUoKVxuICAgICAgOiBkZWZhdWx0VmFsdWVcbn1cblxuZnVuY3Rpb24gc2V0KGNvbnRleHQsIGtleSwgdmFsdWUpIHtcbiAgY29udGV4dHMuZ2V0KGNvbnRleHQpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IChpc0Z1bmN0aW9uKGNvbnRleHQpID8gY29udGV4dCgpIDogeyAuLi5jb250ZXh0IH0pXG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICAvLyBgbmVzdGVkYCBpcyBgdHJ1ZWAgd2hlbiB0aGUgZGF0YS1wYXRoIHBvaW50cyBhIHZhbHVlIGluc2lkZSBhbiBpdGVtLCBhbmRcbiAgLy8gYGZhbHNlYCB3aGVuIGl0IHBvaW50cyB0byB0aGUgaXRlbSBpdHNlbGYuXG4gIGdldCBuZXN0ZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmVzdGVkJywgdHJ1ZSlcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2YWx1ZScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBkYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhUGF0aCcsICcnKVxuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmFtZScsICgpID0+IGdldExhc3REYXRhUGF0aE5hbWUodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaW5kZXgnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldFBhcmVudEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBpdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuaXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5wYXJlbnRJdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgaXRlbSgpIHtcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAgIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YScsICgpID0+XG4gICAgICBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIC8vIE5PVEU6IGBwYXJlbnRJdGVtYCBpc24ndCB0aGUgY2xvc2VzdCBkYXRhIHBhcmVudCB0byBgaXRlbWAsIGl0J3MgdGhlXG4gIC8vIGNsb3Nlc3QgcGFyZW50IHRoYXQgaXNuJ3QgYW4gYXJyYXksIGUuZy4gZm9yIHJlbGF0aW9ucyBvciBuZXN0ZWQgSlNPTlxuICAvLyBkYXRhLiAgVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlXG4gIC8vIHVzZSBvZiBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0XG4gIC8vIHBhcmVudC4gSWYgbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsXG4gIC8vIHNvcnRzIG9mIGRhdGEgcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IHBhcmVudEl0ZW0gPVxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHwgbnVsbFxuICAgIHJldHVybiBwYXJlbnRJdGVtICE9PSB0aGlzLml0ZW0gPyBwYXJlbnRJdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgZXhwb3N1cmUgc2luY2UgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LFxuICAvLyBlLmcuIG5lc3RlZCBmb3JtcyBpbiBgcHJvY2Vzc0RhdGEoKWAuIEluc3RlYWQsIGJpbmQgY29tcG9uZW50IHRvIGB0aGlzYFxuICAvLyBvbmx5IHdoZXJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGV2ZW50czogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQXN5bmMgdmVyc2lvbnMgb2YgVnVlJ3MgJG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGVcbiAgICAvLyBldmVudHMgYWRkZWQgLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrc1xuICAgIC8vIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLiRldmVudHMgfHwgKHRoaXMuJGV2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBldmVudHNbZXZlbnRdIHx8IChldmVudHNbZXZlbnRdID0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGhhbmRsZXJzIGZvciB0aGlzIGV2ZW50XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLCBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZWdhdGUoZXZlbnQsIHRhcmdldCkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlKGV2LCB0YXJnZXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub24oZXZlbnQsICguLi5hcmdzKSA9PiB0YXJnZXQuZW1pdChldmVudCwgLi4uYXJncykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzQm9vbGVhbiwgaXNOdW1iZXIsIGlzRnVuY3Rpb24sIGlzRGF0ZSxcbiAgaXNSZWdFeHAsIGFzQXJyYXlcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNoZWNrZXJzID0ge1xuICBCb29sZWFuOiBpc0Jvb2xlYW4sXG4gIE51bWJlcjogaXNOdW1iZXIsXG4gIFN0cmluZzogaXNTdHJpbmcsXG4gIERhdGU6IGlzRGF0ZSxcbiAgQXJyYXk6IGlzQXJyYXksXG4gIE9iamVjdDogaXNPYmplY3QsXG4gIFJlZ0V4cDogaXNSZWdFeHAsXG4gIEZ1bmN0aW9uOiBpc0Z1bmN0aW9uXG59XG5cbi8vIERlY2xhcmUgdGhlc2Ugc2VwYXJhdGVseSBmcm9tIHRoZSBgdHlwZUNvbnZlcnRlcnNgIG9iamVjdCwgdG8gcHJldmVudFxuLy8gQmFiZWwgaXNzdWVzIHdpdGggYE9iamVjdGAgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIGBPYmplY3RgOlxuY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4gISF2YWx1ZVxuY29uc3QgdG9OdW1iZXIgPSB2YWx1ZSA9PiArdmFsdWVcbmNvbnN0IHRvU3RyaW5nID0gdmFsdWUgPT4gU3RyaW5nKHZhbHVlKVxuXG5jb25zdCB0b0RhdGUgPSB2YWx1ZSA9PiBpc0RhdGUodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+IGlzQXJyYXkodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICA6IGFzQXJyYXkodmFsdWUpXG5cbmNvbnN0IHRvT2JqZWN0ID0gdmFsdWUgPT4gaXNPYmplY3QodmFsdWUpXG4gID8gdmFsdWVcbiAgLy8gSWYgYSBPYmplY3QgaXMgZXhwZWN0ZWQgYnV0IGEgQm9vbGVhbiBwcm92aWRlLCBjb252ZXJ0IHRvIGFuIGVtcHR5XG4gIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICA6IHZhbHVlID09PSB0cnVlXG4gICAgPyB7fVxuICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+IGlzUmVnRXhwKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSkgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICksXG4gICAgICBpZDogYCR7aWR9YFxuICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImNvbnN0IGxvZ2dlZERlcHJlY2F0aW9ucyA9IG5ldyBTZXQoKVxuXG5leHBvcnQgZnVuY3Rpb24gZGVwcmVjYXRlKG1lc3NhZ2UpIHtcbiAgLy8gT25seSBsb2cgZGVwcmVjYXRpb24gbWVzc2FnZXMgb25jZS5cbiAgaWYgKCFsb2dnZWREZXByZWNhdGlvbnMuaGFzKG1lc3NhZ2UpKSB7XG4gICAgbG9nZ2VkRGVwcmVjYXRpb25zLmFkZChtZXNzYWdlKVxuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcsIGlzRnVuY3Rpb24sIGFzQXJyYXksIGVxdWFscyxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoLCBsYWJlbGl6ZSwgaHlwaGVuYXRlLCBmb3JtYXRcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBhcHBTdGF0ZSBmcm9tICcuLi9hcHBTdGF0ZS5qcydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZGVwcmVjYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGVwcmVjYXRlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtFbWl0dGVyTWl4aW5dLFxuXG4gIGluamVjdDogW1xuICAgICdhcGknLFxuICAgICckdmVyYnMnLFxuICAgICckdmlld3MnLFxuICAgICckaXNQb3B1bGF0ZWQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8geyAkZGF0YUNvbXBvbmVudDogKCkgPT4gdGhpcyB9XG4gICAgICA6IHt9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGUsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRjaGlsZHJlblswXVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBVc2UgY29tcHV0ZWQgcHJvcGVydGllcyBhcyBsaW5rcyB0byBpbmplY3RzLCBzbyBEaXRvU2NoZW1hIGNhblxuICAgICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICAgIHJldHVybiB0aGlzLiRzY2hlbWFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIFJvdXRlTWl4aW4gY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzRm9ybSA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlld0NvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzVmlldyA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIGN1cnJlbnQgY29tcG9uZW50LCB0aGF0IGlzIGxpbmtlZCB0byBhIHJlc291cmNlIChhbmQgdGh1cyBsb2FkcyBpdHNcbiAgICAvLyBvd24gZGF0YSBhbmQgZG9lc24ndCBob2xkIG5lc3RlZCBkYXRhKS5cbiAgICBkYXRhQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhID8gdGhpcyA6IHRoaXMuJGRhdGFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZGlhbG9nQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFuZWxDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50Py4kcGFyZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50Py4kcGFyZW50LnJvdXRlQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudEZvcm1Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py4kcGFyZW50LmZvcm1Db21wb25lbnRcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlQ3JlYXRlKCkge1xuICAgIHRoaXMuJHVpZCA9ICsrdWlkXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2V0KHRoaXMuc3RvcmUsIGtleSwgdmFsdWUpXG4gICAgfSxcblxuICAgIGdldENoaWxkU3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdG9yZShrZXkpIHx8IHRoaXMuc2V0U3RvcmUoa2V5LCB7fSlcbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hVmFsdWUoXG4gICAgICBrZXlPckRhdGFQYXRoLFxuICAgICAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIHNjaGVtYSA9IHRoaXMuc2NoZW1hLCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4gICAgKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IHR5cGUgJiYgYXNBcnJheSh0eXBlKVxuICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gICAgICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgICAgIGxldCB2YWx1ZSA9IHNjaGVtYVxuICAgICAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgICAgICA6IHNjaGVtYVtrZXlPckRhdGFQYXRoXVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihkZWYpICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgZGVmKSkge1xuICAgICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgICAgICBkZWYgPSBkZWYuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH1cbiAgICAgIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAgICAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgICAgIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydGVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0TGFiZWwoc2NoZW1hLCBuYW1lKSB7XG4gICAgICByZXR1cm4gc2NoZW1hXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnbGFiZWwnLCB7IHR5cGU6IFN0cmluZywgc2NoZW1hIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBsYWJlbGl6ZSxcblxuICAgIGdldEJ1dHRvbkF0dHJpYnV0ZXMobmFtZSwgYnV0dG9uKSB7XG4gICAgICBjb25zdCB2ZXJiID0gdGhpcy52ZXJic1tuYW1lXSB8fCBuYW1lXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzczogYGRpdG8tYnV0dG9uLSR7dmVyYn1gLFxuICAgICAgICB0aXRsZTogYnV0dG9uPy50ZXh0IHx8IGxhYmVsaXplKHZlcmIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldERyYWdPcHRpb25zKGRyYWdnYWJsZSwgZmFsbGJhY2sgPSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGRpc2FibGVkOiAhZHJhZ2dhYmxlLFxuICAgICAgICBoYW5kbGU6ICcuZGl0by1idXR0b24tZHJhZycsXG4gICAgICAgIGRyYWdDbGFzczogJ2RpdG8tZHJhZy1hY3RpdmUnLFxuICAgICAgICBjaG9zZW5DbGFzczogJ2RpdG8tZHJhZy1jaG9zZW4nLFxuICAgICAgICBnaG9zdENsYXNzOiAnZGl0by1kcmFnLWdob3N0JyxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogJ2RpdG8tZHJhZy1mYWxsYmFjaycsXG4gICAgICAgIGZvcmNlRmFsbGJhY2s6IGZhbGxiYWNrXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFF1ZXJ5TGluayhxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiAhIXNjaGVtYSAmJiB0aGlzLmdldFNjaGVtYVZhbHVlKCdpZicsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHtcbiAgICAgIGNvbXBvbmVudHMsXG4gICAgICBidXR0b25zLFxuICAgICAgZGF0YSxcbiAgICAgIHNldHRpbmdzID0ge1xuICAgICAgICB3aWR0aDogNDgwLFxuICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfVxuICAgIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IHRocm91Z2ggdnVlLWpzLW1vZGFsLCBhbmQgd3JhcHMgaXQgaW4gYVxuICAgICAgLy8gcHJvbWlzZSBzbyB0aGF0IHRoZSBidXR0b25zIGluIHRoZSBkaWFsb2cgY2FuIHVzZSBgZGlhbG9nLnJlc29sdmUoKWBcbiAgICAgIC8vIGFuZCBgZGlhbG9nLnJlamVjdCgpYCB0byBjbG9zZSB0aGUgbW9kYWwgZGlhbG9nIGFuZCByZXNvbHZlIC8gcmVqZWN0XG4gICAgICAvLyB0aGUgcHJvbWlzZSBhdCBvbmNlLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy4kbW9kYWwuc2hvdyhEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1kaWFsb2cnKSwge1xuICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgfSwgc2V0dGluZ3MpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UpXG4gICAgICAvLyBSZXNvdXJjZXMgd2l0aG91dCBhIHBhcmVudCBpbmhlcml0IHRoZSBvbmUgZnJvbSBgZGF0YUNvbXBvbmVudGBcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICBpZiAocmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb3VyY2UucGFyZW50ID0gdGhpcy5kYXRhQ29tcG9uZW50Py5yZXNvdXJjZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkoZ2V0UmVzb3VyY2UocmVzb3VyY2UpKVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVVybChyZXNvdXJjZSkge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgbGV0IHVybCA9IG51bGxcbiAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgIC8vIFVzZSBzYW1lIGFwcHJvYWNoIGFzIGF4aW9zIGludGVybmFsbHkgdG8gam9pbiBiYXNlVVJMIHdpdGggcGF0aDpcbiAgICAgICAgdXJsID0gYCR7XG4gICAgICAgICAgdGhpcy5hcGkudXJsLnJlcGxhY2UoL1xcLyskLywgJycpXG4gICAgICAgIH0vJHtcbiAgICAgICAgICBwYXRoLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgICAgIH1gXG4gICAgICAgIC8vIFN1cHBvcnQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycywgd2hpY2ggYXJlIGFkZGVkIHRvIHRoZSBVUkw6XG4gICAgICAgIGNvbnN0IHsgcXVlcnkgfSA9IHJlc291cmNlXG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KS5tYXAoXG4gICAgICAgICAgICAoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgICBgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWBcbiAgICAgICAgICApXG4gICAgICAgICAgdXJsID0gYCR7dXJsfT8ke3BhcmFtcy5qb2luKCcmJyl9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdXJsXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIHJlc291cmNlLCBkYXRhLCBwYXJhbXMsIGludGVybmFsIH0pIHtcbiAgICAgIHVybCA9IHVybCB8fCB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCA9IG1ldGhvZCB8fCByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlSZXF1ZXN0KHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIGRhdGEsIHBhcmFtcyB9KVxuICAgICAgLy8gRGV0ZWN0IGNoYW5nZSBvZiB0aGUgb3duIHVzZXIsIGFuZCBmZXRjaCBpdCBhZ2FpbiBpZiBpdCB3YXMgY2hhbmdlZC5cbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tVc2VyICYmXG4gICAgICAgIG1ldGhvZCA9PT0gJ3BhdGNoJyAmJlxuICAgICAgICBlcXVhbHMocmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlKHRoaXMudXNlci5pZCwgdGhpcy5hcGkudXNlcnMpKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5mZXRjaFVzZXIoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSxcblxuICAgIHJlcXVlc3QoeyBjYWNoZSwgLi4ub3B0aW9ucyB9KSB7XG4gICAgICAvLyBBbGxvdyBjYWNoaW5nIG9mIGxvYWRlZCBkYXRhIG9uIHR3byBsZXZlbHM6XG4gICAgICAvLyAtICdnbG9iYWwnOiBjYWNoZSBnbG9iYWxseSwgZm9yIHRoZSBlbnRpcmUgYWRtaW4gc2Vzc2lvblxuICAgICAgLy8gLSAnbG9jYWwnOiBjYWNoZSBsb2NhbGx5IHdpdGhpbiB0aGUgY2xvc2VzdCByb3V0ZSBjb21wb25lbnQgdGhhdCBpc1xuICAgICAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UgYW5kIGxvYWRzIGl0cyBvd24gZGF0YS5cbiAgICAgIGNvbnN0IGNhY2hlUGFyZW50ID0gY2FjaGUgJiYge1xuICAgICAgICBnbG9iYWw6IHRoaXMuYXBwU3RhdGUsXG4gICAgICAgIGxvY2FsOiB0aGlzLmRhdGFDb21wb25lbnRcbiAgICAgIH1bY2FjaGVdXG4gICAgICBjb25zdCBsb2FkQ2FjaGUgPSBjYWNoZVBhcmVudD8ubG9hZENhY2hlXG4gICAgICAvLyBCdWlsZCBhIGNhY2hlIGtleSBmcm9tIHRoZSBjb25maWc6XG4gICAgICBjb25zdCBjYWNoZUtleSA9IGxvYWRDYWNoZSAmJiBgJHtcbiAgICAgICAgb3B0aW9ucy5tZXRob2QgfHwgJ2dldCd9ICR7XG4gICAgICAgIG9wdGlvbnMudXJsfSAke1xuICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBhcmFtcyB8fCAnJyl9ICR7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgIH1gXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBsb2FkKG9wdGlvbnMpIHtcbiAgICAgIGRlcHJlY2F0ZSgnbG9hZCgpIGlzIGRlcHJlY2F0ZWQuIFVzZSByZXF1ZXN0KCkgaW5zdGVhZC4nKVxuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChvcHRpb25zKVxuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZSh0cnVlKSxcbiAgICAgICAgICAoKSA9PiByZXNvbHZlKGZhbHNlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgY29uc3QgeyB1cmwsIGZpbGVuYW1lIH0gPSBvcHRpb25zXG4gICAgICAvLyBTZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80OTkxNzA2Ni8xMTYzNzA4XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBhLmhyZWYgPSB1cmxcbiAgICAgIGlmIChmaWxlbmFtZSkge1xuICAgICAgICBhLmRvd25sb2FkID0gZmlsZW5hbWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSlcbiAgICAgIGEuY2xpY2soKVxuICAgICAgYm9keS5yZW1vdmVDaGlsZChhKVxuICAgIH0sXG5cbiAgICBub3RpZnkob3B0aW9ucykge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQuY2xvc2VOb3RpZmljYXRpb25zKClcbiAgICB9LFxuXG4gICAgc2V0dXBTY2hlbWFGaWVsZHMoKSB7XG4gICAgICB0aGlzLnNldHVwTWV0aG9kcygpXG4gICAgICB0aGlzLnNldHVwQ29tcHV0ZWQoKVxuICAgICAgdGhpcy5zZXR1cEV2ZW50cygpXG4gICAgfSxcblxuICAgIHNldHVwTWV0aG9kcygpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLm1ldGhvZHMgfHwge30pKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHRoaXNba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBtZXRob2QgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBDb21wdXRlZCgpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLmNvbXB1dGVkIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IGlzRnVuY3Rpb24odmFsdWUpXG4gICAgICAgICAgPyB7IGdldDogdmFsdWUgfVxuICAgICAgICAgIDogaXNPYmplY3QodmFsdWUpICYmIGlzRnVuY3Rpb24odmFsdWUuZ2V0KVxuICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChhY2Nlc3Nvcikge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIGFjY2Vzc29yKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBjb21wdXRlZCBwcm9wZXJ0eSBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgd2F0Y2gsIGV2ZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmICh3YXRjaCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGlzRnVuY3Rpb24od2F0Y2gpID8gd2F0Y2guY2FsbCh0aGlzKSA6IHdhdGNoXG4gICAgICAgIGlmIChpc09iamVjdChoYW5kbGVycykpIHtcbiAgICAgICAgICAvLyBJbnN0YWxsIHRoZSB3YXRjaCBoYW5kbGVycyBpbiB0aGUgbmV4dCB0aWNrLCBzbyBhbGwgY29tcG9uZW50cyBhcmVcbiAgICAgICAgICAvLyBpbml0aWFsaXplZCBhbmQgd2UgY2FuIGNoZWNrIGFnYWluc3QgdGhlaXIgbmFtZXMuXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgICAgIC8vIEV4cGFuZCBwcm9wZXJ0eSBuYW1lcyB0byAnZGF0YS5wcm9wZXJ0eSc6XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeU5hbWUoa2V5KVxuICAgICAgICAgICAgICAgID8gYGRhdGEuJHtrZXl9YFxuICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgIHRoaXMuJHdhdGNoKGV4cHIsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkRXZlbnQgPSAoa2V5LCBldmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgdGhpcy5vbihoeXBoZW5hdGUoZXZlbnQpLCBjYWxsYmFjaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGV2ZW50IGRlZmluaXRpb246ICR7a2V5fTogJHtjYWxsYmFja31gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzY2FuIHNjaGVtYSBmb3IgYG9uW0EtWl1gLXN0eWxlIGNhbGxiYWNrcyBhbmQgYWRkIHRoZW1cbiAgICAgIC8vIFRPRE86IERlcGVyZWNhdGUgb25lIGZvcm1hdCBvciB0aGUgb3RoZXIsIGluIGZhdm91ciBvZiBvbmx5IG9uZSB3YXkgb2ZcbiAgICAgIC8vIGRvaW5nIHRoaW5ncy4gRGVjaWRlIHdoaWNoIG9uZSB0byByZW1vdmUuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYSkpIHtcbiAgICAgICAgaWYgKC9eb25bQS1aXS8udGVzdChrZXkpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXkuc2xpY2UoMiksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRFdmVudChldmVudCwge1xuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBwYXJlbnQgPSBudWxsXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCBoYXNMaXN0ZW5lcnMgPSB0aGlzLmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGNvbnN0IHBhcmVudEhhc0xpc3RlbmVycyA9IHBhcmVudD8uaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgaWYgKGhhc0xpc3RlbmVycyB8fCBwYXJlbnRIYXNMaXN0ZW5lcnMpIHtcbiAgICAgICAgLy8gVGhlIGVmZmVjdHMgb2Ygc29tZSBldmVudHMgbmVlZCBzb21lIHRpbWUgdG8gcHJvcGFnYXRlIHRocm91Z2ggVnVlLlxuICAgICAgICAvLyBVc2UgJG5leHRUaWNrKCkgdG8gbWFrZSBzdXJlIG91ciBoYW5kbGVycyBzZWUgdGhlc2UgY2hhbmdlcy5cbiAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9jZXNzZWRJdGVtYCBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgY29tcG9uZW50cyB0aGF0XG4gICAgICAgIC8vIGFyZSBuZXdseSByZW5kZXJlZCBkdWUgdG8gZGF0YSBjaGFuZ2VzIGhhdmUgcmVnaXN0ZXJlZCB0aGVtc2VsdmVzLlxuICAgICAgICBpZiAoWydsb2FkJywgJ2NoYW5nZSddLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiAoY29udGV4dCA9IERpdG9Db250ZXh0LmdldCh0aGlzLCBjb250ZXh0KSlcbiAgICAgICAgY29uc3QgcmVzID0gaGFzTGlzdGVuZXJzXG4gICAgICAgICAgPyBhd2FpdCB0aGlzLmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAvLyBEb24ndCBidWJibGUgdG8gcGFyZW50IGlmIGhhbmRsZWQgZXZlbnQgcmV0dXJuZWQgYGZhbHNlYFxuICAgICAgICBpZiAocGFyZW50SGFzTGlzdGVuZXJzICYmIHJlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBwYXJlbnQuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9XG4gIH1cbn1cblxubGV0IHVpZCA9IDBcbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT4gKFxuICAgIGBtdXN0IGJlIG51bWVyaWMgYW5kIG1heSBjb250YWluICR7XG4gICAgICAhZGVjaW1hbHMgfHwgZGVjaW1hbHMgPT09ICcqJyA/ICcnIDogZGVjaW1hbHNcbiAgICB9IGRlY2ltYWwgcG9pbnRzYFxuICApXG59XG4iLCJpbXBvcnQgeyBpc0VtYWlsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGVtYWlsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNFbWFpbCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIGEgdmFsaWQgZW1haWwnXG59XG4iLCJpbXBvcnQgeyBpc0hvc3RuYW1lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGhvc3RuYW1lID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNIb3N0bmFtZSh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBob3N0IG5hbWUnXG59XG4iLCJpbXBvcnQgeyBpc0RvbWFpbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBkb21haW4gPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0RvbWFpbih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBkb21haW4nXG59XG4iLCJpbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaW50ZWdlciA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSW50ZWdlcih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIHdob2xlIG51bWJlcidcbn1cbiIsImV4cG9ydCBjb25zdCBtYXggPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1heCkgPT4gdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBtYXgpIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttYXh9IG9yIGxlc3NgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBtaW4gPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1pbikgPT4gdmFsdWUgPj0gbWluLFxuICBtZXNzYWdlKHZhbHVlLCBtaW4pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttaW59IG9yIG1vcmVgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBwYXNzd29yZCA9IHtcbiAgLy8gQWxsb3cgYW55IHZhbHVlLiBGb3Igbm93IHRoaXMgaXMgb25seSB1c2VkIGFzIGEgbWFya2VyLCB0byBhbGxvdyB0aGVcbiAgLy8gcmVxdWlyZWQgdmFsaWRhdGlvbiB0byBoYW5kbGUgdW5jaGFuZ2VkIHBhc3N3b3JkcyBzZXBhcmF0ZWx5LlxuICB2YWxpZGF0ZTogKCkgPT4gdHJ1ZVxufVxuIiwiZXhwb3J0IGNvbnN0IHJhbmdlID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBbbWluLCBtYXhdKSA9PiB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBbbWluLCBtYXhdKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlIGJldHdlZW4gJHttaW59IGFuZCAke21heH1gXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCByZXF1aXJlZCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgc2V0dGluZ3MsIHsgcGFzc3dvcmQgfSkgPT4gKFxuICAgICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJykgfHxcbiAgICAvLyBQYXNzd29yZCBmaWVsZHMgdXNlIGB1bmRlZmluZWRgIGFzIG9wcG9zZWQgdG8gYG51bGxgIHdoZW4gdGhleSdyZSBzZXRcbiAgICAvLyBidXQgdW5jaGFuZ2VkLCBhbGxvdyB0aGlzIHRvIHBhc3MgdGhyb3VnaDpcbiAgICAocGFzc3dvcmQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgKSxcbiAgbWVzc2FnZTogJ2lzIHJlcXVpcmVkJyxcbiAgbnVsbGlzaDogdHJ1ZVxufVxuIiwiaW1wb3J0IHsgaXNVcmwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgdXJsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNVcmwodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgdmFsaWQgVVJMJ1xufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyB2YWxpZGF0aW9ucyBmcm9tICcuLi92YWxpZGF0aW9ucy9pbmRleC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNUb3VjaGVkOiBmYWxzZSxcbiAgICAgIGlzRGlydHk6IGZhbHNlLFxuICAgICAgaXNWYWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBldmVudHMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNUb3VjaGVkID0gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZSgpXG4gICAgICAgIH0sXG4gICAgICAgIGNoYW5nZTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGUobm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlJywgdGhpcy5kYXRhUGF0aCwgdmFsdWUsIHRoaXMudmFsaWRhdGlvbnMpXG4gICAgICBmb3IgKGNvbnN0IFtydWxlLCBzZXR0aW5nXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB2YWxpZGF0aW9uc1tydWxlXVxuICAgICAgICBpZiAodmFsaWRhdG9yICYmICh2YWxpZGF0b3IubnVsbGlzaCB8fCB2YWx1ZSAhPSBudWxsKSkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsaWRhdGUsIG1lc3NhZ2UgfSA9IHZhbGlkYXRvclxuICAgICAgICAgIGlmICghdmFsaWRhdGUodmFsdWUsIHNldHRpbmcsIHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc0Z1bmN0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlKHZhbHVlLCBzZXR0aW5nLCB0aGlzKVxuICAgICAgICAgICAgICAgIDogbWVzc2FnZVxuICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmlzVmFsaWRhdGVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmlzVmFsaWQgPSBpc1ZhbGlkXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnkoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShmYWxzZSlcbiAgICB9LFxuXG4gICAgbWFya0RpcnR5KCkge1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgLy8gQ2xlYXIgY3VycmVudGx5IGRpc3BsYXllZCBlcnJvcnMgb24gbmV3IGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIGFkZEVycm9yKGVycm9yLCBhZGRMYWJlbCA9IGZhbHNlKSB7XG4gICAgICB0aGlzLmVycm9ycyB8fD0gW11cbiAgICAgIGlmIChhZGRMYWJlbCkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwgfHwgdGhpcy5wbGFjZWhvbGRlciB8fCB0aGlzLm5hbWVcbiAgICAgICAgZXJyb3IgPSBgVGhlICR7bGFiZWx9IGZpZWxkICR7ZXJyb3J9LmBcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgLy8gQ29udmVydCBmcm9tIEFKViBlcnJvcnMgb2JqZWN0cyB0byBhbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlc1xuICAgICAgdGhpcy5lcnJvcnMgPSBbXVxuICAgICAgZm9yIChjb25zdCB7IG1lc3NhZ2UgfSBvZiBlcnJvcnMpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihtZXNzYWdlLCB0cnVlKVxuICAgICAgfVxuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgZ2V0RXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzID8gWy4uLnRoaXMuZXJyb3JzXSA6IG51bGxcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IG51bGxcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFBY2Nlc3NvcihcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIGdldCwgc2V0LCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4pIHtcbiAgLy8gYGtleU9yRGF0YVBhdGhgIGNhbiBiZSBhIHNpbXBsZSBwcm9wZXJ0eSBrZXksXG4gIC8vIG9yIGEgZGF0YS1wYXRoIGludG8gc3ViLXByb3BlcnRpZXMsIGJvdGggaW4gYXJyYXkgb3Igc3RyaW5nIGZvcm1hdC5cbiAgaWYgKGlzU3RyaW5nKGtleU9yRGF0YVBhdGgpICYmIGtleU9yRGF0YVBhdGguaW5jbHVkZXMoJy4nKSkge1xuICAgIGtleU9yRGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIH1cbiAgLy8gVXNlIHRoZSBub3JtYWxpemVkIGRhdGEgcGF0aCBmb3IgdGhlIGhhbmRsaW5nIG92ZXJyaWRlc1xuICBjb25zdCBuYW1lID0gbm9ybWFsaXplRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICAvLyBPbmx5IGRldGVybWluZSBzY2hlbWEgdmFsdWUgaWYgd2UgaGF2ZSBubyBnZXR0ZXIsIG9yIHRoZSBnZXR0ZXJcbiAgICAgIC8vIHdhbnRzIHRvIHJlY2VpdmUgdGhlIHZhbHVlIGFuZCBwcm9jZXNzIGl0IGZ1cnRoZXI6XG4gICAgICBjb25zdCB2YWx1ZSA9ICFnZXQgfHwgZ2V0Lmxlbmd0aCA+IDBcbiAgICAgICAgLy8gTk9URTogQmVjYXVzZSBgc2NoZW1hYCBvYmplY3RzIGFyZSByZXRyaWV2ZWQgZnJvbSBgbWV0YWAgb2JqZWN0LCB0aGV5XG4gICAgICAgIC8vIGRvbid0IHNlZW0gdG8gYmUgcmVhY3RpdmUuIFRvIGFsbG93IGNoYW5nZWQgaW4gYHNjaGVtYWAgdmFsdWVzLFxuICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICA/IHRoaXMub3ZlcnJpZGVzICYmIG5hbWUgaW4gdGhpcy5vdmVycmlkZXNcbiAgICAgICAgICA/IHRoaXMub3ZlcnJpZGVzW25hbWVdXG4gICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBjYWxsYmFjayB9KVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHNldCkge1xuICAgICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzIHx8PSB7fVxuICAgICAgICB0aGlzLiRzZXQodGhpcy5vdmVycmlkZXMsIG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmVBY2Nlc3NvcihuYW1lLCB7IGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQgfSA9IHt9KSB7XG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZGVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnM6XG4gICAgICAgIHZhbHVlID0gaXNGdW5jdGlvbihkZWYpID8gZGVmLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KSA6IGRlZlxuICAgICAgICAvLyBUcmlnZ2VyIHNldHRlciBieSBzZXR0aW5nIHZhbHVlIGFuZCBhY2Nlc3NvciB0byBkZWZhdWx0OlxuICAgICAgICB0aGlzW25hbWVdID0gdmFsdWVcbiAgICAgICAgLy8gTm93IGFjY2VzcyBzdG9yZSBhZ2FpbiwgZm9yIHJlYWN0aXZpdHkgdHJhY2tpbmdcbiAgICAgICAgdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIGdldHRlciB0byBmdXJ0aGVyIGNoYW5nZSBvciBwcm9jZXNzIHRoZSB2YWx1ZVxuICAgICAgLy8gcmV0cmlldmVkIGZyb20gdGhlIHN0b3JlOlxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIHNldHRlciB0byByZXR1cm4gYSBuZXcgdmFsdWUgdG8gc2V0LCBvciBkbyB0aGVcbiAgICAgIC8vIHNldHRpbmcgaXRzZWxmLCBhbmQgdGhlbiByZXR1cm4gYHVuZGVmaW5lZGA6XG4gICAgICBpZiAoIXNldCB8fCAodmFsdWUgPSBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdG9yZShuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImNvbnN0IHVpZE1hcCA9IG5ldyBXZWFrTWFwKClcblxuLy8gR2VuZXJhdGVkIGFuZCByZW1lbWJlcnMgdW5pcXVlIGlkcyBwZXIgcGFzc2VkIG9iamVjdCB1c2luZyBhIHdlYWsgbWFwLlxubGV0IHVpZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBnZXRVaWQob2JqZWN0LCBpdGVtSWQpIHtcbiAgbGV0IGlkID0gdWlkTWFwLmdldChvYmplY3QpXG4gIGlmICghaWQpIHtcbiAgICBpZCA9IGlkID0gaXRlbUlkIHx8IGBAJHsrK3VpZH1gXG4gICAgdWlkTWFwLnNldChvYmplY3QsIGlkKVxuICB9XG4gIHJldHVybiBpZFxufVxuIiwiaW1wb3J0IHsgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzSW50ZWdlciwgYXNBcnJheSwgcGFyc2VEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnXG5cbi8vIFNjaGVtYUdyYXBoIGlzIGEgY2xhc3MgdG8gY29sbGVjdCBzY2hlbWEgZ3JhcGggbWV0YSBpbmZvcm1hdGlvbiBpbiBvcmRlciB0b1xuLy8gcHJvY2VzcyBzb3VyY2VzIGFuZCByZWxhdGlvbnMgZm9yIHRoZSBnaXZlbiB0YXJnZXRzICdzZXJ2ZXInIGFuZCAnY2xpcGJvYXJkJyxcbi8vIGFjY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSAoc3ViR3JhcGhba2V5XSA/Pz0ge30pXG4gICAgfVxuICAgIHN1YkdyYXBoLiRzZXR0aW5ncyA9IHtcbiAgICAgIC4uLmRlZmF1bHRzLCAvLyBTZWUgYGFkZFNvdXJjZShkYXRhUGF0aClgXG4gICAgICAuLi5zdWJHcmFwaC4kc2V0dGluZ3MsXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgLy8gT25seSBzZXQgYHJlbGF0ZWQ6IGZhbHNlYCB0aHJvdWdoIHRoZSBkZWZhdWx0cywgYXMgYHNldFNvdXJjZVJlbGF0ZWQoKWBcbiAgICAvLyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBgYWRkU291cmNlKClgLCBkZXBlbmRpbmcgb24gdGhlIGdyYXBoIHN0cnVjdHVyZS5cbiAgICB0aGlzLnNldChkYXRhUGF0aCwgeyB0eXBlOiAnc291cmNlJywgc2NoZW1hIH0sIHsgcmVsYXRlZDogZmFsc2UgfSlcbiAgfVxuXG4gIHNldFNvdXJjZVJlbGF0ZWQoZGF0YVBhdGgpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgcmVsYXRlZDogdHJ1ZSxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgc2NoZW1hLFxuICAgICAgaW50ZXJuYWw6ICEhcmVsYXRlZERhdGFQYXRoLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChyZWxhdGVkRGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aCkge1xuICAgIHJldHVybiBkYXRhUGF0aFxuICAgICAgPyAodGhpcy5yZWZlcmVuY2VzW2RhdGFQYXRoXSA/Pz0gbmFub2lkKDYpKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBmbGF0dGVuKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSBncmFwaCA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGZvciAoY29uc3QgW2tleSwgeyAkc2V0dGluZ3MsIC4uLnN1YkdyYXBoIH1dIG9mIE9iamVjdC5lbnRyaWVzKGdyYXBoKSkge1xuICAgICAgICBpZiAoJHNldHRpbmdzKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksICRzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbc3ViS2V5LCBzZXR0aW5nc10gb2YgZmxhdHRlbihzdWJHcmFwaCkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2Ake2tleX0vJHtzdWJLZXl9YCwgc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllc1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKHRoaXMuZ3JhcGgpXG4gIH1cblxuICBwcm9jZXNzKHNvdXJjZVNjaGVtYSwgZGF0YSwgeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGNsaXBib2FyZCA9IHRhcmdldCA9PT0gJ2NsaXBib2FyZCdcbiAgICBpZiAoY2xpcGJvYXJkKSB7XG4gICAgICBkZWxldGUgZGF0YVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIHNldHRpbmdzXSBvZiB0aGlzLmZsYXR0ZW4oKSkge1xuICAgICAgY29uc3QgeyB0eXBlLCBzY2hlbWEsIGludGVybmFsLCByZWxhdGVkLCByZWZlcmVuY2UgfSA9IHNldHRpbmdzXG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlID09PSAnc291cmNlJ1xuICAgICAgY29uc3QgcmVsYXRpb24gPSB0eXBlID09PSAncmVsYXRpb24nXG4gICAgICBpZiAoc291cmNlIHx8IHJlbGF0aW9uICYmIGludGVybmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlQXREYXRhUGF0aChkYXRhLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgY29uc3QgcmVtb3ZlSWQgPSBjbGlwYm9hcmQgJiYgc291cmNlICYmICFyZWxhdGVkXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gY2xpcGJvYXJkICYmIChcbiAgICAgICAgICByZWxhdGlvbiAmJiBpbnRlcm5hbCB8fFxuICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhc0FycmF5KHZhbHVlcykuZmxhdCgpKSB7XG4gICAgICAgICAgY29uc3QgaWRLZXkgPSAoXG4gICAgICAgICAgICBzb3VyY2UgJiYgc2NoZW1hLmlkS2V5IHx8XG4gICAgICAgICAgICByZWxhdGlvbiAmJiBzY2hlbWEucmVsYXRlQnkgfHxcbiAgICAgICAgICAgICdpZCdcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWU/LltpZEtleV1cbiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZUlkKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgIH0gaWYgKHJlZmVyZW5jZUlkIHx8IGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgIGlmIChpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICAgIGlkID0gaWQuc2xpY2UoMSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZWZLZXkgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICAvLyBDbGlwYm9hcmQganVzdCBuZWVkcyB0ZW1wb3JhcnkgaWRzIHVuZGVyIHRoZSBhY3R1YWwgYGlkS2V5YC5cbiAgICAgICAgICAgICAgICA/IGlkS2V5XG4gICAgICAgICAgICAgICAgLy8gU2VydmVyIHdhbnRzIE9iamVjdGlvbi1zdHlsZSAnI2lkJyAvICcjcmVmJyBwYWlycy5cbiAgICAgICAgICAgICAgICA6IHNvdXJjZSA/ICcjaWQnIDogJyNyZWYnXG4gICAgICAgICAgICAgIGNvbnN0IHJldlZhbHVlID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyBgQCR7aWR9YFxuICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleSByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAvLyBhY2Nyb3NzIHRoZSBmdWxsIGdyYXBoLlxuICAgICAgICAgICAgICAgIDogcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICA/IGAke3JlZmVyZW5jZX0tJHtpZH1gXG4gICAgICAgICAgICAgICAgICA6IGlkIC8vIEEgdGVtcG9yYXJ5IGlkIHdpdGhvdXQgYSByZWxhdGVkLCBqdXN0IHByZXNlcnZlIGl0LlxuICAgICAgICAgICAgICB2YWx1ZVtyZWZLZXldID0gcmV2VmFsdWVcbiAgICAgICAgICAgICAgaWYgKHJlZktleSAhPT0gaWRLZXkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRVaWQgfSBmcm9tICcuL3VpZC5qcydcbmltcG9ydCB7IFNjaGVtYUdyYXBoIH0gZnJvbSAnLi9TY2hlbWFHcmFwaC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIGNsb25lLCBjYW1lbGl6ZSwgaXNNb2R1bGVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNvbXBvbmVudHMgPSB7fVxuY29uc3QgdW5rbm93blR5cGVSZXBvcnRlZCA9IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KSB7XG4gIHR5cGVDb21wb25lbnRzW3R5cGVdID0gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29tcG9uZW50KHR5cGUsIGFsbG93TnVsbCA9IGZhbHNlKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVDb21wb25lbnRzW3R5cGVdIHx8IG51bGxcbiAgaWYgKCFjb21wb25lbnQgJiYgIWFsbG93TnVsbCAmJiAhdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSkge1xuICAgIC8vIFJlcG9ydCBlYWNoIG1pc3NpbmcgdHlwZSBvbmx5IG9uY2UsIHRvIGF2b2lkIGZsb29kaW5nIHRoZSBjb25zb2xlOlxuICAgIHVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0gPSB0cnVlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERpdG8gY29tcG9uZW50IHR5cGU6ICcke3R5cGV9J2ApXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaFNjaGVtYShzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHNjaGVtYXMgPSBbXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhzY2hlbWE/LnRhYnMgfHwge30pLFxuICAgIHNjaGVtYVxuICBdXG4gIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICBpZiAoc2NoZW1hKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEpXG4gICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgc2NoZW1hID0+IHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKVxuICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBjb21wb25lbnQgOiB1bmRlZmluZWRcbiAgKSB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyB0cnVlIDogdW5kZWZpbmVkXG4gICkgPT09IHRydWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5U2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+ICFjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gZmFsc2UgOiB1bmRlZmluZWRcbiAgKSAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWEoc2NoZW1hLCB1bndyYXBNb2R1bGUgPSBmYWxzZSkge1xuICBpZiAoaXNGdW5jdGlvbihzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gc2NoZW1hKClcbiAgfVxuICBpZiAoaXNQcm9taXNlKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBhd2FpdCBzY2hlbWFcbiAgfVxuICBpZiAoaXNNb2R1bGUoc2NoZW1hKSkge1xuICAgIC8vIENvcHkgdG8gY29udmVydCBmcm9tIG1vZHVsZSB0byBvYmplY3Q6XG4gICAgc2NoZW1hID0geyAuLi5zY2hlbWEgfVxuICAgIC8vIFVud3JhcCBkZWZhdWx0IG9yIG5hbWVkIHNjaGVtYVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgKHVud3JhcE1vZHVsZSB8fCBzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGtleXNbMF1cbiAgICAgICAgc2NoZW1hID0gc2NoZW1hW25hbWVdXG4gICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hcyhcbiAgdW5yZXNvbHZlZFNjaGVtYXMsXG4gIHJlc29sdmVJdGVtID0gcmVzb2x2ZVNjaGVtYVxuKSB7XG4gIGxldCBzY2hlbWFzID0gaXNGdW5jdGlvbih1bnJlc29sdmVkU2NoZW1hcylcbiAgICA/IHVucmVzb2x2ZWRTY2hlbWFzKClcbiAgICA6IHVucmVzb2x2ZWRTY2hlbWFzXG4gIHNjaGVtYXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYXMsIGZhbHNlKVxuICBpZiAoaXNBcnJheShzY2hlbWFzKSkge1xuICAgIC8vIFRyYW5zbGF0ZSBhbiBhcnJheSBvZiBkeW5hbWljIGltcG9ydCwgZWFjaCBpbXBvcnRpbmcgb25lIG5hbWVkIHNjaGVtYVxuICAgIC8vIG1vZHVsZSB0byBhbiBvYmplY3Qgd2l0aCBuYW1lZCBlbnRyaWVzLlxuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoYXdhaXQgUHJvbWlzZS5hbGwoc2NoZW1hcy5tYXAoXG4gICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZUl0ZW0oaXRlbSwgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIFtzY2hlbWEubmFtZSwgc2NoZW1hXVxuICAgICAgfVxuICAgICkpKVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNjaGVtYXMpKSB7XG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhhd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhzY2hlbWFzKS5tYXAoXG4gICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZUl0ZW0oaXRlbSwgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgIH1cbiAgICApKSlcbiAgfVxuICByZXR1cm4gc2NoZW1hc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVBhbmVscyhzY2hlbWEpIHtcbiAgY29uc3QgeyBwYW5lbHMgfSA9IHNjaGVtYVxuICBpZiAoc2NoZW1hLnBhbmVscykge1xuICAgIHNjaGVtYS5wYW5lbHMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhwYW5lbHMpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcykge1xuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgYXdhaXQgcmVzb2x2ZVBhbmVscyhzY2hlbWEpXG4gIGlmIChpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSkge1xuICAgIGF3YWl0IHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEsIG5hbWUsIGNoaWxkcmVuLCAwKVxuICB9IGVsc2Uge1xuICAgIC8vIEEgbXVsdGktY29tcG9uZW50IHZpZXcsIHN0YXJ0IGF0IGxldmVsIDFcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4sIDEpXG4gIH1cbiAgcm91dGVzLnB1c2goe1xuICAgIHBhdGg6IGAvJHtzY2hlbWEucGF0aH1gLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbXBvbmVudCxcbiAgICBtZXRhOiB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzQ29tcG9uZW50KGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gIHNjaGVtYS5sZXZlbCA9IGxldmVsXG4gIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICByZXR1cm4gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ucHJvY2Vzc1NjaGVtYT8uKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSkge1xuICAvLyBVc2VkIGZvciB2aWV3IGFuZCBzb3VyY2Ugc2NoZW1hcywgc2VlIFNvdXJjZU1peGluXG4gIHNjaGVtYS5uYW1lID0gbmFtZVxuICBzY2hlbWEucGF0aCA9IHNjaGVtYS5wYXRoIHx8IGFwaS5ub3JtYWxpemVQYXRoKG5hbWUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbCkge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGZvckVhY2hTY2hlbWFDb21wb25lbnQoc2NoZW1hLCAoY29tcG9uZW50LCBuYW1lKSA9PiB7XG4gICAgcHJvbWlzZXMucHVzaChwcm9jZXNzQ29tcG9uZW50KGFwaSwgY29tcG9uZW50LCBuYW1lLCByb3V0ZXMsIGxldmVsKSlcbiAgfSlcbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKSB7XG4gIC8vIEZpcnN0IHJlc29sdmUgdGhlIGZvcm1zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBiYWNrIG9uIHRoZSBzY2hlbWEuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzIH0gPSBzY2hlbWFcbiAgaWYgKGZvcm1zKSB7XG4gICAgZm9ybXMgPSBzY2hlbWEuZm9ybXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhmb3JtcywgcmVzb2x2ZUZvcm0pXG4gIH0gZWxzZSBpZiAoZm9ybSkge1xuICAgIGZvcm0gPSBzY2hlbWEuZm9ybSA9IGF3YWl0IHJlc29sdmVGb3JtKGZvcm0pXG4gIH0gZWxzZSBpZiAoY29tcG9uZW50cykge1xuICAgIC8vIE5PVEU6IFByb2Nlc3NpbmcgZm9ybXMgaW4gY29tcHV0ZWQgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSBpdFxuICAgIC8vIG9ubHkgY2FuIGJlIGNvbXB1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggYWN0dWFsIGRhdGEuXG4gICAgaWYgKGlzT2JqZWN0KGNvbXBvbmVudHMpKSB7XG4gICAgICBmb3JtID0geyBjb21wb25lbnRzIH1cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9IC8vIE9ubHkgdXNlZCBmb3IgcHJvY2VzcyBsb29wIGJlbG93LlxuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIGZvciAoY29uc3QgZm9ybSBvZiBPYmplY3QudmFsdWVzKGZvcm1zKSkge1xuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgZm9ybSwgY2hpbGRyZW4sIGxldmVsICsgMSlcbiAgfVxuICByZXR1cm4gY2hpbGRyZW5cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGb3JtKGZvcm0pIHtcbiAgZm9ybSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoZm9ybSwgdHJ1ZSlcbiAgaWYgKGZvcm0pIHtcbiAgICBhd2FpdCByZXNvbHZlUGFuZWxzKGZvcm0pXG4gIH1cbiAgcmV0dXJuIGZvcm1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgLy8gSWYgdGhlIHNjaGVtYSBoYXMgYSB0eXBlLCBpdCBpcyBhIHNpbmdsZS1jb21wb25lbnQgdmlldy5cbiAgcmV0dXJuICEhc2NoZW1hLnR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgYm90aCBzaW5nbGUgZm9ybSBhbmQgbXVsdGlwbGUgZm9ybXMgbm90YXRpb24sIGFzIHdlbGwgYXMgaW5saW5lZFxuICAvLyBjb21wb25lbnRzLlxuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hKSAmJiAhIShcbiAgICBzY2hlbWEuZm9ybSB8fFxuICAgIHNjaGVtYS5mb3JtcyB8fFxuICAgIHNjaGVtYS5jb21wb25lbnRzXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB7IHZpZXcgfSA9IHNjaGVtYVxuICBjb25zdCB2aWV3U2NoZW1hID0gdmlldyAmJiBjb250ZXh0LnZpZXdzW3ZpZXddXG4gIHJldHVybiB2aWV3U2NoZW1hXG4gICAgPyBoYXNGb3JtU2NoZW1hKHZpZXdTY2hlbWEpXG4gICAgICA/IHZpZXdTY2hlbWFcbiAgICAgIC8vIE5PVEU6IFZpZXdzIGNhbiBoYXZlIHRhYnMsIGluIHdoaWNoIGNhc2UgdGhlIHZpZXcgY29tcG9uZW50IGlzIG5lc3RlZFxuICAgICAgLy8gaW4gb25lIG9mIHRoZSB0YWJzLCBnbyBmaW5kIGl0LlxuICAgICAgOiBmb3JFYWNoU2NoZW1hKHZpZXdTY2hlbWEsIHNjaGVtYSA9PiB7XG4gICAgICAgIGNvbnN0IHZpZXdDb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50cz8uW3ZpZXddXG4gICAgICAgIGlmIChoYXNGb3JtU2NoZW1hKHZpZXdDb21wb25lbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHZpZXdDb21wb25lbnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICByZXR1cm4gdmlld1xuICAgID8gdmlldy5sZXZlbCA9PT0gMFxuICAgICAgPyBgLyR7dmlldy5wYXRofWAgLy8gQSBzaW5nbGUtY29tcG9uZW50IHZpZXdcbiAgICAgIDogYC8ke3ZpZXcucGF0aH0vJHt2aWV3LnBhdGh9YCAvLyBBIG11bHRpLWNvbXBvbmVudCB2aWV3XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIG1vZGlmeUZvcm0pIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlldykge1xuICAgIHNjaGVtYSA9IHZpZXdcbiAgfSBlbHNlIGlmIChzY2hlbWEudmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB2aWV3OiAnJHtzY2hlbWEudmlld30nYClcbiAgfVxuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzLCBjb21wYWN0IH0gPSBzY2hlbWFcbiAgaWYgKCFmb3JtICYmICFmb3Jtcykge1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAvLyBDb252ZXJ0IGlubGluZWQgY29tcG9uZW50cyB0byBmb3Jtcywgc3VwcG9ydGluZyBgY29tcGFjdGAgc2V0dGluZy5cbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMsIGNvbXBhY3QgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBgZm9ybXNgLCBgZm9ybWAgb3IgYGNvbXBvbmVudHNgLCByZXR1cm4gYW5kIGVtcHR5IGBmb3Jtc2Agb2JqZWN0LlxuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZvcm1zKS5tYXAoKFt0eXBlLCBmb3JtXSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBgc2NoZW1hLmNvbXBvbmVudHNgIGNhbGxiYWNrcyB0byBjcmVhdGUgY29tcG9uZW50cyBvbiB0aGUgZmx5LlxuICAgICAgaWYgKGlzRnVuY3Rpb24oZm9ybS5jb21wb25lbnRzKSkge1xuICAgICAgICBmb3JtID0ge1xuICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgY29tcG9uZW50czogZm9ybS5jb21wb25lbnRzKGNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbdHlwZSwgbW9kaWZ5Rm9ybT8uKGZvcm0pID8/IGZvcm1dXG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pIHtcbiAgcmV0dXJuIGZvcm1zW2l0ZW0/LnR5cGVdIHx8IGZvcm1zLmRlZmF1bHQgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KSB7XG4gIHJldHVybiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyhnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQpLCBpdGVtKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWwoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEubGFiZWwgIT09IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhY3Qoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5jb21wYWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEuaW5saW5lZCB8fCBzY2hlbWEuY29tcG9uZW50cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoXG4gICAgc2NoZW1hLm5lc3RlZCB8fFxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHROZXN0ZWQgPT09IHRydWVcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkT21pdFBhZGRpbmcoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lm9taXRQYWRkaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMgYm90aCBvbiBzY2hlbWEgYW5kIG9uIGNvbXBvbmVudCBsZXZlbC5cbiAgLy8gTk9URTogQXQgdGhlIHRpbWUgb2YgY3JlYXRpb24sIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQsIChlLmcuIGlmXG4gIC8vIGVudHJpZXMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBuZXN0ZWQgZm9ybXMsIHRoZSBwYXJlbnQgZm9ybSBpc24ndCBtb3VudGVkKSBzb1xuICAvLyB3ZSBjYW4ndCB1c2UgYGRhdGFQYXRoYCB0byBnZXQgdG8gY29tcG9uZW50cywgYW5kIHRoZSBgZGVmYXVsdFZhbHVlYCBmcm9tXG4gIC8vIHRoZXJlLiBUaGF0J3Mgd2h5IGBkZWZhdWx0VmFsdWVgIGlzIGRlZmluZWQgc3RhdGljYWxseSBpbiB0aGUgY29tcG9uZW50czpcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gc2NoZW1hLmRlZmF1bHRcbiAgY29uc3QgdmFsdWUgPSBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgID8gZGVmYXVsdFZhbHVlXG4gICAgOiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0VmFsdWVcbiAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUpXG4gICAgPyB2YWx1ZShzY2hlbWEpXG4gICAgOiBjbG9uZSh2YWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpIHtcbiAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG4gIHJldHVybiAhIShcbiAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgdHlwZU9wdGlvbnM/Lmlnbm9yZU1pc3NpbmdWYWx1ZT8uKHNjaGVtYSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWxzKHNjaGVtYSkge1xuICBjb25zdCBjaGVja0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+XG4gICAgT2JqZWN0LnZhbHVlcyhjb21wb25lbnRzIHx8IHt9KS5zb21lKGhhc0xhYmVsKVxuXG4gIHJldHVybiAoXG4gICAgY2hlY2tDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKSB8fFxuICAgIE9iamVjdC52YWx1ZXMoc2NoZW1hLnRhYnMgfHwge30pLnNvbWUoY2hlY2tDb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0cyhzY2hlbWEsIGRhdGEgPSB7fSwgY29tcG9uZW50KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgcm9vdERhdGE6IGRhdGEgfVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lKSA9PiB7XG4gICAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNldHMgdXAgYSBkYXRhIG9iamVjdCB0aGF0IGhhcyBrZXlzIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbFxuICAvLyBmb3JtIGZpZWxkcywgc28gdGhleSBjYW4gYmUgY29ycmVjdGx5IHdhdGNoZWQgZm9yIGNoYW5nZXMuXG4gIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsIGRhdGEsIG51bGwsIG51bGwsIHByb2Nlc3NCZWZvcmUsIG51bGwsIG9wdGlvbnNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50ID0gbnVsbCxcbiAgcm9vdERhdGEgPSBjb21wb25lbnQ/LnJvb3REYXRhXG59ID0ge30pIHtcbiAgY29uc3QgeyBjb21wdXRlIH0gPSBzY2hlbWFcbiAgaWYgKGNvbXB1dGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGUoRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgLy8gT3ZlcnJpZGUgdmFsdWUgdG8gcHJldmVudCBlbmRsZXNzIHJlY3Vyc2lvbiB0aHJvdWdoIGNhbGxpbmcgdGhlXG4gICAgICAvLyBnZXR0ZXIgZm9yIGB0aGlzLnZhbHVlYCBpbiBgRGl0b0NvbnRleHRgOlxuICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGFcbiAgICB9KSlcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVXNlIGAkc2V0KClgIGRpcmVjdGx5IGluc3RlYWQgb2YgYHRoaXMudmFsdWUgPSDigKZgIHRvIHVwZGF0ZSB0aGVcbiAgICAgIC8vIHZhbHVlIHdpdGhvdXQgY2FsbGluZyBwYXJzZSgpOlxuICAgICAgVnVlLnNldChkYXRhLCBuYW1lLCB2YWx1ZSlcbiAgICB9XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIHN0aWxsIG1pc3NpbmcgYWZ0ZXIgY29tcHV0ZSwgc2V0IHRoZSBkZWZhdWx0IGZvciBpdDpcbiAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICBWdWUuc2V0KGRhdGEsIG5hbWUsIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpKVxuICB9XG4gIC8vIE5vdyBhY2Nlc3MgdGhlIHZhbHVlLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgcmVhY3Rpdml0eSBhbmQgbmVlZHMgdG9cbiAgLy8gaGFwcGVuIGFmdGVyIGFsbCBwcmlvciBtYW5pcHVsYXRpb24gdGhyb3VnaCBgJHNldCgpYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHNjaGVtYU9ubHksIC8vIHdldGhlciB0byBvbmx5IGluY2x1ZGUgZGF0YSBjb3ZlcmVkIGJ5IHRoZSBzY2hlbWEsIG9yIGFsbCBkYXRhXG4gIHRhcmdldFxufSA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgc2NoZW1hT25seSwgdGFyZ2V0LCByb290RGF0YTogZGF0YSB9XG4gIGNvbnN0IHByb2Nlc3NlZERhdGEgPSBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBkYXRhLCBvcHRpb25zKVxuICBjb25zdCBncmFwaCA9IG5ldyBTY2hlbWFHcmFwaCgpXG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIG9wdGlvbnMpXG4gICAgLy8gVGhlIHNjaGVtYSBleHBlY3RzIHRoZSBgd3JhcFByaW1pdGl2ZXNgIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBwcmVzZW50IG9uXG4gICAgLy8gdGhlIGRhdGEgdGhhdCBpdCBpcyBhcHBsaWVkIG9uLCBzbyB3YXJwIGJlZm9yZSBhbmQgdW53cmFwIGFmdGVyLlxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgb3JkZXJLZXksIGlkS2V5ID0gJ2lkJyB9ID0gc2NoZW1hXG4gICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZW50cnkgPT4gKHtcbiAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiBlbnRyeVxuICAgICAgICB9KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFsd2F5cyBzaGFsbG93LWNsb25lIGFycmF5IHZhbHVlczpcbiAgICAgICAgdmFsdWUgPSBbLi4udmFsdWVdXG4gICAgICB9XG4gICAgICBpZiAob3JkZXJLZXkgJiYgdGFyZ2V0ID09PSAnY2xpcGJvYXJkJykge1xuICAgICAgICAvLyBTb3J0IHRoZSBkYXRhIGJhY2sgaW50byB0aGUgbmF0dXJhbCBzZXF1ZW5jZSBhcyBkZWZpbmVkIGJ5IHRoZWlyIGlkcyxcbiAgICAgICAgLy8gc28gY29weS1wYXN0aW5nIGJldHdlZW4gc2VydmVycyAoZS5nLiBuZXN0ZWQgZm9udC1jdXRzIG9uIExpbmV0bylcbiAgICAgICAgLy8gbmF0dXJhbGx5IGdldHMgbWFwcGVkIHRvIHRoZSBzYW1lIGVudHJpZXMgaW4gdGhlIGdyYXBoLlxuICAgICAgICB2YWx1ZS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQxID0gYT8uW2lkS2V5XVxuICAgICAgICAgIGNvbnN0IGlkMiA9IGI/LltpZEtleV1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaWQxID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDEpID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMikgPyAtMVxuICAgICAgICAgICAgOiBpZDEgLSBpZDJcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgdmFsdWUsXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGEsXG4gICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICBwcm9jZXNzZWREYXRhXG4gICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBmaXJzdCwgaWYgb25lIGlzIHByb3ZpZGVkLCBzbyB0aGF0XG4gICAgLy8gaXQgY2FuIG1vZGlmeSBkYXRhIGluIGBwcm9jZXNzZWREYXRhYCBldmVuIGlmIGl0IHByb3ZpZGVzIGBleGNsdWRlOiB0cnVlYFxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICB2YWx1ZSA9IHByb2Nlc3MoZ2V0Q29udGV4dCgpKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICAgIC8vIFN1cHBvcnQgZnVuY3Rpb25zIG5leHQgdG8gYm9vbGVhbnMgZm9yIGBzY2hlbWEuZXhjbHVkZWA6XG4gICAgICBleGNsdWRlID09PSB0cnVlIHx8XG4gICAgICBpc0Z1bmN0aW9uKGV4Y2x1ZGUpICYmIGV4Y2x1ZGUoZ2V0Q29udGV4dCgpKVxuICAgICkge1xuICAgICAgZGVsZXRlIHByb2Nlc3NlZERhdGFbbmFtZV1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IHR5cGVPcHRpb25zPy5wcm9jZXNzVmFsdWVcbiAgICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgZGF0YVBhdGgsXG4gICAgcHJvY2Vzc2VkRGF0YSxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIHByb2Nlc3NBZnRlcixcbiAgICBvcHRpb25zXG4gIClcblxuICByZXR1cm4gZ3JhcGgucHJvY2Vzcyhzb3VyY2VTY2hlbWEsIHByb2Nlc3NlZERhdGEsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgc2NoZW1hLFxuICBkYXRhLFxuICBkYXRhUGF0aCxcbiAgcHJvY2Vzc2VkRGF0YSxcbiAgcHJvY2Vzc0JlZm9yZSxcbiAgcHJvY2Vzc0FmdGVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgcHJvY2Vzc0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+IHtcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IChkYXRhUGF0aCwgdG9rZW4pID0+IGRhdGFQYXRoICE9IG51bGxcbiAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKVxuICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGF0aCA9IGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICAgID8gZ2V0RGF0YVBhdGgoY29tcG9uZW50RGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICAgZ2V0Rm9ybVNjaGVtYXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybXMoY29tcG9uZW50U2NoZW1hLCBjb250ZXh0KVxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKVxuICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IGNsb25lSXRlbShjb21wb25lbnRTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb2Nlc3NBZnRlcj8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLCBkYXRhLCBuYW1lLCBjb21wb25lbnREYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBpZiAoc2NoZW1hLnRhYnMpIHtcbiAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSkge1xuICAgICAgcHJvY2Vzc0NvbXBvbmVudHModGFiLmNvbXBvbmVudHMpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0QWxsUGFuZWxTY2hlbWFzKHNjaGVtYSwgZGF0YVBhdGgpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuc2NoZW1hLmNvbXBvbmVudHMpXG4gIH1cblxuICByZXR1cm4gcHJvY2Vzc2VkRGF0YSB8fCBkYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lZFNjaGVtYXMoZGVzY3JpcHRpb25zLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdG9TY2hlbWEodmFsdWUpXG4gICAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID0gc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICA/IHsgLi4uZGVmYXVsdHMsIC4uLnNjaGVtYSB9XG4gICAgICAgICAgICA6IHNjaGVtYVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgIH0sIHt9KVxuICAgICAgOiBudWxsXG4gIH1cblxuICByZXR1cm4gaXNBcnJheShkZXNjcmlwdGlvbnMpXG4gICAgPyB0b09iamVjdChkZXNjcmlwdGlvbnMsIHZhbHVlID0+IChcbiAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDoge1xuICAgICAgICBuYW1lOiBjYW1lbGl6ZSh2YWx1ZSwgZmFsc2UpXG4gICAgICB9XG4gICAgKSlcbiAgICA6IGlzT2JqZWN0KGRlc2NyaXB0aW9ucylcbiAgICAgID8gdG9PYmplY3QoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucyksXG4gICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAuLi52YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblNjaGVtYXMoYnV0dG9ucykge1xuICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKFxuICAgIGJ1dHRvbnMsXG4gICAgeyB0eXBlOiAnYnV0dG9uJyB9IC8vIERlZmF1bHRzXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYU9yVHlwZSkgPyBzY2hlbWFPclR5cGUudHlwZSA6IHNjaGVtYU9yVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KGdldFR5cGUoc2NoZW1hT3JUeXBlKSwgdHJ1ZSk/Lm9wdGlvbnMgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSk/LmdldFNvdXJjZVR5cGU/LihcbiAgICBnZXRUeXBlKHNjaGVtYU9yVHlwZSlcbiAgKSA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgc2NoZW1hLFxuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICBkYXRhUGF0aDogc2NoZW1hLm5hbWVcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogZGF0YVBhdGgsXG4gICAgICB0YWJDb21wb25lbnRcbiAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hcywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzID0gW10pIHtcbiAgaWYgKHNjaGVtYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hcykpIHtcbiAgICAgIGNvbnN0IHBhbmVsID0gZ2V0UGFuZWxTY2hlbWEoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKHBhbmVsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGgsXG4gIHNjaGVtYUNvbXBvbmVudCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGxcbikge1xuICBjb25zdCBwYW5lbCA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmdldFBhbmVsU2NoZW1hPy4oXG4gICAgc2NoZW1hLFxuICAgIGRhdGFQYXRoLFxuICAgIHNjaGVtYUNvbXBvbmVudFxuICApXG4gIGNvbnN0IHBhbmVscyA9IHBhbmVsID8gW2dldFBhbmVsU2NoZW1hKHBhbmVsLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV0gOiBbXVxuICAvLyBBbGxvdyBlYWNoIGNvbXBvbmVudCB0byBwcm92aWRlIGl0cyBvd24gc2V0IG9mIHBhbmVscywgaW5cbiAgLy8gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgb25lIChlLmcuICRmaWx0ZXIpOlxuICBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hLnBhbmVscywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzKVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ29iamVjdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ2xpc3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIGNvbnN0IGlkID0gaXRlbVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgcmV0dXJuIGlkICE9IG51bGwgPyBTdHJpbmcoaWQpIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICAvLyBUcnkgdG8gdXNlIHRoZSBpdGVtIGlkIGFzIHRoZSB1aWQsIGZhbGxpbmcgYmFjayBvbiBhdXRvLWdlbmVyYXRlZCBpZHMsIGJ1dFxuICAvLyBlaXRoZXIgd2F5LCBwYXNzIHRocm91Z2ggYGdldFVpZCgpYCBzbyB0aGF0IHRoZSBpZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgLy8gaXRlbSB0aHJvdWdoIGEgd2VhayBtYXAsIGFzIHRoZSBpZHMgY2FuIGJlIGZpbHRlcmVkIG91dCBpbiBgcHJvY2Vzc0RhdGEoKWBcbiAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHVpZHMgYXMga2V5IGFyZSBzdGlsbCB2aXNpYmxlLlxuICByZXR1cm4gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pKVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiBudWxsLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlXG4gICAgfSxcblxuICAgIGNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUeXBlQ29tcG9uZW50KHRoaXMuc2NoZW1hLmNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEuZm9ybWF0YCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgPyBmb3JtYXQuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5wYXJzZWAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSA9IHBhcnNlXG4gICAgICAgICAgPyBwYXJzZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB0aGlzLnBhcnNlZFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgaXRlbXMgdGhyb3VnaCB0aGUgc2NoZW1hQ29tcG9uZW50LCBidXRcbiAgICAgIC8vIHRoYXQncyBub3QgbmVjZXNzYXJpbHkgdGhlIGl0ZW0gcmVwcmVzZW50ZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAgICAvLyBTb2x1dGlvbjogRmluZCB0aGUgcmVsYXRpdmUgcGF0aCBhbmQgdGhlIHByb2Nlc3NlZCBzdWItaXRlbSBmcm9tIHRoZXJlOlxuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBnZXRJdGVtKFxuICAgICAgICBzY2hlbWFDb21wb25lbnQucHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgLy8gR2V0IHRoZSBkYXRhUGF0aCByZWxhdGl2ZSB0byB0aGUgc2NoZW1hQ29tcG9uZW50J3MgZGF0YTpcbiAgICAgICAgdGhpcy5kYXRhUGF0aC5zbGljZShzY2hlbWFDb21wb25lbnQuZGF0YVBhdGgubGVuZ3RoKSxcbiAgICAgICAgdGhpcy5uZXN0ZWRcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdsYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEJvb2xlYW5dLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyhsYWJlbClcbiAgICAgICAgICA/IGxhYmVsXG4gICAgICAgICAgOiBsYWJlbCAhPT0gZmFsc2UgJiYgdGhpcy4kb3B0aW9ucy5nZW5lcmF0ZUxhYmVsXG4gICAgICAgICAgICA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdXG4gICAgfSksXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBleGNsdWRlZGAgZm9yIGNvbnNpc3RlbnQgbmFtaW5nXG4gICAgZXhjbHVkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4Y2x1ZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlcXVpcmVkOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVxdWlyZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gYSBzdWItY2xhc3MgY29tcG9uZW50IHVzZWQgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzP1xuICAgIHJlYWRvbmx5OiBnZXRTY2hlbWFBY2Nlc3NvcigncmVhZG9ubHknLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGF1dG9mb2N1czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9mb2N1cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVG8gYmUgdXNlZCBmb3Igc2VsZWN0cyBhbmQgaW5wdXRzIG9ubHk/XG4gICAgY2xlYXJhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xlYXJhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cblxuICAgICAgaWYgKG5hdGl2ZUZpZWxkKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMubmFtZSA9IHRoaXMubmFtZVxuICAgICAgICBpZiAodGhpcy5sYWJlbCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMudGl0bGUgPSB0aGlzLmxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHlcbiAgICAgICAgYXR0cmlidXRlcy5hdXRvZm9jdXMgPSB0aGlzLmF1dG9mb2N1c1xuICAgICAgICBpZiAodGV4dEZpZWxkKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXJcbiAgICAgICAgICBhdHRyaWJ1dGVzLmF1dG9jb21wbGV0ZSA9IHRoaXMuYXV0b2NvbXBsZXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuZ2V0TGlzdGVuZXJzKClcbiAgICAgIGNvbnN0IHsgZXZlbnRzID0ge30gfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyhldmVudHMpKSB7XG4gICAgICAgICAgbGlzdGVuZXJzW2V2ZW50XSB8fD0gKCkgPT4gdGhpcy5lbWl0RXZlbnQoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICB9LFxuXG4gICAgdmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHsgLi4udGhpcy5nZXRWYWxpZGF0aW9ucygpIH1cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJlcXVpcmVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGRlZmF1bHQgcnVsZXMgYW5kIGFkZCBhbnkgbmV3IG9uZXM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5ydWxlcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdmFsaWRhdGlvbnNba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc2hvd0NsZWFyQnV0dG9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlICYmIHRoaXMudmFsdWUgIT0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgICAgLy8gSW5zdGFsbCAvIHJlbW92ZSB0aGUgZmllbGQgZXZlbnRzIHRvIHdhdGNoIG9mIGNoYW5nZXMgYW5kIGhhbmRsZVxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZsYWdzLiBgZXZlbnRzYCBpcyBwcm92aWRlZCBieSBgVmFsaWRhdGlvbk1peGluLmV2ZW50cygpYFxuICAgICAgICB0aGlzW2FkZCA/ICdvbicgOiAnb2ZmJ10odGhpcy5ldmVudHMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBpbnB1dDogdGhpcy5vbklucHV0LFxuICAgICAgICBjaGFuZ2U6IHRoaXMub25DaGFuZ2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBbZWxlbWVudF0gPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZCwgYGZvY3VzKClgIHdpbGwgbGlrZWx5IG5vdCBoYXZlIHRoZVxuICAgICAgICAgIC8vIGRlc2lyZWQgZWZmZWN0LiBVc2UgYHNjcm9sbEludG9WaWV3KClgIGlmIGF2YWlsYWJsZTpcbiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgKGVsZW1lbnQuJGVsIHx8IGVsZW1lbnQpLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAvLyBBbHNvIGZvY3VzIHRoaXMgY29tcG9uZW50J3Mgc2NoZW1hIGFuZCBwYW5lbCBpbiBjYXNlIGl0J3MgYSB0YWIuXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5mb2N1cygpXG4gICAgICB0aGlzLnRhYkNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLmVtaXRFdmVudCgnYmx1cicpXG4gICAgfSxcblxuICAgIG9uSW5wdXQoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5wdXQnKVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnLCB7XG4gICAgICAgIGNvbnRleHQ6IHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyB2YWx1ZTogdGhpcy5wYXJzZWRWYWx1ZSB9XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICAvLyBQYXNzIGBzY2hlbWFDb21wb25lbnRgIGFzIHBhcmVudCwgc28gY2hhbmdlIGV2ZW50cyBjYW4gcHJvcGFnYXRlIHVwLlxuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1Byb21pc2UgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgY29tcG9uZW50cyA9IHt9XG5cbmNvbnN0IERpdG9Db21wb25lbnQgPSBWdWUuZXh0ZW5kKHtcbiAgLy8gTWFrZSBzdXJlIHRoYXQgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGFyZSBwcmVzZW50IGluIGFsbCBEaXRvQ29tcG9uZW50LlxuICBjb21wb25lbnRzLFxuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50LFxuXG4gICAgcmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIG1peGlucyA9IFtdKSB7XG4gICAgICAvLyBBIGhlbHBlciBtZXRob2QgdG8gYWxsb3cgdGhyZWUgdGhpbmdzOlxuICAgICAgLy8gLSBXaGVuIHVzZWQgaW4gYSBjb21wdXRlZCBwcm9wZXJ0eSwgaXQgcmVtb3ZlcyB0aGUgbmVlZCB0byBoYXZlIHRvXG4gICAgICAvLyAgIGxvYWQgY29tcG9uZW50cyB3aXRoIGFzeW5jIGZ1bmN0aW9ucyBgY29tcG9uZW50OiAoKSA9PiBpbXBvcnQoLi4uKWAuXG4gICAgICAvLyAgIGluc3RlYWQsIHRoZXkgY2FuIGJlIGRpcmVjdGx5IHByb3ZpZGVkOiBgY29tcG9uZW50OiBpbXBvcnQoLi4uKWBcbiAgICAgIC8vIC0gVGhlIHByb3BlcnRpZXMgcGFzc2VkIHRvIHN1Y2ggY29tcG9uZW50cyBkb24ndCBuZWVkIHRvIGJlIGRlZmluZWQuXG4gICAgICAvLyAgIEluc3RlYWQsIHRoZSBwcm92aWRlZCBtaXhpbnMgYXJlIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkLlxuICAgICAgLy8gLSBUaGUgY29tcG9uZW50IGNhbiB1c2UgYWxsIGludGVybmFsIGNvbXBvbmVudHMga25vd24gdG8gRGl0by5qcyBBZG1pbi5cbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICAgICAgPyBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gQXQgZmlyc3QsIHJlc29sdmUgY29tcG9uZW50IGlzIGl0IGlzIGxvYWRlZCBhc3luY2hyb25vdXNseS5cbiAgICAgICAgICBsZXQgY29tcCA9IGlzRnVuY3Rpb24oY29tcG9uZW50KSA/IGF3YWl0IGNvbXBvbmVudCgpXG4gICAgICAgICAgICA6IGlzUHJvbWlzZShjb21wb25lbnQpID8gYXdhaXQgY29tcG9uZW50XG4gICAgICAgICAgICA6IGNvbXBvbmVudFxuICAgICAgICAgIGNvbXAgPSBjb21wPy5kZWZhdWx0IHx8IGNvbXBcbiAgICAgICAgICBjb21wLm1peGlucyA9IG1peGluc1xuICAgICAgICAgIGNvbXAuY29tcG9uZW50cyA9IGNvbXBvbmVudHNcbiAgICAgICAgICByZXR1cm4gY29tcFxuICAgICAgICB9XG4gICAgICAgIDogY29tcG9uZW50XG4gICAgfSxcblxuICAgIHJlc29sdmVEaXRvQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIFtEaXRvTWl4aW5dKVxuICAgIH0sXG5cbiAgICByZXNvbHZlVHlwZUNvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBbRGl0b01peGluLCBUeXBlTWl4aW5dKVxuICAgIH1cbiAgfVxufSlcblxuRGl0b0NvbXBvbmVudC5jb21wb25lbnQgPSBmdW5jdGlvbihuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIG5hbWUsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfVxuICAgIGNvbnN0IGN0b3IgPSB0aGlzLmV4dGVuZChvcHRpb25zKVxuICAgIGNvbXBvbmVudHNbbmFtZV0gPSBjdG9yXG4gICAgcmV0dXJuIGN0b3JcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXSB8fCBWdWUuY29tcG9uZW50KG5hbWUpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudFxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS9kZXN0cm95ZWQoKWAgb24gaXRzXG4gICAgLy8gJHBhcmVudCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgeyBlcnJvcnMgfSkgPT5cbiAgICAgICAgICBlcnJvcnMgJiYgcmVzdWx0ID8gcmVzdWx0LmNvbmNhdChlcnJvcnMpIDogZXJyb3JzLFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlUm91dGVVcGRhdGUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBFYWNoIHJvdXRlLWNvbXBvbmVudCBkZWZpbmVzIGEgc3RvcmUgdGhhdCBnZXRzIHBhc3NlZCBvbiB0byBpdHNcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMsIHNvIHRoZXkgY2FuIHN0b3JlIHZhbHVlcyBpbiB0aGVtIHRoYXQgbGl2ZSBiZXlvbmRcbiAgICAgIC8vIHRoZWlyIGxpZmUtY3ljbGUuIFNlZTogRGl0b1BhbmUsIFNvdXJjZU1peGluXG4gICAgICBzdG9yZToge30sXG4gICAgICBsb2FkQ2FjaGU6IHt9IC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyByb3V0ZUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcm91dGVSZWNvcmQoKSB7XG4gICAgICAvLyBUT0RPOiBDYW4gdGhpcy4kcm91dGUuY3VycmVudFJvdXRlIGJlIG9mIHVzZSBzb21ld2hlcmUgaGVyZT9cbiAgICAgIC8vIFJldHJpZXZlIHRoZSByb3V0ZS1yZWNvcmQgdG8gd2hpY2ggdGhpcyBjb21wb25lbnQgd2FzIG1hcHBlZCB0bzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzM4I2lzc3VlY29tbWVudC0yOTYzODE0NTlcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMuJHZub2RlLmRhdGEucm91dGVyVmlld0RlcHRoXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkPy5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZC5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9lc011dGF0ZSkge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aFxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoMCwgdGVtcGxhdGVQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAuam9pbignLycpXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCJcbi8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbi8vIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4vLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbnJvdXRlci12aWV3KFxuICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgOmtleT1cIm5hbWVcIlxuKVxuLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4pXG4gIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8gT25seSByZW5kZXIgRGl0b1ZpZXcgd2hlbiBpdCBpcyBhY3RpdmUsIG90aGVyd2lzZSBhIG5vcm1hbCByb3V0ZXItdmlld1xuICAvLyBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbiAgLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4gIC8vIHVzZWQgdG8gYWx3YXlzIHJlbmRlciBmb3JtcyBldmVuIHdoZW4gb3RoZXIgbmVzdGVkIGZvcm1zIGFyZSBwcmVzZW50LlxuICByb3V0ZXItdmlldyhcbiAgICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgICA6a2V5PVwibmFtZVwiXG4gIClcbiAgLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1lbHNlLWlmPVwic2hvdWxkUmVuZGVyKHZpZXdTY2hlbWEpXCJcbiAgKVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgeyBzb21lU2NoZW1hQ29tcG9uZW50LCBpc1NpbmdsZUNvbXBvbmVudFZpZXcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdmlldycsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICAvLyBSZWRpcmVjdCAkc291cmNlQ29tcG9uZW50IGFuZCAkcmVzb3VyY2VDb21wb25lbnQgdG8gdGhlIG1haW4gY29tcG9uZW50OlxuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnNvdXJjZUNvbXBvbmVudCB8fCBudWxsLFxuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnJlc291cmNlQ29tcG9uZW50IHx8IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNWaWV3OiB0cnVlLFxuICAgICAgLy8gVXBkYXRlZCBmcm9tIExvYWRpbmdNaXhpbiB0aHJvdWdoIGBzZXRMb2FkaW5nKGlzTG9hZGluZylgOlxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIC8vIE5PVEU6IERhdGEgaXMgc2hhcmVkIGFjcm9zcyBhbGwgdmlld3MgYmVjYXVzZSB0aGUgcm91dGVyIHJlY3ljbGVzIHRoZVxuICAgICAgLy8gRGl0b1ZpZXcgY29tcG9uZW50LlxuICAgICAgZGF0YToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLnNjaGVtYVxuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnRWaWV3KCkge1xuICAgICAgcmV0dXJuIGlzU2luZ2xlQ29tcG9uZW50Vmlldyh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgbWFpbkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aCh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHZpZXdTY2hlbWEoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgLy8gVHJhbnNsYXRlIHNpbmdsZS1jb21wb25lbnQgc2NoZW1hcyBpbnRvIG11bHRpLWNvbXBvbmVudCBzY2hlbWFzLFxuICAgICAgLy8gc28gdGhleSBjYW4gYmUgcmVuZGVyZWQgZGlyZWN0bHkgdGhyb3VnaCBEaXRvU2NoZW1hIGFsc286XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgbmFtZTogc2NoZW1hLm5hbWUsXG4gICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgW3NjaGVtYS5uYW1lXToge1xuICAgICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICAgIGxhYmVsOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZVNjaGVtYUNvbXBvbmVudChcbiAgICAgICAgdGhpcy52aWV3U2NoZW1hLFxuICAgICAgICBjb21wb25lbnQgPT4gaGFzUmVzb3VyY2UoY29tcG9uZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgLy8gU2VlIGlmIHRoZSByb3V0ZSBjaGFuZ2VzIGNvbXBsZXRlbHksIGFuZCBjbGVhciB0aGUgZGF0YSBpZiBpdCBkb2VzLlxuICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhID0ge31cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tSGFuZGxlcnM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbW92ZSB9IG9mIHRoaXMuZG9tSGFuZGxlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICAgIHRoaXMuZG9tSGFuZGxlcnMgPSBbXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb21PbihlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRFdmVudHMoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlzT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgW3R5cGVdOiBoYW5kbGVyIH1cbiAgICAgIClcbiAgICAgIHRoaXMuZG9tSGFuZGxlcnMucHVzaChyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXJvb3RcbiAgbW9kYWxzLWNvbnRhaW5lclxuICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgKVxuICBkaXRvLW1lbnVcbiAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgZGl0by1oZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgICBkaXRvLWFjY291bnQoXG4gICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgIClcbiAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgICApXG4gICAgICAgIHNwYW4gTG9naW5cbiAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcm9vdFxuICAgIG1vZGFscy1jb250YWluZXJcbiAgICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICAgIHJlZj1cIm5vdGlmaWNhdGlvbnNcIlxuICAgICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgICApXG4gICAgZGl0by1tZW51XG4gICAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgICBkaXRvLWhlYWRlcihcbiAgICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIClcbiAgICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgICAgKVxuICAgICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNwYW4gTG9naW5cbiAgICAgIHJvdXRlci12aWV3XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL3N0eWxlLnNhc3MnXG4gIC5kaXRvLXJvb3RcbiAgICBoZWlnaHQ6IDEwMCVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcGFnZVxuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgLy8gVGhlIHJvb3QtbGV2ZWwgdmlld3MgYW5kIGZvcm1zIG1heSBoYXZlIGEgYC5kaXRvLXNjaGVtYS1oZWFkZXJgIHRoYXRcbiAgICAgIC8vIHNob3VsZCBhcHBlYXIgbGF5ZXJlZCBvdmVyIGAuZGl0by1tZW51YCwgd2hpbGUgaGF2aW5nIGBvdmVybGF5OiBoaWRkZW5gXG4gICAgICAvLyBzZXQgYnkgYC5kaXRvLXNjcm9sbC1wYXJlbnRgIHRvIGRlbGVnYXRlIHNjcm9sbGluZyB0byBgLmRpdG8tc2Nyb2xsYC5cbiAgICAgIC8vIEluIG9yZGVyIHRvIG5vdCBoYXZlIHRoZSBoZWFkZXIgY2xpcHBlZCwgYWRqdXN0IHRoZSB0b3AgaGVyZTpcbiAgICAgID4gLmRpdG8tZm9ybSxcbiAgICAgID4gLmRpdG8tdmlld1xuICAgICAgICBtYXJnaW4tdG9wOiAtJG1lbnUtaGVpZ2h0XG4gICAgICAgIHBhZGRpbmctdG9wOiAkbWVudS1oZWlnaHRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBhc0FycmF5LCBzdHJpcFRhZ3MgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvVXNlciBmcm9tICcuLi9EaXRvVXNlci5qcydcbmltcG9ydCBEaXRvVmlldyBmcm9tICcuLi9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBwcm9jZXNzVmlldywgcmVzb2x2ZVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1yb290Jywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHZpZXdzOiAoKSA9PiB0aGlzLnJlc29sdmVkVmlld3NcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB1bnJlc29sdmVkVmlld3M6IHsgdHlwZTogW09iamVjdCwgRnVuY3Rpb24sIFByb21pc2VdLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG9wdGlvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZXNvbHZlZFZpZXdzOiB7fSxcbiAgICAgIGFsbG93TG9naW46IGZhbHNlLFxuICAgICAgbG9hZGluZ0NvdW50OiAwXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLm5vdGlmaWNhdGlvbnNcbiAgICB9LFxuXG4gICAgaXNMb2FkaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGluZ0NvdW50ID4gMFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYXBwU3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZSB8fCAnRGl0by5qcyBBZG1pbidcbiAgICAvLyBXaXRoIGhvdC1yZWxvYWRpbmcsIGl0IGxvb2tzIGxpa2UgZGVzdHJveWVkIGhvb2tzIGFyZW4ndCBhbHdheXMgY2FsbGVkXG4gICAgLy8gZm9yIHJvdXRlIGNvbXBvbmVudHMgc28gcmVzZXQgdGhlIGFycmF5IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzID0gW11cbiAgfSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIC8vIENsZWFyIHRoZSBsYWJlbCBtYXJrZWQgYXMgYWN0aXZlIG9uIGFsbCBtb3VzZSBhbmQga2V5Ym9hcmQgZXZlbnRzLCBleGNlcHRcbiAgICAvLyB0aGUgb25lcyB0aGF0IERpdG9MYWJlbCBpdHNlbGYgaW50ZXJjZXB0cy5cbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjbGljazogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZGl0by1sYWJlbCcpKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IGZhbHNlXG4gICAgICBpZiAoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0IH0gPSB7fSkge1xuICAgICAgdGl0bGUgfHw9IHtcbiAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICBlcnJvcjogJ0Vycm9yJyxcbiAgICAgICAgaW5mbzogJ0luZm9ybWF0aW9uJyxcbiAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICB9W3R5cGVdIHx8ICdOb3RpZmljYXRpb24nXG4gICAgICB0ZXh0ID0gYDxwPiR7XG4gICAgICAgIGFzQXJyYXkodGV4dCkuam9pbignPC9wPiA8cD4nKVxuICAgICAgfTwvcD5gLnJlcGxhY2UoL1xcbnxcXHJcXG58XFxyL2csICc8YnI+JylcbiAgICAgIGNvbnN0IGxvZyA9IHtcbiAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICAgICAgaW5mbzogJ2xvZycsXG4gICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICB9W3R5cGVdIHx8ICdlcnJvcidcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlW2xvZ10oc3RyaXBUYWdzKHRleHQpKVxuICAgICAgY29uc3QgeyBub3RpZmljYXRpb25zID0gdHJ1ZSB9ID0gdGhpcy5hcGlcbiAgICAgIGlmIChub3RpZmljYXRpb25zKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBkaXNwbGF5LWR1cmF0aW9uIGZvciB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGl0cyBjb250ZW50XG4gICAgICAgIC8vIGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgYGR1cmF0aW9uRmFjdG9yYCBjb25maWd1cmF0aW9uLiBJdCBkZWZpbmVzIHRoZVxuICAgICAgICAvLyBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIG11bHRpcGxpZWQgd2l0aCB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnNcbiAgICAgICAgLy8gZGlzcGxheWVkIGluIHRoZSBub3RpZmljYXRpb24sIHBsdXMgNDAgKDQwICsgdGl0bGUgKyBtZXNzYWdlKTpcbiAgICAgICAgY29uc3QgeyBkdXJhdGlvbkZhY3RvciA9IDIwIH0gPSBub3RpZmljYXRpb25zXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKDQwICsgdGV4dC5sZW5ndGggKyB0aXRsZS5sZW5ndGgpICogZHVyYXRpb25GYWN0b3JcbiAgICAgICAgdGhpcy4kbm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQsIGR1cmF0aW9uIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9LFxuXG4gICAgcmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5sb2FkaW5nQ291bnQgKz0gaXNMb2FkaW5nID8gMSA6IC0xXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ2luKCkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICAgICAgY29uc3Qge1xuICAgICAgICBhZGRpdGlvbmFsQ29tcG9uZW50cyxcbiAgICAgICAgcmVkaXJlY3RBZnRlckxvZ2luXG4gICAgICB9ID0gdGhpcy5vcHRpb25zLmxvZ2luIHx8IHt9XG4gICAgICBjb25zdCBsb2dpbkRhdGEgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxDb21wb25lbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGxvZ2luOiB7IHR5cGU6ICdzdWJtaXQnIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChsb2dpbkRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ2luLFxuICAgICAgICAgICAgZGF0YTogbG9naW5EYXRhLFxuICAgICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChyZWRpcmVjdEFmdGVyTG9naW4pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RBZnRlckxvZ2luKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgICAgdGV4dDogZXJyb3IgfHwgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLnJlc3BvbnNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2luKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZUhvbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSgnLycpXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ291dCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ291dCxcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zZXRVc2VyKG51bGwpXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVXNlcigpIHtcbiAgICAgIGxldCB1c2VyID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMuc2Vzc2lvbixcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICB1c2VyID0gcmVzcG9uc2UuZGF0YS51c2VyIHx8IG51bGxcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBlcnJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VXNlcih1c2VyKVxuICAgICAgcmV0dXJuIHVzZXJcbiAgICB9LFxuXG4gICAgc2V0VXNlcih1c2VyKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnVzZXIgPSAoXG4gICAgICAgIHVzZXIgJiZcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHVzZXIsIERpdG9Vc2VyLnByb3RvdHlwZSlcbiAgICAgIClcbiAgICAgIC8vIENsZWFyIHJlc29sdmVkIHZpZXdzIHdoZW4gdXNlciBpcyBsb2dnZWQgb3V0LlxuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IHt9XG4gICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW5zdXJlVXNlcigpIHtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlVmlld3MoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IFtdXG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb2x2ZWRWaWV3cykpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzKSlcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5uYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICBoMSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICB1bC5kaXRvLXNjcm9sbFxuICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHZpZXcpXCJcbiAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgICAgKSB7eyBnZXRMYWJlbCh2aWV3KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8tbWVudS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgICBoMSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICAgIHVsLmRpdG8tc2Nyb2xsXG4gICAgICBsaSh2LWZvcj1cInZpZXcgaW4gdmlld3NcIilcbiAgICAgICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICAgIDp0bz1cImAvJHt2aWV3LnBhdGh9YFwiXG4gICAgICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbWVudVxuICAgIGZsZXg6IGluaXRpYWxcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB1bFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZVxuICAgIGEsXG4gICAgaDFcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgaDFcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdFxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLWxpbmtcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgLmRpdG8tbGlua1xuICAgICY6Zm9jdXM6bm90KDphY3RpdmUpOm5vdCguZGl0by1hY3RpdmUpXG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLW1lbnUnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG48ZGl2IGNsYXNzPVwidi1zcGlubmVyXCIgdi1zaG93PVwibG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UxXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkxXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UyXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkyXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UzXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkzXVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiIsIjx0ZW1wbGF0ZT5cbjxkaXYgY2xhc3M9XCJ2LXNwaW5uZXJcIiB2LXNob3c9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTFcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTFdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTJcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTJdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTNcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTNdXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXG4gIG5hbWU6ICdQdWxzZUxvYWRlcicsXG5cbiAgcHJvcHM6IHtcbiAgICBsb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHsgXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIzVkYzU5NidcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxNXB4J1xuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMnB4J1xuICAgIH0sXG4gICAgcmFkaXVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTAwJSdcbiAgICB9XG4gIH0sXG4gIGRhdGEgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzcGlubmVyU3R5bGU6IHtcbiAgICAgIFx0YmFja2dyb3VuZENvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgXHR3aWR0aDogdGhpcy5zaXplLFxuICAgICAgICBoZWlnaHQ6IHRoaXMuc2l6ZSxcbiAgICAgIFx0bWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgIFx0Ym9yZGVyUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgIGFuaW1hdGlvbk5hbWU6ICd2LXB1bHNlU3RyZXRjaERlbGF5JyxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICcwLjc1cycsXG4gICAgICAgIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAnaW5maW5pdGUnLFxuICAgICAgICBhbmltYXRpb25UaW1pbmdGdW5jdGlvbjogJ2N1YmljLWJlemllciguMiwuNjgsLjE4LDEuMDgpJyxcbiAgICAgICAgYW5pbWF0aW9uRmlsbE1vZGU6ICdib3RoJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTE6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjEycydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkyOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4yNHMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mzoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMzZzJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuLyoudi1zcGlubmVyXG57XG4gICAgbWFyZ2luOiAxMDBweCBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbiovXG5cbkAtd2Via2l0LWtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5XG57XG4gICAgMCUsXG4gICAgODAlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAxOyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA0NSVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAwLjc7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheVxue1xuICAgIDAlLFxuICAgIDgwJVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMTsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNDUlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMC43OyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxufVxuPC9zdHlsZT4iLCJcbm5hdi5kaXRvLWhlYWRlclxuICAuZGl0by10cmFpbFxuICAgIHVsXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoY29tcG9uZW50LCBpbmRleCkgaW4gdHJhaWxcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5kZXggPT09IHRyYWlsLmxlbmd0aCAtIDFcIilcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgIHJvdXRlci1saW5rLmRpdG8tYnJlYWRjcnVtYih2LWVsc2UsIDp0bz1cImNvbXBvbmVudC5wYXRoXCIpXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgIHNwaW5uZXIuZGl0by1zcGlubmVyKHYtaWY9XCJpc0xvYWRpbmdcIilcbiAgc2xvdFxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIHVsXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiKVxuICAgICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgICAgcm91dGVyLWxpbmsuZGl0by1icmVhZGNydW1iKHYtZWxzZSwgOnRvPVwiY29tcG9uZW50LnBhdGhcIilcbiAgICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgc3Bpbm5lci5kaXRvLXNwaW5uZXIodi1pZj1cImlzTG9hZGluZ1wiKVxuICAgIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1oZWFkZXJcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYmxhY2tcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgIHotaW5kZXg6ICRtZW51LXotaW5kZXhcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICBzcGFuXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by10cmFpbFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgaGVpZ2h0OiAzZW1cbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZ1xuICAgICAgdWxcbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYVxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgcGFkZGluZy1yaWdodDogMC40ZW1cbiAgICAgICAgJGFuZ2xlOiAzM2RlZ1xuICAgICAgICAmOmhvdmVyXG4gICAgICAgICAgY29sb3I6ICM5OTlcbiAgICAgICAgJjo6YmVmb3JlLFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgICAgd2lkdGg6IDFweFxuICAgICAgICAgIGhlaWdodDogMS4yZW1cbiAgICAgICAgICByaWdodDogLTFweFxuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrXG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIHRvcDogNTAlXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGFuZ2xlKVxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGJvdHRvbTogNTAlXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLSRhbmdsZSlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b21cbiAgICAuZGl0by1zcGlubmVyXG4gICAgICBtYXJnaW4tdG9wOiAkbWVudS1wYWRkaW5nLXZlclxuICAgIC5kaXRvLWRpcnR5XG4gICAgICAmOmFmdGVyXG4gICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgd2lkdGg6IDhweFxuICAgICAgICBoZWlnaHQ6IDhweFxuICAgICAgICBtYXJnaW46IDJweFxuICAgICAgICBtYXJnaW4tbGVmdDogMC41ZW1cbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJVxuICAgIC5kaXRvLWFjY291bnQsXG4gICAgLmRpdG8tbG9naW5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiAwXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by1hY2NvdW50XG4gICAgICBsZWZ0OiAkY29udGVudC13aWR0aCArICRjb250ZW50LXBhZGRpbmcgKiAyXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxzZUxvYWRlciBmcm9tICd2dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlJ1xuXG5jb25zdCBTcGlubmVyID0gRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ3NwaW5uZXInLCBQdWxzZUxvYWRlcilcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWhlYWRlcicsIHtcbiAgY29tcG9uZW50czogeyBTcGlubmVyIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzcGlubmVyOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBpc0xvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyYWlsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLmZpbHRlcihcbiAgICAgICAgY29tcG9uZW50ID0+ICEhY29tcG9uZW50LnJvdXRlUmVjb3JkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc2l6ZSA9ICc4cHgnLFxuICAgICAgY29sb3IgPSAnIzk5OSdcbiAgICB9ID0gdGhpcy5zcGlubmVyIHx8IHt9XG4gICAgY29uc3QgeyBwcm9wcyB9ID0gU3Bpbm5lci5vcHRpb25zXG4gICAgcHJvcHMuc2l6ZS5kZWZhdWx0ID0gc2l6ZVxuICAgIHByb3BzLmNvbG9yLmRlZmF1bHQgPSBjb2xvclxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1kaXJ0eSc6IGNvbXBvbmVudC5pc0RpcnR5XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1bGxkb3duOiB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBzdGFydFRpbWU6IDAsXG4gICAgICAgIGNoZWNrVGltZTogdHJ1ZSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgbW91c2Vkb3duOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub25QdWxsZG93bk1vdXNlVXAobnVsbCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlcnM6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4odHJ1ZSlcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0VGltZSB9ID0gdGhpcy5wdWxsZG93blxuICAgICAgaWYgKCF0aGlzLmNoZWNrVGltZSB8fCBzdGFydFRpbWUgJiYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiAyNTApKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm9uUHVsbGRvd25TZWxlY3QodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCgvKiB2YWx1ZSAqLykge1xuICAgICAgLy8gTk9URTogVG8gYmUgb3ZlcnJpZGRlbi5cbiAgICB9LFxuXG4gICAgc2V0UHVsbGRvd25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMucHVsbGRvd24ub3BlbiA9IG9wZW5cbiAgICAgIHRoaXMucHVsbGRvd24uc3RhcnRUaW1lID0gb3BlbiA/IERhdGUubm93KCkgOiAwXG4gICAgICBpZiAob3Blbikge1xuICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwgdGhpcy5wdWxsZG93bi5ldmVudHMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLWFjY291bnRcbiAgYShcbiAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICApXG4gICAgc3BhbiB7eyB1c2VyLnVzZXJuYW1lIH19XG4gIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgKVxuICAgIGxpKFxuICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgKVxuICAgICAgYShcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICApIHt7IGxhYmVsIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1hY2NvdW50XG4gICAgYShcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgKVxuICAgICAgc3BhbiB7eyB1c2VyLnVzZXJuYW1lIH19XG4gICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgKVxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgICAgKVxuICAgICAgICBhKFxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICAgICkge3sgbGFiZWwgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1hY2NvdW50XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHRvcDogJHB1bGxkb3duLXBhZGRpbmctdmVyXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYWNjb3VudCcsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHtcbiAgICAgICAgc2V0dGluZ3M6ICdTZXR0aW5ncycsXG4gICAgICAgIGxvZ291dDogJ0xvZ291dCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25TZWxlY3QodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgIGNhc2UgJ2xvZ291dCc6XG4gICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc2V0dGluZ3MnOlxuICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmZvcm0uZGl0by1kaWFsb2coQHN1Ym1pdC5wcmV2ZW50PVwiXCIpXG4gIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gIClcbiAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJcIilcbiAgICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLnYtLW1vZGFsLW92ZXJsYXlcbiAgICB6LWluZGV4OiAyMDAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZGlhbG9nJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gTWFrZSBzdXJlIGRpYWxvZyBkYXRhIGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQga2V5c1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBjbG9uZSh0aGlzLmRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGlhbG9nRGF0YSkpIHtcbiAgICAgICAgZGlhbG9nRGF0YVtrZXldID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgd2luZG93RXZlbnRzOiBudWxsLFxuICAgICAgZGlhbG9nRGF0YVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Lm5hbWVcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLmJ1dHRvbnMpKS5yZWR1Y2UoXG4gICAgICAgIC8vIFByb2Nlc3MgdGhlIGJ1dHRvbiBzY2hlbWFzIHRvIGFkZCBkZWZhdWx0IGNsaWNrIGV2ZW50c1xuICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgKHNjaGVtYXMsIFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICBjb25zdCB7IHR5cGUsIGV2ZW50cyB9ID0gc2NoZW1hXG4gICAgICAgICAgaWYgKCFldmVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsaWNrID0gdHlwZSA9PT0gJ3N1Ym1pdCcgPyAoKSA9PiB0aGlzLmFjY2VwdCgpXG4gICAgICAgICAgICAgIDoga2V5ID09PSAnY2FuY2VsJyA/ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICBpZiAoY2xpY2spIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHsgY2xpY2sgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHNjaGVtYXNba2V5XSA9IHNjaGVtYVxuICAgICAgICAgIHJldHVybiBzY2hlbWFzXG4gICAgICAgIH0sXG4gICAgICAgIHt9XG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NhbmNlbCgpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmJ1dHRvblNjaGVtYXMpLmluY2x1ZGVzKCdjYW5jZWwnKVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMud2luZG93RXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAga2V5dXA6ICgpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGlkZSgpIHtcbiAgICAgIHRoaXMuJG1vZGFsLmhpZGUodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICByZXNvbHZlKHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVzb2x2ZSh2YWx1ZSlcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSxcblxuICAgIGFjY2VwdCgpIHtcbiAgICAgIHRoaXMucmVzb2x2ZSh0aGlzLmRpYWxvZ0RhdGEpXG4gICAgfSxcblxuICAgIGNhbmNlbCgpIHtcbiAgICAgIGlmICh0aGlzLmhhc0NhbmNlbCkge1xuICAgICAgICB0aGlzLnJlc29sdmUobnVsbClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuY29tcG9uZW50KFxuICB2LWlmPVwiY29udGVudFwiXG4gIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKSB7eyBvcHRpb25zLnRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY29udGVudFwiXG4gICAgOmlzPVwib3B0aW9ucy50YWcgfHwgdGFnXCJcbiAgICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApIHt7IG9wdGlvbnMudGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lbGVtZW50Jywge1xuICBwcm9wczoge1xuICAgIHRhZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzcGFuJyB9LFxuICAgIGNvbnRlbnQ6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgeyBjb250ZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QoY29udGVudCkgPyBjb250ZW50IDogeyB0ZXh0OiBjb250ZW50IH1cbiAgICB9LFxuXG4gICAgY2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLmNsYXNzLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuY2xhc3MpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLnN0eWxlLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuc3R5bGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBhc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gYXNBcnJheSh2YWx1ZSkucmVkdWNlKChvYmplY3QsIGVudHJ5KSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKGVudHJ5KSkge1xuICAgICAgb2JqZWN0W2VudHJ5XSA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGVudHJ5KSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmplY3QsIGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0XG4gIH0sIHt9KVxufVxuXG48L3NjcmlwdD5cbiIsIlxuY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgOmlzPVwidGFnXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4pXG4gIC5kaXRvLWNoZXZyb24oXG4gICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6ICFjb2xsYXBzZWQgfVwiXG4gIClcbiAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6a2V5PVwiYHByZWZpeC0ke2luZGV4fWBcIlxuICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgKVxuICBsYWJlbCg6Zm9yPVwiZGF0YVBhdGhcIiB2LWh0bWw9XCJ0ZXh0XCIpXG4gIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXN1ZmZpeChcbiAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gIClcbiAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQuZGl0by1sYWJlbChcbiAgICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gICAgOmlzPVwidGFnXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuICApXG4gICAgLmRpdG8tY2hldnJvbihcbiAgICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6ICFjb2xsYXBzZWQgfVwiXG4gICAgKVxuICAgIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXByZWZpeChcbiAgICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgICApXG4gICAgbGFiZWwoOmZvcj1cImRhdGFQYXRoXCIgdi1odG1sPVwidGV4dFwiKVxuICAgIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXN1ZmZpeChcbiAgICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgICApXG4gICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbGFiZWxcbiAgICAtLWxhYmVsLXBhZGRpbmc6IDBcbiAgICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG4gICAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZy1oYWxmIDBcblxuICAgIGxhYmVsXG4gICAgICBkaXNwbGF5OiBpbmxpbmVcbiAgICAgIGN1cnNvcjogaW5oZXJpdFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcblxuICAgIGxhYmVsLFxuICAgIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgICAuZGl0by1sYWJlbC1zdWZmaXhcbiAgICAgICY6bnRoLWxhc3QtY2hpbGQoMilcbiAgICAgICAgLy8gVG8gc3RyZXRjaCBlaXRoZXIgbGFiZWwgb3IgLmRpdG8tbGFiZWwtc3VmZml4IHRvIGZ1bGwgYXZhaWxhYmxlIHdpZHRoXG4gICAgICAgIC8vIHNvIHRoYXQgYnV0dG9ucyBhbHdheXMgYXBwZWFyIHJpZ2h0LWFsaWduZWQ6XG4gICAgICAgIGZsZXg6IDEgMSBhdXRvXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb250ZW50OiAnXFxhMCcgLy8gJm5icHM7XG5cbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICtlbGxpcHNpc1xuXG4gICAgLmRpdG8tYnV0dG9uc1xuICAgICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgICAgbWFyZ2luOiBjYWxjKC0xICogdmFyKC0tbGFiZWwtcGFkZGluZykpXG4gICAgICBtYXJnaW4tbGVmdDogMFxuICAgICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZylcblxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gSW4gb3JkZXIgZm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gbGFiZWxzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGxheW91dCxcbiAgICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci5cbiAgICAgIGxhYmVsXG4gICAgICAgICtlbGxpcHNpc1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgICAvLyBzcGFjZSBvbiBpdHMgcGFyZW50IHRvIGVuZm9yY2UgdGhlIHJpZ2h0IHRleHQgaGVpZ2h0IGluIHRoZSBjb250YWluZXJcbiAgICAgICAgY29udGVudDogJ1xcMjAwYicgLy8gemVyby13aWR0aCBzcGFjZVxuXG4gIGEuZGl0by1sYWJlbFxuICAgICY6aG92ZXJcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXJcbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlKTpub3QoLmRpdG8tYWN0aXZlKVxuICAgICAgLmRpdG8tY2hldnJvblxuICAgICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmVcblxuICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0IGxheW91dHNcbiAgLy8gd2l0aCBgd2lkdGg6ICdhdXRvJ2AgZWxlbWVudHM6XG4gIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgLmRpdG8tc2NoZW1hLWNvbXBhY3RcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICA+IC5kaXRvLXBhbmVcbiAgICAgICAgPiAuZGl0by1jb250YWluZXJcbiAgICAgICAgICA+IC5kaXRvLWxhYmVsOm5vdCguZGl0by1sYWJlbC1jb21wb25lbnQpXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tbGFiZWwnLCB7XG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgbGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHRoaXMuY29sbGFwc2libGUgJiYge1xuICAgICAgICAgIGNsaWNrOiB0aGlzLm9uQ2xpY2tcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdleHBhbmQnLCB0aGlzLmNvbGxhcHNlZClcbiAgICB9XG4gIH1cbn0pXG5cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbUZvcm1TY2hlbWEsIGdldEl0ZW1JZCwgZ2V0SXRlbVVpZCwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYSxcblxuICAgIGdldEl0ZW1VaWQsXG5cbiAgICBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50ICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgID8gU3RyaW5nKGluZGV4KVxuICAgICAgICA6IGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pXG4gICAgfSxcblxuICAgIGdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSB7XG4gICAgICBsZXQgeyBkYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgaWYgKHNvdXJjZVNjaGVtYSAhPT0gdGhpcy5zY2hlbWEpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc291cmNlU2NoZW1hLm5hbWUpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBpbmRleClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhUGF0aFxuICAgIH0sXG5cbiAgICBmaW5kSXRlbUlkSW5kZXgoc291cmNlU2NoZW1hLCBkYXRhLCBpdGVtSWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICA/IGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+XG4gICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoIHx8PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCB8fD0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgICh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgdGV4dCA9IHRleHQgfHwgJydcbiAgICAgIC8vIElmIG5vIGxhYmVsIHdhcyBmb3VuZCBzbyBmYXIsIHRyeSB0byBwcm9kdWNlIG9uZSBmcm9tIHRoZWluZGV4LlxuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIC8vIEFsd2F5cyB1c2UgZXh0ZW5kZWQgc3R5bGUgd2hlbiBhdXRvLWdlbmVyYXRpbmcgbGFiZWxzIGZyb20gaW5kZXgvaWQ6XG4gICAgICAgIGV4dGVuZGVkID0gdHJ1ZVxuICAgICAgICBpZiAoaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICB0ZXh0ID0gYCR7aW5kZXggKyAxfWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV4dGVuZGVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm1MYWJlbCA9IGdldEZvcm1MYWJlbCgpXG4gICAgICAgIGlmIChmb3JtTGFiZWwpIHtcbiAgICAgICAgICAvLyBJZiBhIGxhYmVsIHdhcyBwcm92aWRlZCwgcHV0IGluIHF1b3RlcyB3aGVuIHByZWZpeGVkIHdpdGggdGhlXG4gICAgICAgICAgLy8gZm9ybSBsYWJlbCBmb3IgdGhlIGV4dGVuZGVkIHN0eWxlOlxuICAgICAgICAgIHRleHQgPSBgJHtmb3JtTGFiZWx9ICR7aGFkTGFiZWwgPyBgJyR7dGV4dH0nYCA6IHRleHR9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXNPYmplY3QgPyB7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gOiB0ZXh0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXNjaGVtYVxuICAuZGl0by1zY2hlbWEtY29udGVudFxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtbWVudS1oZWFkZXInOiBtZW51SGVhZGVyIH1cIlxuICAgIClcbiAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgIClcbiAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAjZWRpdC1idXR0b25zXG4gICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICApXG4gICAgICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gICAgICBkaXRvLXRhYnMoXG4gICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgKVxuICAgICAgZGl0by1jbGlwYm9hcmQoXG4gICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICApXG4gICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICByZWY9XCJ0YWJzXCJcbiAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgIClcbiAgICB0cmFuc2l0aW9uLWhlaWdodChcbiAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS1tYWluKFxuICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgc2xvdChcbiAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgKVxuICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiIWhhc0xhYmVsXCJcbiAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgIClcbiAgdGVtcGxhdGUodi1lbHNlLWlmPVwiaXNQb3B1bGF0ZWRcIilcbiAgICBkaXRvLXBhbmVscyhcbiAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2NoZW1hXG4gICAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbCB8fCBoYXNUYWJzIHx8IGNsaXBib2FyZFwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICAgIClcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgICBAZXhwYW5kPVwib25FeHBhbmRcIlxuICAgICAgICApXG4gICAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgICBkaXRvLXRhYnMoXG4gICAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgICApXG4gICAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICApXG4gICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLXRhYihcbiAgICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgICA6a2V5PVwidGFiXCJcbiAgICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgICAgOnRhYj1cInRhYlwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNNYWluUGFuZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgICApXG4gICAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgICByZWY9XCJjb21wb25lbnRzXCJcbiAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc1RhYnNcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgICAgKVxuICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgICBkaXRvLXBhbmVscyhcbiAgICAgICAgOnBhbmVscz1cInBhbmVsU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNjaGVtYVxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAvLyBUbyBkaXNwbGF5IHNjaGVtYSBuZXh0IHRvIHBhbmVsczpcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgbWluLWhlaWdodDogMTAwJVxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIGZsZXg6IDEgMSAxMDAlXG4gICAgICAvLyBTbyB0aGF0IHNjaGVtYSBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICAgIGRpc3BsYXk6IGdyaWRcbiAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnRcbiAgICAgID4gKjpvbmx5LWNoaWxkXG4gICAgICAgIGdyaWQtcm93LWVuZDogbm9uZVxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZ1xuICAgID4gLmRpdG8tYnV0dG9ucyxcbiAgICA+IC5kaXRvLXBhbmVsc1xuICAgICAgZmxleDogMSAxIDAlXG4gICAgPiAuZGl0by1idXR0b25zXG4gICAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZ1xuICAgID4gLmRpdG8tcGFuZWxzXG4gICAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgJGNvbnRlbnQtcGFkZGluZyAwXG4gICAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgICAuZGl0by1wYW5lLXRhYiArIC5kaXRvLXBhbmUtbWFpblxuICAgICAgJjo6YmVmb3JlXG4gICAgICAgIC8vIFVzZSBhIHBzZXVkbyBlbGVtZW50IHRvIGRpc3BsYXkgYSBydWxlciB3aXRoIHByb3BlciBtYXJnaW5zXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGVcbiAgICAgICAgLy8gQWRkIHJlbW92ZWQgJGZvcm0tc3BhY2luZyBhZ2FpbiB0byB0aGUgcnVsZXJcbiAgICAgICAgbWFyZ2luOiAkY29udGVudC1wYWRkaW5nICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAuZGl0by10YWJzLFxuICAgIC5kaXRvLWNsaXBib2FyZFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmRcbiAgICAuZGl0by1jbGlwYm9hcmRcbiAgICAgICY6b25seS1jaGlsZFxuICAgICAgICBtYXJnaW4tbGVmdDogYXV0b1xuICAgICAgLmRpdG8tYnV0dG9uXG4gICAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luXG4gICAgJi5kaXRvLXNjaGVtYS1tZW51LWhlYWRlclxuICAgICAgLy8gQnJpbmcgdGhlIHRhYnMgdXAgdG8gdGhlIG1lbnUuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIGhlaWdodDogJG1lbnUtaGVpZ2h0XG4gICAgICBwYWRkaW5nOiAwICRtZW51LXBhZGRpbmctaG9yXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICB0b3A6IDBcbiAgICAgIGxlZnQ6IDBcbiAgICAgIHJpZ2h0OiAwXG4gICAgICB6LWluZGV4OiAkbWVudS16LWluZGV4XG4gICAgICAvLyBUdXJuIG9mZiBwb2ludGVyIGV2ZW50cyBzbyB0aGF0IERpdG9UcmFpbCBrZWVwcyByZWNlaXZpbmcgZXZlbnRzLi4uXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgLy8gLi4uYnV0IGFsbG93IGludGVyYWN0aW9uIHdpdGggdGhlIHRhYnMgYW5kIGJ1dHRvbnMgKGUuZy4gY2xpcGJvYXJkKVxuICAgICAgLy8gbGF5ZXJlZCBvbiB0b3Agb2YgRGl0b1RyYWlsLlxuICAgICAgLmRpdG8tdGFicyxcbiAgICAgIC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG9cbiAgICAgICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplXG4gICAgYnV0dG9uLmRpdG8tbGFiZWxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAvLyBDYXRjaCBhbGwgY2xpY2tzLCBldmVuIHdoZW4gaXQgd291bGQgYmUgcGFydGlhbGx5IGNvdmVyZWQgYnkgc2NoZW1hLlxuICAgICAgei1pbmRleDogMVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc1JlZ0V4cCxcbiAgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGgsIGxhYmVsaXplXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBUcmFuc2l0aW9uSGVpZ2h0IH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsIGdldFBhbmVsU2NoZW1hcywgc2V0RGVmYXVsdHMsIHByb2Nlc3NEYXRhXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjaGVtYScsIHtcbiAgY29tcG9uZW50czogeyBUcmFuc2l0aW9uSGVpZ2h0IH0sXG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBpbmplY3Q6IFtcbiAgICAnJHNjaGVtYVBhcmVudENvbXBvbmVudCdcbiAgXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgaW5saW5lZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaGFzT3duRGF0YTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG1lbnVIZWFkZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIHJldHVybiB7XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gcHJvdmlkZSBtb3JlIGRhdGEgdGhyb3VnaCBgc2NoZW1hLmRhdGFgLCB2dWUtc3R5bGU6XG4gICAgICAuLi4oXG4gICAgICAgIGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICAgID8gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICA6IGRhdGFcbiAgICAgICksXG4gICAgICBjb21wb25lbnRzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZXNSZWdpc3RyeToge30sXG4gICAgICBwYW5lbHNSZWdpc3RyeToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyBzY2hlbWFDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHBhcmVudFNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIERvbid0IHJldHVybiB0aGUgYWN0dWFsIHBhcmVudCBzY2hlbWEgaXMgdGhpcyBzY2hlbWEgaGFuZGxlcyBpdHMgb3duXG4gICAgICAvLyBkYXRhLiBUaGlzIHByZXZlbnRzIGRlbGVnYXRpbmcgZXZlbnRzIHRvIHRoZSBwYXJlbnQsIGFuZCByZWdpc3RlcmluZ1xuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIHRoZSBwYXJlbnQgdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBzZXQgaXNEaXJ0eSBmbGFncy5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyBudWxsIDogdGhpcy4kcGFyZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYXMoKSB7XG4gICAgICBjb25zdCBwYW5lbHMgPSBnZXRQYW5lbFNjaGVtYXModGhpcy5zY2hlbWEucGFuZWxzLCAnJylcbiAgICAgIGZvciAoY29uc3QgcGFuZSBvZiB0aGlzLnBhbmVzKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKC4uLnBhbmUucGFuZWxTY2hlbWFzKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHBhbmVsc1xuICAgIH0sXG5cbiAgICB0YWJzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS50YWJzKVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUYWIgPSB0aGlzLiRyb3V0ZS5oYXNoPy5zbGljZSgxKSB8fCBudWxsXG4gICAgICBjb25zdCB0YWIgPSBjdXJyZW50VGFiICYmIHRoaXMuc2hvdWxkUmVuZGVyKHRoaXMudGFic1tjdXJyZW50VGFiXSlcbiAgICAgICAgPyBjdXJyZW50VGFiXG4gICAgICAgIDogdGhpcy5kZWZhdWx0VGFiPy5uYW1lIHx8IG51bGxcbiAgICAgIGlmICh0YWIgIT09IGN1cnJlbnRUYWIpIHtcbiAgICAgICAgLy8gQW55IHRhYiBjaGFuZ2UgbmVlZHMgdG8gYmUgcmVmbGVjdGVkIGluIHRoZSByb3V0ZXIgYWxzby5cbiAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBoYXNoOiB0YWIgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YWJcbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHRoaXMudGFicykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRUYWIgfSA9IHRhYlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpXG4gICAgICAgICAgICA/IGRlZmF1bHRUYWIuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgICA6IGRlZmF1bHRUYWJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0YWJcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSB0YWJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsaXBib2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYT8uY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ3NlcnZlcicsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkRGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICRzY2hlbWE6IHRoaXMuc2NoZW1hLm5hbWUsXG4gICAgICAgIC4uLnRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAgIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHMuXG4gICAgLy8gTk9URTogVGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBhczpcbiAgICAvLyByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGlwYm9hcmREYXRhXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgdGhpcy5jb250ZXh0KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZGF0ZWQpXG4gICAgfSxcblxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmxhYmVsIHx8IHRoaXMuY29sbGFwc2libGVcbiAgICB9LFxuXG4gICAgaGFzVGFicygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pbmxpbmVkICYmICEhdGhpcy50YWJzXG4gICAgfSxcblxuICAgIGhhc01haW5QYW5lKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuICEhY29tcG9uZW50cyAmJiBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIG9wZW5lZDogZ2V0U3RvcmVBY2Nlc3Nvcignb3BlbmVkJywge1xuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbGxhcHNlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50cygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgY29tcG9uZW50c0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICAgIC8vIERlbGVnYXRlIGNoYW5nZSBldmVudHMgdGhyb3VnaCB0byBwYXJlbnQgc2NoZW1hOlxuICAgIHRoaXMuZGVsZWdhdGUoJ2NoYW5nZScsIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50KVxuICAgIHRoaXMuZW1pdEV2ZW50KCdpbml0aWFsaXplJykgLy8gTm90IGAnY3JlYXRlJ2AsIHNpbmNlIHRoYXQncyBmb3IgZGF0YS5cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZW1pdEV2ZW50KCdkZXN0cm95JylcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoXG4gICAgICAgIHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHNCeU5hbWUoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5TmFtZSh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5TmFtZShuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnQoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWwoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIHNvbWVDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5zb21lKGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBldmVyeUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLmV2ZXJ5KGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBvbkV4cGFuZChleHBhbmQpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdleHBhbmQnLCB7XG4gICAgICAgIC8vIFRPRE86IEFjdHVhbGx5IGV4cG9zZSB0aGlzIG9uIERpdG9Db250ZXh0P1xuICAgICAgICBjb250ZXh0OiB7IGV4cGFuZCB9XG4gICAgICB9KVxuICAgICAgLy8gUHJldmVudCBjbG9zaW5nIHRoZSBzY2hlbWEgd2l0aCBpbnZhbGlkIGRhdGEsIHNpbmNlIHRoZSBpbi1jb21wb25lbnRcbiAgICAgIC8vIHZhbGlkYXRpb24gd2lsbCBub3QgYmUgZXhlY3V0ZWQgb25jZSBpdCdzIGNsb3NlZC5cblxuICAgICAgLy8gVE9ETzogTW92ZSB2YWxpZGF0aW9uIG91dCBvZiBjb21wb25lbnRzLCB0byBzY2hlbWEsIGp1c3QgbGlrZVxuICAgICAgLy8gcHJvY2Vzc2luZywgYW5kIHVzZSBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgZm9yIHRoZSByZXN1bHRpbmcgZXJyb3JzLFxuICAgICAgLy8gdGhlbiByZW1vdmUgdGhpcyByZXF1aXJlbWVudCwgc2luY2Ugd2UgY2FuIHZhbGlkYXRlIGNsb3NlZCBmb3JtcyBhbmRcbiAgICAgIC8vIHNjaGVtYXMgdGhlbi5cbiAgICAgIGlmICghdGhpcy5vcGVuZWQgfHwgZXhwYW5kIHx8IHRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICB0aGlzLm9wZW5lZCA9IGV4cGFuZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzQnlEYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgbGV0IGRhdGFQYXRoc1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrID0gaXNGdW5jdGlvbihtYXRjaClcbiAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgOiBpc1JlZ0V4cChtYXRjaClcbiAgICAgICAgICAgID8gZmllbGQgPT4gbWF0Y2gudGVzdChmaWVsZClcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBkYXRhUGF0aHMgPSBjaGVja1xuICAgICAgICAgID8gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpLmZpbHRlcihjaGVjaylcbiAgICAgICAgICA6IGlzQXJyYXkobWF0Y2gpXG4gICAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgICA6IFttYXRjaF1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGRhdGFQYXRocyB8fD0gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpXG4gICAgICBmb3IgKGNvbnN0IGRhdGFQYXRoIG9mIGRhdGFQYXRocykge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmICghY29tcG9uZW50LnZhbGlkYXRlKG5vdGlmeSkpIHtcbiAgICAgICAgICAgIC8vIEZvY3VzIGZpcnN0IGVycm9yIGZpZWxkXG4gICAgICAgICAgICBpZiAobm90aWZ5ICYmIGZpcnN0KSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5mb2N1cygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbChtYXRjaCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGFzeW5jIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgY29uc3QgdW5tYXRjaGVkID0gW11cbiAgICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBlcnJzXSBvZiBPYmplY3QuZW50cmllcyhlcnJvcnMpKSB7XG4gICAgICAgIC8vIElmIHRoZSBzY2hlbWEgaXMgYSBkYXRhLXJvb3QsIHByZWZpeCBpdHMgb3duIGRhdGFQYXRoIHRvIGFsbCBlcnJvcnMsXG4gICAgICAgIC8vIHNpbmNlIHRoZSBkYXRhIHRoYXQgaXQgc2VuZHMgYW5kIHZhbGlkYXRlcyB3aWxsIGJlIHVucHJlZml4ZWQuXG4gICAgICAgIGNvbnN0IGZ1bGxEYXRhUGF0aCA9IHRoaXMuaGFzT3duRGF0YVxuICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgICAgICAgOiBkYXRhUGF0aFxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLCB0aGlzLmRhdGFQYXRoLCB0aGlzLmhhc093bkRhdGEsIGZ1bGxEYXRhUGF0aClcbiAgICAgICAgLy8gQ29udmVydCBmcm9tIEphdmFTY3JpcHQgcHJvcGVydHkgYWNjZXNzIG5vdGF0aW9uLCB0byBvdXIgb3duIGZvcm1cbiAgICAgICAgLy8gb2YgcmVsYXRpdmUgSlNPTiBwb2ludGVycyBhcyBkYXRhLXBhdGhzOlxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChmdWxsRGF0YVBhdGgpXG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKSkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAvLyBDb3VsZG4ndCBmaW5kIGEgY29tcG9uZW50IGluIGFuIGFjdGl2ZSBmb3JtIGZvciB0aGUgZ2l2ZW4gZGF0YVBhdGguXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgY29tcG9uZW50IHNlcnZpbmcgYSBwYXJ0IG9mIHRoZSBkYXRhUGF0aCxcbiAgICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgIGlmIChhd2FpdCBjb21wb25lbnQubmF2aWdhdGVUb0NvbXBvbmVudD8uKFxuICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBzdWJDb21wb25lbnRzID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycnMgPSBlcnJvcnNbY29tcG9uZW50LmRhdGFQYXRoXVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgZXJycyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3VuZCBhIG5lc3RlZCBmb3JtIHRvIGRpc3BsYXkgYXQgbGVhc3QgcGFydHMgZm8gdGhlIGVycm9ycy5cbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzaG93IGFsbCBlcnJvcnMgYXQgb25jZSwgc28gd2UncmUgZG9uZS4gRG9uJ3QgY2FsbFxuICAgICAgICAgICAgICAgIC8vIGBub3RpZnlFcnJvcnMoKWAgeWV0LCBhcyB3ZSBjYW4gb25seSBkaXNwbGF5IGl0IG9uY2VcbiAgICAgICAgICAgICAgICAvLyBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgd2FzIGNhbGxlZCBmcm9tIGBEaXRvRm9ybS5tb3VudGVkKClgXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0aWxsIGhlcmUsIHNvIGtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFdoZW4gdGhlIGVycm9yIGNhbid0IGJlIG1hdGNoZWQsIGFkZCBpdCB0byBhIGxpc3Qgb2YgdW5tYXRjaGVkXG4gICAgICAgICAgLy8gZXJyb3JzIHdpdGggZGVjZW50IG1lc3NhZ2UsIHRvIHJlcG9ydCBhdCB0aGUgZW5kLlxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gbGFiZWxpemUocHJvcGVydHkpXG4gICAgICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJycykge1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gZmllbGRcbiAgICAgICAgICAgICAgPyBgVGhlIGZpZWxkICR7ZmllbGR9YFxuICAgICAgICAgICAgICA6IGBUaGUgJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICAgICB1bm1hdGNoZWQucHVzaChgJHtwcmVmaXh9ICR7ZXJyLm1lc3NhZ2V9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycyh1bm1hdGNoZWQuam9pbignXFxuJykpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG5vdGlmeUVycm9ycyhtZXNzYWdlKSB7XG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnVmFsaWRhdGlvbiBFcnJvcnMnLFxuICAgICAgICB0ZXh0OiBtZXNzYWdlIHx8ICdQbGVhc2UgY29ycmVjdCB0aGUgaGlnaGxpZ2h0ZWQgZXJyb3JzLidcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlc2V0RGF0YSgpIHtcbiAgICAgIC8vIFdlIGNhbid0IHNldCBgdGhpcy5kYXRhID0gLi4uYCBiZWNhdXNlIGl0J3MgYSBwcm9wZXJ0eSwgYnV0IHdlIGNhblxuICAgICAgLy8gc2V0IGFsbCBrbm93biBwcm9wZXJ0aWVzIG9uIGl0IHRvIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnlcbiAgICAgIC8vIGBzZXREZWZhdWx0cygpYCwgYXMgdGhleSBhcmUgYWxsIHJlYWN0aXZlIGFscmVhZHkgZnJvbSB0aGUgc3RhcnRzOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIHNldERlZmF1bHRzKHRoaXMuc2NoZW1hLCB7fSwgdGhpcykpXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgICAgICBpZiAobmFtZSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICB0aGlzLiRzZXQodGhpcy5kYXRhLCBuYW1lLCBkYXRhW25hbWVdKVxuICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKSkge1xuICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2sgYnkgZGF0YSByZXNvdXJjZXNcbiAgICAgIC8vIHRoZW1zZWx2ZXMsIGFzIHRob3NlIGFyZSBhbHJlYWR5IHRha2luZyBjYXJlIG9mIHRocm91Z2ggdGhlaXIgb3duIEFQSVxuICAgICAgLy8gcmVzb3VyY2UgZW5kLXBvaW50cyBhbmQgc2hvdWxkbid0IGJlIHNldC5cbiAgICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcHlbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLCB7XG4gICAgICAgICAgLy8gTmVlZGVkIGZvciBEaXRvQ29udGV4dCBoYW5kbGluZyBpbnNpZGUgYHByb2Nlc3NEYXRhYCBhbmRcbiAgICAgICAgICAvLyBgcHJvY2Vzc1NjaGVtYURhdGEoKWA6XG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHNjaGVtYU9ubHksXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnQoKWAgaXMgb25seSBzZXQgaWYgb25lIG9mIHRoZSBhbmNlc3RvcnMgdXNlc1xuICAgICAgLy8gdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgICB0aGlzLiRzY2hlbWFQYXJlbnRDb21wb25lbnQoKT8uX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5LCBjb21wb25lbnQsIGFkZClcbiAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgd2l0aCB0aGUgcGFyZW50IGlmIHNjaGVtYSBzaGFyZXMgZGF0YSB3aXRoIGl0LlxuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/Ll9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZShwYW5lLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lc1JlZ2lzdHJ5LCBwYW5lLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmVsKHBhbmVsLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lbHNSZWdpc3RyeSwgcGFuZWwsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyRW50cnkocmVnaXN0cnksIGVudHJ5LCBhZGQpIHtcbiAgICAgIGNvbnN0IHVpZCA9IGVudHJ5LiR1aWRcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgdGhpcy4kc2V0KHJlZ2lzdHJ5LCB1aWQsIGVudHJ5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZGVsZXRlKHJlZ2lzdHJ5LCB1aWQpXG4gICAgICB9XG4gICAgfSxcblxuICAgIF9saXN0RW50cmllc0J5RGF0YVBhdGgocmVnaXN0cnkpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlZ2lzdHJ5KS5yZWR1Y2UoKGVudHJpZXNCeURhdGFQYXRoLCBlbnRyeSkgPT4ge1xuICAgICAgICAvLyBNdWx0aXBsZSBlbnRyaWVzIGNhbiBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgZGF0YS1wYXRoLCBlLmcuIHdoZW5cbiAgICAgICAgLy8gdGhlcmUgYXJlIHRhYnMuIExpbmsgZWFjaCBkYXRhLXBhdGggdG8gYW4gYXJyYXkgb2YgZW50cmllcy5cbiAgICAgICAgY29uc3QgeyBkYXRhUGF0aCB9ID0gZW50cnlcbiAgICAgICAgY29uc3QgZW50cmllcyA9IGVudHJpZXNCeURhdGFQYXRoW2RhdGFQYXRoXSB8fD0gW11cbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhcbiAgICAgIH0sIHt9KVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllcyhlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgPyB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgICAgICA6IHRoaXMuX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFtub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgbmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFthcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9maWx0ZXJFbnRyaWVzKGVudHJpZXMsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2ggPyBlbnRyaWVzLmZpbHRlcihtYXRjaCkgOiBlbnRyaWVzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmRpdG8tc2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gIDpzY2hlbWE9XCJzY2hlbWFcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuKVxuICAvLyBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2hlbWFzIHNlcGFyYXRlbHkgZnJvbSBhbGxcbiAgLy8gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGRpdG8tc2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgICA6aW5saW5lZD1cInRydWVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbiAgKVxuICAgIC8vIFJlbmRlciBkaXRvLWVkaXQtYnV0dG9ucyBmb3IgaW5saW5lZCBzaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAgIC8vIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICAgIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNjaGVtYS1pbmxpbmVkXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgICAgIC8vIENoYW5nZSBzcGFjaW5nIHNvIC5kaXRvLWxhYmVsIGNvdmVycyB0aGUgZnVsbCAuZGl0by1zY2hlbWEtaGVhZGVyLlxuICAgICAgICBtYXJnaW46IC0kZm9ybS1zcGFjaW5nXG4gICAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgICAgLy8gQWRkIHJlbW92ZWQgJGZvcm0tc3BhY2luZyBhZ2FpblxuICAgICAgICAgIC0tbGFiZWwtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICAgIC8vIEJlY2F1c2UgdGFibGVzIGhhdmUgYSBmdW5ueSB3YXkgb2YgYWxsb3dpbmcgdG9vIG11Y2ggd2lkdGggZ3Jvd3RoOlxuICAgICAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgICAgJiArLmRpdG8tcGFuZVxuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgdHJhbnNpdGlvbi1oZWlnaHQgaW4gRGl0b1NjaGVtYTpcbiAgICAgICAgICBtaW4taGVpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzQ29tcGFjdCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEtaW5saW5lZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gaXNDb21wYWN0KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBhY3QgJiYgISF0aGlzLmxhYmVsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhbmUoXG4gIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICB2LXNob3c9XCJ2aXNpYmxlXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwibmVzdGVkRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYW5lKFxuICAgIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICAgIHYtc2hvdz1cInZpc2libGVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWZvcj1ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBzdG9yZVxuICAgICAgfSBpbiBjb21wb25lbnRTY2hlbWFzYFxuICAgIClcbiAgICAgIC5kaXRvLWJyZWFrKFxuICAgICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgICApXG4gICAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcGFuZVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwXG4gICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydFxuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZVxuICAgIC8vIFJlbW92ZSBwYWRkaW5nIGFkZGVkIGJ5IGAuZGl0by1jb250YWluZXJgXG4gICAgbWFyZ2luOiAoLSRmb3JtLXNwYWNpbmcpICgtJGZvcm0tc3BhY2luZy1oYWxmKVxuICAgIC8vIEFkZCByZW1vdmVkIGhvcml6b250YWwgbWFyZ2luIGFnYWluIHRvIG1heC13aWR0aDpcbiAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgMiAqICRmb3JtLXNwYWNpbmctaGFsZlxuICAgIC8vIFVzZSBgZmxleDogMCVgIGZvciBhbGwgYC5kaXRvLXBhbmVgIGV4Y2VwdCBgLmRpdG8tcGFuZS1tYWluYCxcbiAgICAvLyBzbyB0aGF0IHRoZSBgLmRpdG8tYnV0dG9ucy1tYWluYCBjYW4gYmUgbW92ZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbS5cbiAgICBmbGV4OiAwJVxuXG4gICAgJi5kaXRvLXBhbmUtbWFpblxuICAgICAgZmxleDogMTAwJVxuXG4gICAgLmRpdG8tc2NoZW1hLWhlYWRlcjpub3QoLmRpdG8tc2NoZW1hLW1lbnUtaGVhZGVyKSArICZcbiAgICAgIC8vIENsZWFyIHRvcC1tYXJnaW4gaWYgdGhlIGNvbXBvbmVudHMgYXJlIHByZWNlZGVkIGJ5IGEgc2NoZW1hIGhlYWRlci5cbiAgICAgIG1hcmdpbi10b3A6IDBcblxuICAgIC5kaXRvLWNvbnRhaW5lci5kaXRvLW9taXQtcGFkZGluZyA+ICZcbiAgICAgIC8vIENsZWFyIG1hcmdpbnMgc2V0IGFib3ZlIGFnYWluIGlmIHBhcmVudCBpcyBvbWl0dGluZyBwYWRkaW5nLlxuICAgICAgbWFyZ2luOiAwXG4gICAgICBtYXgtd2lkdGg6IHVuc2V0XG5cbiAgICAuZGl0by1icmVha1xuICAgICAgZmxleDogMTAwJVxuICAgICAgaGVpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGdldEFsbFBhbmVsU2NoZW1hcywgaXNOZXN0ZWQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB2aXNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFiID8gdGhpcyA6IHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgY29tcG9uZW50cyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5c1xuICAgICAgLy8gYW5kIGFkZHMgdGhlIGtleSBhcyB0aGUgbmFtZSB0byBlYWNoIGNvbXBvbmVudCwgdXNlZCBmb3IgbGFiZWxzLCBldGMuXG4gICAgICAvLyBOT1RFOiBzY2hlbWEgY2FuIGJlIG51bGwgd2hpbGUgbXVsdGktZm9ybSBsaXN0cyBsb2FkIHRoZWlyIGRhdGEsXG4gICAgICAvLyBiZWNhdXNlIG9ubHkgdGhlIGF2YWlsYWJsZSBkYXRhIHdpbGwgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGZvcm0uXG4gICAgICAvLyBXaGVuIGVkaXRpbmcgcHJpbWl0aXZlIHZhbHVlcyB0aHJvdWdoIGEgZm9ybSwgZG8gbm90IGFwcGVuZCAnbmFtZScgdG9cbiAgICAgIC8vIHRoZSBjb21wb25lbnQncyBkYXRhUGF0aCBzbyBpdCBjYW4gYmUgbWFwcGVkIHRvIGZyb20gdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAgICAvLyBOT1RFOiBOb3QgYWxsIHNjaGVtYXMgLyBjb21wb25lbnRzIGhhdmUgYSBzb3VyY2VTY2hlbWEsIGUuZy4gZGlhbG9ncy5cbiAgICAgIGNvbnN0IHdyYXBQcmltaXRpdmVzID0gdGhpcy5zb3VyY2VTY2hlbWE/LndyYXBQcmltaXRpdmVzXG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWE/LmNvbXBvbmVudHMgfHwge30pLm1hcChcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgLy8gQWx3YXlzIGFkZCBuYW1lIHRvIGNvbXBvbmVudCBzY2hlbWEuXG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgICAgLy8gU2hhcmUgZGF0YVBhdGggYW5kIHN0b3JlIHdpdGggcGFyZW50IGlmIG5vdCBuZXN0ZWQ6XG4gICAgICAgICAgY29uc3QgbmVzdGVkID0gaXNOZXN0ZWQoc2NoZW1hKVxuICAgICAgICAgIGNvbnN0IG5lc3RlZERhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgZGF0YVBhdGg6IG5lc3RlZCAmJiAhd3JhcFByaW1pdGl2ZXNcbiAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICA6IHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICAgIHN0b3JlOiBuZXN0ZWQgPyB0aGlzLmdldENoaWxkU3RvcmUobmFtZSkgOiB0aGlzLnN0b3JlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hcygpIHtcbiAgICAgIC8vIEdhdGhlciBhbGwgcGFuZWwgc2NoZW1hcyBmcm9tIGFsbCBjb21wb25lbnQgc2NoZW1hcywgYnkgZmluZGluZyB0aG9zZVxuICAgICAgLy8gdGhhdCB3YW50IHRvIHByb3ZpZGUgYSBwYW5lbC4gU2VlIGBnZXRBbGxQYW5lbFNjaGVtYXMoKWAgZm9yIGRldGFpbHMuXG4gICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTY2hlbWFzLmZsYXRNYXAoXG4gICAgICAgICh7IHNjaGVtYSwgbmVzdGVkRGF0YVBhdGg6IGRhdGFQYXRoIH0pID0+IGdldEFsbFBhbmVsU2NoZW1hcyhcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQsXG4gICAgICAgICAgdGhpcy50YWJDb21wb25lbnRcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpbmdsZSAmJiB0aGlzLmNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID09PSAxXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lKHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy50YWIpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBoYXNoOiB0aGlzLnRhYiB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFjdGlvbih2YWx1ZSkge1xuICBjb25zdCBtYXRjaCA9IChcbiAgICBpc1N0cmluZyh2YWx1ZSkgJiZcbiAgICB2YWx1ZS5tYXRjaCgvXlxccyooWystXT9cXGQrKVxccypcXC9cXHMqKFsrLV0/XFxkKylcXHMqJC8pXG4gIClcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgWywgZGl2aWRlbmQsIGRpdmlzb3JdID0gbWF0Y2hcbiAgICByZXR1cm4gcGFyc2VGbG9hdChkaXZpZGVuZCkgLyBwYXJzZUZsb2F0KGRpdmlzb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gIH1cbn1cbiIsIlxuLmRpdG8tY29udGFpbmVyKFxuICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgOmNsYXNzPVwiY29udGFpbmVyQ2xhc3NcIlxuICA6c3R5bGU9XCJjb250YWluZXJTdHlsZVwiXG4pXG4gIGRpdG8tbGFiZWwoXG4gICAgdi1pZj1cImxhYmVsXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICApXG4gIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRUeXBlQ29tcG9uZW50KHNjaGVtYS50eXBlKVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICApXG4gIGRpdG8tZXJyb3JzKFxuICAgIDplcnJvcnM9XCJlcnJvcnNcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jb250YWluZXIoXG4gICAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gICAgOmNsYXNzPVwiY29udGFpbmVyQ2xhc3NcIlxuICAgIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbiAgKVxuICAgIGRpdG8tbGFiZWwoXG4gICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgKVxuICAgIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICAgIDppcz1cImdldFR5cGVDb21wb25lbnQoc2NoZW1hLnR5cGUpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgICApXG4gICAgZGl0by1lcnJvcnMoXG4gICAgICA6ZXJyb3JzPVwiZXJyb3JzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY29udGFpbmVyXG4gICAgLy8gTmVlZGVkIGZvciBiZXR0ZXIgdmVydGljYWwgYWxpZ25tZW50OlxuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2hcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gcHJldmVudCBsaXN0IHRhYmxlcyBmcm9tIGJsb3dpbmcgb3V0IG9mIHRoZWlyIGZsZXggYm94IGNvbnRhaW5lcnMuXG4gICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgLy8gQ2Fubm90IHVzZSBtYXJnaW4gaGVyZSBhcyBpdCBuZWVkcyB0byBiZSBwYXJ0IG9mIGJveC1zaXppbmcgZm9yXG4gICAgLy8gcGVyY2VudGFnZXMgaW4gZmxleC1iYXNpcyB0byB3b3JrLlxuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgJjplbXB0eVxuICAgICAgcGFkZGluZzogMFxuICAgICYuZGl0by1vbWl0LXBhZGRpbmdcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgJi5kaXRvLXNpbmdsZVxuICAgICAgaGVpZ2h0OiAxMDAlIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgYXQgdGhlIGJvdHRvbVxuICAvLyBOT1RFOiBUaGlzIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGAuZGl0by1jb250YWluZXJgIHNvIHRoYXQgb3RoZXJcbiAgLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbiAgLmRpdG8tY29tcG9uZW50XG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgICAmLmRpdG8tcmFkaW8tYnV0dG9uXG4gICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGxpa2UgY2hhbmdlZCB3aWR0aCBvbiBjaGVja2JveGVzIGFuZCByYWRpb3MsIG92ZXJyaWRlOlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgd2lkdGg6IGF1dG9cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRUeXBlT3B0aW9ucywgc2hvdWxkT21pdFBhZGRpbmcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNvbnRhaW5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB0eXBlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlT3B0aW9ucyh0aGlzLnNjaGVtYSkgfHwge31cbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsYWJlbCAhPT0gZmFsc2UgJiZcbiAgICAgICAgKCEhbGFiZWwgfHwgdGhpcy50eXBlT3B0aW9ucy5nZW5lcmF0ZUxhYmVsICYmIHRoaXMuZ2VuZXJhdGVMYWJlbHMpXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKSA6IG51bGxcbiAgICB9LFxuXG4gICAgbGFiZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFVubmVzdGVkIHR5cGVzIGRvbid0IGhhdmUgYSBkYXRhUGF0aCBmb3IgdGhlbXNlbHZlcywgZG9uJ3QgdXNlIGl0OlxuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy5kYXRhUGF0aCA6IG51bGxcbiAgICB9LFxuXG4gICAgY29tcG9uZW50V2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRXaWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVPcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb250YWluZXJDbGFzcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNvbnRhaW5lckNsYXNzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLW9taXQtcGFkZGluZyc6IHNob3VsZE9taXRQYWRkaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGlzU3RyaW5nKGNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgPyB7IFtjb250YWluZXJDbGFzc106IHRydWUgfVxuICAgICAgICAgICAgOiBjb250YWluZXJDbGFzc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNvbXBvbmVudFdpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgY29uc3QgYmFzaXMgPSAoXG4gICAgICAgIFtudWxsLCAnYXV0bycsICdmaWxsJ10uaW5jbHVkZXMod2lkdGgpID8gJ2F1dG8nXG4gICAgICAgIDogLyUkLy50ZXN0KHdpZHRoKSA/IHBhcnNlRmxvYXQod2lkdGgpIC8vIHBlcmNlbnRhZ2VcbiAgICAgICAgOiAvW2Etel0vLnRlc3Qod2lkdGgpID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgIDogcGFyc2VGcmFjdGlvbih3aWR0aCkgKiAxMDAgLy8gZnJhY3Rpb25cbiAgICAgIClcbiAgICAgIHJldHVybiBpc051bWJlcihiYXNpcykgPyBgJHtiYXNpc30lYCA6IGJhc2lzXG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlKCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc+NTAlJyBhcyAnNTAlLCBmbGV4LWdyb3c6IDFgXG4gICAgICBjb25zdCBncm93ID0gKFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc+JyB8fFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCdcbiAgICAgIClcbiAgICAgIC8vIEludGVycHJldCAnPDUwJScgYXMgJzUwJSwgZmxleC1zaHJpbms6IDFgXG4gICAgICBjb25zdCBzaHJpbmsgPSB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc8J1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmxleDogYCR7Z3JvdyA/IDEgOiAwfSAke3NocmluayA/IDEgOiAwfSAke3RoaXMuY29tcG9uZW50QmFzaXN9YFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzcygpIHtcbiAgICAgIGNvbnN0IGJhc2lzSXNBdXRvID0gdGhpcy5jb21wb25lbnRCYXNpcyA9PT0gJ2F1dG8nXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogIWJhc2lzSXNBdXRvIHx8IHRoaXMuY29tcG9uZW50V2lkdGggPT09ICdmaWxsJyxcbiAgICAgICAgJ2RpdG8td2lkdGgtYXV0byc6IGJhc2lzSXNBdXRvLFxuICAgICAgICAnZGl0by1oYXMtZXJyb3JzJzogISF0aGlzLmVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25FcnJvcnMoZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9yc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by10YWJzXG4gIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcih0YWJTY2hlbWEpXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gIClcbiAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdGFic1xuICAgIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cInsgaGFzaDoga2V5IH1cIlxuICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWwodGFiU2NoZW1hLCBrZXkpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgJHRhYi1jb2xvci1iYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3RcbiAgJHRhYi1jb2xvci1pbmFjdGl2ZTogJGNvbG9yLWxpZ2h0XG4gICR0YWItY29sb3ItYWN0aXZlOiAkY29sb3ItbGlnaHRlc3RcbiAgJHRhYi1jb2xvci1ob3ZlcjogJGNvbG9yLXdoaXRlXG5cbiAgLmRpdG8tdGFic1xuICAgIC8vIFNlZTogaHR0cHM6Ly9jb2RlcGVuLmlvL3Rob2xleC9wZW4vaHZlQngvXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICBhXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWluYWN0aXZlXG4gICAgICBwYWRkaW5nOiAkdGFiLXBhZGRpbmctdmVyICR0YWItcGFkZGluZy1ob3JcbiAgICAgIG1hcmdpbi1sZWZ0OiAkdGFiLW1hcmdpblxuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1c1xuICAgICAgJjpob3ZlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWhvdmVyXG4gICAgICAmOmFjdGl2ZVxuICAgICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWFjdGl2ZVxuICAgICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWJhY2tncm91bmRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdGFicycsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWJzOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNlbGVjdGVkVGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8gT25seSBzaG93IHBhbmVscyBpbiB0YWJzIHdoZW4gdGhlIHRhYnMgYXJlIGFsc28gdmlzaWJsZS5cbmNvbXBvbmVudC5kaXRvLXBhbmVsKFxuICA6aXM9XCJwYW5lbFRhZ1wiXG4gIHYtc2hvdz1cInZpc2libGUgJiYgKCFwYW5lbFRhYkNvbXBvbmVudCB8fCBwYW5lbFRhYkNvbXBvbmVudC52aXNpYmxlKVwiXG4gIEBzdWJtaXQucHJldmVudFxuKVxuICBsYWJlbC5kaXRvLXBhbmVsLXRpdGxlIHt7IGdldExhYmVsKHNjaGVtYSkgfX1cbiAgZGl0by1zY2hlbWEuZGl0by1wYW5lbC1zY2hlbWEoXG4gICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gIClcbiAgICBkaXRvLWJ1dHRvbnMoXG4gICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG4gIGNvbXBvbmVudC5kaXRvLXBhbmVsKFxuICAgIDppcz1cInBhbmVsVGFnXCJcbiAgICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gICAgZGl0by1zY2hlbWEuZGl0by1wYW5lbC1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwicGFuZWxTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmhhc093bkRhdGE9XCJoYXNPd25EYXRhXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcGFuZWxcbiAgICBtYXJnaW4tYm90dG9tOiAkY29udGVudC1wYWRkaW5nXG4gICAgLmRpdG8tcGFuZWwtdGl0bGVcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgYmFja2dyb3VuZDogJGJ1dHRvbi1jb2xvclxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgLmRpdG8tcGFuZWwtc2NoZW1hXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmRcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXRvcDogMFxuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZ1xuICAgICAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgICAtLWJ1dHRvbi1tYXJnaW46ICN7JGZvcm0tc3BhY2luZ31cbiAgICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuICAgICAgLmRpdG8tb2JqZWN0XG4gICAgICAgIGJvcmRlcjogMFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAuZGl0by1sYWJlbFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgbGFiZWxcbiAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAuZGl0by1wYW5lXG4gICAgICAgIG1hcmdpbjogMCAoLSRmb3JtLXNwYWNpbmctaGFsZilcbiAgICAgIC5kaXRvLWNvbnRhaW5lclxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGZcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lbCcsIHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYW5lbFRhYkNvbXBvbmVudDogeyB0eXBlOiBEaXRvQ29tcG9uZW50LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25EYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgdGFyZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnRhcmdldCB8fCB0aGlzLmRhdGFQYXRoXG4gICAgfSxcblxuICAgIGhhc093bkRhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm93bkRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3duRGF0YSB8fCB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWEoKSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25EYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBkYXRhYCBmcm9tIHRoZSBzY2hlbWEsIHNvIHRoYXQgRGl0b1NjaGVtYSBpc24ndCB1c2luZyBpdCB0b1xuICAgICAgICAvLyBwcm9kdWNlIGl0cyBvd24gZGF0YS4gU2VlICRmaWx0ZXJzIHBhbmVsIGZvciBtb3JlIGRldGFpbHMgb24gZGF0YS5cbiAgICAgICAgY29uc3QgeyBkYXRhLCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxUYWcoKSB7XG4gICAgICAvLyBQYW5lbHMgdGhhdCBwcm92aWRlIHRoZWlyIG93biBkYXRhIG5lZWQgdGhlaXIgb3duIGZvcm0uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gJ2Zvcm0nIDogJ2RpdidcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIGRhdGEsIHRoZW4gaXQgbmVlZHMgdG8gcHJlZml4IGFsbFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIGl0cyBkYXRhLXBhdGgsIGJ1dCBpZiBpdCBzaGFyZXMgZGF0YSB3aXRoIHRoZSBzY2hlbWFcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhlbiBpdCBzaG91bGQgc2hhcmUgdGhlIGRhdGEtcGF0aCBuYW1lIHNwYWNlIHRvby5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyB0aGlzLmRhdGFQYXRoIDogdGhpcy5zY2hlbWFDb21wb25lbnQuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIC8vIE5PVEU6IFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIGBzY2hlbWEuZGF0YWAgaGFuZGxpbmcgaW4gRGl0b1NjaGVtYSxcbiAgICAvLyB3aGVyZSB0aGUgZGF0YSBpcyBhZGRlZCB0byB0aGUgYWN0dWFsIGNvbXBvbmVudC5cbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMub3duRGF0YSA9IGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgPyBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICA6IGRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUmVnaXN0ZXIgdGhlIHBhbmVscyBzbyB0aGF0IG90aGVyIGNvbXBvbmVudHMgY2FuIGZpbmQgdGhlbSBieSB0aGVpclxuICAgICAgLy8gZGF0YS1wYXRoLCBlLmcuIGluIFR5cGVMaXN0Lm9uRmlsdGVyRXJyb3JzKClcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmVsKHRoaXMsIGFkZClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tcGFuZWxzKFxuICB2LWlmPVwicGFuZWxzLmxlbmd0aCA+IDBcIlxuKVxuICBkaXRvLXBhbmVsKFxuICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoc2NoZW1hLm5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICA6cGFuZWxUYWJDb21wb25lbnQ9XCJ0YWJDb21wb25lbnRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYW5lbHMoXG4gICAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIGRpdG8tcGFuZWwoXG4gICAgICB2LWZvcj1cInsgc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50IH0gaW4gcGFuZWxzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoc2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCAhPSBudWxsID8gc2NoZW1hLmRpc2FibGVkIDogZGlzYWJsZWRcIlxuICAgICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcGFuZWxzXG4gICAgbWF4LXdpZHRoOiAkY29udGVudC1zaWRlYmFyLXdpZHRoXG4gICAgbWluLXdpZHRoOiBjYWxjKCRjb250ZW50LXNpZGViYXItd2lkdGggLyAyKVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lbHMnLCB7XG4gIHByb3BzOiB7XG4gICAgcGFuZWxzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICAgICAgLy8gQWxsb3cgc2VwYXJhdGUgdGFicyB0byB1c2UgcGFuZWxzIG9mIHRoZSBzYW1lIG5hbWUsIGJ5XG4gICAgICAvLyBwcmVmaXhpbmcgdGhlaXIga2V5IHdpdGggdGhlIHRhYiBuYW1lLlxuICAgICAgcmV0dXJuIHRhYkNvbXBvbmVudCA/IGAke3RhYkNvbXBvbmVudC50YWJ9XyR7ZGF0YVBhdGh9YCA6IGRhdGFQYXRoXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICB2LW9uPVwiJGxpc3RlbmVyc1wiXG4pXG4gIGRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICA6c2NoZW1hPVwiYnV0dG9uU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICApXG4gIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gIC8vIHdyYXBwZWQgaW4gYSBgLmRpdG8tY29udGFpbmVyYCBjbGFzcy5cbiAgLmRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgdi1pZj1cIm5vZGUudGFnXCJcbiAgKVxuICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1idXR0b25zKFxuICAgIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgICAvKiBQYXNzIG9uICRsaXN0ZW5lcnMgc28gdGhhdCBkaXRvLWVkaXQtYnV0dG9ucyBjYW4gcGFzcyBldmVudHMuICovXG4gICAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICApXG4gICAgLy8gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLCBzbyBpdCBjYW4gYmVcbiAgICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCJub2RlIGluICRzbG90cy5kZWZhdWx0XCJcbiAgICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gICAgKVxuICAgICAgZGl0by12bm9kZSg6bm9kZT1cIm5vZGVcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuLmRpdG8tYnV0dG9uc1xuICA+IC5kaXRvLWNvbnRhaW5lclxuICAgIHBhZGRpbmc6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYnV0dG9ucycsIHtcbiAgcHJvdmlkZToge1xuICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgfSxcblxuICBwcm9wczoge1xuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGJ1dHRvbnMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXMuXG4gICAgICBjb25zdCB7IGRhdGFQYXRoLCBidXR0b25zIH0gPSB0aGlzXG4gICAgICByZXR1cm4gYnV0dG9uc1xuICAgICAgICA/IE9iamVjdC52YWx1ZXMoYnV0dG9ucykucmVkdWNlKChzY2hlbWFzLCBidXR0b24pID0+IHtcbiAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgfSwge30pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICBAY2xpY2suc3RvcFxuKVxuICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICBhLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RyYWdnYWJsZVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gIClcbiAgcm91dGVyLWxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICApXG4gIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNDcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICAgIEBjbGljay5zdG9wXG4gIClcbiAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgIGEuZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgKVxuICAgIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgICAgOnRvPVwieyBwYXRoOiBlZGl0UGF0aCB9XCIgYXBwZW5kXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICApXG4gICAgZGl0by1jcmVhdGUtYnV0dG9uKFxuICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1lZGl0LWJ1dHRvbnNcbiAgICAvLyBPdmVycmlkZSBjdXJzb3IgZnJvbSBjb2xsYXBzaWJsZSBkaXRvLWxhYmVsOlxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIGZsZXg6IG5vbmVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lZGl0LWJ1dHRvbnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjcmVhdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjcmVhdGVQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hLmZvcm0pXG4gICAgfSxcblxuICAgIGlzRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkcmFnZ2FibGUnKVxuICAgIH0sXG5cbiAgICBpc0VkaXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdlZGl0YWJsZScpICYmICEhdGhpcy5lZGl0UGF0aFxuICAgIH0sXG5cbiAgICBpc0NyZWF0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignY3JlYXRhYmxlJykgJiYgISF0aGlzLmNyZWF0ZVBhdGhcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RlbGV0YWJsZScpXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHxcbiAgICAgICAgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc09wdGlvbihuYW1lKSB7XG4gICAgICAvLyBUaGUgb3B0aW9ucyBvZiB0aGUgb3V0ZXIgY29tcG9uZW50IGFyZSBwYXNzZWQgdG8gdGhlIGJ1dHRvbnMgY29tcG9uZW50XG4gICAgICAvLyB0aHJvdWdoIHByb3BlcnRpZXMgYHRoaXNbbmFtZV1gLCBidXQgY2FuIGJlIGRpc2FibGVkIG9uIGEgcGVyLWZvcm1cbiAgICAgIC8vIGJhc2lzIGJ5IHNldHRpbmcgYHNjaGVtYVtuYW1lXWAgdG8gYGZhbHNlYC5cbiAgICAgIHJldHVybiAhISh0aGlzW25hbWVdICYmIHRoaXMuc2NoZW1hW25hbWVdICE9PSBmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tY3JlYXRlLWJ1dHRvblxuICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICApXG4gICAgICBsaSh2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiKVxuICAgICAgICBhKFxuICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiYGRpdG8tdHlwZS0ke3R5cGV9YFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtZWxzZVxuICAgIDp0eXBlPVwiaXNJbmxpbmVkID8gJ2J1dHRvbicgOiAnc3VibWl0J1wiXG4gICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICkge3sgdGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY3JlYXRlLWJ1dHRvblxuICAgIHRlbXBsYXRlKHYtaWY9XCJzaG93UHVsbGRvd25cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICAgICkge3sgdGV4dCB9fVxuICAgICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICAgIClcbiAgICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgICBhKFxuICAgICAgICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlKGZvcm0pXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1lbHNlXG4gICAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICAgICkge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgcmlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRGb3JtU2NoZW1hcywgaXNJbmxpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY3JlYXRlLWJ1dHRvbicsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHZlcmI6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRleHQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHNob3dQdWxsZG93bigpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZvcm1zKS5sZW5ndGggPiAxIHx8ICF0aGlzLmZvcm1zLmRlZmF1bHRcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGlzQ3JlYXRhYmxlKGZvcm0pIHtcbiAgICAgIC8vIEZvcm1zIGNhbiBiZSBleGNsdWRlZCBmcm9tIHRoZSBsaXN0IGJ5IHByb3ZpZGluZyBgY3JlYXRhYmxlOiBmYWxzZWBcbiAgICAgIHJldHVybiBmb3JtLmNyZWF0YWJsZSAhPT0gZmFsc2VcbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGFibGUoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfSxcbiAgICAgICAgICAgIGFwcGVuZDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIHYtaWY9XCJjbGlwYm9hcmRcIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY2xpcGJvYXJkJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjbGlwYm9hcmQ6IHsgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3B5RW5hYmxlZDogZmFsc2UsXG4gICAgICBwYXN0ZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZml4Q2xpcGJvYXJkOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xpcGJvYXJkT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh0aGlzLmNsaXBib2FyZCkgPyB0aGlzLmNsaXBib2FyZCA6IHt9XG4gICAgfSxcblxuICAgIGNvcHlEYXRhKCkge1xuICAgICAgY29uc3QgeyBjb3B5IH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBjb3B5XG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBjb3B5LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+IHBhc3RlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY29weTogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGZvY3VzOiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLiR3YXRjaCgnZGF0YScsIHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICh0bywgZnJvbSkgPT4ge1xuICAgICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKHRoaXMuZml4Q2xpcGJvYXJkICYmIGpzb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgbmVlZGVkIG9uIFNhZmFyaSB0byBwcmV2ZW50IGEgc3RyYW5nZSBcIlBhc3RlXCJcbiAgICAgICAgICAvLyBidXR0b24gZnJvbSBhcHBlYXJpbmcgd2hlbiB0aGUgY2xpcGJvYXJkIGlzIGFjY2Vzc2VkICh3aHk/ISkuXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICB0aGlzLmZpeENsaXBib2FyZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBjaGVja0NsaXBib2FyZCgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSAhIXRoaXMuZGF0YVxuICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhKGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkpIC8vIGRvbid0IHJlcG9ydFxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGFjdGl2YXRlIHRoZSBwYXN0ZSBidXR0b24sIGRlcGVuZGRpbmcgb24gYnJvd3NlcnM6XG4gICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uUGFzdGUoKSB7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YSh0cnVlKSAvLyByZXBvcnRcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBkYXRhICYmIHRoaXMucGFzdGVEYXRhKGRhdGEpXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcsIHsgdXBkYXRlUm9vdCA9IGZhbHNlLCB1cGRhdGVWaWV3ID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nIF4gIWlzTG9hZGluZykgeyAvLyBCb29sZWFuIHhvclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgICAgIGlmICh1cGRhdGVSb290KSB7XG4gICAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LnJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZVZpZXcpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0TG9hZGluZyh0aGlzLmlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5pbXBvcnQgeyBzZXREZWZhdWx0cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBMb2FkaW5nTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgIC8vIFBhc3MgbG9jYWwgdmVyYnMgb3ZlcnJpZGVzIG9uIHRvIGNoaWxkcmVuLCBzZWUgdmVyYnMoKSBjb21wdXRlZCBwcm9wLlxuICAgICAgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzLFxuICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0aGlzLmhhc0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9hZGVkRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZSBmb3IgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIHNvdXJjZSBzY2hlbWEuXG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGEgZGF0YS1zb3VyY2UgaWYgaXQgaGFzIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlOlxuICAgICAgcmV0dXJuICEhdGhpcy5yZXNvdXJjZVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIC8vIFJldHVybnMgYGZhbHNlYGhlcmUsIGJ1dCBpcyBvdmVycmlkZGVuIHRvIHJldHVybiBgdHJ1ZWAgaW5cbiAgICAgIC8vIGBTb3VyY2VNaXhpbmAgZm9yIGNvbXBvbmVudCB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWlyIG93biBkYXRhLCBidXRcbiAgICAgIC8vIGVkaXQgdGhlaXIgaXRlbXMgdGhyb3VnaCBhIGxpbmtlZCB2aWV3LiAgSW4gdGhpcyBjYXNlLCByZWFsIGlkcyBuZWVkIHRvXG4gICAgICAvLyBiZSB1c2VkLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBiZWxvbmdzIHRvIGFzIHdlbGwsIHNpbmNlIGl0IG1heSBiZVxuICAgICAgLy8gaW4gY3JlYXRpb24gbW9kZSwgd2hpY2ggbWFrZXMgaXQgdHJhbnNpZW50LlxuICAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBsb29wIGVuZGxlc3NseSBiZWNhdXNlIERpdG9Gb3JtIHJlZGVmaW5lc1xuICAgICAgLy8gYGlzVHJhbnNpZW50KClgIHRvIG9ubHkgcmV0dXJuIGAhdGhpcy5wcm92aWRlc0RhdGFgLlxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNvbXBvbmVudFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICF0aGlzLmxpbmtzVG9WaWV3IHx8XG4gICAgICAgIGZvcm0gJiYgKFxuICAgICAgICAgIGZvcm0uaXNUcmFuc2llbnQgfHxcbiAgICAgICAgICBmb3JtLmlzQ3JlYXRpbmdcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0cmFuc2llbnROb3RlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAnPGI+Tm90ZTwvYj46IHRoZSBwYXJlbnQgc3RpbGwgbmVlZHMgdG8gYmUgc2F2ZWQgJyArXG4gICAgICAgICdpbiBvcmRlciB0byBwZXJzaXN0IHRoaXMgY2hhbmdlLidcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcXVlcnlQYXJhbXMoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucGFnaW5hdGlvblJhbmdlXG4gICAgICBjb25zdCB7IHBhZ2UsIC4uLnF1ZXJ5IH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5xdWVyeSwgLy8gUXVlcnkgbWF5IG92ZXJyaWRlIHNjb3BlLlxuICAgICAgICAuLi4ocmFuZ2UgJiYge1xuICAgICAgICAgIC8vIFBhc3MgcGFnaW5hdGlvbiBhcyByYW5nZSwgc28gdGhhdCB3ZSBhdXRvbWF0aWNhbGx5IGdldCBPYmplY3Rpb24nc1xuICAgICAgICAgIC8vIHJlc3VsdHMgY291bnRpbmc6XG4gICAgICAgICAgcmFuZ2U6IHJhbmdlLmpvaW4oJywnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIFdoZW4gY3JlYXRpbmcgbmVzdGVkIGRhdGEsIHdlIHN0aWxsIG5lZWQgdG8gY2FsbCBzZXR1cERhdGEoKVxuICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSB8fCB0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRhKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFJlc291cmNlKCkge1xuICAgICAgLy8gVGhpcyBpcyBkZWZpbmVkIGFzIGEgbWV0aG9kIHNvIHRoZSBjb21wdXRlZCBgcmVzb3VyY2VgIGdldHRlciBjYW5cbiAgICAgIC8vIGJlIG92ZXJyaWRkZW4gYW5kIGBzdXBlcmAgZnVuY3Rpb25hbGl0eSBjYW4gc3RpbGwgYmUgYWNjZXNzZWQuXG4gICAgICByZXR1cm4gZ2V0UmVzb3VyY2UodGhpcy5zb3VyY2VTY2hlbWE/LnJlc291cmNlLCB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudEZvcm1Db21wb25lbnQ/LnJlc291cmNlID8/IG51bGxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFZlcmJzKCkge1xuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLiR2ZXJicygpXG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IHtcbiAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAvLyBPdmVycmlkZSBkZWZhdWx0IHZlcmJzIHdpdGggdGhlaXIgdHJhbnNpZW50IHZlcnNpb25zOlxuICAgICAgICAgIGNyZWF0ZTogJ2FkZCcsXG4gICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICBzYXZlOiAnYXBwbHknLFxuICAgICAgICAgIHNhdmVkOiAnYXBwbGllZCcsXG4gICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICBkZWxldGVkOiAncmVtb3ZlZCdcbiAgICAgICAgfVxuICAgICAgICA6IHZlcmJzXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIC8vIEFjdHVhbCBjb2RlIGlzIGluIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0J3MgZWFzZXIgdG8gb3ZlcnJpZGVcbiAgICAgIC8vIGBzZXR1cERhdGEoKWAgYW5kIGFuZCBjYWxsIGBlbnN1cmVEYXRhKClgIGZyb20gdGhlIG92ZXJyaWRlcyxcbiAgICAgIC8vIHNlZSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW4uXG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICBlbnN1cmVEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkTG9hZCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVsb2FkRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgfSxcblxuICAgIGxvYWREYXRhKGNsZWFyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckRhdGEoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHNldERlZmF1bHRzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5xdWVyeVBhcmFtc1xuICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZ2V0JywgcGFyYW1zIH0sIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2VcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZGF0YT8udHlwZSA9PT0gJ0ZpbHRlclZhbGlkYXRpb24nICYmXG4gICAgICAgICAgICAgIHRoaXMub25GaWx0ZXJFcnJvcnM/LihkYXRhLmVycm9ycykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdCh7XG4gICAgICBtZXRob2QsXG4gICAgICByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UsXG4gICAgICBkYXRhLFxuICAgICAgcGFyYW1zXG4gICAgfSwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHBhcmFtcyB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdClcbiAgICAgICAgLy8gUGFzcyBib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRvIHRoZSBjYWxsYmFjaywgc28gdGhleSBjYW4gYmVcbiAgICAgICAgLy8gZXhwb3NlZCB0byBmdXJ0aGVyIGNhbGxiYWNrcyB0aHJvdWdoIERpdG9Db250ZXh0LlxuICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgZXJyb3JzIHdlcmUgYWxyZWFkeSBoYW5kbGVkLlxuICAgICAgICBjb25zdCB7IHJlc3BvbnNlIH0gPSBlcnJvclxuICAgICAgICBpZiAoIWNhbGxiYWNrKGVycm9yLCByZXNwb25zZSkpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICBpZiAoZGF0YSAmJiBpc1N0cmluZyhkYXRhLnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiBsYWJlbGl6ZShkYXRhLnR5cGUpLFxuICAgICAgICAgICAgICB0ZXh0OiBkYXRhLm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogZXJyb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgIH0sXG5cbiAgICBnZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZCkge1xuICAgICAgLy8gQ29udmVudGlvbjogb25seSBwb3N0LCBwdXQgYW5kIHBhdGNoIHJlcXVlc3RzIHBhc3MgdGhlIGRhdGEgYXMgcGF5bG9hZC5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmNsdWRlcyhtZXRob2QpICYmIChcbiAgICAgICAgICAvLyBUT0RPOiBVc2UgYGhhbmRsZURhdGFTY2hlbWEoKWAgYXN5bmNocm9ub3VzbHkgaGVyZSBpbnN0ZWFkLCB0b1xuICAgICAgICAgIC8vIG9mZmVyIHRoZSBzYW1lIGFtb3VudCBvZiBwb3NzaWJpbGl0aWVzIGZvciBkYXRhIGxvYWRpbmcuXG4gICAgICAgICAgYnV0dG9uLmdldFNjaGVtYVZhbHVlKFsncmVzb3VyY2UnLCAnZGF0YSddKSB8fFxuICAgICAgICAgIGJ1dHRvbi5wcm9jZXNzZWRJdGVtXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbikge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCB7IG1ldGhvZCB9ID0gcmVzb3VyY2VcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgIHNldERhdGEgPSBmYWxzZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzID0gKCkgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgdGV4dDogJ1JlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBzZW50LidcbiAgICAgIH0pLFxuICAgICAgbm90aWZ5RXJyb3IgPSBlcnJvciA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgIF1cbiAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgZGF0YSwgcmVzb3VyY2UgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIG1lcmdlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzLCBpc09iamVjdFNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWZvcm0nLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW4sIFJlc291cmNlTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZWREYXRhOiBudWxsLFxuICAgICAgY2xvbmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgc291cmNlS2V5OiBudWxsLFxuICAgICAgaXNGb3JtOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBBZGQgc3VibWl0IC8gc3VibWl0dGVkIHRvIHRoZSB2ZXJicyByZXR1cm5lZCBieSBSZXNvdXJjZU1peGluXG4gICAgICAvLyBOT1RFOiBUaGVzZSBnZXQgcGFzc2VkIG9uIHRvIGNoaWxkcmVuIHRocm91Z2g6XG4gICAgICAvLyBgcHJvdmlkZSgpIC4uLiB7ICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyB9YCBpbiBSZXNvdXJjZU1peGluXG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuZ2V0VmVyYnMoKVxuICAgICAgY29uc3QgeyBpc0NyZWF0aW5nLCBwcm92aWRlc0RhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZlcmJzLFxuICAgICAgICBzdWJtaXQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGUgOiB2ZXJicy5zYXZlLFxuICAgICAgICBzdWJtaXR0ZWQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGVkIDogdmVyYnMuc2F2ZWQsXG4gICAgICAgIGNhbmNlbDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsIDogdmVyYnMuY2xvc2UsXG4gICAgICAgIGNhbmNlbGxlZDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsbGVkIDogdmVyYnMuY2xvc2VkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQsIHByb3ZpZGUgYW4gZW1wdHkgb2JqZWN0IHdpdGgganVzdCB0aGUgcmlnaHRcbiAgICAgICAgLy8gdHlwZSBzZXQsIHNvIHRoZSBmb3JtIGNhbiBhbHdheXMgYmUgZGV0ZXJtaW5lZC5cbiAgICAgICAgdGhpcy5kYXRhIHx8IHsgdHlwZTogdGhpcy50eXBlIH0sXG4gICAgICAgIHRoaXMuY29udGV4dFxuICAgICAgKSB8fCB7fSAvLyBBbHdheXMgcmV0dXJuIGEgc2NoZW1hIG9iamVjdCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBpdC5cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKFxuICAgICAgICBtZXJnZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN1Ym1pdDogIXRoaXMuZG9lc011dGF0ZSAmJiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgICAvLyBTdWJtaXQgYnV0dG9ucyBjbG9zZSB0aGUgZm9ybSBieSBkZWZhdWx0OlxuICAgICAgICAgICAgICBjbG9zZUZvcm06IHRydWUsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoeyBjb21wb25lbnQ6IGJ1dHRvbiB9KSA9PiBidXR0b24uc3VibWl0KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5zY2hlbWEuYnV0dG9uc1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMYXN0Um91dGUgfHwgdGhpcy5pc0xhc3RVbm5lc3RlZFJvdXRlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgcmV0dXJuICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0NyZWF0aW5nKCkge1xuICAgICAgLy8gdGhpcy5wYXJhbSBpcyBpbmhlcml0ZWQgZnJvbSBSb3V0ZU1peGluXG4gICAgICByZXR1cm4gdGhpcy5wYXJhbSA9PT0gJ2NyZWF0ZSdcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5kb2VzTXV0YXRlICYmICEhdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5pc0RpcnR5XG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkb2VzTXV0YXRlKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIGFwcGxpY2F0aW9uIHVwb24gc3VibWl0LlxuICAgICAgLy8gU2VlIGBpbmhlcml0ZWREYXRhKClgIGNvbXB1dGVkIHByb3BlcnR5IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICAvLyBUaGUgdHlwZSBvZiBmb3JtIHRvIGNyZWF0ZSwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGVcbiAgICB9LFxuXG4gICAgaXRlbUlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IG51bGxcbiAgICAgICAgOiAodGhpcy5wYXJhbSA/PyBudWxsKVxuICAgIH0sXG5cbiAgICBtZXRob2QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nID8gJ3Bvc3QnIDogJ3BhdGNoJ1xuICAgIH0sXG5cbiAgICByZXNvdXJjZSgpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgICByZXR1cm4gZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy5pdGVtSWQsIHJlc291cmNlKSB8fCByZXNvdXJjZVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuIGNhcGl0YWxpemUodGhpcy5pc0NyZWF0aW5nID8gdGhpcy52ZXJicy5jcmVhdGUgOiB0aGlzLnZlcmJzLmVkaXQpXG4gICAgfSxcblxuICAgIGRhdGEoKSB7XG4gICAgICAvLyBSZXR1cm4gZGlmZmVyZW50IGRhdGEgXCJjb250YWluZXJzXCIgYmFzZWQgb24gZGlmZmVyZW50IHNjZW5hcmlvczpcbiAgICAgIC8vIDEuIGNyZWF0ZWREYXRhLCBpZiB3ZSdyZSBpbiBhIGZvcm0gZm9yIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG4gICAgICAvLyAyLiBsb2FkZWREYXRhLCBpZiB0aGUgZm9ybSBpdHNlbGYgaXMgdGhlIHJvb3Qgb2YgdGhlIGRhdGEgKGUuZy4gd2hlblxuICAgICAgLy8gICAgZGlyZWN0bHkgbG9hZGluZyBhbiBlZGl0aW5nIHJvb3QpLlxuICAgICAgLy8gMy4gVGhlIGRhdGEgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCwgd2hpY2ggaXRzZWxmIG1heSBiZSBlaXRoZXIgYVxuICAgICAgLy8gICAgdmlldyB0aGF0IGxvYWRlZCB0aGUgZGF0YSwgb3IgYSBmb3JtIHRoYXQgZWl0aGVyIGxvYWRlZCB0aGUgZGF0YSwgb3JcbiAgICAgIC8vICAgIGFsc28gaW5oZXJpdGVkIGl0IGZyb20gaXRzIHBhcmVudC4gTm90ZSB0aGF0IHdlIHVzZSBhIGNsb25lIG9mIGl0LFxuICAgICAgLy8gICAgc28sIGRhdGEgY2hhbmdlcyBhcmVuJ3QgYXBwbGllZCB1bnRpbCBzZXRTb3VyY2VEYXRhKCkgaXMgY2FsbGVkLlxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlZERhdGEgfHwgdGhpcy5sb2FkZWREYXRhIHx8IHRoaXMuaW5oZXJpdGVkRGF0YSB8fCBudWxsXG4gICAgfSxcblxuICAgIGRhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMuZGF0YUNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgc291cmNlRGF0YSgpIHtcbiAgICAgIC8vIFBvc3NpYmxlIHBhcmVudHMgYXJlIERpdG9Gb3JtIGZvciBmb3Jtcywgb3IgRGl0b1ZpZXcgZm9yIHJvb3QgbGlzdHMuXG4gICAgICAvLyBCb3RoIGhhdmUgYSBkYXRhIHByb3BlcnR5IHdoaWNoIGFic3RyYWN0cyBhd2F5IGxvYWRpbmcgYW5kIGluaGVyaXRpbmdcbiAgICAgIC8vIG9mIGRhdGEuXG4gICAgICBsZXQgeyBkYXRhIH0gPSB0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICAvLyBIYW5kbGUgbmVzdGVkIGRhdGEgYnkgc3BsaXR0aW5nIHRoZSBkYXRhUGF0aCwgaXRlcmF0ZSB0aHJvdWdoIHRoZVxuICAgICAgICAvLyBhY3R1YWwgZGF0YSBhbmQgbG9vayBuZXN0IGNoaWxkLWRhdGEgdXAuXG4gICAgICAgIGNvbnN0IGRhdGFQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudClcbiAgICAgICAgKVxuICAgICAgICAvLyBDb21wYXJlIGRhdGFQYXJ0cyBhZ2FpbnN0IG1hdGNoZWQgcm91dGVQYXRoIHBhcnRzLCB0byBpZGVudGlmeSB0aG9zZVxuICAgICAgICAvLyBwYXJ0cyB0aGF0IG5lZWQgdG8gYmUgdHJlYXRlZCBsaWtlIGlkcyBhbmQgbWFwcGVkIHRvIGluZGljZXMgaW4gZGF0YS5cbiAgICAgICAgY29uc3QgcGF0aFBhcnRzID0gdGhpcy5yb3V0ZVJlY29yZC5wYXRoLnNwbGl0KCcvJylcbiAgICAgICAgY29uc3Qgcm91dGVQYXJ0cyA9IHBhdGhQYXJ0cy5zbGljZShwYXRoUGFydHMubGVuZ3RoIC0gZGF0YVBhcnRzLmxlbmd0aClcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUtleSA9IGtleVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gZGF0YVtrZXldXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBpbmhlcml0ZWREYXRhKCkge1xuICAgICAgLy8gRGF0YSBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIGFuZCBjbG9uZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlYWN0aXZlXG4gICAgICAvLyBjaGFuZ2VzIHVudGlsIGNoYW5nZXMgYXJlIGFwcGxpZWQgdGhyb3VnaCBzZXRTb3VyY2VEYXRhKCksIHVubGVzc1xuICAgICAgLy8gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIGluIHdoaWNoIGNhc2UgZGF0YSBpcyBtdXRhdGVkIGRpcmVjdGx5LlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHRoaXMuc291cmNlRGF0YSAmJlxuICAgICAgICB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5zb3VyY2VEYXRhW3RoaXMuc291cmNlS2V5XVxuICAgICAgICBpZiAoIXRoaXMuZG9lc011dGF0ZSkge1xuICAgICAgICAgIC8vIFVzZSBhIHRyaWNrIHRvIHN0b3JlIGNsb25lZCBpbmhlcml0ZWQgZGF0YSBpbiBjbG9uZWREYXRhLCB0byBtYWtlXG4gICAgICAgICAgLy8gaXQgcmVhY3RpdmUgYW5kIHByZXZlbnQgaXQgZnJvbSBiZWluZyBjbG9uZWQgbXVsdGlwbGUgdGltZXMuXG4gICAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gZGF0YSA9IGNsb25lKGRhdGEpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEgPT09IG51bGwgJiZcbiAgICAgICAgICAhdGhpcy5pc0NyZWF0aW5nICYmXG4gICAgICAgICAgaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIGRhdGEgb2YgYW4gb2JqZWN0IHNvdXJjZSBpcyBudWxsLCByZWRpcmVjdCB0byBpdHMgY3JlYXRlIHJvdXRlLlxuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogJ2NyZWF0ZScsIGFwcGVuZDogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jbG9uZWREYXRhXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaXRlbUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHsgZXh0ZW5kZWQ6IHRydWUgfSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzb3VyY2VEYXRhOiAnY2xlYXJDbG9uZWREYXRhJyxcbiAgICAvLyBOZWVkZWQgZm9yIHRoZSAnY3JlYXRlJyByZWRpcmVjdCBpbiBgaW5oZXJpdGVkRGF0YSgpYCB0byB3b3JrOlxuICAgIGNyZWF0ZTogJ3NldHVwRGF0YSdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfSxcblxuICAgIGdldERhdGFQYXRoRnJvbShyb3V0ZSkge1xuICAgICAgLy8gR2V0IHRoZSBkYXRhIHBhdGggYnkgZGVub3JtYWxpemVQYXRoIHRoZSByZWxhdGl2ZSByb3V0ZSBwYXRoXG4gICAgICByZXR1cm4gdGhpcy5hcGkuZGVub3JtYWxpemVQYXRoKHRoaXMucGF0aFxuICAgICAgICAvLyBEaXRvVmlld3MgaGF2ZSBuZXN0ZWQgcm91dGVzLCBzbyBkb24ndCByZW1vdmUgdGhlaXIgcGF0aC5cbiAgICAgICAgLnNsaWNlKChyb3V0ZS5pc1ZpZXcgPyAwIDogcm91dGUucGF0aC5sZW5ndGgpICsgMSkpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldHVwRGF0YSgpXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gdGhpcy5jcmVhdGVkRGF0YSB8fFxuICAgICAgICAgIHRoaXMuY3JlYXRlRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy50eXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0U291cmNlRGF0YShkYXRhKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VEYXRhICYmIHRoaXMuc291cmNlS2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWFpblNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgICB0aGlzLiRzZXQoXG4gICAgICAgICAgdGhpcy5zb3VyY2VEYXRhLFxuICAgICAgICAgIHRoaXMuc291cmNlS2V5LFxuICAgICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQuZmlsdGVyRGF0YShkYXRhKVxuICAgICAgICApXG4gICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQub25DaGFuZ2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFkZFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICA/IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgICA6ICEhdGhpcy5zb3VyY2VEYXRhPy5wdXNoKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5zZXREYXRhKG51bGwpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gc2V0RGF0YSgpIGlzIGNhbGxlZCBhZnRlciBzdWJtaXQgd2hlbiBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgLy8gRm9yIGNvbXBvbmVudHMgd2l0aCB0cmFuc2llbnQgZGF0YSwgbW9kaWZ5IHRoaXMuc291cmNlRGF0YS5cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gbnVsbFxuICAgICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyQ2xvbmVkRGF0YShuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgIC8vIE9ubHkgY2xlYXIgaWYgdGhlIHdhdGNoZWQgc291cmNlRGF0YSBpdHNlbGYgY2hhbmdlcyBpbiB0aGUgZm9ybS5cbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LnBhdGgpXG4gICAgfSxcblxuICAgIGdldFN1Ym1pdFZlcmIocHJlc2VudCA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBwcmVzZW50ID8gJ2NyZWF0ZScgOiAnY3JlYXRlZCdcbiAgICAgICAgOiBwcmVzZW50ID8gJ3N1Ym1pdCcgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgY29uc3QgYnV0dHRvblJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXNvdXJjZSA9IGJ1dHR0b25SZXNvdXJjZSB8fCB0aGlzLnJlc291cmNlXG4gICAgICBjb25zdCBtZXRob2QgPSByZXNvdXJjZT8ubWV0aG9kIHx8IHRoaXMubWV0aG9kXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgIGxldCBzdWNjZXNzXG4gICAgICBpZiAoIWJ1dHR0b25SZXNvdXJjZSAmJiB0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zaWVudChidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgPyBgSXRlbSAke2NhcGl0YWxpemUodmVyYil9YFxuICAgICAgICAgICAgICAgIDogYENoYW5nZSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgICAgICAgOiBgQ2hhbmdlcyB0byAke3RoaXMuaXRlbUxhYmVsfSB3ZXJlICR7dmVyYn0uYCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBzZXREYXRhOiB0cnVlLFxuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHRpdGxlOiBgU3VjY2Vzc2Z1bGx5ICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICAgIGlmIChjbG9zZUZvcm0gfHwgYnV0dG9uLmNsb3NlRm9ybSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBmb3JtIGVkaXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbTpcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBwYXRoOiBgLi4vJHtpZH1gLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgX3Jlc291cmNlLCBfbWV0aG9kLCBkYXRhLCB7XG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyxcbiAgICAgIG5vdGlmeUVycm9yXG4gICAgfSkge1xuICAgICAgLy8gSGFuZGxlIHRoZSBkZWZhdWx0IFwic3VibWl0dGluZ1wiIG9mIHRyYW5zaWVudCwgbmVzdGVkIGRhdGE6XG4gICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gdGhpcy5hZGRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdDb3VsZCBub3Qgc3VibWl0IHRyYW5zaWVudCBpdGVtJ1xuICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZm9ybS1uZXN0ZWRcbiAgICAmLFxuICAgIC5kaXRvLXNjcm9sbFxuICAgICAgLy8gTm8gc2Nyb2xsaW5nIGluc2lkZSBuZXN0ZWQgZm9ybXMsIGFuZCBwcmV2ZW50IG9wZW4gLm11bHRpc2VsZWN0IGZyb21cbiAgICAgIC8vIGJlaW5nIGNyb3BwZWQuXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvRm9ybSBmcm9tICcuL0RpdG9Gb3JtLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQgRGl0b0Zvcm0uY29tcG9uZW50KCdkaXRvLWZvcm0tbmVzdGVkJywge30pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZXJyb3JzKFxuICB2LWlmPVwiZXJyb3JzXCJcbilcbiAgdWxcbiAgICBsaSh2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiKVxuICAgICAgfCB7eyBlcnJvciB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZXJyb3JzKFxuICAgIHYtaWY9XCJlcnJvcnNcIlxuICApXG4gICAgdWxcbiAgICAgIGxpKHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCIpXG4gICAgICAgIHwge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1lcnJvcnNcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB6LWluZGV4OiAxXG4gICAgdWxcbiAgICAgIG1hcmdpbi10b3A6IDFweFxuICAgICAgY29sb3I6ICRjb2xvci1lcnJvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zY29wZXNcbiAgcm91dGVyLWxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zY29wZXNcbiAgICByb3V0ZXItbGluayhcbiAgICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2NvcGVzXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1idXR0b25cbiAgICAgICtlbGxpcHNpc1xuICAgICAgYm9yZGVyLXJhZGl1czogMFxuICAgICAgLy8gQSBiaXQgbW9yZSB0aGFuIHRoZSB3aWR0aCBvZiBlbGxpcHNpcywgdG8gcHJldmVudCByZXBsYWNpbmcgc2hvcnQgd29yZHNcbiAgICAgIC8vIHdpdGggZWxsaXBzaXMuXG4gICAgICBtaW4td2lkdGg6IDNlbVxuICAgICAgZmxleDogMCAxIGF1dG9cbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMWVtXG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDFlbVxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDFlbVxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxZW1cbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDFlbVxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxZW1cbiAgICAgICYgKyAuZGl0by1idXR0b25cbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xcHhcbiAgICAgIC8vIERvbid0IGNvdmVyIHRoZSBmb2N1c2VkIGJvcmRlciBvZiBidXR0b25zOlxuICAgICAgJjpmb2N1c1xuICAgICAgICB6LWluZGV4OiAxXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjb3BlcycsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NvcGVzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTY29wZUxpbmsoc2NvcGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyAuLi50aGlzLnF1ZXJ5LCBzY29wZTogc2NvcGUubmFtZSB9XG4gICAgICBpZiAocXVlcnkucGFnZSkge1xuICAgICAgICBxdWVyeS5wYWdlID0gMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHF1ZXJ5KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5wYWdpbmF0aW9uKFxuICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gIDp0b3RhbD1cInRvdGFsXCJcbiAgOnBhZ2Uuc3luYz1cInBhZ2VcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgcGFnaW5hdGlvbihcbiAgICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gICAgOnRvdGFsPVwidG90YWxcIlxuICAgIDpwYWdlLnN5bmM9XCJwYWdlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhZ2luYXRpb24nLCB7XG4gIGNvbXBvbmVudHM6IHsgUGFnaW5hdGlvbiB9LFxuXG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxpbWl0OiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhZ2U6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICgrdGhpcy5xdWVyeS5wYWdlIHx8IDApICsgMVxuICAgICAgfSxcblxuICAgICAgc2V0KHBhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSAhPT0gcGFnZSkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgICBwYWdlOiAocGFnZSAtIDEpXG4gICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uU3RhcnREcmFnKCkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWVcbiAgICB9LFxuXG4gICAgb25FbmREcmFnKHsgb2xkSW5kZXgsIG5ld0luZGV4IH0pIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgaWYgKG9sZEluZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0LCBwYWdpbmF0aW9uUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHsgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICAgIC8vIFJlb3JkZXIgdGhlIGNoYW5nZWQgZW50cmllcyBieSB0aGVpciBvcmRlciBrZXksIHRha2luZyBwYWdpbmF0aW9uXG4gICAgICAgIC8vIG9mZnNldHMgaW50byBhY2NvdW50OlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBwYWdpbmF0aW9uUmFuZ2U/LlswXSB8fCAwXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxpc3RbaV1bb3JkZXJLZXldID0gaSArIG9mZnNldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by10cmVlLWl0ZW0oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tZHJhZ2dpbmcnOiBkcmFnZ2luZyxcbiAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgfWBcbiAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbilcbiAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgLmRpdG8tdHJlZS1icmFuY2goXG4gICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgIClcbiAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiBvcGVuZWQgfVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWluZm8odi1pZj1cImRldGFpbHNcIikge3sgZGV0YWlscyB9fVxuICAgIC5kaXRvLXRyZWUtbGVhZih2LWVsc2UpXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgKVxuICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgdnVlLWRyYWdnYWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgQGVuZD1cIm9uRW5kRHJhZygkZXZlbnQsIGNoaWxkcmVuU2NoZW1hKVwiXG4gIClcbiAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgKVxuICAgIC8vIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyZWUtaXRlbShcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gICAgfWBcbiAgICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuICApXG4gICAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgICAgKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAgIC5kaXRvLXRyZWUtaW5mbyh2LWlmPVwiZGV0YWlsc1wiKSB7eyBkZXRhaWxzIH19XG4gICAgICAuZGl0by10cmVlLWxlYWYodi1lbHNlKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgKVxuICAgIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgICApXG4gICAgICAgIHRkXG4gICAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgICApXG4gICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGNoaWxkcmVuRHJhZ2dhYmxlLCB0cnVlKVwiXG4gICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWcoJGV2ZW50LCBjaGlsZHJlblNjaGVtYSlcIlxuICAgIClcbiAgICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgICApXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10cmVlLWl0ZW1cbiAgICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH1cbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgICAgPiAuZGl0by10cmVlLWxlYWZcbiAgICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by10cmVlLWhlYWRlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgLmRpdG8tdHJlZS1sZWFmXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIG1hcmdpbjogMXB4IDBcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXRyZWUtbGFiZWwsXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbVxuICAgICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAuMilcbiAgICAuZGl0by1idXR0b25zXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgbWFyZ2luLWxlZnQ6IDFlbVxuICAgICAgbWFyZ2luOiAxcHggMCAxcHggMWVtXG4gICAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXJcbiAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlXG4gICAgLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICAgICYuZGl0by1kcmFnZ2luZ1xuICAgICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgPiAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlXG4gICAgICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbFxuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1wcm9wZXJ0aWVzXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudFxuICAgICAgPiB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmVcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGNvbnRlbnQ6ICc6ICdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdHJlZS1pdGVtJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtPcmRlcmVkTWl4aW5dLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0KCkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IG9wZW4gPSBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbnVtQ2hpbGRyZW4gJiYgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgfWBcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGgoXG4gICAgICB2LWZvcj1cIihjb2x1bW4sIGluZGV4KSBpbiBjb2x1bW5zXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICApXG4gICAgICByb3V0ZXItbGluayhcbiAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgIHNwYW5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgIHRyXG4gICAgICB0aChcbiAgICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICByb3V0ZXItbGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAgIC8vIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Fzc1xuICAgICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdGFibGUtaGVhZFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHRyXG4gICAgICB0aFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdFxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZywgc2VlIGJlbG93XG4gICAgICAgICAgcGFkZGluZzogMFxuICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDBcbiAgICAgICAgc3BhblxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZ1xuICAgICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICAgICAgJjplbXB0eTo6YWZ0ZXJcbiAgICAgICAgICAgIC8vIFByZXZlbnQgZW1wdHkgPHRoPiBmcm9tIGNvbGxhcHNpbmdcbiAgICAgICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInIC8vIHplcm8td2lkdGggc3BhY2VcbiAgICAgICAgPiBzcGFuXG4gICAgICAgICAgZGlzcGxheTogYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYmxlLWhlYWQnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbHVtbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGhhc0VkaXRCdXR0b25zOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvcnQoKSB7XG4gICAgICBjb25zdCBvcmRlciA9ICh0aGlzLnF1ZXJ5Lm9yZGVyIHx8ICcnKS5zcGxpdCgvXFxzKy8pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBvcmRlclswXSxcbiAgICAgICAgb3JkZXI6IG9yZGVyWzFdXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb2x1bW5DbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jb2x1bW4tJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0U29ydENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZVxuICAgICAgICA/IGBkaXRvLXNlbGVjdGVkIGRpdG8tb3JkZXItJHt0aGlzLnNvcnQub3JkZXJ9YFxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0U29ydExpbmsoY29sdW1uKSB7XG4gICAgICAvLyBUb2dnbGUgb3JkZXIgaWYgdGhlIHNhbWUgY29sdW1uIGlzIGNsaWNrZWQgYWdhaW4uXG4gICAgICBjb25zdCBvcmRlciA9IHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSAmJiB0aGlzLnNvcnQub3JkZXIgPT09ICdhc2MnXG4gICAgICAgID8gJ2Rlc2MnXG4gICAgICAgIDogJ2FzYydcbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgIG9yZGVyOiBgJHtjb2x1bW4ubmFtZX0gJHtvcmRlcn1gXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50ZChcbiAgOmNsYXNzPVwiY2VsbC5jbGFzc1wiXG4gIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuKVxuICAvLyBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjb21wb25lbnRcIlxuICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4gIHNwYW4oXG4gICAgdi1lbHNlXG4gICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRkKFxuICAgIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICAgIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuICApXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1pZj1cImNvbXBvbmVudFwiXG4gICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlXG4gICAgICB2LWh0bWw9XCJyZW5kZXJDZWxsKGRhdGEpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdGFibGUtY2VsbCcsIHtcbiAgcHJvcHM6IHtcbiAgICBjZWxsOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVHlwZUNvbXBvbmVudCh0aGlzLmNlbGwuY29tcG9uZW50KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyQ2VsbChpdGVtKSB7XG4gICAgICBjb25zdCB7IG5hbWUsIHJlbmRlciB9ID0gdGhpcy5jZWxsXG4gICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bbmFtZV1cbiAgICAgIHJldHVybiByZW5kZXJcbiAgICAgICAgPyByZW5kZXIuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwodmFsdWUpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQSBjb21wb25lbnQgdG8gc2ltcGx5IHBhc3MgdGhyb3VnaCBhbiBleGlzdGluZyB2dWUgdm5vZGUuXG4vLyBTZWU6IGh0dHBzOi8vZm9ydW0udnVlanMub3JnL3QvMjgxNjIvNFxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdm5vZGUnLCB7XG4gIGZ1bmN0aW9uYWw6IHRydWUsXG4gIHJlbmRlcjogKGgsIGNvbnRleHQpID0+IGNvbnRleHQucHJvcHMubm9kZVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gVHlwZUNvbXBvbmVudCBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjb21wb25lbnQgZm9yIGFsbCBvdGhlciB0eXBlIGNvbXBvbmVudHNcbi8vIGluc2lkZSB0aGUgdHlwZXMvIGZvbGRlci4gVGhlcmUncyBhbHNvIGEgc2VwYXJhdGUgY29uY3JldGVcbi8vIGBUeXBlQ29tcG9uZW50LnZ1ZWAgY29tcG9uZW50LCB1c2UgdG8gcmVuZGVyIHRoZSBgdHlwZTogJ2NvbXBvbmVudCdgIHR5cGVzLlxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IHJlZ2lzdGVyVHlwZUNvbXBvbmVudCwgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5jb25zdCBUeXBlQ29tcG9uZW50ID0gRGl0b0NvbXBvbmVudC5leHRlbmQoe1xuICBtaXhpbnM6IFtUeXBlTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiBmYWxzZSxcbiAgdGV4dEZpZWxkOiBmYWxzZSxcbiAgLy8gU2V0IHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIGFsbCBvZiB0aGVzZSB0aGF0IGFyZSB1c2VkIGJ5IG1vc3QgdHlwZVxuICAvLyBjb21wb25lbnRzLiBUaGVzZSBvbmx5IG5lZWQgZGVmaW5pbmcgaW4gc3ViLWNsYXNzZXMgd2hlbiB0aGV5IGRpZmZlci5cbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkZWZhdWx0TmVzdGVkOiB0cnVlLFxuICBkZWZhdWx0VmlzaWJsZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogdHJ1ZSxcbiAgZXhjbHVkZVZhbHVlOiBmYWxzZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBudWxsLFxuICBvbWl0UGFkZGluZzogZmFsc2Vcbn0pXG5cblR5cGVDb21wb25lbnQucmVnaXN0ZXIgPSBmdW5jdGlvbih0eXBlcywgZGVmaW5pdGlvbiA9IHt9KSB7XG4gIHR5cGVzID0gYXNBcnJheSh0eXBlcylcbiAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQoYGRpdG8tdHlwZS0ke3R5cGVzWzBdfWAsIGRlZmluaXRpb24pXG4gIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5UeXBlQ29tcG9uZW50LmdldCA9IGdldFR5cGVDb21wb25lbnRcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudFxuIiwiXG5idXR0b24uZGl0by1idXR0b24oXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp0eXBlPVwidHlwZVwiXG4gIDp0aXRsZT1cInRleHRcIlxuICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pIHt7IHRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnR5cGU9XCJ0eXBlXCJcbiAgICA6dGl0bGU9XCJ0ZXh0XCJcbiAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnYnV0dG9uJywgJ3N1Ym1pdCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcbiAgLy8gVE9ETzogQ29uc2lkZXIgbWFraW5nIHRoaXMgd29yayBuaWNlbHk6XG4gIC8vIG9taXRGbGV4R3JvdzogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmIoKSB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJic1t0aGlzLm5hbWVdIHx8IHRoaXMubmFtZVxuICAgIH0sXG5cbiAgICB0ZXh0OiBnZXRTY2hlbWFBY2Nlc3NvcigndGV4dCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGdldCh0ZXh0KSB7XG4gICAgICAgIHJldHVybiB0ZXh0IHx8IGxhYmVsaXplKHRoaXMudmVyYilcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNsb3NlRm9ybTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Nsb3NlRm9ybScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEBvdmVycmlkZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBjbGljazogdGhpcy5vbkNsaWNrXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZUNvbXBvbmVudD8uc3VibWl0KHRoaXMsIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmVtaXRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgICAvLyBIYXZlIGJ1dHRvbnMgdGhhdCBkZWZpbmUgcmVzb3VyY2VzIGNhbGwgYHRoaXMuc3VibWl0KClgIGJ5IGRlZmF1bHQ6XG4gICAgICBpZiAoXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgaGFzUmVzb3VyY2UodGhpcy5zY2hlbWEpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5pbnB1dC5kaXRvLWNoZWNrYm94KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB0eXBlPVwiY2hlY2tib3hcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jaGVja2JveFxuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3Ncbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBub3JtYWxpemVEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtMb2FkaW5nTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBhc3luY0RhdGFFbnRyaWVzOiB7fVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsIG5hbWUsIHtcbiAgICAgIHJlc29sdmVDb3VudGVyID0gMSxcbiAgICAgIC4uLmxvYWRpbmdPcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgICAgc2NoZW1hID0geyBkYXRhOiBzY2hlbWEgfVxuICAgICAgfVxuICAgICAgbGV0IHsgZGF0YSA9IHVuZGVmaW5lZCwgZGF0YVBhdGggPSBudWxsIH0gPSBzY2hlbWFcbiAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhc3luYyBkYXRhIGxvYWRpbmcgYWxyZWFkeSBpbiBwcm9jZXNzLlxuICAgICAgY29uc3QgYXN5bmNFbnRyeSA9IChcbiAgICAgICAgdGhpcy5hc3luY0RhdGFFbnRyaWVzW25hbWVdIHx8XG4gICAgICAgIHRoaXMuJHNldCh0aGlzLmFzeW5jRGF0YUVudHJpZXMsIG5hbWUsIHtcbiAgICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDAsXG4gICAgICAgICAgcmVzb2x2ZWREYXRhOiBudWxsLFxuICAgICAgICAgIHJlc29sdmluZzogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC8vIElmIHRoZSBkYXRhIGNhbGxiYWNrIHByb3ZpZGVkIGEgZGVwZW5kZW5jeSBmdW5jdGlvbiB3aGVuIGl0IHdhcyBjYWxsZWQsXG4gICAgICAvLyBjYWwgaXQgaW4gZXZlcnkgY2FsbCBvZiBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBmb3JjZSBWdWUgdG8ga2VlcCB0cmFja1xuICAgICAgLy8gb2YgdGhlIGFzeW5jIGRlcGVuZGVuY2llcy5cbiAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uPy5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcblxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPiAwKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSB2YWx1ZSBvbmNlXG4gICAgICAgIC8vIGByZXNvbHZlQ291bnRlcmAgcmVhY2hlcyB6ZXJvLiBDb3VudGluZyBpcyBuZWVkZWQgYmVjYXVzZSBkZXBlbmRpbmdcbiAgICAgICAgLy8gb24gdGhlIHVzZSBvZiBkYXRhIGFuZCByZWFjdGl2aXR5LCBtdWx0aXBsZSBjYWxscyB0byB0aGUgY29tcHV0ZWRcbiAgICAgICAgLy8gZ2V0dGVyIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZGF0YSBpcyBjaGFuZ2luZy4gQ2xlYXJpbmcgdGhlIHJlc29sdmVkXG4gICAgICAgIC8vIGRhdGEgd29ya3MgYmVjYXVzZSBWdWUgY2FjaGVzIHRoZSByZXN1bHQgb2YgY29tcHV0ZWQgZ2V0dGVycyBhbmQgb25seVxuICAgICAgICAvLyByZWV2YWx1YXRlcyBpZiBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VkLiBUaGlzIGlzIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IGEgY2FjaGVkIHZhbHVlIGhlcmUgZG9lc24ndCBibG9jayAvIG92ZXJyaWRlIHJlZXZhbHVhdGlvbjpcbiAgICAgICAgY29uc3QgeyByZXNvbHZlZERhdGEgfSA9IGFzeW5jRW50cnlcbiAgICAgICAgaWYgKC0tYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9PT0gMCkge1xuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZERhdGFcbiAgICAgIH1cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgdGhlIGRhdGEgZnVuY3Rpb24gdHdpY2U6XG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZpbmcpIHtcbiAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBmdW5jdGlvbiBpcyBhbm90aGVyIGZ1bmN0aW9uLCB0aGVuIHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGRhdGEgZnVuY3Rpb24gaXMgdGhlcmUgdG8gdHJhY2sgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmVhbFxuICAgICAgICAgIC8vIGRhdGEgbG9hZGluZyBoYXBwZW5zIGluIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkLiBLZWVwIHRyYWNrXG4gICAgICAgICAgLy8gaXQgaW4gYGRlcGVuZGVuY3lGdW5jdGlvbmAgc28gaXQgY2FuIGJlIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2ZcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgaW50YWN0LCBhbmQgY2FsbFxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkIG9uY2UgdG8gZ2V0IHRoZSBhY3R1YWwgZGF0YTpcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbiA9IGRhdGFcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHQuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9IHJlc29sdmVDb3VudGVyXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IGRhdGFcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi9EYXRhTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgc2V0VGVtcG9yYXJ5SWQsIGlzUmVmZXJlbmNlIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbixcbiAgbm9ybWFsaXplRGF0YVBhdGgsIGxhYmVsaXplLCBkZWJvdW5jZUFzeW5jXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzT3B0aW9uczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmhhc09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgID8gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICAgICAgPyB0aGlzLnZhbHVlLm1hcChjb252ZXJ0VmFsdWUpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICA6IGNvbnZlcnRWYWx1ZSh0aGlzLnZhbHVlKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gV2hlbiByZWxhdGluZyBhbmQgYXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLi4uXG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgdGhpcy5oYXNPcHRpb25zICYmIChcbiAgICAgICAgICAgIC8vIC4uLmlmIHRoZSB2YWx1ZSBpcyBmb3JjZWQgdG8gbnVsbCBiZWNhdXNlIGEgZGlzYXBwZWFyZWQgb3B0aW9uLi4uXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbCAmJiB0aGlzLnZhbHVlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAvLyAuLi5vciBpZiB0aGUgdmFsdWUgaXMgYSByZWZlcmVuY2UsIHJlcGxhY2UgaXQgd2l0aCBpdHMgb3B0aW9uXG4gICAgICAgICAgICAvLyB2YWx1ZSwgc28gdGhhdCBpdCdsbCBob2xkIGFjdHVhbCBkYXRhLCBub3QganVzdCBhIHJlZmVyZW5jZSBpZC5cbiAgICAgICAgICAgIGlzUmVmZXJlbmNlKHRoaXMudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSB2YWx1ZSA9PiB0aGlzLnJlbGF0ZVxuICAgICAgICAgID8gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnQpXG4gICAgICAgICAgOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnLCB7XG4gICAgICAgIHJlc29sdmVDb3VudGVyOiAxXG4gICAgICB9KSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICB0aGlzLmhhc09wdGlvbnMgPSBkYXRhLmxlbmd0aCA+IDBcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcHRpb25zKGRhdGEpXG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gYFR5cGVNdWx0aXNlbGVjdGAgdG8gcmV0dXJuIHRoZSBgc2VhcmNoZWRPcHRpb25zYFxuICAgICAgLy8gd2hlbiBhIHNlYXJjaCBmaWx0ZXIgd2FzIGFwcGxpZWQuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBncm91cEJ5TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ2xhYmVsJyA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ29wdGlvbnMnIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0T3B0aW9uS2V5KGtleSkge1xuICAgICAgY29uc3QgW29wdGlvbl0gPSB0aGlzLmFjdGl2ZU9wdGlvbnNcbiAgICAgIHJldHVybiBpc09iamVjdChvcHRpb24pICYmIGtleSBpbiBvcHRpb24gPyBrZXkgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5yZWxhdGUpIHtcbiAgICAgICAgICAvLyBJZiBpZHMgYXJlIG1pc3NpbmcgYW5kIHdlIHdhbnQgdG8gcmVsYXRlLCBzZXQgdGVtcG9yYXJ5IGlkcy5cbiAgICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgYWN0dWFsIGRhdGEsIG1ha2luZyBhIGNvcHkgd29uJ3Qgd29ya1xuICAgICAgICAgIC8vIGFzIGl0IHdvbid0IHByb3BhZ2F0ZS5cbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGRhdGEgaXMgZnJvbSB0aGUgZ3JhcGggdGhhdFxuICAgICAgICAgIC8vIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nLlxuICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghKCdpZCcgaW4gb3B0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUZW1wb3JhcnlJZChvcHRpb24sICdpZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICBjb25zdCBncm91cGVkID0ge31cbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzdWx0cywgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uW3RoaXMuZ3JvdXBCeV1cbiAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gZ3JvdXBlZFtncm91cF1cbiAgICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gZ3JvdXBlZFtncm91cF0gPSB7XG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5TGFiZWxdOiBncm91cCxcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlPcHRpb25zXTogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVudHJ5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVudHJ5Lm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW11cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfSxcblxuICAgIGhhc09wdGlvbihvcHRpb24pIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgIH0sXG5cbiAgICBnZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3QgZmluZE9wdGlvbiA9IChvcHRpb25zLCB2YWx1ZSwgZ3JvdXBCeSkgPT4ge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBvcHRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIHdob2xlIG9iamVjdC5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb24ob3B0aW9uLm9wdGlvbnMsIHZhbHVlLCBudWxsKVxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZVxuICAgICAgICA/IGZpbmRPcHRpb24odGhpcy5hY3RpdmVPcHRpb25zLCB2YWx1ZSwgdGhpcy5ncm91cEJ5KVxuICAgICAgICA6IHZhbHVlXG4gICAgfSxcblxuICAgIGdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvblZhbHVlKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvblZhbHVlXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBsYWJlbGl6ZShgJHtvcHRpb259YClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiB2YWx1ZSA/IHsgaWQ6IHZhbHVlLmlkIH0gOiB2YWx1ZVxuICAgICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgYm90aCBvYmplY3RzICYgYXJyYXlzLCBlLmcuICdjaGVja2JveGVzJzpcbiAgICAgIHZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc1JlbGF0ZSlcbiAgICAgICAgOiBwcm9jZXNzUmVsYXRlKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiXG51bC5kaXRvLWNoZWNrYm94ZXMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdWwuZGl0by1jaGVja2JveGVzKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4gIClcbiAgICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgICBsYWJlbFxuICAgICAgICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY2hlY2tib3hlc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tY2hlY2tib3hcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IChvcHRpb24gfHwgW10pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNvZGUoXG4gIHJlZj1cImNvZGVcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvZGUoXG4gICAgcmVmPVwiY29kZVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzdHlsZT1cInN0eWxlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNvZGVcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC8vIEZvciBwcm9wcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAgIC8vIGZvciBwcm9wZXIgbGluZS1oZWlnaHQgY2FsY3VsYXRpb24uXG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IGF1dG9cbiAgICAuY29kZWZsYXNrXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAvLyBJZ25vcmUgdGhlcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAgIC8vIHRoZSBkZXNpcmVkIGhlaWdodCB3aXRoIDpzdHlsZT1cInN0eWxlXCIuXG4gICAgICB0b3A6IDBcbiAgICAgIGxlZnQ6IDBcbiAgICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgICAuY29kZWZsYXNrX19wcmVcbiAgICAgIC8vIFVzZSBzYW1lIHBhZGRpbmcgYXMgLmRpdG8tY29kZVxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgICAuY29kZWZsYXNrX19jb2RlLFxuICAgIC5jb2RlZmxhc2tfX2xpbmVzXG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9cbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplKVxuICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KVxuICAgIC5jb2RlZmxhc2tfX2xpbmVzXG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IENvZGVGbGFzayBmcm9tICdjb2RlZmxhc2snXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2RlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAzXG4gICAgfSxcblxuICAgIHN0eWxlKCkge1xuICAgICAgcmV0dXJuIGBoZWlnaHQ6IGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBmbGFzayA9IG5ldyBDb2RlRmxhc2sodGhpcy4kcmVmcy5jb2RlLCB7XG4gICAgICBsYW5ndWFnZTogdGhpcy5zY2hlbWEubGFuZ3VhZ2UgfHwgJ2phdmFzY3JpcHQnLFxuICAgICAgdGFiU2l6ZTogdGhpcy5zY2hlbWEuaW5kZW50U2l6ZSB8fCAyLFxuICAgICAgbGluZU51bWJlcnM6IGZhbHNlXG4gICAgfSlcblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgIGxldCBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICB0aGlzLmRvbU9uKHRoaXMuJHJlZnMuY29kZS5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpLCB7XG4gICAgICBmb2N1czogb25Gb2N1cyxcbiAgICAgIGJsdXI6IG9uQmx1clxuICAgIH0pXG5cbiAgICBjb25zdCBzZXRDb2RlID0gY29kZSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gZmxhc2suY29kZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSB0cnVlXG4gICAgICAgIGZsYXNrLnVwZGF0ZUNvZGUoY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICAgIG9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmbGFzay5vblVwZGF0ZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlVXBkYXRlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldENvZGUodmFsdWUgfHwgJycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldENvZGUodGhpcy52YWx1ZSB8fCAnJylcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50cmlnZ2VyLmRpdG8tY29sb3IoXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuKVxuICAuZGl0by1pbnB1dChcbiAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgKVxuICAgIGlucHV0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB0eXBlPVwiaW5wdXRcIlxuICAgICAgc2l6ZT1cIjhcIlxuICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuICAgIC5kaXRvLWNvbG9yLXByZXZpZXcuZGl0by1pbmhlcml0LWZvY3VzKFxuICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICApXG4gICAgICBkaXYoOnN0eWxlPVwieyBiYWNrZ3JvdW5kOiBgIyR7aGV4VmFsdWUgfHwgJzAwMDAwMDAwJ31gIH1cIilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICBza2V0Y2gtcGlja2VyLmRpdG8tY29sb3ItcGlja2VyKFxuICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgIDpkaXNhYmxlLWFscGhhPVwiIWFscGhhXCJcbiAgICA6ZGlzYWJsZS1maWVsZHM9XCIhaW5wdXRzXCJcbiAgICA6cHJlc2V0LWNvbG9ycz1cInByZXNldHNcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0cmlnZ2VyLmRpdG8tY29sb3IoXG4gICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgKVxuICAgIC5kaXRvLWlucHV0KFxuICAgICAgc2xvdD1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICApXG4gICAgICBpbnB1dChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgICAgc2l6ZT1cIjhcIlxuICAgICAgICB2LW1vZGVsPVwiaGV4VmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gICAgc2tldGNoLXBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZS1hbHBoYT1cIiFhbHBoYVwiXG4gICAgICA6ZGlzYWJsZS1maWVsZHM9XCIhaW5wdXRzXCJcbiAgICAgIDpwcmVzZXQtY29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gICAgJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemVcbiAgICAkY29sb3Itc3dhdGNoLXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAkYm9yZGVyLXdpZHRoXG4gICAgLmRpdG8tY29sb3JcbiAgICAgIC5kaXRvLWlucHV0XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgICBpbnB1dFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICAgICAgcGFkZGluZy1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgICAgLmRpdG8tYnV0dG9uLWNsZWFyXG4gICAgICAgIG1hcmdpbi1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgICAgLmRpdG8tY29sb3ItcGlja2VyXG4gICAgICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpblxuICAgICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3XG4gICAgICAgIGJhY2tncm91bmQ6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeVxuICAgICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZVxuICAgICAgICAmLFxuICAgICAgICBkaXZcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgICB3aWR0aDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgICAgICAgIHRvcDogMFxuICAgICAgICAgIHJpZ2h0OiAwXG4gICAgICAgICAgYm90dG9tOiAwXG4gICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHRpbnljb2xvciBmcm9tICd0aW55Y29sb3IyJ1xuaW1wb3J0IHsgU2tldGNoIGFzIFNrZXRjaFBpY2tlciB9IGZyb20gJ3Z1ZS1jb2xvcidcbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBUcmlnZ2VyIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSB7XG4gICAgICAgICAgLy8gTk9URTogdnVlLWNvbG9yIGNhbGxzIGl0ICdoZXgnLCB3aGlsZSB0aW55Y29sb3IgY2FsbHMgaXQgJ2hleDYnXG4gICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICByZ2I6ICdyZ2JhJ1xuICAgICAgICB9W2Zvcm1hdF0gfHwgZm9ybWF0XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aW55Y29sb3IodmFsdWUpLnRvU3RyaW5nKGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgYWxwaGE6IGdldFNjaGVtYUFjY2Vzc29yKCdhbHBoYScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZm9jdXNlZChmb2N1c2VkKSB7XG4gICAgICBpZiAoIWZvY3VzZWQgJiYgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcihgIyR7dGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZX1gKVxuICAgICAgICBpZiAoY29sb3I/LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBjb2xvci50b1N0cmluZyh0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIC8vIFRPRE86IEVtaXQgJ2lucHV0JyBoZXJlIGluc3RlYWQsIGFuZCAnY2hhbmdlJyBpbiBibHVyLCBsaWtlIG90aGVycy5cbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgOmlzPVwiY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIHYtYmluZD1cIiRwcm9wc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVUeXBlQ29tcG9uZW50KClgLiBUaGlzIGNhblxuLy8gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8gIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4gIC8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG4gIGlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJ2YWx1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInRydWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbidcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJywge1xuICAgICAgICAgICAgLy8gTW9kaWZ5aW5nIGB0aGlzLmRhdGFgIGJlbG93IHRyaWdnZXJzIGFub3RoZXIgY2FsbCBvZiB0aGUgYHZhbHVlYFxuICAgICAgICAgICAgLy8gZ2V0dGVyLCBzbyB1c2UgYSB2YWx1ZSBvZiAyIGZvciBgcmVzb2x2ZUNvdW50ZXJgIHRvIHJldHVybiB0aGVcbiAgICAgICAgICAgIC8vIHJlc29sdmVkIGRhdGEgdHdpY2UuXG4gICAgICAgICAgICByZXNvbHZlQ291bnRlcjogMlxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZGF0ZVxuICAgIGNvbXBvbmVudChcbiAgICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWUnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9LFxuICAvLyBUT0RPOiBUaGlzIGlzIG9ubHkgaGVyZSBzbyB3ZSBnZXQgcGxhY2Vob2xkZXIgYWRkZWQuIENvbWUgdXAgd2l0aCBhIGJldHRlclxuICAvLyB3YXkgdG8gc3VwcG9ydCBhdHRyaWJ1dGVzIHBlciBjb21wb25lbnQgKGEgbGlzdCBvZiBhY3R1YWxseSBzdXBwb3J0ZWRcbiAgLy8gYXR0cmlidXRlcylcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGRhdGVWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRhdGVGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkYXRlRm9ybWF0Jywge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudCh0eXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRlOiAnZGF0ZS1waWNrZXInLFxuICAgICAgICB0aW1lOiAndGltZS1waWNrZXInLFxuICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICB9W3R5cGVdXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRGF0ZSh2YWx1ZSkgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogdmFsdWVcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4vUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuLi9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciwgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYSwgcHJvY2Vzc0Zvcm1zLCBnZXROYW1lZFNjaGVtYXMsIGdldEJ1dHRvblNjaGVtYXMsXG4gIGhhc0Zvcm1TY2hlbWEsIGdldEZvcm1TY2hlbWFzLCBnZXRWaWV3U2NoZW1hLFxuICBoYXNMYWJlbHMsIGlzQ29tcGFjdCwgaXNJbmxpbmVkLFxuICBpc09iamVjdFNvdXJjZSwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc1N0cmluZywgaXNBcnJheSwgaXNOdW1iZXIsIGVxdWFscyxcbiAgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbUmVzb3VyY2VNaXhpbiwgU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgICByZXR1cm4gaXNMaXN0U291cmNlKHNjaGVtYSkgPyBbXSA6IG51bGxcbiAgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyYXBwZWRQcmltaXRpdmVzOiBudWxsLFxuICAgICAgdW53cmFwcGluZ1ByaW1pdGl2ZXM6IGZhbHNlLFxuICAgICAgaWdub3JlUm91dGVDaGFuZ2U6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgaXNPYmplY3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICBpc0xpc3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNMaXN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgaXNSZWFkeSgpIHtcbiAgICAgIC8vIExpc3RzIHRoYXQgaGF2ZSBubyBkYXRhIGFuZCBubyBhc3NvY2lhdGVkIHJlc291cmNlIHNob3VsZCBzdGlsbCByZW5kZXIsXG4gICAgICAvLyBhcyB0aGV5IG1heSBiZSBnZXR0aW5nIHRoZWlyIGRhdGEgZWxzZXdoZXJlLCBlLmcuIGBjb21wdXRlKClgLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzRGF0YSB8fCAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNJblZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdDb21wb25lbnRcbiAgICB9LFxuXG4gICAgd3JhcFByaW1pdGl2ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEud3JhcFByaW1pdGl2ZXNcbiAgICB9LFxuXG4gICAgbGlzdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnZhbHVlXG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgICAgLy8gQ29udmVydCB0byBsaXN0IGFycmF5LlxuICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBbZGF0YV0gOiBbXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGRhdGEgZ2V0cyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIHVud3JhcHBpbmcgaXMgbm90IGhhcHBlbmluZ1xuICAgICAgICAgIC8vIGF0IHRoZSByb290IGluIGBzZXREYXRhKClgLCBidXQgaGVyZSBpbnN0ZWFkLlxuICAgICAgICAgIGRhdGEgPSB0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpIHx8IGRhdGFcbiAgICAgICAgfVxuICAgICAgICBkYXRhID0gZGF0YSB8fCBbXVxuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIGlmICh0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBkb25lIHVud3JhcHBpbmcgb25jZSBgbGlzdERhdGFgIGlzIHJlZXZhbHVhdGVkLCBzbyBzZXRcbiAgICAgICAgICAgIC8vIHRoaXMgdG8gYGZhbHNlYCBhZ2Fpbi4gU2VlIGB3cmFwcGVkUHJpbWl0aXZlc2Agd2F0Y2hlciBhYm92ZS5cbiAgICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEgdG8gYSBsaXN0IG9mIHdyYXBwZWQgcHJpbWl0aXZlcywgYW5kIHJldHVybiBpdC5cbiAgICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhLm1hcCh2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiB2YWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRQcmltaXRpdmVzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAgPyBkYXRhWzBdIDogbnVsbClcbiAgICAgICAgICAgIDogZGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9iamVjdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gQWx3YXlzIGdvIHRocm91Z2ggYGxpc3REYXRhYCBpbnRlcm5hbGx5LCB3aGljaCBkb2VzIGFsbCB0aGVcbiAgICAgICAgLy8gcHJvY2Vzc2luZyBvZiBgd3JhcFByaW1pdGl2ZXNgLCBldGMuXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3REYXRhWzBdIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBkYXRhID8gW2RhdGFdIDogW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgLy8gVGhlIHNvdXJjZVNjaGVtYSBvZiBhIGxpc3QgaXMgdGhlIGxpc3QncyBzY2hlbWEgaXRzZWxmLlxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICAvLyBUaGlzIGlzIHVzZWQgaW4gVHlwZUxpc3QgZm9yIERpdG9Gb3JtQ2hvb3Nlci5cbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aCh0aGlzLnNjaGVtYS5wYXRoKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0UXVlcnkoKSB7XG4gICAgICBjb25zdCB7IGRlZmF1bHRPcmRlcjogb3JkZXIgfSA9IHRoaXNcbiAgICAgIHJldHVybiBvcmRlciA/IHsgb3JkZXIgfSA6IHt9XG4gICAgfSxcblxuICAgIHF1ZXJ5OiBnZXRTdG9yZUFjY2Vzc29yKCdxdWVyeScsIHtcbiAgICAgIGdldChxdWVyeSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdFF1ZXJ5LFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAvLyBBbHdheXMga2VlcCB0aGUgZGlzcGxheWVkIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gc3luYyB3aXRoIHRoZSBzdG9yZWRcbiAgICAgICAgLy8gb25lcy4gVXNlIHNjb3BlIGFuZCBwYWdlIGZyb20gdGhlIGxpc3Qgc2NoZW1hIGFzIGRlZmF1bHRzLCBidXQgYWxsb3dcbiAgICAgICAgLy8gdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gb3ZlcnJpZGUgdGhlbS5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNjb3BlID0gdGhpcy5kZWZhdWx0U2NvcGU/Lm5hbWUsXG4gICAgICAgICAgcGFnZSA9IHRoaXMuc2NoZW1hLnBhZ2VcbiAgICAgICAgfSA9IHRoaXMucXVlcnlcbiAgICAgICAgLy8gUHJlc2VydmUgLyBtZXJnZSBjdXJyZW50bHkgc3RvcmVkIHZhbHVlcy5cbiAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAuLi4oc2NvcGUgIT0gbnVsbCAmJiB7IHNjb3BlIH0pLFxuICAgICAgICAgIC4uLihwYWdlICE9IG51bGwgJiYgeyBwYWdlIH0pLFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlcXVhbHMocXVlcnksIHRoaXMuJHJvdXRlLnF1ZXJ5KSkge1xuICAgICAgICAgIC8vIFRlbGwgdGhlIGAkcm91dGVgIHdhdGNoZXIgdG8gaWdub3JlIHRoZSBjaGFuZ2VkIHRyaWdnZXJlZCBoZXJlOlxuICAgICAgICAgIHRoaXMuaWdub3JlUm91dGVDaGFuZ2UgPSB0cnVlXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBxdWVyeSwgaGFzaDogdGhpcy4kcm91dGUuaGFzaCB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBxdWVyeSAvLyBMZXQgZ2V0U3RvcmVBY2Nlc3NvcigpIGRvIHRoZSBhY3R1YWwgc2V0dGluZ1xuICAgICAgfVxuICAgIH0pLFxuXG4gICAgdG90YWw6IGdldFN0b3JlQWNjZXNzb3IoJ3RvdGFsJyksXG5cbiAgICBjb2x1bW5zKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5jb2x1bW5zKVxuICAgIH0sXG5cbiAgICBzY29wZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnNjb3BlcylcbiAgICB9LFxuXG4gICAgZGVmYXVsdFNjb3BlKCkge1xuICAgICAgaWYgKHRoaXMuc2NvcGVzKSB7XG4gICAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2NvcGVzKSkge1xuICAgICAgICAgIGlmIChzY29wZS5kZWZhdWx0U2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWZhdWx0T3JkZXIoKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFNvcnQgfSA9IGNvbHVtblxuICAgICAgICAgIGlmIChkZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaXNTdHJpbmcoZGVmYXVsdFNvcnQpID8gZGVmYXVsdFNvcnQgOiAnYXNjJ1xuICAgICAgICAgICAgcmV0dXJuIGAke2NvbHVtbi5uYW1lfSAke2RpcmVjdGlvbn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSlcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgbGlua2VkIHZpZXcgc2NoZW1hIGlmIHRoaXMgc291cmNlIGVkaXRzIGl0IGl0cyBpdGVtcyB0aHJvdWdoXG4gICAgLy8gYSBsaW5rZWQgdmlldy5cbiAgICB2aWV3KCkge1xuICAgICAgcmV0dXJuIGdldFZpZXdTY2hlbWEodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGhhc0xhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1zLnNvbWUoaGFzTGFiZWxzKVxuICAgIH0sXG5cbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5ldmVyeShpc0NvbXBhY3QpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHBhZ2luYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncGFnaW5hdGUnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHJlbmRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbmRlcicsIHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICAgICAgPyB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/ICF0aGlzLnZhbHVlXG4gICAgICAgICAgICA6IHRydWVcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiAhdGhpcy5pc0lubGluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2UgJiYgdGhpcy5saXN0RGF0YS5sZW5ndGggPiAxICYmIGRyYWdnYWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsLCAvLyBzbyB0aGF0IGA/P2AgYmVsb3cgY2FuIGRvIGl0cyB0aGluZzpcbiAgICAgIGdldChjb2xsYXBzaWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0lubGluZWQgJiYgISEoY29sbGFwc2libGUgPz8gdGhpcy5jb2xsYXBzZWQgIT09IG51bGwpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIGlmICh0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMuaWdub3JlUm91dGVDaGFuZ2UgPSBmYWxzZVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChmcm9tLnBhdGggPT09IHRvLnBhdGggJiYgZnJvbS5oYXNoID09PSB0by5oYXNoKSB7XG4gICAgICAgIC8vIFBhdGhzIGFuZCBoYXNoZXMgcmVtYWluIHRoZSBzYW1lLCBzbyBvbmx5IHF1ZXJpZXMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgICAvLyBVcGRhdGUgZmlsdGVyIGFuZCByZWxvYWQgZGF0YSB3aXRob3V0IGNsZWFyaW5nLlxuICAgICAgICB0aGlzLnF1ZXJ5ID0gdG8ucXVlcnlcbiAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JhcHBlZFByaW1pdGl2ZXM6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIC8vIFNraXAgdGhlIGluaXRpYWwgc2V0dGluZyBvZiB3cmFwcGVkUHJpbWl0aXZlcyBhcnJheVxuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgb2xkVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciB0aGUgd3JhcHBlZFByaW1pdGl2ZXMgY2hhbmdlLCBtYXAgdGhlaXIgdmFsdWVzIGJhY2sgdG9cbiAgICAgICAgICAvLyB0aGUgYXJyYXkgb2YgcHJpbWl0aXZlcywgaW4gYSBwcmltaXRpdmUgd2F5IDopXG4gICAgICAgICAgLy8gQnV0IHNldCBgdW53cmFwcGluZ1ByaW1pdGl2ZXMgPSB0cnVlYCwgc28gdGhlIGBsaXN0RGF0YWAgY29tcHV0ZWRcbiAgICAgICAgICAvLyBwcm9wZXJ0eSBrbm93cyBhYm91dCBpdCwgd2hpY2ggc2V0cyBpdCB0byBgZmFsc2VgIGFnYWluLlxuICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSB0cnVlXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5jbGVhckRhdGEoKVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMudG90YWwgPSAwXG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXREYXRhKClcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIC8vIFdoZW4gbmV3IGRhdGEgaXMgbG9hZGVkLCB3ZSBjYW4gc3RvcmUgaXQgcmlnaHQgYmFjayBpbiB0aGUgZGF0YSBvZiB0aGVcbiAgICAgIC8vIHZpZXcgb3IgZm9ybSB0aGF0IGNyZWF0ZWQgdGhpcyBsaXN0IGNvbXBvbmVudC5cbiAgICAgIC8vIFN1cHBvcnQgdHdvIGZvcm1hdHMgZm9yIGxpc3QgZGF0YTpcbiAgICAgIC8vIC0gQXJyYXk6IGBbLi4uXWBcbiAgICAgIC8vIC0gT2JqZWN0OiBgeyByZXN1bHRzOiBbLi4uXSwgdG90YWwgfWAsIHNlZSBgdW53cmFwTGlzdERhdGEoKWBcbiAgICAgIGlmIChcbiAgICAgICAgIWRhdGEgfHxcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiYgaXNBcnJheShkYXRhKSB8fFxuICAgICAgICB0aGlzLmlzT2JqZWN0U291cmNlICYmIGlzT2JqZWN0KGRhdGEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSkge1xuICAgICAgICAvLyBUaGUgZm9ybWF0IGRpZG4ndCBtYXRjaCwgc2VlIGlmIHdlIHJlY2VpdmVkIGEgYHsgcmVzdWx0cywgdG90YWwgfWBcbiAgICAgICAgLy8gb2JqZWN0LCBpbiB3aGljaCBjYXNlIGB0aGlzLnZhbHVlYCB3YXMgYWxyZWFkeSBzZXQgYnlcbiAgICAgICAgLy8gYHVud3JhcExpc3REYXRhKClgIGFuZCB3ZSdyZSBkb25lIG5vdy5cbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGF0YSkgJiYgdGhpcy5pc0luVmlldykge1xuICAgICAgICAvLyBUaGUgY29udHJvbGxlciBpcyBzZW5kaW5nIGRhdGEgZm9yIGEgZnVsbCBtdWx0aS1jb21wb25lbnQgdmlldyxcbiAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSBuZXN0ZWQgbGlzdCBkYXRhLlxuICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1bndyYXBMaXN0RGF0YShkYXRhKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmXG4gICAgICAgIGlzT2JqZWN0KGRhdGEpICYmXG4gICAgICAgIGlzTnVtYmVyKGRhdGEudG90YWwpICYmXG4gICAgICAgIGlzQXJyYXkoZGF0YS5yZXN1bHRzKVxuICAgICAgKSB7XG4gICAgICAgIC8vIElmIEBkaXRvanMvc2VydmVyIHNlbmRzIGRhdGEgaW4gdGhlIGZvcm0gb2YgYHsgcmVzdWx0cywgdG90YWwgfWBcbiAgICAgICAgLy8gcmVwbGFjZSB0aGUgdmFsdWUgd2l0aCByZXN1bHQsIGJ1dCByZW1lbWJlciB0aGUgdG90YWwgaW4gdGhlIHN0b3JlLlxuICAgICAgICB0aGlzLnRvdGFsID0gZGF0YS50b3RhbFxuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YS5yZXN1bHRzXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oc2NoZW1hLCB0eXBlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5jcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSlcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IGl0ZW1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEucHVzaChpdGVtKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy5vcGVuU2NoZW1hQ29tcG9uZW50KC0xKSlcbiAgICAgIH1cbiAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgcmV0dXJuIGl0ZW1cbiAgICB9LFxuXG4gICAgcmVtb3ZlSXRlbShpdGVtKSB7XG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpc3REYXRhICYmIGxpc3REYXRhLmluZGV4T2YoaXRlbSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBsaXN0RGF0YS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZXRlSXRlbShpdGVtLCBpbmRleCkge1xuICAgICAgY29uc3QgbGFiZWwgPSBpdGVtICYmIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCBpdGVtLCB7XG4gICAgICAgIGluZGV4LFxuICAgICAgICBleHRlbmRlZDogdHJ1ZVxuICAgICAgfSlcblxuICAgICAgY29uc3Qgbm90aWZ5ID0gKCkgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiB0aGlzLmlzVHJhbnNpZW50ID8gJ2luZm8nIDogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgdGV4dDogW1xuICAgICAgICAgIGAke2xhYmVsfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmAsXG4gICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgIF1cbiAgICAgIH0pXG5cbiAgICAgIGlmIChpdGVtICYmIHdpbmRvdy5jb25maXJtKFxuICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5kZWxldGV9ICR7bGFiZWx9P2ApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICBub3RpZnkoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtKVxuICAgICAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0TWVtYmVyUmVzb3VyY2UoaXRlbUlkLCB0aGlzLnJlc291cmNlKVxuICAgICAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZGVsZXRlJywgcmVzb3VyY2UgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICAgICAgICBub3RpZnkoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHNjaGVtYUNvbXBvbmVudHNcbiAgICAgIHJldHVybiBzY2hlbWFDb21wb25lbnRzWygoaW5kZXggJSBsZW5ndGgpICsgbGVuZ3RoKSAlIGxlbmd0aF1cbiAgICB9LFxuXG4gICAgb3BlblNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpXG4gICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlVG9Db21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVBhdGguc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICAgID8gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gcGFyc2VEYXRhUGF0aChkYXRhUGF0aC5zbGljZSh0aGlzLmRhdGFQYXRoLmxlbmd0aCArIDEpKVswXSA/PyBudWxsXG4gICAgICAgICAgICA6IDBcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIGlzTnVtYmVyKCtpbmRleCkpIHtcbiAgICAgICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudCgraW5kZXgpXG4gICAgICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBvcGVuZWQgfSA9IHNjaGVtYUNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDAgJiYgKG9uQ29tcGxldGU/Lihjb21wb25lbnRzKSA/PyB0cnVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IG9wZW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxPbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCwgd2hpY2ggd2lsbCBiZSB0aGUgY29tcG9uZW50IHRoYXRcbiAgICAgICAgICAvLyB3ZSBqdXN0IG5hdmlnYXRlZCB0bywgYW5kIHBhc3MgaXQgb24gdG8gYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgICAgIGNvbnN0IHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnRzW3JvdXRlQ29tcG9uZW50cy5sZW5ndGggLSAxXVxuICAgICAgICAgIHJlc29sdmUob25Db21wbGV0ZT8uKFtyb3V0ZUNvbXBvbmVudF0pID8/IHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgcm91dGUgdGhhdCBjYW4gc2VydmUgcGFydCBvZiB0aGUgZ2l2ZW4gZGF0YVBhdGgsXG4gICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgoXG4gICAgICAgICAgICB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoUGFydHMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYWN0dWFsbHkgaXMgYSByb3V0ZSBmb3IgdGhpcyBzdWItY29tcG9uZW50OlxuICAgICAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVyLm1hdGNoKHBhdGgpXG4gICAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kcm91dGUucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSB0aGVyZSwgc28ganVzdCBjYWxsIGBvbkNvbXBsZXRlKClgOlxuICAgICAgICAgICAgICBjYWxsT25Db21wbGV0ZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIGNvbXBvbmVudCdzIHBhdGgsIHRoZW4gY2FsbCBgb25Db21wbGV0ZSgpYF86XG4gICAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgICAgICAgIHsgcGF0aCB9LFxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCB0byBiZSBtb3VudGVkIGluIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgLy8gdGljayBiZWZvcmUgY2FsbGluZyBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGNhbGxPbkNvbXBsZXRlKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gS2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgIH0pXG4gICAgfVxuICB9LCAvLyBlbmQgb2YgYG1ldGhvZHNgXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSwgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0xpc3RzIHdpdGggbmVzdGVkIGZvcm1zIGNhbm5vdCBsb2FkIGRhdGEgZnJvbSB0aGVpciBvd24gcmVzb3VyY2VzJ1xuICAgICAgKVxuICAgIH1cbiAgICAvLyBVc2UgZGlmZmVyZW50bHkgbmFtZWQgdXJsIHBhcmFtZXRlcnMgb24gZWFjaCBuZXN0ZWQgbGV2ZWwgZm9yIGlkIGFzXG4gICAgLy8gb3RoZXJ3aXNlIHRoZXkgd291bGQgY2xhc2ggYW5kIG92ZXJyaWRlIGVhY2ggb3RoZXIgaW5zaWRlICRyb3V0ZS5wYXJhbXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgY29uc3QgcGFyYW0gPSBgaWQke2xldmVsICsgMX1gXG4gICAgY29uc3QgbWV0YSA9IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgICBjb25zdCBmb3JtTWV0YSA9IHtcbiAgICAgIC4uLm1ldGEsXG4gICAgICAvLyBXaGVuIGNoaWxkcmVuIGFyZSBmbGF0dGVuZWQgKGUuZy4gdHJlZS1saXN0cyksIGluY2x1ZGUgdGhlIGBmbGF0dGVuYFxuICAgICAgLy8gc2V0dGluZyBhbHNvLCBmb3IgZmxhdHRlbmluZyBiZWxvdy5cbiAgICAgIGZsYXR0ZW4sXG4gICAgICBuZXN0ZWQsXG4gICAgICBwYXJhbVxuICAgIH1cbiAgICBjb25zdCBjaGlsZFJvdXRlcyA9IGF3YWl0IHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3MoY2hpbGRSb3V0ZXMsIGxldmVsICsgMSlcbiAgICB9XG4gICAgLy8gSW5saW5lZCBmb3JtcyBkb24ndCBuZWVkIHRvIGFjdHVhbGx5IGFkZCByb3V0ZXMuXG4gICAgaWYgKGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAhaW5saW5lZCkge1xuICAgICAgY29uc3QgZ2V0UGF0aFdpdGhQYXJhbSA9IChwYXRoLCBwYXJhbSkgPT4gcGFyYW1cbiAgICAgICAgPyBwYXRoXG4gICAgICAgICAgPyBgJHtwYXRofS86JHtwYXJhbX1gXG4gICAgICAgICAgOiBgOiR7cGFyYW19YFxuICAgICAgICA6IHBhdGhcblxuICAgICAgLy8gTGlzdHMgaW4gc2luZ2xlLWNvbXBvbmVudC12aWV3cyAobGV2ZWwgPT09IDApIHVzZSB0aGVpciB2aWV3J3MgcGF0aCxcbiAgICAgIC8vIHdoaWxlIGFsbCBvdGhlcnMgbmVlZCB0aGVpciBwYXRoIHByZWZpeGVkIHdpdGggdGhlIHBhcmVudCdzIHBhdGg6XG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gbGV2ZWwgPT09IDAgPyAnJyA6IHNjaGVtYS5wYXRoXG4gICAgICBjb25zdCBmb3JtUm91dGUgPSB7XG4gICAgICAgIC8vIE9iamVjdCBzb3VyY2VzIGRvbid0IG5lZWQgaWQgcGFyYW1zIGluIHRoZWlyIGZvcm0gcGF0aHMsIGFzIHRoZXlcbiAgICAgICAgLy8gZGlyZWN0bHkgZWRpdCBvbmUgb2JqZWN0LlxuICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIGlzTGlzdFNvdXJjZShzY2hlbWEpICYmIHBhcmFtKSxcbiAgICAgICAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudChcbiAgICAgICAgICBuZXN0ZWQgPyAnZGl0by1mb3JtLW5lc3RlZCcgOiAnZGl0by1mb3JtJ1xuICAgICAgICApLFxuICAgICAgICBtZXRhOiBmb3JtTWV0YVxuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHNjaGVtYSkpIHtcbiAgICAgICAgLy8gQWxzbyBhZGQgYSBwYXJhbSByb3V0ZSwgc2ltcGx5IHRvIGhhbmRsZSAnL2NyZWF0ZScgbGlua3MgdGhlIHNhbWVcbiAgICAgICAgLy8gd2F5IHRoYXQgbGlzdHMgZG8sIHdoZXJlIGl0IG92ZXJsYXBzIHdpdGggOmlkIGZvciBpdGVtIGlkcy5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIC4uLmZvcm1Sb3V0ZSxcbiAgICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIHBhcmFtKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZVBhdGgpIHtcbiAgICAgICAgLy8gSnVzdCByZWRpcmVjdCBiYWNrIHRvIHRoZSBwYXJlbnQgd2hlbiBhIG5lc3RlZCBzb3VyY2Ugcm91dGUgaXMgaGl0LlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgcGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgICByZWRpcmVjdDogJy4nLFxuICAgICAgICAgIG1ldGFcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIFBhcnRpdGlvbiBjaGlsZFJvdXRlcyBpbnRvIHRob3NlIHRoYXQgbmVlZCBmbGF0dGVuaW5nIChlLmcuIHRyZWUtbGlzdHMpXG4gICAgICAvLyBhbmQgdGhvc2UgdGhhdCBkb24ndCwgYW5kIHByb2Nlc3MgZWFjaCBncm91cCBzZXBhcmF0ZWx5IGFmdGVyLlxuICAgICAgY29uc3QgW2ZsYXRSb3V0ZXMsIHN1YlJvdXRlc10gPSBjaGlsZFJvdXRlcy5yZWR1Y2UoXG4gICAgICAgIChyZXMsIHJvdXRlKSA9PiB7XG4gICAgICAgICAgcmVzW3JvdXRlLm1ldGEuZmxhdHRlbiA/IDAgOiAxXS5wdXNoKHJvdXRlKVxuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfSxcbiAgICAgICAgW1tdLCBbXV1cbiAgICAgIClcbiAgICAgIGlmIChzdWJSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvcm1Sb3V0ZS5jaGlsZHJlbiA9IHN1YlJvdXRlc1xuICAgICAgfVxuICAgICAgcm91dGVzLnB1c2goZm9ybVJvdXRlKVxuICAgICAgLy8gQWRkIHRoZSBwcmVmaXhlZCBmb3JtUm91dGVzIHdpdGggdGhlaXIgY2hpbGRyZW4gZm9yIG5lc3RlZCBsaXN0cy5cbiAgICAgIGlmIChmbGF0Um91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgZmxhdFJvdXRlcykge1xuICAgICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLihjaGlsZFJvdXRlLnJlZGlyZWN0ID8gY2hpbGRSb3V0ZSA6IGZvcm1Sb3V0ZSksXG4gICAgICAgICAgICBwYXRoOiBgJHtmb3JtUm91dGUucGF0aH0vJHtjaGlsZFJvdXRlLnBhdGh9YCxcbiAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgLi4uY2hpbGRSb3V0ZS5tZXRhLFxuICAgICAgICAgICAgICBmbGF0dGVuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgZ3JhcGguYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGZpbHRlckNvbXBvbmVudHMgPSB7XG4gIHRleHQoZmlsdGVyKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdjb250YWlucycsXG4gICAgICAgIHZhbHVlOiAnY29udGFpbnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VxdWFscycsXG4gICAgICAgIHZhbHVlOiAnZXF1YWxzJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdzdGFydHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnc3RhcnRzLXdpdGgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VuZHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnZW5kcy13aXRoJ1xuICAgICAgfVxuICAgIF1cbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvcnNcbiAgICAgICAgPyB7XG4gICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgb3B0aW9uczpcbiAgICAgICAgICAgIGlzQXJyYXkoZmlsdGVyLm9wZXJhdG9ycylcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICBvcHRpb24gPT4gZmlsdGVyLm9wZXJhdG9ycy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBvcHRpb25zLFxuICAgICAgICAgIHdpZHRoOiAnNDAlJ1xuICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB3aWR0aDogZmlsdGVyLm9wZXJhdG9ycyA/ICc2MCUnIDogJ2ZpbGwnXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gICdkYXRlLXJhbmdlJygpIHtcbiAgICAvLyBVc2Ugc2hvcnRlciBkYXRlIGZvcm1hdCBpbiBkYXRlLXJhbmdlIGZpbHRlcnM6XG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHtcbiAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbToge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgIGRhdGVGb3JtYXRcbiAgICAgIH0sXG4gICAgICB0bzoge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgIGRhdGVGb3JtYXRcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlcnNQYW5lbChmaWx0ZXJzLCBkYXRhUGF0aCwgcHJveHkpIHtcbiAgY29uc3QgcGFuZWwgPSB7XG4gICAgbGFiZWw6ICdGaWx0ZXJzJyxcbiAgICBuYW1lOiAnJGZpbHRlcnMnLFxuICAgIHRhcmdldDogZGF0YVBhdGgsXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgLy8gTk9URTogT24gcGFuZWxzLCB0aGUgZGF0YSgpIGNhbGxiYWNrIGRvZXMgc29tZXRoaW5nIGVsc2UgdGhhbiBvbiBub3JtYWxcbiAgICAvLyBzY2hlbWE6IEl0IHByb2R1Y2VzIHRoZSBgZGF0YWAgcHJvcGVydHkgdG8gYmUgcGFzc2VkIHRvIHRoZSBwYW5lbCdzXG4gICAgLy8gc2NoZW1hLCBub3QgdGhlIGRhdGEgdG8gYmUgdXNlZCBmb3IgdGhlIHBhbmVsIGNvbXBvbmVudCBkaXJlY3RseS5cbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmlsdGVyc0RhdGEoXG4gICAgICAgIHBhbmVsLFxuICAgICAgICBwcm94eS5xdWVyeVxuICAgICAgKVxuICAgIH0sXG4gICAgY29tcG9uZW50czogZ2V0RmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycyksXG4gICAgYnV0dG9uczoge1xuICAgICAgY2xlYXI6IHtcbiAgICAgICAgdGV4dDogJ0NsZWFyJyxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LnJlc2V0RGF0YSgpXG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGZpbHRlcjoge1xuICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgdGV4dDogJ0ZpbHRlcicsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgYXBwbHlGaWx0ZXJzKCkge1xuICAgICAgICBwcm94eS5xdWVyeSA9IHtcbiAgICAgICAgICAuLi5wcm94eS5xdWVyeSxcbiAgICAgICAgICBmaWx0ZXI6IGZvcm1hdEZpbHRlcnNEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpLFxuICAgICAgICAgIC8vIENsZWFyIHBhZ2luYXRpb24gd2hlbiBhcHBseWluZyBvciBjbGVhcmluZyBmaWx0ZXJzOlxuICAgICAgICAgIHBhZ2U6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbFxufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSB7XG4gIGNvbnN0IGNvbXBzID0ge31cbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgT2JqZWN0LnZhbHVlcyhmaWx0ZXJzIHx8IHt9KSkge1xuICAgIC8vIFN1cHBvcnQgYm90aCBjdXN0b20gZm9ybXMgYW5kIGRlZmF1bHQgZmlsdGVyIGNvbXBvbmVudHMsIHRocm91Z2ggdGhlXG4gICAgLy8gYGZpbHRlckNvbXBvbmVudHNgIHJlZ2lzdHJ5LiBFdmVuIGZvciBkZWZhdWx0IGZpbHRlcnMsIHN0aWxsIHVzZSB0aGVcbiAgICAvLyBwcm9wZXJ0aWVzIGluIGBmaWx0ZXJgIGFzIHRoZSBiYXNlIGZvciBgZm9ybWAsIHNvIHRoaW5ncyBsaWtlIGBsYWJlbGBcbiAgICAvLyBjYW4gYmUgY2hhbmdlZCBvbiB0aGUgcmVzdWx0aW5nIGZvcm0uXG4gICAgY29uc3QgeyBmaWx0ZXI6IHR5cGUsIC4uLmZvcm0gfSA9IGZpbHRlclxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0eXBlXG4gICAgICA/IGZpbHRlckNvbXBvbmVudHNbdHlwZV0/LihmaWx0ZXIpXG4gICAgICA6IGZpbHRlci5jb21wb25lbnRzXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvcm0uY29tcG9uZW50cyA9IHt9XG4gICAgICAvLyBDb252ZXJ0IGxhYmVscyB0byBwbGFjZWhvbGRlcnM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gY29tcG9uZW50LmxhYmVsIHx8IGxhYmVsaXplKGNvbXBvbmVudC5uYW1lIHx8IGtleSlcbiAgICAgICAgICBmb3JtLmNvbXBvbmVudHNba2V5XSA9IHtcbiAgICAgICAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYWJlbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29tcHNbZmlsdGVyLm5hbWVdID0ge1xuICAgICAgICBsYWJlbDogZm9ybS5sYWJlbCxcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlubGluZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBmaWx0ZXIgJyR7ZmlsdGVyLm5hbWV9JzogVW5rbm93biBmaWx0ZXIgdHlwZSAnJHt0eXBlfScuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcHNcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHNbbmFtZV1cbiAgcmV0dXJuIGNvbXBvbmVudD8uZm9ybT8uY29tcG9uZW50c1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGaWx0ZXJzRGF0YShzY2hlbWEsIGRhdGEpIHtcbiAgY29uc3QgZmlsdGVycyA9IFtdXG4gIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZW50cnkgPSBkYXRhW25hbWVdXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICAvLyBNYXAgY29tcG9uZW50cyBzZXF1ZW5jZSB0byBhcmd1bWVudHM6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmtleXMoZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpKS5tYXAoXG4gICAgICAgIGtleSA9PiBlbnRyeVtrZXldID8/IG51bGxcbiAgICAgIClcbiAgICAgIC8vIE9ubHkgYXBwbHkgZmlsdGVyIGlmIHRoZXJlIGFyZSBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZW4ndCBudWxsOlxuICAgICAgaWYgKGFyZ3Muc29tZSh2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKGAke25hbWV9OiR7YXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywnKX1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVycy5sZW5ndGggPyBmaWx0ZXJzIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIHBhcnNlRmlsdGVyc0RhdGEoc2NoZW1hLCBxdWVyeSkge1xuICBjb25zdCBmaWx0ZXJzID0ge31cbiAgLy8gU2FtZSBhcyBAZGl0b2pzL3NlcnZlcidzIFF1ZXJ5UGFyYW1ldGVycy5maWx0ZXI6IFRyYW5zbGF0ZSB0aGUgc3RyaW5nIGRhdGFcbiAgLy8gZnJvbSAkcm91dGUucXVlcnkgYmFjayB0byBwYXJhbSBsaXN0cyBwZXIgZmlsdGVyOlxuICBpZiAocXVlcnkpIHtcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBhc0FycmF5KHF1ZXJ5LmZpbHRlcikpIHtcbiAgICAgIGNvbnN0IFssIG5hbWUsIGpzb25dID0gZmlsdGVyLm1hdGNoKC9eKFxcdyspOiguKikkLylcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbHRlcnNbbmFtZV0gPSBhc0FycmF5KEpTT04ucGFyc2UoYFske2pzb259XWApKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgZmlsdGVyc0RhdGEgPSB7fVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gc2NoZW1hLmNvbXBvbmVudHMpIHtcbiAgICBjb25zdCBkYXRhID0ge31cbiAgICAvLyBJZiB3ZSBoYXZlIHJldHJpZXZlZCBwYXJhbXMgZnJvbSB0aGUgcXVlcnksIGZldGNoIHRoZSBhc3NvY2lhdGVkXG4gICAgLy8gZm9ybSBjb21wb25lbnRzIHNvIHdlIGNhbiBtYXAgdGhlIHZhbHVlcyBiYWNrIHRvIG9iamVjdCBrZXlzOlxuICAgIGNvbnN0IGFyZ3MgPSBmaWx0ZXJzW25hbWVdXG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSlcbiAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29tcG9uZW50cykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IGFyZ3NbaW5kZXgrK11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaWx0ZXJzRGF0YVtuYW1lXSA9IGRhdGFcbiAgfVxuICByZXR1cm4gZmlsdGVyc0RhdGFcbn1cbiIsIlxuLmRpdG8tbGlzdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4pXG4gIC5kaXRvLW5hdmlnYXRpb25cbiAgICBkaXRvLXNjb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cInBhZ2luYXRlXCJcbiAgICApXG4gICAgZGl0by1wYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cInBhZ2luYXRlXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgIClcbiAgdGFibGUuZGl0by10YWJsZShcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICB9YFxuICApXG4gICAgZGl0by10YWJsZS1oZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3REYXRhLCBwYWdpbmF0aW9uUmFuZ2UpXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIml0ZW0sIGluZGV4IGluIGxpc3REYXRhXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoc2NoZW1hLCBpdGVtKVwiXG4gICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKHYtaWY9XCJjb2x1bW5zXCIpXG4gICAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIDpjZWxsPVwiY29sdW1uXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICA6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIlxuICAgICAgICApXG4gICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgKVxuICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICBkaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmIHNpbmdsZVwiXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbGlzdChcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gICAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbiAgKVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpdG8tc2NvcGVzKFxuICAgICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICAgIClcbiAgICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAgIC8vIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgICAuZGl0by1zcGFjZXIoXG4gICAgICAgIHYtZWxzZS1pZj1cInBhZ2luYXRlXCJcbiAgICAgIClcbiAgICAgIGRpdG8tcGFnaW5hdGlvbihcbiAgICAgICAgdi1pZj1cInBhZ2luYXRlXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgICAgKVxuICAgIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgICA6Y2xhc3M9YHtcbiAgICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgICAgfWBcbiAgICApXG4gICAgICBkaXRvLXRhYmxlLWhlYWQoXG4gICAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgICApXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIml0ZW0sIGluZGV4IGluIGxpc3REYXRhXCJcbiAgICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImNvbHVtbnNcIilcbiAgICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgIHRkXG4gICAgICAgICAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgICAgdGZvb3QoXG4gICAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiAhc2luZ2xlXCJcbiAgICAgIClcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICApXG4gICAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICBkaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbGlzdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZlxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAmOmVtcHR5XG4gICAgICAgIGRpc3BsYXk6IG5vbmVcbiAgICAgIC5kaXRvLXNjb3BlcyxcbiAgICAgIC5kaXRvLXBhZ2luYXRpb25cbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgICBmbGV4OiAwIDEgYXV0b1xuICAgICAgICBtaW4td2lkdGg6IDBcbiAgICAmLmRpdG8tc2luZ2xlXG4gICAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICBoZWlnaHQ6IDEwMCVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBnZXRWaWV3RWRpdFBhdGggfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlRHJhZ2dhYmxlIH0sXG4gIG1peGluczogW1NvdXJjZU1peGluLCBPcmRlcmVkTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCBzY2hlbWFDb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAvLyBBdCB0aGUgdGltZSBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHBhbmVsIHNjaGVtYSwgdGhlIHNjaGVtYUNvbXBvbmVudCBpc1xuICAgICAgLy8gbm90IGZpbGxlZCB5ZXQsIHNvIHdlIGNhbid0IGdldCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAoZGF0YVBhdGgpIHJpZ2h0XG4gICAgICAvLyBhd2F5LiBVc2UgYSBwcm94eSBhbmQgYSBnZXR0ZXIgaW5zdGVhZCwgdG8gZ2V0IGFyb3VuZCB0aGlzOlxuICAgICAgY29uc3QgZ2V0TGlzdENvbXBvbmVudCA9ICgpID0+IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgY29tcG9uZW50ID0+IGNvbXBvbmVudC50eXBlID09PSAnbGlzdCdcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGdldEZpbHRlcnNQYW5lbChcbiAgICAgICAgZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgeyAvLyBDcmVhdGUgYSBzaW1wbGUgcHJveHkgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgICAgZ2V0IHF1ZXJ5KCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldExpc3RDb21wb25lbnQoKT8ucXVlcnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldCBxdWVyeShxdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZ2V0TGlzdENvbXBvbmVudCgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIHZhbHVlcyBmb3IgY29tcGFyaW5nIHdpdGggZXF1YWxzKClcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHBpY2tCeShvYmosIHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5xdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzTGlzdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIHRoaXMuYnV0dG9uU2NoZW1hcyB8fFxuICAgICAgICB0aGlzLmNyZWF0YWJsZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiBsaXN0RGF0YS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgdGhpcy5lZGl0YWJsZSB8fFxuICAgICAgICB0aGlzLmRlbGV0YWJsZSB8fFxuICAgICAgICB0aGlzLmRyYWdnYWJsZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDZWxsRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNJbmxpbmVkICYmIHRoaXMuaGFzRWRpdEJ1dHRvbnNcbiAgICB9LFxuXG4gICAgaGFzRXZlbkNvdW50KCkge1xuICAgICAgcmV0dXJuICEodGhpcy5saXN0RGF0YS5sZW5ndGggJSAyKVxuICAgIH0sXG5cbiAgICBudW1Db2x1bW5zKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29sdW1ucyA/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucykubGVuZ3RoIDogMSkgK1xuICAgICAgICAodGhpcy5oYXNDZWxsRWRpdEJ1dHRvbnMgPyAxIDogMClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERhdGFQYXRoKGluZGV4KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgfSxcblxuICAgIGdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpIHx8IHRoaXMucGF0aFxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgcmV0dXJuIGAke3BhdGh9LyR7aWR9YFxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q2VsbENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNlbGwtJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0Q29udGV4dChpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgZGF0YVBhdGg6IHRoaXMuZ2V0RGF0YVBhdGgoaW5kZXgpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZpbHRlckVycm9ycyhlcnJvcnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNEYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsICckZmlsdGVycycpXG4gICAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldFBhbmVsQnlEYXRhUGF0aChmaWx0ZXJzRGF0YVBhdGgpXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWwuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLWxhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KDpsYWJlbD1cInZhbHVlXCIgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGRpdG8tbGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoOmxhYmVsPVwidmFsdWVcIiA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWxhYmVsLWNvbXBvbmVudFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBoZWlnaHQ6IDJlbVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsYWJlbCcsIHtcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tbWFya3VwKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIGVkaXRvci1tZW51LWJhci5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgIClcbiAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiLFxuICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICApXG4gICAgICAgICAgaWNvbig6bmFtZT1cImljb25cIilcbiAgZWRpdG9yLWNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgIHJlZj1cImVkaXRvclwiXG4gICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tYXJrdXAoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICApXG4gICAgZWRpdG9yLW1lbnUtYmFyLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCIsXG4gICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBpY29uKDpuYW1lPVwiaWNvblwiKVxuICAgIGVkaXRvci1jb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICAgIHJlZj1cImVkaXRvclwiXG4gICAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gICAgKVxuICAgIC5kaXRvLXJlc2l6ZShcbiAgICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1tYXJrdXBcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgLmRpdG8tcmVzaXplXG4gICAgICBAZXh0ZW5kICVpY29uLXJlc2l6ZVxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICB0b3A6IHVuc2V0XG4gICAgICBsZWZ0OiB1bnNldFxuICAgICAgcmlnaHQ6IDBcbiAgICAgIGJvdHRvbTogMFxuICAgICAgd2lkdGg6IDFlbVxuICAgICAgaGVpZ2h0OiAxZW1cblxuICAgIC5Qcm9zZU1pcnJvclxuICAgICAgaGVpZ2h0OiAxMDAlXG4gICAgICBvdXRsaW5lOiBub25lXG5cbiAgICAuZGl0by1tYXJrdXAtZWRpdG9yXG4gICAgICBvdmVyZmxvdy15OiBzY3JvbGxcbiAgICAgIC8vIE1vdmUgcGFkZGluZyBcImluc2lkZVwiIGVkaXRvciB0byBjb3JyZWN0bHkgcG9zaXRpb24gc2Nyb2xsYmFyXG4gICAgICBtYXJnaW4tcmlnaHQ6IC0kaW5wdXQtcGFkZGluZy1ob3JcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICRpbnB1dC1wYWRkaW5nLWhvclxuXG4gICAgLmRpdG8tYnV0dG9ucy10b29sYmFyXG4gICAgICBtYXJnaW46ICRpbnB1dC1wYWRkaW5nLXZlciAwXG5cbiAgICBoMSxcbiAgICBoMixcbiAgICBoMyxcbiAgICBwLFxuICAgIHVsLFxuICAgIG9sLFxuICAgIHByZSxcbiAgICBibG9ja3F1b3RlXG4gICAgICBtYXJnaW46IDFyZW0gMFxuICAgICAgJjpmaXJzdC1jaGlsZFxuICAgICAgICBtYXJnaW4tdG9wOiAwXG4gICAgICAmOmxhc3QtY2hpbGRcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMFxuICAgIGgxLFxuICAgIGgyLFxuICAgIGgzXG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgIGgxXG4gICAgICBmb250LXNpemU6IDEuNHJlbVxuICAgIGgyXG4gICAgICBmb250LXNpemU6IDEuMnJlbVxuICAgIHVsXG4gICAgICBsaXN0LXN0eWxlOiBkaXNjXG4gICAgY29kZVxuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vXG4gICAgcHJlXG4gICAgICBwYWRkaW5nOiAwLjdyZW0gMXJlbVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXJcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgIG92ZXJmbG93LXg6IGF1dG9cbiAgICAgIGNvZGVcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICBwIGNvZGVcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgcGFkZGluZzogMCAwLjNyZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlclxuICAgIGFcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lXG4gICAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICAgIGNvbG9yOiBibHVlXG4gICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZVxuICAgIHVsLFxuICAgIG9sXG4gICAgICBwYWRkaW5nLWxlZnQ6IDJyZW1cbiAgICBsaVxuICAgICAgJiA+IHAsXG4gICAgICAmID4gb2wsXG4gICAgICAmID4gdWxcbiAgICAgICAgbWFyZ2luOiAwXG4gICAgYmxvY2txdW90ZVxuICAgICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCAkY29sb3ItbGlnaHRlclxuICAgICAgcGFkZGluZy1sZWZ0OiAxcmVtXG4gICAgICBmb250LXN0eWxlOiBpdGFsaWNcbiAgICAgIHBcbiAgICAgICAgbWFyZ2luOiAwXG5cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBFZGl0b3IsIEVkaXRvckNvbnRlbnQsIEVkaXRvck1lbnVCYXIsIE1hcmsgfSBmcm9tICd0aXB0YXAnXG5pbXBvcnQgeyB0b2dnbGVNYXJrIH0gZnJvbSAndGlwdGFwLWNvbW1hbmRzJ1xuaW1wb3J0IHtcbiAgLy8gTWFya3M6XG4gIEJvbGQsIENvZGUsIEl0YWxpYywgTGluaywgU3RyaWtlLCBVbmRlcmxpbmUsXG4gIC8vIE5vZGVzOlxuICBCbG9ja3F1b3RlLCBDb2RlQmxvY2ssIEhhcmRCcmVhaywgSGVhZGluZywgSG9yaXpvbnRhbFJ1bGUsXG4gIE9yZGVyZWRMaXN0LCBCdWxsZXRMaXN0LCBMaXN0SXRlbSxcbiAgLy8gVE9ETzpcbiAgLy8gLSBJbWFnZSwgTWVudGlvbiwgQ29kZUJsb2NrSGlnaGxpZ2h0XG4gIC8vIC0gVGFibGUsIFRhYmxlQ2VsbCwgVGFibGVIZWFkZXIsIFRhYmxlTm9kZXMsIFRhYmxlUm93LFxuICAvLyAtIFRvZG9JdGVtLCBUb2RvTGlzdFxuICAvLyBUb29sczpcbiAgSGlzdG9yeVxufSBmcm9tICd0aXB0YXAtZXh0ZW5zaW9ucydcbmltcG9ydCB7IEljb24gfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IHtcbiAgaXNBcnJheSwgaXNPYmplY3QsIHVuZGVyc2NvcmUsIGh5cGhlbmF0ZSwgZGVib3VuY2Vcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ21hcmt1cCcsIHtcbiAgY29tcG9uZW50czoge1xuICAgIEVkaXRvckNvbnRlbnQsXG4gICAgRWRpdG9yTWVudUJhcixcbiAgICBJY29uXG4gIH0sXG5cbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVkaXRvcjogbnVsbCxcbiAgICAgIGhlaWdodDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDEwXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgfHwgYGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWFya0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdtYXJrcycsIHtcbiAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgaXRhbGljOiB0cnVlLFxuICAgICAgICB1bmRlcmxpbmU6IHRydWUsXG4gICAgICAgIHN0cmlrZTogdHJ1ZSxcbiAgICAgICAgc21hbGw6IHRydWUsXG4gICAgICAgIGNvZGU6IHRydWUsXG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICBvbkNsaWNrOiBjb21tYW5kID0+IHRoaXMub25DbGlja0xpbmsoY29tbWFuZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYmFzaWNOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBwYXJhZ3JhcGg6IHtcbiAgICAgICAgLy8gRG8gbm90IHNob3cgdGhlIHBhcmFncmFwaCBjb21tYW5kIGFzIGFjdGl2ZSBpZiBhbnkgb2YgdGhlIGJsb2NrXG4gICAgICAgIC8vIGNvbW1hbmRzIGFyZSBhbHNvIGFjdGl2ZTpcbiAgICAgICAgICBpZ25vcmVBY3RpdmU6ICgpID0+XG4gICAgICAgICAgICB0aGlzLm90aGVyTm9kZUJ1dHRvbnMuc29tZShidXR0b24gPT4gYnV0dG9uLmlzQWN0aXZlKVxuICAgICAgICB9LFxuICAgICAgICBoZWFkaW5nOiB7XG4gICAgICAgICAgYXR0cjogJ2xldmVsJyxcbiAgICAgICAgICB2YWx1ZXM6IFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvdGhlck5vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIGJ1bGxldExpc3Q6IHRydWUsXG4gICAgICAgIG9yZGVyZWRMaXN0OiB0cnVlLFxuICAgICAgICBibG9ja3F1b3RlOiB0cnVlLFxuICAgICAgICBjb2RlQmxvY2s6IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHRvb2xCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygndG9vbHMnLCB7XG4gICAgICAgIHVuZG86IHRydWUsXG4gICAgICAgIHJlZG86IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdyb3VwZWRCdXR0b25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrQnV0dG9ucyxcbiAgICAgICAgYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgb3RoZXJOb2RlQnV0dG9ucyxcbiAgICAgICAgdG9vbEJ1dHRvbnNcbiAgICAgIH0gPSB0aGlzXG4gICAgICByZXR1cm4gW1xuICAgICAgICBtYXJrQnV0dG9ucyxcbiAgICAgICAgYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgb3RoZXJOb2RlQnV0dG9ucyxcbiAgICAgICAgdG9vbEJ1dHRvbnNcbiAgICAgIF0uZmlsdGVyKGJ1dHRvbnMgPT4gYnV0dG9ucy5sZW5ndGggPiAwKVxuICAgIH0sXG5cbiAgICBwYXJzZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6IHtcbiAgICAgICAgICAnY29sbGFwc2UnOiBmYWxzZSxcbiAgICAgICAgICAncHJlc2VydmUnOiB0cnVlLFxuICAgICAgICAgICdwcmVzZXJ2ZS1hbGwnOiAnZnVsbCdcbiAgICAgICAgfVt0aGlzLndoaXRlc3BhY2VdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVkaXRvck9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlZGl0YWJsZTogIXRoaXMucmVhZHlvbmx5LFxuICAgICAgICBhdXRvRm9jdXM6IHRoaXMuYXV0b2ZvY3VzLFxuICAgICAgICBkaXNhYmxlSW5wdXRSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMuaW5wdXQsXG4gICAgICAgIGRpc2FibGVQYXN0ZVJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5wYXN0ZSxcbiAgICAgICAgcGFyc2VPcHRpb25zOiB0aGlzLnBhcnNlT3B0aW9uc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHdoaXRlc3BhY2U6IGdldFNjaGVtYUFjY2Vzc29yKCd3aGl0ZXNwYWNlJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2NvbGxhcHNlJ1xuICAgICAgLy8gUG9zc2libGUgdmFsdWVzIGFyZTogJ2NvbGxhcHNlJywgJ3ByZXNlcnZlJywgJ3ByZXNlcnZlLWFsbCdcbiAgICB9KSxcblxuICAgIGVuYWJsZVJ1bGVzOiBnZXRTY2hlbWFBY2Nlc3NvcignZW5hYmxlUnVsZXMnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVuYWJsZVJ1bGVzKSB7XG4gICAgICAgIHJldHVybiBpc09iamVjdChlbmFibGVSdWxlcylcbiAgICAgICAgICA/IGVuYWJsZVJ1bGVzXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICBpbnB1dDogISFlbmFibGVSdWxlcyxcbiAgICAgICAgICAgIHBhc3RlOiAhIWVuYWJsZVJ1bGVzXG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICByZWFkeW9ubHk6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBhdXRvZm9jdXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBlbmFibGVSdWxlczogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWVEZWJvdW5jZWQgPSBkZWJvdW5jZShnZXRWYWx1ZSA9PiB7XG4gICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgIHRoaXMudmFsdWUgPSBnZXRWYWx1ZSgpXG4gICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH0sIDEwMClcblxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHsgZ2V0SFRNTCB9KSA9PiB7XG4gICAgICBzZXRWYWx1ZURlYm91bmNlZChnZXRIVE1MKVxuICAgICAgdGhpcy5vbklucHV0KClcbiAgICB9XG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Q29udGVudCh2YWx1ZSwgZmFsc2UsIHRoaXMucGFyc2VPcHRpb25zKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3Ioe1xuICAgICAgLi4udGhpcy5lZGl0b3JPcHRpb25zLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgZXh0ZW5zaW9uczogdGhpcy5jcmVhdGVFeHRlbnNpb25zKCksXG4gICAgICBjb250ZW50OiB0aGlzLnZhbHVlIHx8ICcnXG4gICAgfSlcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkRyYWdSZXNpemUoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGdldFBvaW50ID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9KSA9PiAoeyB4LCB5IH0pXG5cbiAgICAgIGxldCBwcmV2WSA9IGdldFBvaW50KGV2ZW50KS55XG4gICAgICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMuJHJlZnMuZWRpdG9yLiRlbCkuaGVpZ2h0KVxuXG4gICAgICBjb25zdCBtb3VzZW1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgeSB9ID0gZ2V0UG9pbnQoZXZlbnQpXG4gICAgICAgIGhlaWdodCArPSB5IC0gcHJldllcbiAgICAgICAgcHJldlkgPSB5XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gYCR7TWF0aC5tYXgoaGVpZ2h0LCAwKX1weGBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIG1vdXNlbW92ZSxcblxuICAgICAgICBtb3VzZXVwKGV2ZW50KSB7XG4gICAgICAgICAgbW91c2Vtb3ZlKGV2ZW50KVxuICAgICAgICAgIGhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHVwZGF0ZUVkaXRvck9wdGlvbnMoKSB7XG4gICAgICB0aGlzLmVkaXRvci5zZXRPcHRpb25zKHRoaXMuZWRpdG9yT3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGlja0xpbmsoY29tbWFuZCkge1xuICAgICAgY29uc3QgYXR0cnMgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgaHJlZjoge1xuICAgICAgICAgICAgdHlwZTogJ3VybCcsXG4gICAgICAgICAgICBsYWJlbDogJ0xpbmsnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgbGFiZWw6ICdUaXRsZSdcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGFwcGx5OiB7IHR5cGU6ICdzdWJtaXQnIH0sXG4gICAgICAgICAgcmVtb3ZlOiB7XG4gICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgY2xpY2soeyBkaWFsb2dDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudC5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgIGhyZWY6IG51bGwsXG4gICAgICAgICAgICAgICAgICB0aXRsZTogbnVsbFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IHRoaXMuZWRpdG9yLmdldE1hcmtBdHRycygnbGluaycpXG4gICAgICB9KVxuICAgICAgaWYgKGF0dHJzKSB7XG4gICAgICAgIGxldCB7IGhyZWYsIHRpdGxlIH0gPSBhdHRyc1xuICAgICAgICBpZiAoaHJlZikge1xuICAgICAgICAgIC8vIFNlZSBpZiBgaHJlZmAgY2FuIGJlIHBhcnNlZCBhcyBhIFVSTCwgYW5kIGlmIG5vdCwgcHJlZml4IGl0IHdpdGhcbiAgICAgICAgICAvLyBhIGRlZmF1bHQgcHJvdG9jb2wuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBVUkwoaHJlZilcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGhyZWYgPSBgaHR0cDovLyR7aHJlZn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbW1hbmQoeyBocmVmLCB0aXRsZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVFeHRlbnNpb25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrcyA9IHt9LFxuICAgICAgICBub2RlcyA9IHt9LFxuICAgICAgICB0b29scyA9IHt9XG4gICAgICB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC8vIHNjaGVtYS5tYXJrczpcbiAgICAgICAgbWFya3MuYm9sZCAmJiBuZXcgQm9sZCgpLFxuICAgICAgICBtYXJrcy5pdGFsaWMgJiYgbmV3IEl0YWxpYygpLFxuICAgICAgICBtYXJrcy51bmRlcmxpbmUgJiYgbmV3IFVuZGVybGluZSgpLFxuICAgICAgICBtYXJrcy5zdHJpa2UgJiYgbmV3IFN0cmlrZSgpLFxuICAgICAgICBtYXJrcy5zbWFsbCAmJiBuZXcgU21hbGwoKSxcbiAgICAgICAgbWFya3MuY29kZSAmJiBuZXcgQ29kZSgpLFxuICAgICAgICBtYXJrcy5saW5rICYmIG5ldyBMaW5rV2l0aFRpdGxlKCksXG5cbiAgICAgICAgLy8gc2NoZW1hLm5vZGVzOlxuICAgICAgICBub2Rlcy5ibG9ja3F1b3RlICYmIG5ldyBCbG9ja3F1b3RlKCksXG4gICAgICAgIG5vZGVzLmNvZGVCbG9jayAmJiBuZXcgQ29kZUJsb2NrKCksXG4gICAgICAgIG5ldyBIYXJkQnJlYWsoKSwgLy8gVE9ETzogU2hvdWxkIHRoaXMgYWx3YXlzIG9uP1xuICAgICAgICBub2Rlcy5oZWFkaW5nICYmIG5ldyBIZWFkaW5nKHsgbGV2ZWxzOiBub2Rlcy5oZWFkaW5nIH0pLFxuICAgICAgICBub2Rlcy5ob3Jpem9udGFsUnVsZSAmJiBuZXcgSG9yaXpvbnRhbFJ1bGUoKSxcbiAgICAgICAgKG5vZGVzLm9yZGVyZWRMaXN0IHx8IG5vZGVzLmJ1bGxldExpc3QpICYmIG5ldyBMaXN0SXRlbSgpLFxuICAgICAgICBub2Rlcy5idWxsZXRMaXN0ICYmIG5ldyBCdWxsZXRMaXN0KCksXG4gICAgICAgIG5vZGVzLm9yZGVyZWRMaXN0ICYmIG5ldyBPcmRlcmVkTGlzdCgpLFxuICAgICAgICAvLyBUT0RPOlxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBuZXcgVG9kb0l0ZW0oKSxcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgbmV3IFRvZG9MaXN0KCksXG5cbiAgICAgICAgLy8gc2NoZW1hLnRvb2xzOlxuICAgICAgICB0b29scy5oaXN0b3J5ICYmIG5ldyBIaXN0b3J5KClcbiAgICAgIF0uZmlsdGVyKGV4dGVuc2lvbiA9PiAhIWV4dGVuc2lvbilcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9ucyhzZXR0aW5nc05hbWUsIGRlc2NyaXB0aW9ucykge1xuICAgICAgY29uc3QgbGlzdCA9IFtdXG5cbiAgICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICh7IG5hbWUsIGljb24sIGF0dHJzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSkgPT4ge1xuICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuZWRpdG9yLmlzQWN0aXZlW25hbWVdXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSB0aGlzLmVkaXRvci5jb21tYW5kc1tuYW1lXVxuICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaWNvbixcbiAgICAgICAgICBpc0FjdGl2ZTogKFxuICAgICAgICAgICAgaXNBY3RpdmU/LihhdHRycykgJiZcbiAgICAgICAgICAgIChpZ25vcmVBY3RpdmUgPT0gbnVsbCB8fCAhaWdub3JlQWN0aXZlKCkpXG4gICAgICAgICAgKSxcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBvbkNsaWNrXG4gICAgICAgICAgICA/IG9uQ2xpY2soY29tbWFuZCwgYXR0cnMpXG4gICAgICAgICAgICA6IGNvbW1hbmQoYXR0cnMpXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zY2hlbWFbc2V0dGluZ3NOYW1lXVxuICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZGVzY3JpcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucykpIHtcbiAgICAgICAgICBjb25zdCBzZXR0aW5nTmFtZSA9IFsndW5kbycsICdyZWRvJ10uaW5jbHVkZXMoa2V5KSA/ICdoaXN0b3J5JyA6IGtleVxuICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tzZXR0aW5nTmFtZV1cbiAgICAgICAgICBjb25zdCBuYW1lID0gdW5kZXJzY29yZShrZXkpXG4gICAgICAgICAgY29uc3QgaWNvbiA9IGh5cGhlbmF0ZShrZXkpXG4gICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGF0dHIsIHZhbHVlcywgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0gPSBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICBpZiAoYXR0cikge1xuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlcykgJiYgaXNBcnJheShzZXR0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBoZWFkaW5nIGxldmVsIGF0dHJzOlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRkQnV0dG9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgJHtpY29ufS0ke3ZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBbYXR0cl06IHZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVBY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwuc2Nyb2xsSW50b1ZpZXc/LigpXG4gICAgICB0aGlzLmVkaXRvci5mb2N1cygpXG4gICAgfVxuICB9XG59KVxuXG5jbGFzcyBTbWFsbCBleHRlbmRzIE1hcmsge1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gJ3NtYWxsJ1xuICB9XG5cbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VET006IFtcbiAgICAgICAgeyB0YWc6ICdzbWFsbCcgfVxuICAgICAgXSxcbiAgICAgIHRvRE9NOiAoKSA9PiBbJ3NtYWxsJywgMF1cbiAgICB9XG4gIH1cblxuICBjb21tYW5kcyh7IHR5cGUgfSkge1xuICAgIHJldHVybiAoKSA9PiB0b2dnbGVNYXJrKHR5cGUpXG4gIH1cbn1cbmNsYXNzIExpbmtXaXRoVGl0bGUgZXh0ZW5kcyBMaW5rIHtcbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgaHJlZjoge1xuICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgcGFyc2VET006IFt7XG4gICAgICAgIHRhZzogJ2EnLFxuICAgICAgICBnZXRBdHRyczogZG9tID0+ICh7XG4gICAgICAgICAgaHJlZjogZG9tLmdldEF0dHJpYnV0ZSgnaHJlZicpLFxuICAgICAgICAgIHRpdGxlOiBkb20uZ2V0QXR0cmlidXRlKCd0aXRsZScpXG4gICAgICAgIH0pXG4gICAgICB9XSxcbiAgICAgIHRvRE9NOiBub2RlID0+IFsnYScsIG5vZGUuYXR0cnMsIDBdXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tbXVsdGlzZWxlY3QoXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAnZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZSc6IG11bHRpcGxlXG4gIH1gXG4pXG4gIHZ1ZS1tdWx0aXNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6c2hvdy1sYWJlbHM9XCJmYWxzZVwiXG4gICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgIHRhZy1wbGFjZWhvbGRlcj1cIlByZXNzIGVudGVyIHRvIGFkZCBuZXcgdGFnXCIsXG4gICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICA6Y3VzdG9tLWxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgIDp0cmFjay1ieT1cIm9wdGlvblZhbHVlXCJcbiAgICA6Z3JvdXAtbGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgIDpncm91cC12YWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgIDppbnRlcm5hbC1zZWFyY2g9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICA6cHJlc2VydmUtc2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbGVhci1vbi1zZWxlY3Q9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICA6Y2xvc2Utb24tc2VsZWN0PVwiIXN0YXlPcGVuXCJcbiAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgQG9wZW49XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbXVsdGlzZWxlY3QoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by1tdWx0aXNlbGVjdC1zaW5nbGUnOiAhbXVsdGlwbGUsXG4gICAgICAnZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZSc6IG11bHRpcGxlXG4gICAgfWBcbiAgKVxuICAgIHZ1ZS1tdWx0aXNlbGVjdChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOnNob3ctbGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICAgIDpvcHRpb25zPVwicG9wdWxhdGUgJiYgYWN0aXZlT3B0aW9ucyB8fCBbXVwiXG4gICAgICA6Y3VzdG9tLWxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgICAgOmdyb3VwLWxhYmVsPVwiZ3JvdXBCeUxhYmVsXCJcbiAgICAgIDpncm91cC12YWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICA6dGFnZ2FibGU9XCJ0YWdnYWJsZVwiXG4gICAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOnByZXNlcnZlLXNlYXJjaD1cIiEhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbGVhci1vbi1zZWxlY3Q9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgICAgOmxvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgQG9wZW49XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICAgIEBzZWFyY2gtY2hhbmdlPVwib25TZWFyY2hDaGFuZ2VcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC8vIFRlbXBvcmFyeSBmaXggZm9yIHRoaXMgdnVlLWNsaSBpc3N1ZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1jbGkvaXNzdWVzLzIwNTUjaXNzdWVjb21tZW50LTQxNzgxNzUyN1xuICAvLyBAaW1wb3J0ICd+dnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0Lm1pbi5jc3MnXG4gICRzcGlubmVyLXdpZHRoOiAkc2VsZWN0LWFycm93LXdpZHRoXG4gICR0YWctaWNvbi13aWR0aDogMS44ZW1cbiAgJHRhZy1tYXJnaW46IDJweFxuICAkdGFnLXBhZGRpbmc6IDNweFxuICAkdGFnLWxpbmUtaGVpZ2h0OiAxLjFlbVxuXG4gIC5kaXRvLW11bHRpc2VsZWN0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgICAubXVsdGlzZWxlY3RcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdFxuICAgICAgbWluLWhlaWdodDogaW5oZXJpdFxuICAgICAgY29sb3I6ICRjb2xvci1ibGFja1xuXG4gICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIG92ZXJmbG93OiBhdXRvXG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0XG4gICAgICBwYWRkaW5nOiAwICRzcGlubmVyLXdpZHRoIDAgMFxuICAgICAgLy8gU28gdGFncyBjYW4gZmxvYXQgb24gbXVsdGlwbGUgbGluZXMgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnM6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHRhZy1tYXJnaW5cblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnXG4gICAgICBmbG9hdDogbGVmdFxuICAgICAgbWFyZ2luOiAkdGFnLW1hcmdpbiAwIDAgJHRhZy1tYXJnaW5cbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbVxuICAgICAgcGFkZGluZzogJHRhZy1wYWRkaW5nICR0YWctaWNvbi13aWR0aCAkdGFnLXBhZGRpbmcgMC44ZW1cbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ3Mtd3JhcFxuICAgICAgb3ZlcmZsb3c6IGF1dG9cbiAgICAgIGxpbmUtaGVpZ2h0OiAwXG5cbiAgICAubXVsdGlzZWxlY3RfX3NpbmdsZSxcbiAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyLFxuICAgIC5tdWx0aXNlbGVjdF9faW5wdXRcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdFxuICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIG1pbi1oZWlnaHQ6IDBcbiAgICAgIG1hcmdpbjogMCAwIDFweCAwXG4gICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIHN0eWxlPVwicGFkZGluZzogLi4uO1wiIGluIGFkZGl0aW9uIHRvIHVzaW5nXG4gICAgICAvLyBjbGFzc2VzLCBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcgIWltcG9ydGFudFxuICAgICAgLy8gU28gaW5wdXQgY2FuIGZsb2F0IG5leHQgdG8gdGFncyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2lucyB3aXRoXG4gICAgICAvLyAubXVsdGlzZWxlY3RfX3RhZ3M6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50XG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG5cbiAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyLFxuICAgIC5tdWx0aXNlbGVjdF9faW5wdXQ6OnBsYWNlaG9sZGVyXG4gICAgICBjb2xvcjogJGNvbG9yLXBsYWNlaG9sZGVyXG5cbiAgICAubXVsdGlzZWxlY3QtLWFjdGl2ZVxuICAgICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlclxuICAgICAgICAvLyBEb24ndCB1c2UgYGRpc3BsYXk6IG5vbmVgIHRvIGhpZGUgcGxhY2UtaG9sZGVyLCBhcyB0aGUgbGF5b3V0IHdvdWxkXG4gICAgICAgIC8vIGNvbGxhcHNlLlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG5cbiAgICAubXVsdGlzZWxlY3RfX3NlbGVjdCxcbiAgICAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgIC8vICRib3JkZXItd2lkdGggdG8gcHJldmVudCBtYXNraW5nIGJvcmRlciB3aXRoIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgICAgdG9wOiAkYm9yZGVyLXdpZHRoXG4gICAgICByaWdodDogJGJvcmRlci13aWR0aFxuICAgICAgYm90dG9tOiAkYm9yZGVyLXdpZHRoXG4gICAgICBoZWlnaHQ6IGluaGVyaXRcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG5cbiAgICAubXVsdGlzZWxlY3RfX3NlbGVjdFxuICAgICAgd2lkdGg6IDBcbiAgICAgIG1hcmdpbi1yaWdodDogY2FsYygkc2VsZWN0LWFycm93LXdpZHRoIC8gMilcbiAgICAgICY6OmJlZm9yZVxuICAgICAgICArYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKVxuICAgICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tXG4gICAgICAgIHJpZ2h0OiBjYWxjKC0xICogJHNlbGVjdC1hcnJvdy1zaXplIC8gMilcblxuICAgIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoXG4gICAgICAmOjpiZWZvcmUsXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBDaGFuZ2UgdGhlIHdpZHRoIG9mIHRoZSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAzcHhcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBpbnNldDogMFxuICAgICAgICBtYXJnaW46IGF1dG9cblxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uXG4gICAgICBtaW4taGVpZ2h0OiB1bnNldFxuICAgICAgaGVpZ2h0OiB1bnNldFxuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBJbnN0cnVjdGlvbiB0ZXh0IGZvciBvcHRpb25zXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50XG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0tZGlzYWJsZWRcbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcbiAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnLWljb25cbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbVxuICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXRcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbVxuICAgICAgd2lkdGg6ICR0YWctaWNvbi13aWR0aFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG4gICAgICAgIGZvbnQtc2l6ZTogMS4zZW1cbiAgICAgICY6aG92ZXI6OmFmdGVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dFxuXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLXNlbGVjdGVkXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHRcbiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgICYubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWcsXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ3MsXG4gICAgLm11bHRpc2VsZWN0X19jb250ZW50LXdyYXBwZXJcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcblxuICAgICYuZGl0by1tdWx0aXNlbGVjdC1zaW5nbGVcbiAgICAgIC0taW5wdXQtd2lkdGg6IDEwMCVcbiAgICAmLmRpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGVcbiAgICAgIC0taW5wdXQtd2lkdGg6IGF1dG9cblxuICAgIC5tdWx0aXNlbGVjdC0tYWN0aXZlXG4gICAgICAubXVsdGlzZWxlY3RfX3NpbmdsZSxcbiAgICAgIC5tdWx0aXNlbGVjdF9faW5wdXRcbiAgICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBgc3R5bGU9XCJ3aWR0aFwiYCBpbiBhZGRpdGlvbiB0byB1c2luZyBjbGFzc2VzXG4gICAgICAgIC8vIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICAgIHdpZHRoOiB2YXIoLS1pbnB1dC13aWR0aCkgIWltcG9ydGFudFxuXG4gICAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDBcblxuICAgICAgLm11bHRpc2VsZWN0X19jb250ZW50LXdyYXBwZXJcbiAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGJvcmRlci1jb2xvclxuICAgICAgICBtYXJnaW46IC0xcHggMCAwXG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDBcblxuICAgICAgJi5tdWx0aXNlbGVjdC0tYWJvdmVcbiAgICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDBcbiAgICAgICAgLm11bHRpc2VsZWN0X19jb250ZW50LXdyYXBwZXJcbiAgICAgICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZVxuICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRib3JkZXItY29sb3JcbiAgICAgICAgICBtYXJnaW46IDAgMCAtMXB4XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDBcblxuICAgICYuZGl0by1oYXMtZXJyb3JzXG4gICAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItZXJyb3JcblxuICAgIC5kaXRvLWJ1dHRvbi1jbGVhclxuICAgICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcbmltcG9ydCBWdWVNdWx0aXNlbGVjdCBmcm9tICd2dWUtbXVsdGlzZWxlY3QnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QubWluLmNzcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ211bHRpc2VsZWN0Jywge1xuICBjb21wb25lbnRzOiB7IFZ1ZU11bHRpc2VsZWN0IH0sXG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoZWRPcHRpb25zOiBudWxsLFxuICAgICAgcG9wdWxhdGU6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKVxuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgLy8gSWYgYW4gb3B0aW9uIGNhbm5vdCBiZSBmb3VuZCwgd2UgbWF5IGJlIGluIHRhZ2dhYmxlIG1vZGUgYW5kXG4gICAgICAgICAgICAgIC8vIGNhbiBhZGQgaXQuXG4gICAgICAgICAgICAgIHZhbHVlID0+IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHx8IHRoaXMuYWRkVGFnT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBvcHRpb25zIHRoYXQgd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGRpc3BsYXkgYW4gZXJyb3IgaW5zdGVhZFxuICAgICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRPcHRpb25cbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBvcHRpb25zIG9iamVjdCwgc2luY2UgdnVlLW11bHRpc2VsZWN0IGNhbid0IG1hcCB0aGF0XG4gICAgICAgIC8vIGl0c2VsZiB1bmZvcnR1bmF0ZWx5LiBgdHJhY2stYnlgIGlzIHVzZWQgZm9yIDprZXkgbWFwcGluZyBpdCBzZWVtcy5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKG9wdGlvbiB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hlZE9wdGlvbnMgfHwgdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHNlYXJjaGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2hhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB0YWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdGF5T3BlbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0YXlPcGVuJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcigpIHtcbiAgICAgIGNvbnN0IHsgcGxhY2Vob2xkZXIsIHNlYXJjaGFibGUsIHRhZ2dhYmxlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyIHx8IChcbiAgICAgICAgc2VhcmNoYWJsZSAmJiB0YWdnYWJsZSA/ICdTZWFyY2ggb3IgYWRkIGEgdGFnJ1xuICAgICAgICA6IHNlYXJjaGFibGUgPyAnU2VsZWN0IG9yIHNlYXJjaCBlbnRyeSdcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcbiAgICAgIC8vIHZ1ZS1tdWx0aXNlbGVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGUuIFdlIG5lZWQgdG9cbiAgICAgIC8vIGhhbmRsZSBpdCBoZXJlLlxuICAgICAgdGhpcy5mb2N1cygpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICAvLyBvdmVycmlkZSBgVHlwZU1peGluLmdldExpc3RlbmVycygpYCB0byByZS1yb3V0ZSAnaW5wdXQnIHRvIGBvbkNoYW5nZSgpYFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgYmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIGlucHV0OiB0aGlzLm9uQ2hhbmdlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFkZFRhZ09wdGlvbih0YWcpIHtcbiAgICAgIGlmICh0aGlzLnRhZ2dhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbkxhYmVsICYmIG9wdGlvblZhbHVlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBbb3B0aW9uTGFiZWxdOiB0YWcsXG4gICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgYSBzaW1wbGUgc2NoZW1hIG9wdGlvbiB0byBjb252ZXJ0IHRoZSB0YWcgdmFsdWUgdG9cbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBlbHNlLCBlLmcuIGB0b1RhZzogdGFnID0+IHVuZGVyc2NvcmUodGFnKWBcbiAgICAgICAgICAgIFtvcHRpb25WYWx1ZV06IHRhZ1xuICAgICAgICAgIH1cbiAgICAgICAgICA6IHRhZ1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgb25BZGRUYWcodGFnKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmFkZFRhZ09wdGlvbih0YWcpXG4gICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uU2VhcmNoQ2hhbmdlKHF1ZXJ5KSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hGaWx0ZXIpIHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgLy8gU2V0IGBzZWFyY2hlZE9wdGlvbnNgIHRvIGFuIGVtcHR5IGFycmF5LCBiZWZvcmUgaXQgd2lsbCBiZVxuICAgICAgICAgIC8vIHBvcHVsYXRlZCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBhY3R1YWwgcmVzdWx0cy5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IFtdXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBhd2FpdCB0aGlzLnJlc29sdmVEYXRhKFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5zZWFyY2hGaWx0ZXIobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgcXVlcnkgfSkpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENsZWFyIGBzZWFyY2hlZE9wdGlvbnNgIHdoZW4gdGhlIHF1ZXJ5IGlzIGNsZWFyZWQuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICE9PSBudWxsID8gdGhpcy52YWx1ZSA6ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlICE9PSAnJ1xuICAgICAgICAgID8gdGhpcy5pc0ludGVnZXIgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaXNJbnRlZ2VyKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHN0ZXBWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0ZXAgPT0gbnVsbCAmJiAhdGhpcy5pc0ludGVnZXIgPyAnYW55JyA6IHRoaXMuc3RlcFxuICAgIH0sXG5cbiAgICBkZWNpbWFsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlY2ltYWxzJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBzdGVwOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RlcCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChzdGVwKSB7XG4gICAgICAgIC8vIEZvciBpbnRlZ2Vycywgcm91bmQgdGhlIHN0ZXBzIHRvIHRoZSBuZXh0IGJpZ2dlciBpbnRlZ2VyIHZhbHVlOlxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgc3RlcCAhPSBudWxsID8gTWF0aC5jZWlsKHN0ZXApIDogc3RlcFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWluOiBnZXRTY2hlbWFBY2Nlc3NvcignbWluJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1pbikge1xuICAgICAgICBtaW4gPSBtaW4gPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMF1cbiAgICAgICAgICA6IG1pblxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWluICE9IG51bGwgPyBNYXRoLmZsb29yKG1pbikgOiBtaW5cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heDogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtYXgpIHtcbiAgICAgICAgbWF4ID0gbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzFdXG4gICAgICAgICAgOiBtYXhcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1heCAhPSBudWxsID8gTWF0aC5jZWlsKG1heCkgOiBtYXhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHJhbmdlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmFuZ2UnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gYHRoaXMubWluYCwgYHRoaXMubWF4YCBhbHJlYWR5IHN1cHBvcnQgYHNjaGVtYS5yYW5nZWAsXG4gICAgICAgIC8vIHNvIHJlZGlyZWN0IHRoZXJlLlxuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzXG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiBtYXggIT0gbnVsbCA/IFttaW4sIG1heF0gOiB1bmRlZmluZWRcbiAgICAgIH0sXG5cbiAgICAgIHNldChyYW5nZSkge1xuICAgICAgICAvLyBQcm92aWRlIGEgc2V0dGVyIHRoYXQgZGVsZWdhdGVzIHRvIGBbdGhpcy5taW4sIHRoaXMubWF4XWAsXG4gICAgICAgIC8vIHNpbmNlIHRob3NlIGFscmVhZHkgaGFuZGxlIGBzY2hlbWEucmFuZ2VgLlxuICAgICAgICBpZiAoaXNBcnJheShyYW5nZSkpIHtcbiAgICAgICAgICBbdGhpcy5taW4sIHRoaXMubWF4XSA9IHJhbmdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0ge31cbiAgICAgIGNvbnN0IHsgcmFuZ2UsIG1pbiwgbWF4LCBkZWNpbWFscywgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJhbmdlID0gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1pbiA9IG1pblxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1heCA9IG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbHMgIT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICB9IGVsc2UgaWYgKHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoYCR7c3RlcH1gLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aFxuICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW50ZWdlcikge1xuICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfVxuICB9XG59XG4iLCJcbmlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDptaW49XCJtaW5cIlxuICA6bWF4PVwibWF4XCJcbiAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBPbmx5IHNob3cgc3BpbiBidXR0b25zIGlmIHRoZSBudW1iZXIgY29tcG9uZW50IGRlZmluZXMgYSBzdGVwIHNpemUuXG4gIGlucHV0W3R5cGU9XCJudW1iZXJcIl06bm90KFtzdGVwXSlcbiAgICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICAgICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b25cbiAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZVxuICAgICAgbWFyZ2luOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdudW1iZXInLCAnaW50ZWdlcidcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNJbnRlZ2VyKCkge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2ludGVnZXInXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLW9iamVjdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4pXG4gIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgKVxuICAgIC8vIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgKVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlXG4gICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgKVxuICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6ZGVsZXRhYmxlPVwib2JqZWN0RGF0YSAmJiBkZWxldGFibGVcIlxuICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmVkaXRQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICA6cGF0aD1cInBhdGhcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tb2JqZWN0KFxuICAgIHYtaWY9XCJpc1JlYWR5XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuICApXG4gICAgLmRpdG8tb2JqZWN0LWNvbnRlbnQoXG4gICAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gICAgKVxuICAgICAgLy8gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgKVxuICAgICAgY29tcG9uZW50KFxuICAgICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICApXG4gICAgICBzcGFuKFxuICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgICApXG4gICAgICBzcGFuKFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgICAgKVxuICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwib2JqZWN0RGF0YSAmJiBkZWxldGFibGVcIlxuICAgICAgOmVkaXRhYmxlPVwib2JqZWN0RGF0YSAmJiBlZGl0YWJsZVwiXG4gICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgOmVkaXRQYXRoPVwicGF0aFwiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOnBhdGg9XCJwYXRoXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLW9iamVjdFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIG1hcmdpbjogMFxuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmdcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLmRpdG8tb2JqZWN0LWNvbnRlbnRcbiAgICAgIGZsZXg6IDAgMSAxMDAlXG4gICAgPiAuZGl0by1idXR0b25zXG4gICAgICBmbGV4OiAxIDAgMCVcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdvYmplY3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgZGF0YTogdGhpcy5vYmplY3REYXRhIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3BhbmVsJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdFBhZGRpbmc6IHRydWUsXG5cbiAgZ2V0UGFuZWxTY2hlbWEoc2NoZW1hKSB7XG4gICAgLy8gRm9yIGEgVHlwZVBhbmVsLCB0aGUgY29tcG9uZW50IHNjaGVtYSBpcyBhbHNvIHRoZSBwYW5lbCBzY2hlbWEsIGJ1dFxuICAgIC8vIHJlbW92ZSB0aGUgYWRkZWQgbmFtZSwgc28gaXQgZG9lc24ndCBnZXQgYXBwZW5kZWQgdHdpY2UgdG8gZGF0YS1wYXRoLlxuICAgIGNvbnN0IHsgbmFtZSwgLi4ucGFuZWwgfSA9IHNjaGVtYVxuICAgIHJldHVybiBwYW5lbFxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwcm9ncmVzcycsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wdXRlZDoge1xuICAgIHByb2dyZXNzVmFsdWUoKSB7XG4gICAgICBsZXQgeyB2YWx1ZSwgcmFuZ2UsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICB2YWx1ZSAtPSByYW5nZVswXVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3RlcCkgKiBzdGVwXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gJydcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBwcm9ncmVzc01heCgpIHtcbiAgICAgIGNvbnN0IHsgcmFuZ2UgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICByZXR1cm4gcmFuZ2VbMV0gLSByYW5nZVswXVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG51bC5kaXRvLXJhZGlvLWJ1dHRvbnMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB1bC5kaXRvLXJhZGlvLWJ1dHRvbnMoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbiAgKVxuICAgIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICAgIGxhYmVsXG4gICAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgICApXG4gICAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXJhZGlvLWJ1dHRvbnNcbiAgICBsYWJlbFxuICAgICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuICAgIC5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3JhZGlvJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXNlY3Rpb24oXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCcgOiAhIXNjaGVtYS5sYWJlbCB9XCJcbilcbiAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJpdGVtXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNlY3Rpb24oXG4gICAgOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLWxhYmVsbGVkJyA6ICEhc2NoZW1hLmxhYmVsIH1cIlxuICApXG4gICAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNlY3Rpb25cbiAgICAmLmRpdG8tc2VjdGlvbi1sYWJlbGxlZFxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZ1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRJdGVtRm9ybVNjaGVtYSwgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWN0aW9uJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gIXNjaGVtYS5uZXN0ZWQgJiYgISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcbiAgZGVmYXVsdE5lc3RlZDogZmFsc2UsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0RmxleEdyb3c6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy52YWx1ZSA6IHRoaXMuZGF0YVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWFcbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gICAgLy8gUHJvY2VzcyBzZWN0aW9uIGNvbXBvbmVudHMgc28gdGhlaXIgZm9ybXMgZ2V0IHJlc29sdmVkIHRvby5cbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbClcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLy0gTmVzdGluZyBpcyBuZWVkZWQgdG8gbWFrZSBhbiBhcnJvdyBhcHBlYXIgb3ZlciB0aGUgc2VsZWN0IGl0ZW06XG4uZGl0by1zZWxlY3RcbiAgc2VsZWN0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQGZvY3VzPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInBvcHVsYXRlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gICAgICApXG4gICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgIHYtaWY9XCJncm91cEJ5XCJcbiAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgIClcbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0KSB9fVxuICAgICAgICBvcHRpb24oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1lbHNlLWlmPVwic2VsZWN0ZWRPcHRpb25cIlxuICAgIClcbiAgICAgIG9wdGlvbihcbiAgICAgICAgOnZhbHVlPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLy0gTmVzdGluZyBpcyBuZWVkZWQgdG8gbWFrZSBhbiBhcnJvdyBhcHBlYXIgb3ZlciB0aGUgc2VsZWN0IGl0ZW06XG4gIC5kaXRvLXNlbGVjdFxuICAgIHNlbGVjdChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgICAgQGZvY3VzPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cInBvcHVsYXRlXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBvcHRncm91cChcbiAgICAgICAgICAgIHYtaWY9XCJncm91cEJ5XCJcbiAgICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0KSB9fVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwic2VsZWN0ZWRPcHRpb25cIlxuICAgICAgKVxuICAgICAgICBvcHRpb24oXG4gICAgICAgICAgOnZhbHVlPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24oc2VsZWN0ZWRPcHRpb24pIH19XG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLy8gVE9ETzogTW92ZSB0byBkaXRvLXVpXG4gICRzZWxlY3QtYXJyb3ctcmlnaHQ6IGNhbGMoKCRzZWxlY3QtYXJyb3ctd2lkdGggLSAkc2VsZWN0LWFycm93LXNpemUpIC8gMilcblxuICAuZGl0by1zZWxlY3RcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIHNlbGVjdFxuICAgICAgcGFkZGluZy1yaWdodDogJHNlbGVjdC1hcnJvdy13aWR0aFxuXG4gICAgLy8gSGFuZGxlIC5kaXRvLXdpZHRoLWZpbGwgc2VwYXJhdGVseSBkdWUgdG8gcmVxdWlyZWQgbmVzdGluZyBvZiBzZWxlY3Q6XG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHNlbGVjdFxuICAgICAgICB3aWR0aDogMTAwJVxuXG4gICAgJjo6YWZ0ZXJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgK2Fycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSlcbiAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b21cbiAgICAgIHJpZ2h0OiBjYWxjKCN7JHNlbGVjdC1hcnJvdy1yaWdodH0gKyAjeyRib3JkZXItd2lkdGh9KVxuXG4gICAgJi5kaXRvLWRpc2FibGVkOjphZnRlclxuICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlbGVjdCcsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBEaXNhYmxlIGxhenktcG9wdWxhdGlvbiBmb3Igbm93LlxuICAgICAgLy8gVE9ETzogU2V0IHRvIGBmYWxzZWAgT25jZSBsaW5ldG8gZTJlIHRlc3RzIGFkZHJlc3MgdGhlaXIgaXNzdWVzLlxuICAgICAgcG9wdWxhdGU6IHRydWVcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc2xpZGVyXG4gIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICB2LWlmPVwiaW5wdXRcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNsaWRlclxuICAgIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOm1pbj1cIm1pblwiXG4gICAgICA6bWF4PVwibWF4XCJcbiAgICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgICApXG4gICAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgICB2LWlmPVwiaW5wdXRcIlxuICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOm1pbj1cIm1pblwiXG4gICAgICA6bWF4PVwibWF4XCJcbiAgICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2xpZGVyXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcmFuZ2VcbiAgICAgIGZsZXg6IGF1dG9cbiAgICAgIGhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpXG4gICAgLmRpdG8tbnVtYmVyXG4gICAgICBib3JkZXI6IDBcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWknXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzbGlkZXInLCB7XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5zd2l0Y2gtYnV0dG9uLmRpdG8tc3dpdGNoKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6c3luYz1cInRydWVcIlxuICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgc3dpdGNoLWJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnN5bmM9XCJ0cnVlXCJcbiAgICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc3dpdGNoXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3N3aXRjaCcsIHtcbiAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgY29tcG9uZW50czoge1xuICAgIFN3aXRjaEJ1dHRvblxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGFiZWxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxhYmVsc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5pbnB1dC1maWVsZC5kaXRvLXRleHQoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp0eXBlPVwiaW5wdXRUeXBlXCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpbnB1dC1maWVsZC5kaXRvLXRleHQoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp0eXBlPVwiaW5wdXRUeXBlXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWknXG5cbmNvbnN0IG1hc2tlZFBhc3N3b3JkID0gJyoqKioqKioqKioqKioqKionXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndGV4dCcsICdlbWFpbCcsICd1cmwnLCAnaG9zdG5hbWUnLCAnZG9tYWluJywgJ3RlbCcsICdwYXNzd29yZCcsICdjcmVkaXRjYXJkJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiBzY2hlbWEudHlwZSA9PT0gJ3Bhc3N3b3JkJyxcblxuICBjb21wdXRlZDoge1xuICAgIGlucHV0VHlwZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNyZWRpdGNhcmQ6ICd0ZXh0JyxcbiAgICAgICAgaG9zdG5hbWU6ICd0ZXh0JyxcbiAgICAgICAgZG9tYWluOiAndGV4dCdcbiAgICAgIH1bdGhpcy50eXBlXSB8fCB0aGlzLnR5cGVcbiAgICB9LFxuXG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJyAmJlxuICAgICAgICAgIHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICF0aGlzLmZvY3VzZWRcbiAgICAgICAgKVxuICAgICAgICAgID8gbWFza2VkUGFzc3dvcmRcbiAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAgZW1haWw6ICdlbWFpbCcsXG4gICAgICAgIHVybDogJ3VybCcsXG4gICAgICAgIGhvc3RuYW1lOiAnaG9zdG5hbWUnLFxuICAgICAgICBkb21haW46ICdkb21haW4nLFxuICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkJyxcbiAgICAgICAgY3JlZGl0Y2FyZDogJ2NyZWRpdGNhcmQnXG4gICAgICB9W3RoaXMudHlwZV1cbiAgICAgIHJldHVybiBydWxlID8geyBbcnVsZV06IHRydWUgfSA6IHt9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6cm93cz1cImxpbmVzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOnJvd3M9XCJsaW5lc1wiXG4gICAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10ZXh0YXJlYVxuICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcmVzaXplOiBub25lXG4gICAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjeyAyICogJGlucHV0LXBhZGRpbmctdmVyIH0pXG4gICAgJi5kaXRvLXJlc2l6YWJsZVxuICAgICAgcmVzaXplOiB2ZXJ0aWNhbFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdHJlZS1saXN0XG4gIGRpdG8tc2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgKVxuICAgICAgLy8gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1saXN0XG4gICAgZGl0by1zY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAuZGl0by10cmVlLXBhbmVsXG4gICAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgICApXG4gICAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgICByb3V0ZXItdmlld1xuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXRyZWUtbGlzdFxuICAgIEBleHRlbmQgJWZpZWxkXG4gICAgLmRpdG8tdHJlZS1wYW5lbFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgICA+IC5kaXRvLXRyZWUtaXRlbVxuICAgICAgICBmbGV4OiAxIDEgMjUlXG4gICAgICA+IC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXJcbiAgICAgICAgZmxleDogMCAxIDc1JVxuICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmRcbiAgICAgICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGVcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMVxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxXG4gICAgICAgIG1hcmdpbjogKC0kaW5wdXQtcGFkZGluZy12ZXIpICgtJGlucHV0LXBhZGRpbmctaG9yKVxuICAgICAgICBtYXJnaW4tbGVmdDogJGlucHV0LXBhZGRpbmctaG9yXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyBoYXNGb3JtU2NoZW1hLCBnZXRGb3JtU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICd0cmVlLWxpc3QnLCAndHJlZS1vYmplY3QnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHsgY29udGFpbmVyOiB0aGlzIH1cbiAgfSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ3RyZWUtb2JqZWN0JyA/ICdvYmplY3QnIDogJ2xpc3QnXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYXRoKCkge1xuICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLnBhdGhgOlxuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8ucGF0aFxuICAgIH0sXG5cbiAgICBlZGl0UGF0aCgpIHtcbiAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5lZGl0UGF0aGA6XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aC5zbGljZSh0aGlzLnBhdGg/Lmxlbmd0aClcbiAgICB9LFxuXG4gICAgdHJlZURhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgPyB7IFt0aGlzLm5hbWVdOiB0aGlzLnZhbHVlIH1cbiAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIHRyZWVEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFJlbW92ZSBgbmFtZWAgZnJvbSBgZGF0YVBhdGhgLCBhcyBpdCBpcyBhZGRlZWRcbiAgICAgIC8vIHRvIGB0cmVlRGF0YWAgYW5kIGB0cmVlU2NoZW1hYFxuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8gdGhpcy5kYXRhUGF0aC5zbGljZSgwLCB0aGlzLmRhdGFQYXRoLmxlbmd0aCAtIHRoaXMubmFtZS5sZW5ndGgpXG4gICAgICAgIDogdGhpcy5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB0cmVlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8ge1xuICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAuLi50aGlzLnNjaGVtYVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIGhhc0VkaXRhYmxlRm9ybXMoKSB7XG4gICAgICBjb25zdCBoYXNFZGl0YWJsZUZvcm1zID0gc2NoZW1hID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgKFxuICAgICAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZWRpdGFibGUnLCB7XG4gICAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgICBzY2hlbWEuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgIGhhc0VkaXRhYmxlRm9ybXMoc2NoZW1hLmNoaWxkcmVuKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0VkaXRhYmxlRm9ybXModGhpcy5zY2hlbWEpXG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgbmVzdGVkID0gdHJ1ZSwgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHJldHVybiBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgICBuZXN0ZWQsIGZsYXR0ZW4sXG4gICAgICAvLyBQYXNzIHByb2Nlc3MoKSB0byBhZGQgbW9yZSByb3V0ZXMgdG8gY2hpbGRSb3V0ZXM6XG4gICAgICAoY2hpbGRSb3V0ZXMsIGxldmVsKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAvLyBBZGQgYHR5cGVgIHRvIHRoZSBuZXN0ZWQgdHJlZSBsaXN0LlxuICAgICAgICAgIGNoaWxkcmVuLnR5cGUgPSAndHJlZS1saXN0J1xuICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgICBhcGksIGNoaWxkcmVuLCBjaGlsZHJlbi5uYW1lLCBjaGlsZFJvdXRlcywgbGV2ZWwsXG4gICAgICAgICAgICBuZXN0ZWQsIHRydWUsIC8vIFBhc3MgYHRydWVgIGZvciBgZmxhdHRlbmAgaW4gdHJlZSBsaXN0cy5cbiAgICAgICAgICAgIHByb2Nlc3NcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIH0sXG5cbiAgZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nKHNjaGVtYSwgY29udGV4dCkge1xuICAgIC8vIENvbnZlcnQgbmVzdGVkIGNoaWxkcmVuIHNjaGVtYSB0byBzdGFuZC1hbG9uZSBzY2hlbWEgY29tcG9uZW50LFxuICAgIC8vIHByZXNlbnQgaW4gZWFjaCBvZiB0aGUgZm9ybXMsIGFzIHJlcXVpcmVkIGJ5IGBwcm9jZXNzU2NoZW1hRGF0YSgpYFxuICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIGNoaWxkcmVuXG4gICAgICA/IGZvcm0gPT4gKHtcbiAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIC4uLmZvcm0uY29tcG9uZW50cyxcbiAgICAgICAgICBbY2hpbGRyZW4ubmFtZV06IGNoaWxkcmVuXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICA6IG51bGxcbiAgICApXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBmaWxlc2l6ZSBmcm9tICdmaWxlc2l6ZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKHNpemUpIHtcbiAgcmV0dXJuIGZpbGVzaXplKHNpemUsIHsgYmFzZTogMTAgfSlcbn1cbiIsIlxuLmRpdG8tdXBsb2FkXG4gIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gRGl0b1RhYmxlSGVhZFxuICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgdHJcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIE5hbWVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICB0aFxuICAgICAgICAgIHNwYW5cbiAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICA6bGlzdD1cImZpbGVzXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgKVxuICAgICAgICB0ZCh2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiKVxuICAgICAgICB0ZCB7eyBmaWxlLnNpemUgfCBmb3JtYXRGaWxlU2l6ZSB9fVxuICAgICAgICB0ZFxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZFwiKVxuICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCIpXG4gICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIilcbiAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIilcbiAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgIHwgU3RvcmVkXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnNcbiAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICApXG4gICAgdGZvb3RcbiAgICAgIHRyXG4gICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgKSBDYW5jZWwgQWxsXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJpc1VwbG9hZFJlYWR5XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSB0cnVlXCJcbiAgICAgICAgICAgICAgKSBVcGxvYWQgQWxsXG4gICAgICAgICAgICAgIHZ1ZS11cGxvYWQuZGl0by1idXR0b24uZGl0by1idXR0b24tYWRkLXVwbG9hZChcbiAgICAgICAgICAgICAgICA6aW5wdXQtaWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIDpwb3N0LWFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgICAgICAgICAgICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgICAgICAgICAgICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgICAgICAgICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgICAgICAgICAgICAgIEBpbnB1dC1maWx0ZXI9XCJpbnB1dEZpbHRlclwiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbGU9XCJpbnB1dEZpbGVcIlxuICAgICAgICAgICAgICAgIHJlZj1cInVwbG9hZFwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJVcGxvYWQgRmlsZXNcIlxuICAgICAgICAgICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by11cGxvYWRcbiAgICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gRGl0b1RhYmxlSGVhZFxuICAgICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICAgIHRyXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBTdGF0dXNcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhblxuICAgICAgdnVlLWRyYWdnYWJsZShcbiAgICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgICAgOmxpc3Q9XCJmaWxlc1wiXG4gICAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgICApXG4gICAgICAgIHRyKFxuICAgICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgICAgOmtleT1cImZpbGUua2V5XCJcbiAgICAgICAgKVxuICAgICAgICAgIHRkKHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCIpXG4gICAgICAgICAgdGQge3sgZmlsZS5zaXplIHwgZm9ybWF0RmlsZVNpemUgfX1cbiAgICAgICAgICB0ZFxuICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkXCIpXG4gICAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiKVxuICAgICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkaW5nLi4uXG4gICAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIilcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgICAgIHwgU3RvcmVkXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgIHRmb290XG4gICAgICAgIHRyXG4gICAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJpc1VwbG9hZFJlYWR5XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgKSBVcGxvYWQgQWxsXG4gICAgICAgICAgICAgICAgdnVlLXVwbG9hZC5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkKFxuICAgICAgICAgICAgICAgICAgOmlucHV0LWlkPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICA6cG9zdC1hY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgICBAaW5wdXQtZmlsdGVyPVwiaW5wdXRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgQGlucHV0LWZpbGU9XCJpbnB1dEZpbGVcIlxuICAgICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiVXBsb2FkIEZpbGVzXCJcbiAgICAgICAgICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdXBsb2FkXG4gICAgLmRpdG8tdGFibGVcbiAgICAgIHRyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGVcbiAgICAuZGl0by1idXR0b24tYWRkLXVwbG9hZFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAqXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyXG4gICAgICAuZGl0by1wcm9ncmVzc1xuICAgICAgICBmbGV4OiBhdXRvXG4gICAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgcGFyc2VGaWxlU2l6ZSBmcm9tICdmaWxlc2l6ZS1wYXJzZXInXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZm9ybWF0RmlsZVNpemUgfSBmcm9tICcuLi91dGlscy91bml0cy5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZVVwbG9hZCwgVnVlRHJhZ2dhYmxlIH0sXG4gIGZpbHRlcnM6IHsgZm9ybWF0RmlsZVNpemUgfSxcbiAgbWl4aW5zOiBbT3JkZXJlZE1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHVwbG9hZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLnVwbG9hZFxuICAgIH0sXG5cbiAgICBmaWxlcygpIHtcbiAgICAgIHJldHVybiBhc0ZpbGVzKHRoaXMudmFsdWUpXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBObyBjYWxsYmFjayBhcyBpdCdzIHVzZWQgaW4gYHByb2Nlc3NWYWx1ZSgpYFxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBleHRlbnNpb25zOiBnZXRTY2hlbWFBY2Nlc3NvcignZXh0ZW5zaW9ucycsIHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBSZWdFeHBdXG4gICAgfSksXG5cbiAgICBhY2NlcHQ6IGdldFNjaGVtYUFjY2Vzc29yKCdhY2NlcHQnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldChhY2NlcHQpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkoYWNjZXB0KSA/IGFjY2VwdC5qb2luKCcsJykgOiBhY2NlcHRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhTaXplJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGdldChtYXhTaXplKSB7XG4gICAgICAgIHJldHVybiBtYXhTaXplID8gcGFyc2VGaWxlU2l6ZShtYXhTaXplKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gZHJhZ2dhYmxlICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBpc1VwbG9hZFJlYWR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiZcbiAgICAgICAgISh0aGlzLnVwbG9hZC5hY3RpdmUgfHwgdGhpcy51cGxvYWQudXBsb2FkZWQpXG4gICAgfSxcblxuICAgIGlzVXBsb2FkQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgZmlsZS5wcm9ncmVzcywgMCkgL1xuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoXG4gICAgICApXG4gICAgfSxcblxuICAgIHVwbG9hZFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybCh7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyByZW5kZXIgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgdmFsdWU6IGZpbGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmZpbGVzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwoZmlsZS5uYW1lKVxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKGZpbGUgJiYgd2luZG93LmNvbmZpcm0oXG4gICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZS51cGxvYWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5yZW1vdmUoZmlsZS51cGxvYWQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogYCR7bmFtZX0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZpbGVJbmRleChmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlXG4gICAgICAgID8gdGhpcy52YWx1ZS5maW5kSW5kZXgoaXQgPT4gaXQuaWQgPT09IGZpbGUuaWQpXG4gICAgICAgIDogLTFcbiAgICB9LFxuXG4gICAgYWRkRmlsZShmaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbZmlsZV1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwbGFjZUZpbGUoZmlsZSwgbmV3RmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZpbGVJbmRleChmaWxlKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGlmIChuZXdGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLiRzZXQodGhpcy52YWx1ZSwgaW5kZXgsIG5ld0ZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIGlucHV0RmlsZShuZXdGaWxlLCBvbGRGaWxlKSB7XG4gICAgICBpZiAobmV3RmlsZSAmJiAhb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IGlkLCBuYW1lLCBzaXplIH0gPSBuZXdGaWxlXG4gICAgICAgIHRoaXMuYWRkRmlsZSh7IGlkLCBuYW1lLCBzaXplLCB1cGxvYWQ6IG5ld0ZpbGUgfSlcbiAgICAgIH1cbiAgICAgIGlmIChuZXdGaWxlICYmIG9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gbmV3RmlsZVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlLnJlc3BvbnNlWzBdXG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUudXBsb2FkID0gbmV3RmlsZVxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXBsb2FkIGZpbGUgb2JqZWN0IHdpdGggdGhlIGZpbGUgb2JqZWN0IHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSB1cGxvYWQgcmVzcG9uc2UuXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VGaWxlKG5ld0ZpbGUsIGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSB7XG4gICAgICAgICAgICBhYm9ydDogJ1VwbG9hZCBhYm9ydGVkJyxcbiAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBgVW5zdXBwb3J0ZWQgZmlsZS10eXBlOiAke25ld0ZpbGUubmFtZX1gLFxuICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmsgZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzaXplOiBgRmlsZSBpcyB0b28gbGFyZ2U6ICR7Zm9ybWF0RmlsZVNpemUobmV3RmlsZS5zaXplKX1gLFxuICAgICAgICAgICAgdGltZW91dDogJ1RpbWVvdXQgb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCdcblxuICAgICAgICAgIH1bZXJyb3JdIHx8IGBVbmtub3duIEZpbGUgVXBsb2FkIEVycm9yOiAnJHtlcnJvcn0nYFxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0ZpbGUgVXBsb2FkIEVycm9yJyxcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGlucHV0RmlsdGVyKG5ld0ZpbGUvKiwgb2xkRmlsZSwgcHJldmVudCAqLykge1xuICAgICAgY29uc3QgeGhyID0gbmV3RmlsZT8ueGhyXG4gICAgICBpZiAodGhpcy5hcGkuY29ycz8uY3JlZGVudGlhbHMgJiYgeGhyICYmICF4aHIud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoXG4gICAgICAgICh7IHVwbG9hZCwgLi4uZmlsZSB9KSA9PiAhdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlKVxuICAgIHJldHVybiBzY2hlbWEubXVsdGlwbGUgPyBmaWxlcyA6IGZpbGVzWzBdIHx8IG51bGxcbiAgfVxufSlcblxuZnVuY3Rpb24gYXNGaWxlcyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBhc0FycmF5KHZhbHVlKSA6IFtdXG59XG5cbjwvc2NyaXB0PlxuIiwiZXhwb3J0IGRlZmF1bHQgW1xuICAnY3JlYXRlJywgJ2NyZWF0ZWQnLFxuICAnc2F2ZScsICdzYXZlZCcsXG4gICdzdWJtaXQnLCAnc3VibWl0dGVkJyxcbiAgJ2RlbGV0ZScsICdkZWxldGVkJyxcbiAgJ2VkaXQnLCAnZWRpdGVkJyxcbiAgJ2Nsb3NlJywgJ2Nsb3NlZCcsXG4gICdjYW5jZWwnLCAnY2FuY2VsbGVkJyxcbiAgJ2RyYWcnLCAnZHJhZ2dlZCdcbl0ucmVkdWNlKCh2ZXJicywgdmVyYikgPT4ge1xuICB2ZXJic1t2ZXJiXSA9IHZlcmJcbiAgcmV0dXJuIHZlcmJzXG59LCB7fSlcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFZ1ZU1vZGFsIGZyb20gJ3Z1ZS1qcy1tb2RhbCdcbmltcG9ydCBWdWVSb3V0ZXIgZnJvbSAndnVlLXJvdXRlcidcbmltcG9ydCBWdWVOb3RpZmljYXRpb25zIGZyb20gJ3Z1ZS1ub3RpZmljYXRpb24nXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbXBvcnQge1xuICBpc1N0cmluZywgaXNBYnNvbHV0ZVVybCwgbWVyZ2UsIGh5cGhlbmF0ZSwgY2FtZWxpemUsIGRlZmF1bHRGb3JtYXRzXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyBjb21wb25lbnRzIGZyb20gJy4vY29tcG9uZW50cy9pbmRleC5qcydcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vdHlwZXMvaW5kZXguanMnXG5pbXBvcnQgRGl0b1Jvb3QgZnJvbSAnLi9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSdcbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB2ZXJicyBmcm9tICcuL3ZlcmJzLmpzJ1xuXG5WdWUuY29uZmlnLnByb2R1Y3Rpb25UaXAgPSBmYWxzZVxuXG4vLyBBbGwgZ2xvYmFsIHBsdWdpbnMgdGhhdCBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgb24gYFZ1ZWA6XG5WdWUudXNlKFZ1ZVJvdXRlcilcblZ1ZS51c2UoVnVlTW9kYWwsIHsgZHluYW1pYzogdHJ1ZSB9KVxuVnVlLnVzZShWdWVOb3RpZmljYXRpb25zKVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQWRtaW4ge1xuICBjb25zdHJ1Y3RvcihlbCwge1xuICAgIC8vIGBkaXRvYCBjb250YWlucyB0aGUgYmFzZSBhbmQgYXBpIHNldHRpbmdzIHBhc3NlZCBmcm9tIGBBZG1pbkNvbnRyb2xsZXJgXG4gICAgZGl0byA9IHt9LFxuICAgIGFwaSxcbiAgICB2aWV3cyA9IHt9LFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5lbCA9IGVsXG4gICAgLy8gTWVyZ2UgaW4gYGFwaWAgc2V0dGluZ3MgYXMgcGFzc2VkIGZyb20gYGNvbmZpZy5hZG1pbmAgYW5kIHRocm91Z2ggdGhlXG4gICAgLy8gYEFkbWluQ29udHJvbGxlcmAgd2l0aCBgYXBpYCB2YWx1ZXMgZnJvbSBmcm9tICdhZG1pbi9pbmRleC5qcydcbiAgICAvLyBOT1RFOiBgQWRtaW5Db250cm9sbGVyYCBwcm92aWRlcyBgZGl0by5hcGkuYmFzZWBcbiAgICB0aGlzLmFwaSA9IGFwaSA9IG1lcmdlKHsgYmFzZTogJy8nIH0sIGRpdG8uYXBpLCBhcGkpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuXG4gICAgLy8gU2V0dXAgZGVmYXVsdCBhcGkgc2V0dHRpbmdzOlxuICAgIGFwaS5sb2NhbGUgfHw9ICdlbi1VUydcblxuICAgIGFwaS5mb3JtYXRzID0gbWVyZ2Uoe30sIGRlZmF1bHRGb3JtYXRzLCBhcGkuZm9ybWF0cylcblxuICAgIGFwaS5yZXF1ZXN0IHx8PSBvcHRpb25zID0+IHRoaXMucmVxdWVzdChvcHRpb25zKVxuXG4gICAgLy8gU2V0dGluZyBgYXBpLm5vcm1hbGl6ZVBhdGhzID0gdHJ1ZSAocGx1cmFsKSBzZXRzIGJvdGg6XG4gICAgLy8gYGFwaS5ub3JtYWxpemVQYXRoID0gaHlwaGVuYXRlYCBhbmQgYGFwaS5kZW5vcm1hbGl6ZVBhdGggPSBjYW1lbGl6ZWBcbiAgICBhcGkubm9ybWFsaXplUGF0aCA9IChcbiAgICAgIGFwaS5ub3JtYWxpemVQYXRoIHx8XG4gICAgICBhcGkubm9ybWFsaXplUGF0aHNcbiAgICAgICAgPyBoeXBoZW5hdGVcbiAgICAgICAgOiB2YWwgPT4gdmFsXG4gICAgKVxuICAgIGFwaS5kZW5vcm1hbGl6ZVBhdGggPSAoXG4gICAgICBhcGkuZGVub3JtYWxpemVQYXRoIHx8XG4gICAgICBhcGkubm9ybWFsaXplUGF0aHNcbiAgICAgICAgPyBjYW1lbGl6ZVxuICAgICAgICA6IHZhbCA9PiB2YWxcbiAgICApXG5cbiAgICAvLyBBbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbGwgYXV0aCByZXNvdXJjZXMsIGxpa2Ugc286XG4gICAgLy8gYXBpLnVzZXJzID0ge1xuICAgIC8vICAgcGF0aDogJy9hZG1pbnMnLFxuICAgIC8vICAgLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0czpcbiAgICAvLyAgIGxvZ2luOiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dpbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgbG9nb3V0OiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dvdXQnLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIHNlc3Npb246IHtcbiAgICAvLyAgICAgcGF0aDogJ3Nlc3Npb24nLFxuICAgIC8vICAgICBtZXRob2Q6ICdnZXQnXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIGNvbnN0IHVzZXJzID0gYXBpLnVzZXJzID0gZ2V0UmVzb3VyY2UoYXBpLnVzZXJzLCB7XG4gICAgICB0eXBlOiAnY29sbGVjdGlvbidcbiAgICB9KSB8fCB7fVxuICAgIHVzZXJzLmxvZ2luID0gZ2V0UmVzb3VyY2UodXNlcnMubG9naW4gfHwgJ2xvZ2luJywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5sb2dvdXQgPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dvdXQgfHwgJ2xvZ291dCcsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMuc2Vzc2lvbiA9IGdldFJlc291cmNlKHVzZXJzLnNlc3Npb24gfHwgJ3Nlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIG9mIHJlc291cmNlIHBhdGggaGFuZGxlcnM6XG4gICAgLy8gYXBpLnJlc291cmNlcyA9IHtcbiAgICAvLyAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc291cmNlLnBhcmVudFxuICAgIC8vICAgICAgID8gYCR7cmVzb3VyY2UucGF0aH0/JHtyZXNvdXJjZS5wYXJlbnQucGF0aH1faWQ9JHtcbiAgICAvLyAgICAgICAgICByZXNvdXJjZS5wYXJlbnQuaWR9YFxuICAgIC8vICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgICBhbnkocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXNbcmVzb3VyY2U/LnR5cGVdIHx8IHRoaXMuZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVzb3VyY2UgJiYgaGFuZGxlci5jYWxsKHRoaXMsIHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5hbnkocmVzb3VyY2UucGFyZW50KVxuICAgICAgICByZXR1cm4gcGFyZW50UGF0aFxuICAgICAgICAgID8gYCR7cGFyZW50UGF0aH0vJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChyZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcihyZXNvdXJjZSkge1xuICAgICAgICAvLyBOT1RFOiBXZSBhc3N1bWUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIHJvb3QtbGV2ZWwgY29sbGVjdGlvbiByb3V0ZXMsXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBuZXN0aW5nIG9mIChzdWItKWNvbGxlY3Rpb24gcm91dGVzLlxuICAgICAgICByZXR1cm4gYCR7cmVzb3VyY2UucGF0aH0vJHtyZXNvdXJjZS5pZH1gXG4gICAgICB9LFxuXG4gICAgICB1cGxvYWQocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gRGl0byBTZXJ2ZXIgaGFuZGxlcyB1cGxvYWQgcm91dGVzIG9uIHRoZSBjb2xsZWN0aW9uIHJlc291cmNlOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2xsZWN0aW9uKHJlc291cmNlLnBhcmVudCl9L3VwbG9hZC8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgfSxcblxuICAgICAgLi4uYXBpLnJlc291cmNlc1xuICAgIH1cblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgLyBleHRlbmRpbmcgb2YgaGVhZGVyczpcbiAgICAvLyBhcGkuaGVhZGVycyA9IHtcbiAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAvLyB9XG4gICAgYXBpLmhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uYXBpLmhlYWRlcnNcbiAgICB9XG5cbiAgICBhcGkuaXNBcGlSZXF1ZXN0ID0gYXBpLmlzQXBpUmVxdWVzdCB8fCBmdW5jdGlvbih1cmwpIHtcbiAgICAgIHJldHVybiAhaXNBYnNvbHV0ZVVybCh1cmwpIHx8IHVybC5zdGFydHNXaXRoKGFwaS51cmwpXG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGVsKSkge1xuICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKVxuICAgIH1cblxuICAgIHRoaXMucm9vdCA9IG5ldyBWdWUoe1xuICAgICAgZWwsXG4gICAgICByb3V0ZXI6IG5ldyBWdWVSb3V0ZXIoe1xuICAgICAgICBtb2RlOiAnaGlzdG9yeScsXG4gICAgICAgIGJhc2U6IGRpdG8uYmFzZSxcbiAgICAgICAgbGlua0FjdGl2ZUNsYXNzOiAnJyxcbiAgICAgICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICcnXG4gICAgICB9KSxcbiAgICAgIGNvbXBvbmVudHM6IHsgRGl0b1Jvb3QgfSxcbiAgICAgIC8vIE1vc3QgaW5qZWN0cyBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlIHJlYWN0aXZlbmVzcyBhY3Jvc3NcbiAgICAgIC8vIHByb3ZpZGUvaW5qZWN0LCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICAgIHByb3ZpZGU6IHtcbiAgICAgICAgYXBpLFxuICAgICAgICAvLyBBIGRlZmF1bHQgbGlzdCBvZiB2ZXJicyBhcmUgcHJvdmlkZWQgYnkgJHZlcmJzKCkgYW5kIGNhbiBiZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGF0IGFueSBwb2ludCBpbiB0aGUgY29tcG9uZW50IGhpZXJhcmNoeS5cbiAgICAgICAgJHZlcmJzOiAoKSA9PiB2ZXJicyxcbiAgICAgICAgLy8gUHJvdmlkZSBkZWZhdWx0cyBzbyBEaXRvTWl4aW4gY2FuIGluamVjdCB0aGVtIGZvciBhbGwgY29tcG9uZW50czpcbiAgICAgICAgLy8gICBpbmplY3Q6IFsgICckaXNQb3B1bGF0ZWQnLCAnJHNjaGVtYUNvbXBvbmVudCcsICckcm91dGVDb21wb25lbnQnIF1cbiAgICAgICAgJHZpZXdzOiAoKSA9PiB7fSxcbiAgICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0cnVlLFxuICAgICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkYXRhQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICAgICAgfSxcblxuICAgICAgcmVuZGVyOiBjcmVhdGVFbGVtZW50ID0+IGNyZWF0ZUVsZW1lbnQoRGl0b1Jvb3QsIHtcbiAgICAgICAgLy8gUHJlc2VydmUgdGhlIHJvb3QgY29udGFpbmVyJ3MgaWQsIGFzIHJlcXVpcmVkIGJ5IGhvdC1yZWxvYWRpbmc6XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgaWQ6IGVsLmlkXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgdW5yZXNvbHZlZFZpZXdzOiB2aWV3cyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFRoaXMgbWF5IG9ubHkgYmUgbmVlZGVkIHRvIGF2b2lkIHRyZWUtc2hhY2tpbmcgb2YgdGhlc2UgY29tcG9uZW50cyxcbiAgICAgICAgLy8gc2luY2UgdGhleSBhY3R1YWxseSBoYW5kbGUgcmVnaXN0cnkgaW50ZXJuYWxseSBhbHJlYWR5LlxuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgLi4uY29tcG9uZW50cyxcbiAgICAgICAgICAuLi50eXBlc1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICByZWdpc3Rlcih0eXBlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFR5cGVDb21wb25lbnQucmVnaXN0ZXIodHlwZSwgb3B0aW9ucylcbiAgfVxuXG4gIHJlcXVlc3Qoe1xuICAgIHVybCxcbiAgICBtZXRob2QgPSAnZ2V0JyxcbiAgICBkYXRhID0gbnVsbCxcbiAgICBwYXJhbXMgPSBudWxsLFxuICAgIGhlYWRlcnMgPSBudWxsXG4gIH0pIHtcbiAgICBjb25zdCBpc0FwaVJlcXVlc3QgPSB0aGlzLmFwaS5pc0FwaVJlcXVlc3QodXJsKVxuICAgIHJldHVybiBheGlvcy5yZXF1ZXN0KHtcbiAgICAgIHVybCxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIC4uLihkYXRhICYmIHsgZGF0YSB9KSxcbiAgICAgIGJhc2VVUkw6IGlzQXBpUmVxdWVzdCA/IHRoaXMuYXBpLnVybCA6IG51bGwsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIC4uLihpc0FwaVJlcXVlc3QgJiYgdGhpcy5hcGkuaGVhZGVycyksXG4gICAgICAgIC4uLmhlYWRlcnNcbiAgICAgIH0sXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGlzQXBpUmVxdWVzdCAmJiAhIXRoaXMuYXBpLmNvcnM/LmNyZWRlbnRpYWxzXG4gICAgfSlcbiAgfVxufVxuIl0sIm5hbWVzIjpbInVpZCIsImNvbXBvbmVudHMiLCJyZW5kZXIiLCJzdGF0aWNSZW5kZXJGbnMiLCJfX3Z1ZTJfc2NyaXB0IiwiVHlwZUNvbXBvbmVudCIsIlNrZXRjaFBpY2tlciJdLCJtYXBwaW5ncyI6Iit2RUFBQSxHQUFlLElBQUEsQ0FDYixNQUFPLEdBQ1AsZ0JBQWlCLENBQUUsRUFDbkIsS0FBTSxLQUNOLFVBQVcsQ0FBRSxFQUNiLFlBQWEsS0FDYixjQUFlLElBQ2pCLEVDSE8sV0FBd0IsRUFBVSxFQUFPLENBQzlDLE1BQU8sR0FDSCxHQUFHLEtBQVksSUFDZixDQUNOLENBRU8sWUFBNkIsRUFBVSxDQUM1QyxLQUFNLEdBQU8sRUFBYyxDQUFRLEVBQ25DLGtCQUFNLE1BQ0MsQ0FDVCxDQU1PLFlBQTJCLEVBQVUsRUFBUyxHQUFPLENBQzFELE1BQU8sR0FBUyxHQUFvQixDQUFRLEVBQUksRUFBYyxDQUFRLENBQ3hFLENBRU8sWUFBeUIsRUFBVSxFQUFTLEdBQU8sQ0FDeEQsTUFBTyxHQUFrQixHQUFrQixFQUFVLENBQU0sQ0FBQyxDQUM5RCxDQUVPLFlBQWlDLEVBQVUsRUFBUyxHQUFPLENBQ2hFLEtBQU0sR0FBTyxHQUFrQixFQUFVLENBQU0sRUFDL0MsR0FBSSxFQUFNLENBR1IsR0FBSSxHQUNKLEVBQ0UsR0FBUSxFQUFLLElBQUssUUFDWCxHQUFTLE1BQVEsRUFBVSxDQUFDLENBQUssR0FFMUMsR0FBSSxHQUFTLEtBQ1gsTUFBTyxFQUVWLENBQ0QsTUFBTyxLQUNULENBRU8sWUFBK0IsRUFBVSxFQUFTLEdBQU8sQ0FDOUQsTUFBTyxHQUFrQixHQUF3QixFQUFVLENBQU0sQ0FBQyxDQUNwRSxDQUVPLFlBQWlCLEVBQVUsRUFBVSxFQUFTLEdBQU8sQ0FDMUQsS0FBTSxHQUFPLEdBQWtCLEVBQVUsQ0FBTSxFQUMvQyxNQUFPLEdBQU8sRUFBbUIsRUFBVSxDQUFJLEVBQUksSUFDckQsQ0FFTyxZQUF1QixFQUFVLEVBQVUsRUFBUyxHQUFPLENBQ2hFLEtBQU0sR0FBTyxHQUF3QixFQUFVLENBQU0sRUFDckQsTUFBTyxHQUFPLEVBQW1CLEVBQVUsQ0FBSSxFQUFJLElBQ3JELENBRU8sWUFBOEIsRUFBVSxDQUM3QyxLQUFNLEdBQU8sRUFBYyxDQUFRLEVBQ25DLE1BQU8sR0FBSyxFQUFLLE9BQVMsRUFDNUIsQ0FFTyxZQUE2QixFQUFVLENBQzVDLEtBQU0sR0FBUSxHQUFxQixDQUFRLEVBQzNDLE1BQU8sSUFBUyxNQUFRLEVBQVUsQ0FBQyxDQUFLLEVBQUksS0FBTyxDQUNyRCxDQUVPLFlBQThCLEVBQVUsQ0FDN0MsS0FBTSxHQUFRLEdBQXFCLENBQVEsRUFDckMsRUFBUSxHQUFTLEtBQU8sS0FBTyxDQUFDLEVBQ3RDLE1BQU8sR0FBVSxDQUFLLEVBQUksRUFBUSxJQUNwQyxDQUVBLEdBQUksSUFBYyxFQUNYLFlBQXdCLEVBQU0sRUFBUSxLQUFNLENBRWpELEVBQUssR0FBUyxJQUFJLEVBQUUsSUFDdEIsQ0FFTyxZQUF1QixFQUFJLENBQ2hDLE1BQU8sS0FBSyxLQUFLLENBQUUsQ0FDckIsQ0FNTyxZQUFxQixFQUFNLEVBQVEsS0FBTSxDQUU5QyxNQUFPLGtCQUFPLEtBQVUsTUFBUSxPQUFPLEtBQUssQ0FBSSxFQUFFLFNBQVcsQ0FDL0QsQ0MvRUEsS0FBTSxJQUFXLEdBQUksU0FFckIsV0FBYSxFQUFTLEVBQUssRUFBYyxDQUN2QyxLQUFNLEdBQVMsR0FBUyxJQUFJLENBQU8sRUFDN0IsRUFBUSxFQUFPLEdBRXJCLE1BQU8sS0FBVSxRQUFhLEVBQU8sZUFBZSxDQUFHLEVBQ25ELEVBQ0EsRUFBVyxDQUFZLEVBQ3JCLEVBQWMsRUFDZCxDQUNSLENBRUEsWUFBYSxFQUFTLEVBQUssRUFBTyxDQUNoQyxHQUFTLElBQUksQ0FBTyxFQUFFLEdBQU8sQ0FDL0IsQ0FFZSxNQUFNLENBQVksQ0FDL0IsWUFBWSxFQUFXLEVBQVMsT0FFOUIsRUFBVSxFQUNMLEVBQVcsQ0FBTyxFQUFJLEVBQU8sRUFBSyxLQUFLLEdBQ3hDLENBQUUsRUFHTixLQUFRLFNBQVIsU0FBUSxPQUFXLElBQ25CLEVBQVEsVUFBWSxFQUlwQixLQUFNLEdBQVMsT0FBTyxlQUFlLEVBQVMsQ0FBUyxFQUN2RCxHQUFTLElBQUksS0FBTSxDQUFNLENBQzFCLE9BRU0sS0FBSSxFQUFXLEVBQVMsQ0FDN0IsTUFBTyxhQUFtQixHQUN0QixFQUNBLEdBQUksR0FBWSxFQUFXLENBQU8sQ0FDdkMsSUFJRyxTQUFTLENBQ1gsTUFBTyxHQUFJLEtBQU0sU0FBVSxFQUFJLENBQ2hDLElBRUcsUUFBUSxDQUNWLE1BQU8sR0FBSSxLQUFNLFFBQVMsTUFBUyxDQUNwQyxJQUVHLFdBQVcsQ0FDYixNQUFPLEdBQUksS0FBTSxXQUFZLEVBQUUsQ0FDaEMsSUFFRyxPQUFPLENBQ1QsTUFBTyxHQUFJLEtBQU0sT0FBUSxJQUFNLEdBQW9CLEtBQUssUUFBUSxDQUFDLENBQ2xFLElBRUcsUUFBUSxDQUNWLE1BQU8sR0FBSSxLQUFNLFFBQVMsSUFBTSxHQUFxQixLQUFLLFFBQVEsQ0FBQyxDQUNwRSxJQUVHLGVBQWUsQ0FDakIsTUFBTyxJQUFnQixLQUFLLFNBQVUsS0FBSyxNQUFNLENBQ2xELElBRUcscUJBQXFCLENBQ3ZCLE1BQU8sSUFBc0IsS0FBSyxTQUFVLEtBQUssTUFBTSxDQUN4RCxJQUVHLFlBQVksQ0FDZCxNQUFPLElBQXFCLEtBQUssWUFBWSxDQUM5QyxJQUVHLGtCQUFrQixDQUNwQixNQUFPLElBQXFCLEtBQUssa0JBQWtCLENBQ3BELElBRUcsT0FBTyxDQUlULE1BQU8sR0FBSSxLQUFNLE9BQVEsSUFDdkIsR0FBUSxLQUFLLFNBQVUsS0FBSyxTQUFVLEtBQUssTUFBTSxDQUNsRCxDQUNGLElBUUcsYUFBYSxDQUNmLEtBQU0sR0FDSixHQUFjLEtBQUssU0FBVSxLQUFLLFNBQVUsS0FBSyxNQUFNLEdBQUssS0FDOUQsTUFBTyxLQUFlLEtBQUssS0FBTyxFQUFhLElBQ2hELElBRUcsV0FBVyxDQUNiLE1BQU8sR0FBSSxLQUFNLFdBQVksSUFBSSxDQUNsQyxJQUVHLGdCQUFnQixDQUNsQixNQUFPLEdBQUksS0FBTSxnQkFBaUIsSUFBSSxDQUN2QyxJQUVHLGdCQUFnQixDQUNsQixNQUFPLEdBQUksS0FBTSxnQkFBaUIsSUFBSSxDQUN2QyxJQUVHLE9BQU8sQ0FDVCxNQUFPLEdBQUksS0FBTSxPQUFRLElBQUksQ0FDOUIsSUFFRyxNQUFNLENBQ1IsTUFBTyxHQUFJLEtBQU0sTUFBTyxJQUFJLENBQzdCLElBRUcsUUFBUSxDQUNWLE1BQU8sR0FBSSxLQUFNLFFBQVMsSUFBSSxDQUMvQixJQUVHLFlBQVksQ0FDZCxNQUFPLEdBQUksS0FBTSxZQUFhLElBQUksQ0FDbkMsSUFFRyxZQUFZLENBQ2QsTUFBTyxHQUFJLEtBQU0sWUFBYSxJQUFJLENBQ25DLElBS0csWUFBWSxDQUNkLE1BQU8sR0FBSSxLQUFNLFlBQWEsSUFBSSxDQUNuQyxJQVdHLGtCQUFrQixDQUNwQixNQUFPLEdBQUksS0FBTSxrQkFBbUIsSUFBSSxDQUN6QyxJQUVHLGdCQUFnQixDQUNsQixNQUFPLEdBQUksS0FBTSxnQkFBaUIsSUFBSSxDQUN2QyxJQUVHLGdCQUFnQixDQUNsQixNQUFPLEdBQUksS0FBTSxnQkFBaUIsSUFBSSxDQUN2QyxJQUVHLGtCQUFrQixDQUNwQixNQUFPLEdBQUksS0FBTSxrQkFBbUIsSUFBSSxDQUN6QyxJQUVHLGlCQUFpQixDQUNuQixNQUFPLEdBQUksS0FBTSxpQkFBa0IsSUFBSSxDQUN4QyxJQUVHLG9CQUFvQixDQUN0QixNQUFPLEdBQUksS0FBTSxvQkFBcUIsSUFBSSxDQUMzQyxJQUVHLGtCQUFrQixDQUNwQixNQUFPLEdBQUksS0FBTSxrQkFBbUIsSUFBSSxDQUN6QyxJQUlHLFNBQVMsQ0FDWCxNQUFPLEdBQUksS0FBTSxTQUFVLE1BQVMsQ0FDckMsSUFFRyxVQUFVLENBQ1osTUFBTyxHQUFJLEtBQU0sVUFBVyxNQUFTLENBQ3RDLElBSUcsUUFBUSxDQUNWLE1BQU8sR0FBSSxLQUFNLFFBQVMsTUFBUyxDQUNwQyxJQUlHLFFBQVEsQ0FDVixNQUFPLEdBQUksS0FBTSxRQUFTLE1BQVMsQ0FDcEMsSUFFRyxjQUFjLENBQ2hCLE1BQU8sR0FBSSxLQUFNLGNBQWUsRUFBSyxDQUN0QyxJQUlHLFVBQVUsQ0FDWixNQUFPLElBQVcsS0FBSyxVQUFVLFFBQVEsQ0FBTyxDQUNqRCxJQUVHLFNBQVMsQ0FDWCxNQUFPLENBQUMsRUFBTyxJQUFZLEtBQUssVUFBVSxPQUFPLEVBQU8sQ0FBTyxDQUNoRSxJQUVHLFdBQVcsQ0FDYixNQUFPLElBQVksS0FBSyxVQUFVLFNBQVMsQ0FBUSxDQUNwRCxJQUVHLFdBQVcsQ0FDYixNQUFPLElBQVcsS0FBSyxVQUFVLFNBQVMsQ0FBTyxDQUNsRCxJQUVHLGlCQUFpQixDQUNuQixNQUFPLElBQVksS0FBSyxVQUFVLGVBQWUsQ0FBUSxDQUMxRCxJQUVHLFNBQVMsQ0FDWCxNQUFPLElBQVcsQ0FDaEIsS0FBSyxVQUFVLE9BQU8sQ0FBTyxFQUM3QixHQUFJLEtBQU0sY0FBZSxFQUFJLENBQzlCLENBQ0YsQ0FDSCxDQy9PQSxHQUFlLElBQUEsQ0FDYixNQUFPLENBQ0wsTUFBTyxDQUNMLFFBQVMsSUFDVixDQUNGLEVBRUQsUUFBUyxDQU9QLEdBQUcsRUFBTyxFQUFVLENBQ2xCLEdBQUksRUFBUSxDQUFLLEVBQ2YsU0FBVyxLQUFNLEdBQ2YsS0FBSyxHQUFHLEVBQUksQ0FBUSxVQUViLEdBQWMsQ0FBSyxFQUM1QixTQUFXLEtBQU8sR0FDaEIsS0FBSyxHQUFHLEVBQUssRUFBTSxFQUFJLE1BRXBCLENBQ0wsS0FBTSxHQUFTLEtBQUssU0FBWSxNQUFLLFFBQVUsT0FBTyxPQUFPLElBQUksR0FDM0QsQ0FBRSxhQUFjLEVBQU8sSUFBVyxHQUFPLEdBQVMsQ0FDdEQsVUFBVyxDQUFFLEVBQ2IsTUFBTyxDQUFFLENBQ25CLEdBQ1EsRUFBVSxLQUFLLENBQVEsQ0FDeEIsQ0FDRCxNQUFPLEtBQ1IsRUFFRCxLQUFLLEVBQU8sRUFBVSxDQUNwQixLQUFNLEdBQUssSUFBSSxJQUNiLE1BQUssSUFBSSxFQUFPLENBQUUsRUFDWCxFQUFTLE1BQU0sS0FBTSxDQUFJLEdBRWxDLFNBQUcsU0FBVyxFQUNQLEtBQUssR0FBRyxFQUFPLENBQUUsQ0FDekIsRUFFRCxJQUFJLEVBQU8sRUFBVSxPQUNuQixHQUFJLENBQUMsVUFBVSxPQUViLE1BQU8sTUFBSyxnQkFDSCxFQUFRLENBQUssRUFDdEIsU0FBVyxLQUFNLEdBQ2YsS0FBSyxJQUFJLEVBQUksQ0FBUSxVQUVkLEdBQWMsQ0FBSyxFQUM1QixTQUFXLEtBQU8sR0FDaEIsS0FBSyxJQUFJLEVBQUssRUFBTSxFQUFJLE1BRXJCLENBRUwsS0FBTSxHQUFRLFFBQUssVUFBTCxjQUFlLEdBQzdCLEdBQUksRUFDRixHQUFJLENBQUMsRUFFSCxNQUFPLE1BQUssUUFBUSxPQUNmLENBRUwsS0FBTSxDQUFFLGFBQWMsRUFDaEIsRUFBUSxFQUFVLFVBRXRCLEdBQU0sSUFBTyxHQUFZLEVBQUcsV0FBYSxDQUMxQyxFQUNELEFBQUksSUFBVSxJQUNaLEVBQVUsT0FBTyxFQUFPLENBQUMsQ0FFNUIsQ0FFSixDQUNELE1BQU8sS0FDUixFQUVELEtBQUssS0FBVSxFQUFNLE9BRW5CLEtBQU0sR0FBUSxRQUFLLFVBQUwsY0FBZSxHQUM3QixHQUFJLEVBQU8sQ0FDVCxLQUFNLENBQUUsUUFBTyxhQUFjLEVBQzdCLE1BQU8sSUFBSSxTQUFRLEdBQVcsQ0FDNUIsS0FBTSxHQUFPLFNBQVksQ0FHdkIsS0FBTSxHQUFRLEVBQU0sTUFBTyxFQUMzQixHQUFJLEVBQU8sQ0FDVCxHQUFJLEdBQ0osU0FBVyxLQUFZLEdBQ3JCLEdBQUksQ0FDRixLQUFNLEdBQU0sS0FBTSxHQUFTLE1BQU0sS0FBTSxFQUFNLElBQUksRUFDakQsQUFBSSxJQUFRLFFBQ1YsR0FBUyxFQUVaLE9BQVEsRUFBUCxDQUNBLFFBQVEsTUFDTixtQ0FBbUMsTUFBVyxDQUMvQyxDQUNGLENBSUgsRUFBTSxRQUFRLENBQU0sRUFDcEIsRUFBTSxDQUNQLENBQ0YsRUFDRCxFQUFNLEtBQUssQ0FBRSxPQUFNLFNBQU8sQ0FBRSxFQUd4QixFQUFNLFNBQVcsR0FDbkIsRUFBTSxDQUVsQixDQUFTLENBQ0YsQ0FDRixFQUdELGFBQWEsRUFBTyxPQUNsQixHQUFJLEVBQVEsQ0FBSyxFQUFHLENBQ2xCLFNBQVcsS0FBTSxHQUNmLEdBQUksQ0FBQyxLQUFLLGFBQWEsQ0FBRSxFQUN2QixNQUFPLEdBR1gsTUFBTyxHQUFNLE9BQVMsQ0FDOUIsS0FDUSxPQUFPLENBQUMsQ0FBQyxTQUFLLFVBQUwsUUFBZSxHQUUzQixFQUVELFNBQVMsRUFBTyxFQUFRLENBQ3RCLEdBQUksRUFDRixHQUFJLEVBQVEsQ0FBSyxFQUNmLFNBQVcsS0FBTSxHQUNmLEtBQUssU0FBUyxFQUFJLENBQU0sTUFHMUIsTUFBSyxHQUFHLEVBQU8sSUFBSSxJQUFTLEVBQU8sS0FBSyxFQUFPLEdBQUcsQ0FBSSxDQUFDLEVBRzNELE1BQU8sS0FDUixDQUNGLENBQ0gsRUMvSUEsS0FBTSxJQUFlLENBQ25CLFFBQVMsR0FDVCxPQUFRLEdBQ1IsT0FBUSxFQUNSLEtBQU0sR0FDTixNQUFPLEVBQ1AsT0FBUSxFQUNSLE9BQVEsR0FDUixTQUFVLENBQ1osRUFJTSxHQUFZLEdBQVMsQ0FBQyxDQUFDLEVBQ3ZCLEdBQVcsR0FBUyxDQUFDLEVBQ3JCLEdBQVcsR0FBUyxPQUFPLENBQUssRUFFaEMsR0FBUyxHQUFTLEdBQU8sQ0FBSyxFQUNoQyxFQUNBLEdBQUksTUFBSyxDQUFLLEVBRVosR0FBVSxHQUFTLEVBQVEsQ0FBSyxFQUNsQyxFQUNBLEVBQVMsQ0FBSyxFQUNaLEVBQU0sTUFBTSxHQUFHLEVBQ2YsRUFBUSxDQUFLLEVBRWIsR0FBVyxHQUFTLEVBQVMsQ0FBSyxFQUNwQyxFQUdBLElBQVUsR0FDUixDQUFFLEVBQ0YsS0FFQSxHQUFXLEdBQVMsR0FBUyxDQUFLLEVBQ3BDLEVBQ0EsR0FBSSxRQUFPLENBQUssRUFFZCxHQUFpQixDQUNyQixRQUFTLEdBQ1QsT0FBUSxHQUNSLE9BQVEsR0FDUixLQUFNLEdBQ04sTUFBTyxHQUNQLE9BQVEsR0FDUixPQUFRLEVBQ1YsRUFFTyxZQUF3QixFQUFPLEVBQU8sT0FFM0MsR0FBSSxHQUFTLEdBQVMsTUFDcEIsU0FBVyxLQUFRLEdBQ2pCLEdBQUksTUFBYSxFQUFLLFFBQWxCLGdCQUEwQixHQUM1QixNQUFPLEdBSWIsTUFBTyxFQUNULENBRU8sWUFBcUIsRUFBTSxFQUFPLENBQ3ZDLEtBQU0sR0FBWSxHQUFRLEdBQWUsRUFBSyxNQUFRLEdBQ3RELE1BQU8sR0FBWSxFQUFVLENBQUssRUFBSSxDQUN4QyxDQ25FTyxZQUFxQixFQUFRLENBQ2xDLE1BQU8sQ0FBQyxDQUFDLEVBQVksRUFBTyxRQUFRLENBQ3RDLENBRU8sV0FBcUIsRUFBVSxFQUFXLEdBQUksT0FDbkQsS0FBNEIsS0FBcEIsV0FBb0IsRUFBVCxJQUFTLEVBQVQsQ0FBWCxXQUNSLFNBQVcsRUFBUyxDQUFRLEVBQUksT0FBSyxHQUFTLEdBQzFDLEVBQVMsQ0FBUSxFQUFJLE9BQUssR0FBTCxDQUFXLEtBQU0sQ0FBVSxHQUNoRCxLQUlGLEdBQ0EsSUFBVyxRQUNYLEVBQVMsU0FBVyxRQUNwQixDQUFDLE1BQVMsT0FBVCxRQUFlLFdBQVcsT0FFM0IsR0FBUyxPQUFTLEVBQ2IsRUFBUyxNQUNaLEdBQVMsS0FBTyxNQUdiLENBQ1QsQ0FFTyxZQUEyQixFQUFJLEVBQVUsQ0FDOUMsTUFBTyxJQUFNLE1BQVEsa0JBQVUsUUFBUyxhQUNwQyxLQUNBLEtBQU0sVUFDSCxHQUNELEVBQ0EsQ0FBQyxFQUFPLElBQVEsQ0FBQyxTQUFVLE9BQVEsUUFBUSxFQUFFLFNBQVMsQ0FBRyxDQUMxRCxHQUxELENBTUEsR0FBSSxHQUFHLEdBQ1IsR0FDQyxJQUNOLENDdENBLEtBQU0sSUFBcUIsR0FBSSxLQUV4QixZQUFtQixFQUFTLENBRWpDLEFBQUssR0FBbUIsSUFBSSxDQUFPLEdBQ2pDLElBQW1CLElBQUksQ0FBTyxFQUM5QixRQUFRLEtBQUssQ0FBTyxFQUV4QixDQ0tBLEdBQWUsSUFBQSxDQUNiLE9BQVEsQ0FBQyxFQUFZLEVBRXJCLE9BQVEsQ0FDTixNQUNBLFNBQ0EsU0FDQSxlQUNBLG1CQUNBLGtCQUNBLGlCQUNBLG1CQUNBLHFCQUNBLG1CQUNBLGtCQUNBLGVBQ0QsRUFFRCxTQUFVLENBQ1IsTUFBTyxNQUFLLGFBQ1IsQ0FBRSxlQUFnQixJQUFNLElBQU0sRUFDOUIsQ0FBRSxDQUNQLEVBRUQsTUFBTyxDQUNMLE1BQU8sQ0FDTCxZQUNBLFVBQVcsSUFDWixDQUNGLEVBRUQsU0FBVSxDQUNSLGNBQWUsT0FDYixNQUFPLFFBQUssT0FBTCxjQUFXLE1BQ25CLEVBRUQsTUFBTyxDQUNMLE1BQU8sSUFBUyxJQUNqQixFQUtELE9BQVEsQ0FDTixNQUFPLE1BQUssT0FBUSxDQUNyQixFQUVELE9BQVEsQ0FDTixNQUFPLE1BQUssT0FBUSxDQUNyQixFQUVELGFBQWMsQ0FDWixNQUFPLE1BQUssYUFBYyxDQUMzQixFQUVELFFBQVMsQ0FDUCxNQUFPLE1BQUssSUFBSSxNQUNqQixFQUVELFNBQVUsQ0FDUixNQUFPLElBQUksR0FBWSxLQUFNLENBQUUsT0FBUSxFQUFLLENBQUUsQ0FDL0MsRUFFRCxlQUFnQixDQUNkLE1BQU8sTUFBSyxNQUFNLFVBQVUsRUFDN0IsRUFFRCxpQkFBa0IsQ0FHaEIsTUFBTyxNQUFLLGlCQUFrQixDQUMvQixFQUVELGdCQUFpQixDQUdmLE1BQU8sTUFBSyxnQkFBaUIsQ0FDOUIsRUFFRCxlQUFnQixDQUNkLEtBQU0sR0FBWSxLQUFLLGVBQ3ZCLE1BQU8sWUFBVyxPQUFTLEVBQVksSUFDeEMsRUFFRCxlQUFnQixDQUNkLEtBQU0sR0FBWSxLQUFLLGVBQ3ZCLE1BQU8sWUFBVyxPQUFTLEVBQVksSUFDeEMsRUFLRCxlQUFnQixDQUNkLE1BQU8sTUFBSyxhQUFlLEtBQU8sS0FBSyxlQUFnQixDQUN4RCxFQUVELGlCQUFrQixDQUNoQixNQUFPLE1BQUssaUJBQWtCLENBQy9CLEVBRUQsbUJBQW9CLENBQ2xCLE1BQU8sTUFBSyxtQkFBb0IsQ0FDakMsRUFFRCxpQkFBa0IsQ0FDaEIsTUFBTyxNQUFLLGlCQUFrQixDQUMvQixFQUVELGdCQUFpQixDQUNmLE1BQU8sTUFBSyxnQkFBaUIsQ0FDOUIsRUFFRCxjQUFlLENBQ2IsTUFBTyxNQUFLLGNBQWUsQ0FDNUIsRUFFRCx1QkFBd0IsT0FDdEIsTUFBTyxRQUFLLGtCQUFMLGNBQXNCLFFBQVEsZUFDdEMsRUFFRCxzQkFBdUIsT0FDckIsTUFBTyxRQUFLLGlCQUFMLGNBQXFCLFFBQVEsY0FDckMsRUFFRCxxQkFBc0IsT0FDcEIsTUFBTyxRQUFLLGdCQUFMLGNBQW9CLFFBQVEsYUFDcEMsRUFJRCxVQUFXLE9BQ1QsTUFBTyxRQUFLLGdCQUFMLGNBQW9CLElBQzVCLENBQ0YsRUFFRCxjQUFlLENBQ2IsS0FBSyxLQUFPLEVBQUVBLEVBQ2YsRUFFRCxRQUFTLENBU1AsU0FBUyxFQUFLLENBQ1osTUFBTyxNQUFLLE1BQU0sRUFDbkIsRUFFRCxTQUFTLEVBQUssRUFBTyxDQUNuQixNQUFPLE1BQUssS0FBSyxLQUFLLE1BQU8sRUFBSyxDQUFLLENBQ3hDLEVBRUQsY0FBYyxFQUFLLENBQ2pCLE1BQU8sTUFBSyxTQUFTLENBQUcsR0FBSyxLQUFLLFNBQVMsRUFBSyxFQUFFLENBQ25ELEVBRUQsZUFDRSxFQUNBLENBQUUsT0FBTSxRQUFTLEVBQUssU0FBUyxLQUFLLE9BQVEsV0FBVyxJQUFTLENBQUUsRUFDbEUsQ0FDQSxLQUFNLEdBQVEsR0FBUSxFQUFRLENBQUksRUFHbEMsR0FBSSxHQUFRLEVBQ1IsRUFBUSxDQUFhLEVBQ25CLEVBQW1CLEVBQVEsRUFBZSxJQUFBLEVBQWUsRUFDekQsRUFBTyxHQUNULE9BRUosR0FBSSxJQUFVLFFBQWEsSUFBUSxPQUNqQyxNQUFJLElBQVksRUFBVyxDQUFHLEdBQUssQ0FBQyxHQUFlLEVBQU8sQ0FBRyxHQUUzRCxHQUFNLEVBQUksS0FBSyxLQUFNLEtBQUssT0FBTyxHQUU1QixFQUdULEdBQUksR0FBZSxFQUFPLENBQUssRUFDN0IsTUFBTyxHQVFULEdBSkksR0FBWSxFQUFXLENBQUssR0FDOUIsR0FBUSxFQUFNLEtBQUssS0FBTSxLQUFLLE9BQU8sR0FHbkMsR0FBUyxHQUFTLE1BQVEsQ0FBQyxHQUFlLEVBQU8sQ0FBSyxFQUN4RCxTQUFXLEtBQVEsR0FBTyxDQUN4QixLQUFNLEdBQVksR0FBWSxFQUFNLENBQUssRUFDekMsR0FBSSxJQUFjLEVBQ2hCLE1BQU8sRUFFVixDQUVILE1BQU8sRUFDUixFQUVELFNBQVMsRUFBUSxFQUFNLENBQ3JCLE1BQU8sR0FDSCxLQUFLLGVBQWUsUUFBUyxDQUFFLEtBQU0sT0FBUSxTQUFRLEdBQ3JELEVBQVMsR0FBUSxFQUFPLElBQUksRUFDNUIsRUFBUyxDQUFJLEdBQUssRUFDdkIsRUFFRCxXQUVBLG9CQUFvQixFQUFNLEVBQVEsQ0FDaEMsS0FBTSxHQUFPLEtBQUssTUFBTSxJQUFTLEVBQ2pDLE1BQU8sQ0FDTCxNQUFPLGVBQWUsSUFDdEIsTUFBTyxrQkFBUSxPQUFRLEVBQVMsQ0FBSSxDQUNyQyxDQUNGLEVBRUQsZUFBZSxFQUFXLEVBQVcsR0FBTyxDQUMxQyxNQUFPLENBQ0wsVUFBVyxJQUNYLFNBQVUsQ0FBQyxFQUNYLE9BQVEsb0JBQ1IsVUFBVyxtQkFDWCxZQUFhLG1CQUNiLFdBQVksa0JBQ1osY0FBZSxxQkFDZixjQUFlLENBQ2hCLENBQ0YsRUFFRCxhQUFhLEVBQU8sQ0FDbEIsTUFBTyxDQUNMLFFBRUEsS0FBTSxLQUFLLE9BQU8sSUFDbkIsQ0FDRixFQUVELGFBQWEsRUFBUyxLQUFNLENBQzFCLE1BQU8sQ0FBQyxDQUFDLEdBQVUsS0FBSyxlQUFlLEtBQU0sQ0FDM0MsS0FBTSxRQUNOLFFBQVMsR0FDVCxRQUNSLENBQU8sQ0FDRixFQUVELFdBQVcsQ0FDVCxhQUNBLFVBQ0EsT0FDQSxXQUFXLENBQ1QsTUFBTyxJQUNQLE9BQVEsT0FDUixhQUFjLEVBQ2YsR0FDQSxDQUtELE1BQU8sSUFBSSxTQUFRLENBQUMsRUFBUyxJQUFXLENBQ3RDLEtBQUssT0FBTyxLQUFLLEVBQWMsVUFBVSxhQUFhLEVBQUcsQ0FDdkQsYUFDQSxVQUNBLE9BQ0EsUUFBUyxDQUFFLFVBQVMsUUFBUSxDQUM3QixFQUFFLENBQVEsQ0FDbkIsQ0FBTyxDQUNGLEVBRUQsZ0JBQWdCLEVBQVUsT0FDeEIsU0FBVyxFQUFZLENBQVEsRUFHM0IsRUFBUyxTQUFXLFFBQ3RCLEdBQVMsT0FBUyxRQUFLLGdCQUFMLGNBQW9CLFVBRWpDLEtBQUssSUFBSSxVQUFVLElBQUksRUFBWSxDQUFRLENBQUMsQ0FDcEQsRUFFRCxlQUFlLEVBQVUsQ0FDdkIsS0FBTSxHQUFPLEtBQUssZ0JBQWdCLENBQVEsRUFDMUMsR0FBSSxHQUFNLEtBQ1YsR0FBSSxFQUFNLENBRVIsRUFBTSxHQUNKLEtBQUssSUFBSSxJQUFJLFFBQVEsT0FBUSxFQUFFLEtBRS9CLEVBQUssUUFBUSxPQUFRLEVBQUUsSUFHekIsS0FBTSxDQUFFLFNBQVUsRUFDbEIsR0FBSSxFQUFPLENBQ1QsS0FBTSxHQUFTLE9BQU8sUUFBUSxDQUFLLEVBQUUsSUFDbkMsQ0FBQyxDQUFDLEVBQUssS0FDTCxHQUFHLG1CQUFtQixDQUFHLEtBQUssbUJBQW1CLENBQUssR0FDekQsRUFDRCxFQUFNLEdBQUcsS0FBTyxFQUFPLEtBQUssR0FBRyxHQUNoQyxDQUNGLENBQ0QsTUFBTyxFQUNSLE9BRUssYUFBWSxDQUFFLFNBQVEsTUFBSyxXQUFVLE9BQU0sU0FBUSxZQUFZLENBQ25FLEVBQU0sR0FBTyxLQUFLLGdCQUFnQixDQUFRLEVBQzFDLEVBQVMsR0FBVSxrQkFBVSxRQUM3QixLQUFNLEdBQVksQ0FBQyxHQUFZLEtBQUssSUFBSSxhQUFhLENBQUcsRUFDeEQsQUFBSSxHQUNGLEtBQU0sTUFBSyxjQUFjLFdBQVksRUFFdkMsS0FBTSxHQUFXLEtBQU0sTUFBSyxJQUFJLFFBQVEsQ0FBRSxTQUFRLE1BQUssT0FBTSxTQUFRLEVBRXJFLE1BQ0UsSUFDQSxJQUFXLFNBQ1gsR0FBTyxFQUFVLEdBQWtCLEtBQUssS0FBSyxHQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsR0FFaEUsS0FBTSxNQUFLLGNBQWMsVUFBVyxFQUUvQixDQUNSLEVBRUQsUUFBUSxFQUF1QixDQUF2QixRQUFFLFVBQUYsRUFBWSxJQUFaLEVBQVksQ0FBVixVQUtSLEtBQU0sR0FBYyxHQUFTLENBQzNCLE9BQVEsS0FBSyxTQUNiLE1BQU8sS0FBSyxhQUNiLEVBQUMsR0FDSSxFQUFZLGlCQUFhLFVBRXpCLEVBQVcsR0FBYSxHQUM1QixFQUFRLFFBQVUsU0FDbEIsRUFBUSxPQUNSLEtBQUssVUFBVSxFQUFRLFFBQVUsRUFBRSxLQUNuQyxLQUFLLFVBQVUsRUFBUSxNQUFRLEVBQUUsSUFFbkMsR0FBSSxHQUFjLElBQVksR0FDNUIsTUFBTyxHQUFVLEdBSW5CLEtBQU0sR0FBTSxLQUFLLFlBQVksQ0FBTyxFQUNqQyxLQUFLLEdBQVksRUFBUyxJQUFJLEVBQzlCLE1BQU0sR0FBUyxPQUVkLEtBQU0sR0FBTyxLQUFNLFdBQU4sY0FBZ0IsS0FDN0IsS0FBTSxHQUNGLE9BQU8sT0FBTyxHQUFJLE9BQU0sRUFBSyxPQUFPLEVBQUcsQ0FBSSxFQUMzQyxDQUNkLENBQVMsRUFDSCxNQUFJLElBQ0YsR0FBVSxHQUFZLEdBRWpCLENBQ1IsRUFFRCxLQUFLLEVBQVMsQ0FDWixVQUFVLDhDQUE4QyxFQUNqRCxLQUFLLFFBQVEsQ0FBTyxDQUM1QixFQUVELE9BQU8sRUFBTyxFQUlWLEdBQUksQ0FKTSxRQUNaLFVBQVMsS0FBSyxJQUFJLE9BQ2xCLFdBQVcsS0FBSyxJQUFJLFNBRlIsRUFHVCxJQUhTLEVBR1QsQ0FGSCxTQUNBLGFBR0EsTUFBTyxJQUFPLEVBQU8sR0FDbkIsU0FDQSxZQUNHLEVBQ0osQ0FDRixPQUVLLFVBQVMsRUFBVSxDQUN2QixNQUFPLElBQUksU0FBUSxHQUFXLENBQzVCLEtBQUssUUFBUSxLQUNYLEVBQ0EsSUFBTSxFQUFRLEVBQUksRUFDbEIsSUFBTSxFQUFRLEVBQUssQ0FDcEIsQ0FDVCxDQUFPLENBQ0YsRUFFRCxTQUFTLEVBQVUsR0FBSSxDQUNyQixBQUFJLEVBQVMsQ0FBTyxHQUNsQixHQUFVLENBQUUsSUFBSyxDQUFTLEdBRTVCLEtBQU0sQ0FBRSxNQUFLLFlBQWEsRUFFcEIsRUFBSSxTQUFTLGNBQWMsR0FBRyxFQUNwQyxFQUFFLEtBQU8sRUFDTCxHQUNGLEdBQUUsU0FBVyxHQUVmLEtBQU0sQ0FBRSxRQUFTLFNBQ2pCLEVBQUssWUFBWSxDQUFDLEVBQ2xCLEVBQUUsTUFBTyxFQUNULEVBQUssWUFBWSxDQUFDLENBQ25CLEVBRUQsT0FBTyxFQUFTLENBQ2QsS0FBSyxjQUFjLE9BQU8sQ0FBTyxDQUNsQyxFQUVELG9CQUFxQixDQUNuQixLQUFLLGNBQWMsbUJBQW9CLENBQ3hDLEVBRUQsbUJBQW9CLENBQ2xCLEtBQUssYUFBYyxFQUNuQixLQUFLLGNBQWUsRUFDcEIsS0FBSyxZQUFhLENBQ25CLEVBRUQsY0FBZSxDQUNiLFNBQVcsQ0FBQyxFQUFLLElBQVUsUUFBTyxRQUFRLEtBQUssT0FBTyxTQUFXLENBQUEsQ0FBRSxFQUNqRSxBQUFJLEVBQVcsQ0FBSyxFQUNsQixLQUFLLEdBQU8sRUFFWixRQUFRLE1BQU0sOEJBQThCLE1BQVEsR0FBTyxDQUdoRSxFQUVELGVBQWdCLENBQ2QsU0FBVyxDQUFDLEVBQUssSUFBVSxRQUFPLFFBQVEsS0FBSyxPQUFPLFVBQVksQ0FBQSxDQUFFLEVBQUcsQ0FDckUsS0FBTSxHQUFXLEVBQVcsQ0FBSyxFQUM3QixDQUFFLElBQUssQ0FBTyxFQUNkLEVBQVMsQ0FBSyxHQUFLLEVBQVcsRUFBTSxHQUFHLEVBQ3JDLEVBQ0EsS0FDTixBQUFJLEVBQ0YsT0FBTyxlQUFlLEtBQU0sRUFBSyxDQUFRLEVBRXpDLFFBQVEsTUFDTix5Q0FBeUMsTUFBUSxHQUNsRCxDQUVKLENBQ0YsRUFFRCxhQUFjLENBQ1osS0FBTSxDQUFFLFFBQU8sVUFBVyxLQUFLLE9BQy9CLEdBQUksRUFBTyxDQUNULEtBQU0sR0FBVyxFQUFXLENBQUssRUFBSSxFQUFNLEtBQUssSUFBSSxFQUFJLEVBQ3hELEFBQUksRUFBUyxDQUFRLEdBR25CLEtBQUssVUFBVSxJQUFNLENBQ25CLFNBQVcsQ0FBQyxFQUFLLElBQWEsUUFBTyxRQUFRLENBQVEsRUFBRyxDQUV0RCxLQUFNLEdBQU8sS0FBSyxnQkFBZ0IsbUJBQW1CLENBQUcsRUFDcEQsUUFBUSxJQUNSLEVBQ0osS0FBSyxPQUFPLEVBQU0sQ0FBUSxDQUMzQixDQUNiLENBQVcsQ0FFSixDQUVELEtBQU0sR0FBVyxDQUFDLEVBQUssRUFBTyxJQUFhLENBQ3pDLEFBQUksRUFBVyxDQUFRLEVBQ3JCLEtBQUssR0FBRyxFQUFVLENBQUssRUFBRyxDQUFRLEVBRWxDLFFBQVEsTUFBTSw2QkFBNkIsTUFBUSxHQUFVLENBRWhFLEVBRUQsR0FBSSxFQUNGLFNBQVcsQ0FBQyxFQUFLLElBQVUsUUFBTyxRQUFRLENBQU0sRUFDOUMsRUFBUyxFQUFLLEVBQUssQ0FBSyxFQU01QixTQUFXLENBQUMsRUFBSyxJQUFVLFFBQU8sUUFBUSxLQUFLLE1BQU0sRUFDbkQsQUFBSSxXQUFXLEtBQUssQ0FBRyxHQUNyQixFQUFTLEVBQUssRUFBSSxNQUFNLENBQUMsRUFBRyxDQUFLLENBR3RDLE9BRUssV0FBVSxFQUFPLENBQ3JCLFVBQVUsS0FDVixTQUFTLE1BQ1AsR0FBSSxDQUNOLEtBQU0sR0FBZSxLQUFLLGFBQWEsQ0FBSyxFQUN0QyxFQUFxQixpQkFBUSxhQUFhLEdBQ2hELEdBQUksR0FBZ0IsRUFBb0IsQ0FLdEMsQUFBSSxDQUFDLE9BQVEsUUFBUSxFQUFFLFNBQVMsQ0FBSyxHQUNuQyxLQUFNLE1BQUssVUFBVyxFQUd4QixLQUFNLEdBQWEsSUFBTyxFQUFVLEVBQVksSUFBSSxLQUFNLENBQU8sRUFDM0QsRUFBTSxFQUNSLEtBQU0sTUFBSyxLQUFLLEVBQU8sRUFBVSxDQUFFLEVBQ25DLE9BRUosTUFBSSxJQUFzQixJQUFRLElBQ2hDLEVBQU8sS0FBSyxFQUFPLEdBQVksRUFFMUIsQ0FDUixDQUNGLEVBRUQsZ0JBQWdCLEVBQU8sRUFBUSxDQUM3QixNQUFPLE1BQUssZ0JBQWdCLFVBQVUsRUFBTyxDQUFNLENBQ3BELENBQ0YsQ0FDSCxFQUVBLEdBQUlBLElBQU0sRUNuaEJILEtBQU0sSUFBYSxDQUN4QixTQUFVLEdBQVMsR0FBYSxDQUFLLEVBQ3JDLFFBQVMsWUFDWCxFQ0xhLEdBQVcsQ0FDdEIsU0FBVSxDQUFDLEVBQU8sSUFBYSxDQUM3QixLQUFNLEdBQVEsSUFBYSxJQUFNLElBQU0sTUFBTSxLQUM3QyxNQUFPLElBQUksUUFBTyxvQkFBb0IsTUFBVSxFQUFFLEtBQUssQ0FBSyxDQUM3RCxFQUVELFFBQVMsQ0FBQyxFQUFPLElBQ2YsbUNBQ0UsQ0FBQyxHQUFZLElBQWEsSUFBTSxHQUFLLGtCQUczQyxFQ1RhLEdBQVEsQ0FDbkIsU0FBVSxHQUFTLEdBQVEsQ0FBSyxFQUNoQyxRQUFTLHVCQUNYLEVDSGEsR0FBVyxDQUN0QixTQUFVLEdBQVMsR0FBVyxDQUFLLEVBQ25DLFFBQVMsb0JBQ1gsRUNIYSxHQUFTLENBQ3BCLFNBQVUsR0FBUyxHQUFTLENBQUssRUFDakMsUUFBUyxpQkFDWCxFQ0hhLEdBQVUsQ0FDckIsU0FBVSxHQUFTLEVBQVUsQ0FBSyxFQUNsQyxRQUFTLHNCQUNYLEVDTGEsR0FBTSxDQUNqQixTQUFVLENBQUMsRUFBTyxJQUFRLEdBQVMsRUFDbkMsUUFBUSxFQUFPLEVBQUssQ0FDbEIsTUFBTyxXQUFXLFdBQ25CLENBQ0gsRUNMYSxHQUFNLENBQ2pCLFNBQVUsQ0FBQyxFQUFPLElBQVEsR0FBUyxFQUNuQyxRQUFRLEVBQU8sRUFBSyxDQUNsQixNQUFPLFdBQVcsV0FDbkIsQ0FDSCxFQ0xhLEdBQVcsQ0FHdEIsU0FBVSxJQUFNLEVBQ2xCLEVDSmEsR0FBUSxDQUNuQixTQUFVLENBQUMsRUFBTyxDQUFDLEVBQUssS0FBUyxHQUFTLEdBQU8sR0FBUyxFQUMxRCxRQUFRLEVBQU8sQ0FBQyxFQUFLLEdBQU0sQ0FDekIsTUFBTyxtQkFBbUIsU0FBVyxHQUN0QyxDQUNILEVDTGEsR0FBVyxDQUN0QixTQUFVLENBQUMsRUFBTyxFQUFVLENBQUUsY0FDM0IsR0FBUyxNQUFRLElBQVUsSUFHM0IsR0FBWSxJQUFVLE9BRXpCLFFBQVMsY0FDVCxRQUFTLEVBQ1gsRUNQYSxHQUFNLENBQ2pCLFNBQVUsR0FBUyxHQUFNLENBQUssRUFDOUIsUUFBUyxvQkFDWCw4TkNEZSxHQUFBLENBQ2IsTUFBTyxDQUNMLE1BQU8sQ0FDTCxVQUFXLEdBQ1gsUUFBUyxHQUNULFlBQWEsR0FDYixRQUFTLEdBQ1QsT0FBUSxJQUNULENBQ0YsRUFFRCxTQUFVLENBQ1IsUUFBUyxDQUNQLE1BQU8sQ0FDTCxNQUFPLElBQU0sQ0FDWCxLQUFLLFVBQVksRUFDbEIsRUFDRCxLQUFNLElBQU0sQ0FDVixLQUFLLFNBQVUsQ0FDaEIsRUFDRCxPQUFRLElBQU0sQ0FDWixLQUFLLFVBQVcsQ0FDakIsRUFDRCxNQUFPLElBQU0sQ0FDWCxLQUFLLFVBQVcsQ0FDakIsQ0FDRixDQUNGLENBQ0YsRUFFRCxRQUFTLENBQ1AsaUJBQWtCLENBQ2hCLEtBQUssVUFBWSxHQUNqQixLQUFLLFFBQVUsR0FDZixLQUFLLFlBQWMsR0FDbkIsS0FBSyxRQUFVLEdBQ2YsS0FBSyxZQUFhLENBQ25CLEVBRUQsU0FBUyxFQUFTLEdBQU0sQ0FDdEIsR0FBSSxHQUFVLEdBQ2QsQUFBSSxHQUNGLEtBQUssWUFBYSxFQUVwQixLQUFNLENBQUUsU0FBVSxLQUVsQixTQUFXLENBQUMsRUFBTSxJQUFZLFFBQU8sUUFBUSxLQUFLLFdBQVcsRUFBRyxDQUM5RCxLQUFNLEdBQVksR0FBWSxHQUM5QixHQUFJLEdBQWMsR0FBVSxTQUFXLEdBQVMsTUFBTyxDQUNyRCxLQUFNLENBQUUsV0FBVSxXQUFZLEVBQzlCLEdBQUksQ0FBQyxFQUFTLEVBQU8sRUFBUyxLQUFLLFdBQVcsR0FDNUMsR0FBVSxHQUNOLEdBQVEsQ0FDVixLQUFNLEdBQVEsRUFBVyxDQUFPLEVBQzVCLEVBQVEsRUFBTyxFQUFTLElBQUksRUFDNUIsRUFDSixLQUFLLFNBQVMsRUFBTyxFQUFJLENBQzFCLENBRUosQ0FDRixDQUNELE1BQUksSUFDRixNQUFLLFlBQWMsR0FDbkIsS0FBSyxRQUFVLEdBRVYsQ0FDUixFQUVELFFBQVMsQ0FDUCxNQUFPLE1BQUssU0FBUyxFQUFLLENBQzNCLEVBRUQsV0FBWSxDQUNWLEtBQUssUUFBVSxHQUNmLEtBQUssWUFBYyxHQUNuQixLQUFLLFFBQVUsR0FFZixLQUFLLFlBQWEsQ0FDbkIsRUFFRCxTQUFTLEVBQU8sRUFBVyxHQUFPLENBQ2hDLEtBQUssUUFBTCxNQUFLLE9BQVcsQ0FBRSxHQUNkLEdBRUYsR0FBUSxPQURNLEtBQUssT0FBUyxLQUFLLGFBQWUsS0FBSyxjQUN2QixNQUVoQyxLQUFLLE9BQU8sS0FBSyxDQUFLLEVBQ3RCLEtBQUssTUFBTSxTQUFVLEtBQUssTUFBTSxDQUNqQyxFQUVELHFCQUFxQixFQUFRLEVBQU8sQ0FFbEMsS0FBSyxPQUFTLENBQUUsRUFDaEIsU0FBVyxDQUFFLFlBQWEsR0FDeEIsS0FBSyxTQUFTLEVBQVMsRUFBSSxFQUU3QixNQUFJLElBQ0YsS0FBSyxNQUFPLEVBRVAsRUFDUixFQUVELFdBQVksQ0FDVixNQUFPLE1BQUssT0FBUyxDQUFDLEdBQUcsS0FBSyxNQUFNLEVBQUksSUFDekMsRUFFRCxhQUFjLENBQ1osS0FBSyxPQUFTLEtBQ2QsS0FBSyxNQUFNLFNBQVUsS0FBSyxNQUFNLENBQ2pDLENBQ0YsQ0FDSCxFQy9HTyxXQUNMLEVBQ0EsQ0FBRSxPQUFNLFFBQVMsRUFBSyxNQUFLLE1BQUssV0FBVyxJQUFTLENBQUUsRUFDdEQsQ0FHQSxBQUFJLEVBQVMsQ0FBYSxHQUFLLEVBQWMsU0FBUyxHQUFHLEdBQ3ZELEdBQWdCLEVBQWMsQ0FBYSxHQUc3QyxLQUFNLEdBQU8sRUFBa0IsQ0FBYSxFQUM1QyxNQUFPLENBQ0wsS0FBTSxDQUdKLEtBQU0sR0FBUSxDQUFDLEdBQU8sRUFBSSxPQUFTLEVBSS9CLEtBQUssV0FBYSxJQUFRLE1BQUssVUFDN0IsS0FBSyxVQUFVLEdBQ2YsS0FBSyxlQUFlLEVBQWUsQ0FBRSxPQUFNLFFBQVMsRUFBSyxXQUFVLEVBQ3JFLE9BQ0osTUFBTyxHQUFNLEVBQUksS0FBSyxLQUFNLENBQUssRUFBSSxDQUN0QyxFQUVELElBQUksRUFBTyxDQUNULEFBQUksRUFDRixFQUFJLEtBQUssS0FBTSxDQUFLLEVBRXBCLE1BQUssV0FBTCxNQUFLLFVBQWMsQ0FBRSxHQUNyQixLQUFLLEtBQUssS0FBSyxVQUFXLEVBQU0sQ0FBSyxFQUV4QyxDQUNGLENBQ0gsQ0FFTyxZQUEwQixFQUFNLENBQUUsUUFBUyxFQUFLLE1BQUssT0FBUSxHQUFJLENBQ3RFLE1BQU8sQ0FDTCxLQUFNLENBQ0osR0FBSSxHQUFRLEtBQUssU0FBUyxDQUFJLEVBQzlCLE1BQUksS0FBVSxRQUFhLElBQVEsUUFFakMsR0FBUSxFQUFXLENBQUcsRUFBSSxFQUFJLEtBQUssS0FBTSxLQUFLLE9BQU8sRUFBSSxFQUV6RCxLQUFLLEdBQVEsRUFFYixLQUFLLFNBQVMsQ0FBSSxHQUliLEVBQU0sRUFBSSxLQUFLLEtBQU0sQ0FBSyxFQUFJLENBQ3RDLEVBRUQsSUFBSSxFQUFPLENBR1QsQUFBSSxFQUFDLEdBQVEsR0FBUSxFQUFJLEtBQUssS0FBTSxDQUFLLEtBQU8sU0FDOUMsS0FBSyxTQUFTLEVBQU0sQ0FBSyxDQUU1QixDQUNGLENBQ0gsQ0NsRUEsS0FBTSxJQUFTLEdBQUksU0FHbkIsR0FBSSxJQUFNLEVBQ0gsWUFBZ0IsRUFBUSxFQUFRLENBQ3JDLEdBQUksR0FBSyxHQUFPLElBQUksQ0FBTSxFQUMxQixNQUFLLElBQ0gsR0FBSyxFQUFLLEdBQVUsSUFBSSxFQUFFLEtBQzFCLEdBQU8sSUFBSSxFQUFRLENBQUUsR0FFaEIsQ0FDVCxDQ1dPLE1BQU0sRUFBWSxDQUFsQixjQUNMLGdCQUFRLENBQUUsR0FDVixxQkFBYSxDQUFFLEdBRWYsSUFBSSxFQUFVLEVBQVUsRUFBVSxPQUNoQyxFQUFXLEVBQWMsQ0FBUSxFQUNqQyxHQUFJLEdBQVcsS0FBSyxNQUNwQixTQUFXLEtBQVEsR0FBVSxDQUMzQixLQUFNLEdBQU0sRUFBVSxDQUFDLENBQUksRUFBSSxJQUFNLEVBQ3JDLEVBQVksc0JBQWtCLEVBQy9CLENBQ0QsRUFBUyxVQUFZLFNBQ2hCLEdBQ0EsRUFBUyxXQUNULEVBRU4sQ0FFRCxVQUFVLEVBQVUsRUFBUSxDQUcxQixLQUFLLElBQUksRUFBVSxDQUFFLEtBQU0sU0FBVSxVQUFVLENBQUUsUUFBUyxHQUFPLENBQ2xFLENBRUQsaUJBQWlCLEVBQVUsQ0FDekIsS0FBSyxJQUFJLEVBQVUsQ0FDakIsUUFBUyxHQUNULFVBQVcsS0FBSyxtQkFBbUIsQ0FBUSxDQUNqRCxDQUFLLENBQ0YsQ0FFRCxZQUFZLEVBQVUsRUFBaUIsRUFBUSxDQUM3QyxLQUFLLElBQUksRUFBVSxDQUNqQixLQUFNLFdBQ04sU0FDQSxTQUFVLENBQUMsQ0FBQyxFQUNaLFVBQVcsS0FBSyxtQkFBbUIsQ0FBZSxDQUN4RCxDQUFLLENBQ0YsQ0FFRCxtQkFBbUIsRUFBVSxTQUMzQixNQUFPLEdBQ0YsV0FBSyxZQUFMLGlCQUE4QixHQUFPLENBQUMsRUFDdkMsSUFDTCxDQUVELFNBQVUsQ0FDUixLQUFNLEdBQVUsR0FBUyxDQUN2QixLQUFNLEdBQVUsQ0FBRSxFQUNsQixTQUFXLEtBQXFDLFFBQU8sUUFBUSxDQUFLLEVBQUcsQ0FBbEUsS0FBWSxDQUFMLEVBQUssR0FBWixFQUFZLElBQUUsY0FBRixFQUFnQixJQUFoQixFQUFnQixDQUFkLGNBQ2pCLEFBQUksR0FDRixFQUFRLEtBQUssQ0FBQyxFQUFLLENBQVMsQ0FBQyxFQUUvQixTQUFXLENBQUMsRUFBUSxJQUFhLEdBQVEsQ0FBUSxFQUMvQyxFQUFRLEtBQUssQ0FBQyxHQUFHLEtBQU8sSUFBVSxDQUFRLENBQUMsQ0FFOUMsQ0FDRCxNQUFPLEVBQ1IsRUFFRCxNQUFPLEdBQVEsS0FBSyxLQUFLLENBQzFCLENBRUQsUUFBUSxFQUFjLEVBQU0sQ0FBRSxVQUFVLENBQ3RDLEtBQU0sR0FBWSxJQUFXLFlBQzdCLEFBQUksR0FDRixNQUFPLEdBQUssRUFBYSxPQUFTLE1BRXBDLFNBQVcsQ0FBQyxFQUFVLElBQWEsTUFBSyxRQUFPLEVBQUksQ0FDakQsS0FBTSxDQUFFLE9BQU0sU0FBUSxXQUFVLFVBQVMsYUFBYyxFQUNqRCxFQUFTLElBQVMsU0FDbEIsRUFBVyxJQUFTLFdBQzFCLEdBQUksR0FBVSxHQUFZLEVBQVUsQ0FDbEMsS0FBTSxHQUFTLEVBQW1CLEVBQU0sRUFBVSxJQUFNLElBQUksRUFDdEQsRUFBVyxHQUFhLEdBQVUsQ0FBQyxFQUNuQyxFQUFjLEdBQ2xCLElBQVksR0FDWixHQUFVLEdBRVosU0FBVyxLQUFTLEdBQVEsQ0FBTSxFQUFFLEtBQUksRUFBSSxDQUMxQyxLQUFNLEdBQ0osR0FBVSxFQUFPLE9BQ2pCLEdBQVksRUFBTyxVQUNuQixLQUVGLEdBQUksR0FBSyxpQkFBUSxHQUNqQixHQUFJLEdBQU0sTUFDSixJQUNGLE1BQU8sR0FBTSxHQUNULEdBQWUsR0FBYyxDQUFFLEdBQUcsQ0FDdEMsQUFBSSxHQUFjLENBQUUsR0FDbEIsR0FBSyxFQUFHLE1BQU0sQ0FBQyxHQUVqQixLQUFNLEdBQVMsRUFFWCxFQUVBLEVBQVMsTUFBUSxPQUNmLEVBQVcsRUFDYixJQUFJLElBR0osRUFDRSxHQUFHLEtBQWEsSUFDaEIsRUFDTixFQUFNLEdBQVUsRUFDWixJQUFXLEdBQ2IsTUFBTyxHQUFNLEVBRWhCLENBRUosQ0FDRixDQUNGLENBQ0QsTUFBTyxFQUNSLENBQ0gsQ0NqSUEsS0FBTSxJQUFpQixDQUFFLEVBQ25CLEdBQXNCLENBQUUsRUFFdkIsWUFBK0IsRUFBTSxFQUFXLENBQ3JELEdBQWUsR0FBUSxDQUN6QixDQUVPLFlBQTBCLEVBQU0sRUFBWSxHQUFPLENBQ3hELEtBQU0sR0FBWSxHQUFlLElBQVMsS0FDMUMsR0FBSSxDQUFDLEdBQWEsQ0FBQyxHQUFhLENBQUMsR0FBb0IsR0FFbkQsU0FBb0IsR0FBUSxHQUN0QixHQUFJLE9BQU0saUNBQWlDLElBQU8sRUFFMUQsTUFBTyxFQUNULENBRU8sWUFBdUIsRUFBUSxFQUFVLENBQzlDLEtBQU0sR0FBVSxDQUNkLEdBQUcsT0FBTyxPQUFPLGtCQUFRLE9BQVEsQ0FBQSxDQUFFLEVBQ25DLENBQ0QsRUFDRCxTQUFXLEtBQVUsR0FDbkIsR0FBSSxFQUFRLENBQ1YsS0FBTSxHQUFNLEVBQVMsQ0FBTSxFQUMzQixHQUFJLElBQVEsT0FDVixNQUFPLEVBRVYsQ0FFTCxDQUVPLFlBQWdDLEVBQVEsRUFBVSxDQUN2RCxNQUFPLElBQWMsRUFBUSxHQUFVLENBQ3JDLFNBQVcsQ0FBQyxFQUFNLElBQWMsUUFBTyxRQUFRLEVBQU8sWUFBYyxDQUFBLENBQUUsRUFBRyxDQUN2RSxLQUFNLEdBQU0sRUFBUyxFQUFXLENBQUksRUFDcEMsR0FBSSxJQUFRLE9BQ1YsTUFBTyxFQUVWLENBQ0wsQ0FBRyxDQUNILENBU08sWUFBNkIsRUFBUSxFQUFVLENBQ3BELE1BQU8sSUFDTCxFQUNBLENBQUMsRUFBVyxJQUFTLEVBQVMsRUFBVyxDQUFJLEVBQUksR0FBTyxNQUM1RCxJQUFRLEVBQ1IsQ0FTTyxrQkFBNkIsRUFBUSxFQUFlLEdBQU8sQ0FPaEUsR0FOSSxFQUFXLENBQU0sR0FDbkIsR0FBUyxFQUFRLEdBRWYsR0FBVSxDQUFNLEdBQ2xCLEdBQVMsS0FBTSxJQUViLEdBQVMsQ0FBTSxHQUVqQixHQUFTLEtBQUssR0FFVixDQUFDLEVBQU8sTUFBUyxJQUFnQixFQUFPLFVBQVUsQ0FDcEQsS0FBTSxHQUFPLE9BQU8sS0FBSyxDQUFNLEVBQy9CLEdBQUksRUFBSyxTQUFXLEVBQUcsQ0FDckIsS0FBTSxHQUFPLEVBQUssR0FDbEIsRUFBUyxFQUFPLEdBQ2hCLEVBQU8sS0FBTyxDQUNmLENBQ0YsQ0FFSCxNQUFPLEVBQ1QsQ0FFTyxrQkFDTCxFQUNBLEVBQWMsR0FDZCxDQUNBLEdBQUksR0FBVSxFQUFXLENBQWlCLEVBQ3RDLEVBQW1CLEVBQ25CLEVBQ0osU0FBVSxLQUFNLElBQWMsRUFBUyxFQUFLLEVBQzVDLEFBQUksRUFBUSxDQUFPLEVBR2pCLEVBQVUsT0FBTyxZQUFZLEtBQU0sU0FBUSxJQUFJLEVBQVEsSUFDckQsS0FBTSxJQUFRLENBQ1osS0FBTSxHQUFTLEtBQU0sR0FBWSxFQUFNLEVBQUksRUFDM0MsTUFBTyxDQUFDLEVBQU8sS0FBTSxDQUFNLENBQzVCLENBQ1AsQ0FBSyxDQUFDLEVBQ08sRUFBUyxDQUFPLEdBQ3pCLEdBQVUsT0FBTyxZQUFZLEtBQU0sU0FBUSxJQUFJLE9BQU8sUUFBUSxDQUFPLEVBQUUsSUFDckUsTUFBTyxDQUFDLEVBQUssS0FBVSxDQUNyQixLQUFNLEdBQVMsS0FBTSxHQUFZLEVBQU0sRUFBSSxFQUMzQyxNQUFPLENBQUMsRUFBSyxDQUFNLENBQ3BCLENBQ1AsQ0FBSyxDQUFDLEdBRUcsQ0FDVCxDQUVPLGtCQUE2QixFQUFRLENBQzFDLEtBQU0sQ0FBRSxVQUFXLEVBQ25CLEFBQUksRUFBTyxRQUNULEdBQU8sT0FBUyxLQUFNLElBQWUsQ0FBTSxFQUUvQyxDQUVPLGtCQUEyQixFQUFXLEVBQUssRUFBUSxFQUFNLEVBQVEsQ0FDdEUsS0FBTSxHQUFXLENBQUUsRUFDbkIsR0FBbUIsRUFBSyxFQUFRLENBQUksRUFDcEMsS0FBTSxJQUFjLENBQU0sRUFDMUIsQUFBSSxHQUFzQixDQUFNLEVBQzlCLEtBQU0sSUFBaUIsRUFBSyxFQUFRLEVBQU0sRUFBVSxDQUFDLEVBR3JELEtBQU0sSUFBd0IsRUFBSyxFQUFRLEVBQVUsQ0FBQyxFQUV4RCxFQUFPLEtBQUssQ0FDVixLQUFNLElBQUksRUFBTyxPQUNqQixXQUNBLFlBQ0EsS0FBTSxDQUNKLE1BQ0EsUUFDRCxDQUNMLENBQUcsQ0FDSCxDQUVPLFlBQTBCLEVBQUssRUFBUSxFQUFNLEVBQVEsRUFBTyxTQUNqRSxTQUFPLE1BQVEsRUFFUixRQUFlLENBQU0sSUFBckIsY0FBd0IsZ0JBQXhCLHFCQUNMLEVBQUssRUFBUSxFQUFNLEVBQVEsRUFFL0IsQ0FFTyxZQUE0QixFQUFLLEVBQVEsRUFBTSxDQUVwRCxFQUFPLEtBQU8sRUFDZCxFQUFPLEtBQU8sRUFBTyxNQUFRLEVBQUksY0FBYyxDQUFJLENBQ3JELENBRU8sa0JBQXVDLEVBQUssRUFBUSxFQUFRLEVBQU8sQ0FDeEUsS0FBTSxHQUFXLENBQUUsRUFDbkIsR0FBdUIsRUFBUSxDQUFDLEVBQVcsSUFBUyxDQUNsRCxFQUFTLEtBQUssR0FBaUIsRUFBSyxFQUFXLEVBQU0sRUFBUSxDQUFLLENBQUMsQ0FDdkUsQ0FBRyxFQUNELEtBQU0sU0FBUSxJQUFJLENBQVEsQ0FDNUIsQ0FFTyxrQkFBNEIsRUFBSyxFQUFRLEVBQU8sQ0FFckQsR0FBSSxDQUFFLE9BQU0sUUFBTyxjQUFlLEVBQ2xDLEFBQUksRUFDRixFQUFRLEVBQU8sTUFBUSxLQUFNLElBQWUsRUFBTyxFQUFXLEVBQ3pELEFBQUksRUFDVCxFQUFPLEVBQU8sS0FBTyxLQUFNLElBQVksQ0FBSSxFQUNsQyxHQUdMLEVBQVMsQ0FBVSxHQUNyQixHQUFPLENBQUUsWUFBWSxHQUd6QixNQUFVLENBQUUsUUFBUyxDQUFNLEdBQzNCLEtBQU0sR0FBVyxDQUFFLEVBQ25CLFNBQVcsS0FBUSxRQUFPLE9BQU8sQ0FBSyxFQUNwQyxLQUFNLElBQXdCLEVBQUssRUFBTSxFQUFVLEVBQVEsQ0FBQyxFQUU5RCxNQUFPLEVBQ1QsQ0FFTyxrQkFBMkIsRUFBTSxDQUN0QyxTQUFPLEtBQU0sSUFBYyxFQUFNLEVBQUksRUFDakMsR0FDRixLQUFNLElBQWMsQ0FBSSxFQUVuQixDQUNULENBRU8sWUFBK0IsRUFBUSxDQUU1QyxNQUFPLENBQUMsQ0FBQyxFQUFPLElBQ2xCLENBRU8sV0FBdUIsRUFBUSxDQUdwQyxNQUFPLEdBQVMsQ0FBTSxHQUFLLENBQUMsQ0FDMUIsR0FBTyxNQUNQLEVBQU8sT0FDUCxFQUFPLFdBRVgsQ0FFTyxZQUFnQyxFQUFRLENBQzdDLE1BQU8sUUFBTyxLQUFLLGtCQUFRLFFBQVMsQ0FBRSxDQUFBLEVBQUUsT0FBUyxDQUNuRCxDQUVPLFlBQXVCLEVBQVEsRUFBUyxDQUM3QyxLQUFNLENBQUUsUUFBUyxFQUNYLEVBQWEsR0FBUSxFQUFRLE1BQU0sR0FDekMsTUFBTyxHQUNILEVBQWMsQ0FBVSxFQUN0QixFQUdBLEdBQWMsRUFBWSxHQUFVLE9BQ3BDLEtBQU0sR0FBZ0IsS0FBTyxhQUFQLGNBQW9CLEdBQzFDLEdBQUksRUFBYyxDQUFhLEVBQzdCLE1BQU8sRUFFakIsQ0FBTyxFQUNELElBQ04sQ0FFTyxZQUF5QixFQUFRLEVBQVMsQ0FDL0MsS0FBTSxHQUFPLEdBQWMsRUFBUSxDQUFPLEVBQzFDLE1BQU8sR0FDSCxFQUFLLFFBQVUsRUFDYixJQUFJLEVBQUssT0FDVCxJQUFJLEVBQUssUUFBUSxFQUFLLE9BQ3hCLElBQ04sQ0FFTyxXQUF3QixFQUFRLEVBQVMsRUFBWSxDQUMxRCxLQUFNLEdBQU8sR0FBYyxFQUFRLENBQU8sRUFDMUMsR0FBSSxFQUNGLEVBQVMsVUFDQSxFQUFPLEtBQ2hCLEtBQU0sSUFBSSxPQUFNLGtCQUFrQixFQUFPLE9BQU8sRUFHbEQsR0FBSSxDQUFFLE9BQU0sUUFBTyxhQUFZLFdBQVksRUFDM0MsR0FBSSxDQUFDLEdBQVEsQ0FBQyxFQUNaLEdBQUksRUFFRixFQUFPLENBQUUsYUFBWSxTQUFTLE1BRzlCLE9BQU8sQ0FBRSxFQUdiLGFBQVUsQ0FBRSxRQUFTLENBQU0sR0FDcEIsT0FBTyxZQUNaLE9BQU8sUUFBUSxDQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBTSxLQUFVLE9BRTFDLE1BQUksR0FBVyxFQUFLLFVBQVUsR0FDNUIsR0FBTyxPQUNGLEdBREUsQ0FFTCxXQUFZLEVBQUssV0FBVyxDQUFPLENBQ3BDLElBRUksQ0FBQyxFQUFNLG9CQUFhLEtBQWIsT0FBc0IsQ0FBSSxDQUM5QyxDQUFLLENBQ0YsQ0FDSCxDQUVPLFlBQW9DLEVBQU8sRUFBTSxDQUN0RCxNQUFPLEdBQU0saUJBQU0sT0FBUyxFQUFNLFNBQVcsSUFDL0MsQ0FFTyxZQUEyQixFQUFRLEVBQU0sRUFBUyxDQUN2RCxNQUFPLElBQTJCLEVBQWUsRUFBUSxDQUFPLEVBQUcsQ0FBSSxDQUN6RSxDQUVPLFlBQWtCLEVBQVEsQ0FDL0IsTUFBTyxHQUFPLFFBQVUsRUFDMUIsQ0FFTyxZQUFtQixFQUFRLENBQ2hDLE1BQU8sQ0FBQyxDQUFDLEVBQU8sT0FDbEIsQ0FFTyxZQUFtQixFQUFRLENBQ2hDLE1BQU8sQ0FBQyxDQUFFLEdBQU8sU0FBVyxFQUFPLFdBQ3JDLENBRU8sWUFBa0IsRUFBUSxPQUMvQixNQUFPLENBQUMsQ0FDTixHQUFPLFFBQ1AsTUFBZSxDQUFNLElBQXJCLGNBQXdCLGlCQUFrQixHQUU5QyxDQUVPLFlBQTJCLEVBQVEsT0FDeEMsTUFBTyxDQUFDLENBQUMsTUFBZSxDQUFNLElBQXJCLFFBQXdCLFlBQ25DLENBRU8sWUFBeUIsRUFBUSxPQU10QyxLQUFNLEdBQWUsRUFBTyxRQUN0QixFQUFRLElBQWlCLE9BQzNCLEVBQ0EsS0FBZSxDQUFNLElBQXJCLGNBQXdCLGFBQzVCLE1BQU8sR0FBVyxDQUFLLEVBQ25CLEVBQU0sQ0FBTSxFQUNaLEdBQU0sQ0FBSyxDQUNqQixDQUVPLFlBQTRCLEVBQVEsT0FDekMsS0FBTSxHQUFjLEVBQWUsQ0FBTSxFQUN6QyxNQUFPLENBQUMsQ0FDTixtQkFBYSxlQUNiLHFCQUFhLHFCQUFiLHFCQUFrQyxJQUV0QyxDQUVPLFlBQW1CLEVBQVEsQ0FDaEMsS0FBTSxHQUFrQixHQUN0QixPQUFPLE9BQU8sR0FBYyxDQUFFLENBQUEsRUFBRSxLQUFLLEVBQVEsRUFFL0MsTUFDRSxHQUFnQixFQUFPLFVBQVUsR0FDakMsT0FBTyxPQUFPLEVBQU8sTUFBUSxDQUFBLENBQUUsRUFBRSxLQUFLLENBQWUsQ0FFekQsQ0FFTyxZQUFxQixFQUFRLEVBQU8sQ0FBQSxFQUFJLEVBQVcsQ0FXeEQsTUFBTyxJQUNMLEVBQVEsRUFBTSxLQUFNLEtBVEEsQ0FBQyxFQUFRLEVBQU0sSUFBUyxDQUM1QyxBQUFJLENBQUUsS0FBUSxLQUFTLENBQUMsR0FBbUIsQ0FBTSxHQUMvQyxHQUFLLEdBQVEsR0FBZ0IsQ0FBTSxFQUV0QyxFQUswQyxLQVgzQixDQUFFLFlBQVcsU0FBVSxDQUFNLENBWTVDLENBQ0gsQ0FFTyxZQUFzQixFQUFRLEVBQU0sRUFBTSxFQUFVLENBQ3pELFlBQVksS0FDWixXQUFXLGlCQUFXLFVBQ3BCLEdBQUksQ0FDTixLQUFNLENBQUUsV0FBWSxFQUNwQixHQUFJLEVBQVMsQ0FDWCxLQUFNLEdBQVEsRUFBUSxFQUFZLElBQUksRUFBVyxDQUcvQyxNQUFPLEVBQUssR0FDWixPQUNBLE9BQ0EsV0FDQSxVQUNOLENBQUssQ0FBQyxFQUNGLEFBQUksSUFBVSxRQUdaLEVBQUksSUFBSSxFQUFNLEVBQU0sQ0FBSyxDQUU1QixDQUVELE1BQUksQ0FBRSxLQUFRLEtBQVMsQ0FBQyxHQUFtQixDQUFNLEdBQy9DLEVBQUksSUFBSSxFQUFNLEVBQU0sR0FBZ0IsQ0FBTSxDQUFDLEVBSXRDLEVBQUssRUFDZCxDQUVBLFlBQW1CLEVBQWMsRUFBTSxFQUFTLENBQzlDLEdBQUksRUFBUSxXQUFZLENBQ3RCLEtBQU0sR0FBTyxDQUFFLEVBQ1QsQ0FBRSxRQUFRLEtBQU0sWUFBYSxFQUM3QixFQUFLLEVBQUssR0FDaEIsTUFBSSxLQUFPLFFBQ1QsR0FBSyxHQUFTLEdBR1osR0FBdUIsQ0FBWSxHQUNyQyxHQUFLLEtBQU8sRUFBSyxNQUVmLEdBQ0YsR0FBSyxHQUFZLEVBQUssSUFFakIsQ0FDWCxLQUNJLE9BQU8sTUFBSyxFQUVoQixDQUVPLFlBQXFCLEVBQVEsRUFBYyxFQUFNLEVBQVUsQ0FDaEUsWUFDQSxhQUNBLFVBQ0UsR0FBSSxDQUNOLEtBQU0sR0FBVSxDQUFFLFlBQVcsYUFBWSxTQUFRLFNBQVUsQ0FBTSxFQUMzRCxFQUFnQixHQUFVLEVBQWMsRUFBTSxDQUFPLEVBQ3JELEVBQVEsR0FBSSxJQWtGbEIsVUFDRSxFQUNBLEVBQ0EsRUFDQSxFQXBGb0IsQ0FBQyxFQUFRLEVBQU0sRUFBTSxFQUFVLElBQWtCLENBQ3JFLEdBQUksR0FBUSxHQUFhLEVBQVEsRUFBTSxFQUFNLEVBQVUsQ0FBTyxFQUc5RCxHQUFJLEVBQVEsQ0FBSyxFQUFHLENBQ2xCLEtBQU0sQ0FBRSxpQkFBZ0IsV0FBVSxRQUFRLE1BQVMsRUFDbkQsQUFBSSxFQUNGLEVBQVEsRUFBTSxJQUFJLEdBQVUsR0FDekIsR0FBaUIsQ0FDNUIsRUFBVSxFQUdGLEVBQVEsQ0FBQyxHQUFHLENBQUssRUFFZixHQUFZLElBQVcsYUFJekIsRUFBTSxLQUFLLENBQUMsRUFBRyxJQUFNLENBQ25CLEtBQU0sR0FBTSxpQkFBSSxHQUNWLEdBQU0saUJBQUksR0FDaEIsTUFDRSxJQUFPLE1BQVEsR0FBYyxDQUFHLEVBQUksRUFDbEMsSUFBTyxNQUFRLEdBQWMsRUFBRyxFQUFJLEdBQ3BDLEVBQU0sRUFFcEIsQ0FBUyxDQUVKLENBQ0QsRUFBYyxHQUFRLENBQ3ZCLEVBRW9CLENBQUMsRUFBUSxFQUFNLEVBQU0sRUFBVSxJQUFrQixDQUNwRSxLQUFNLENBQUUsaUJBQWdCLFVBQVMsV0FBWSxFQUM3QyxHQUFJLEdBQVEsRUFBYyxHQUUxQixLQUFNLEdBQWMsRUFBZSxDQUFNLEVBR25DLEVBQWEsSUFBTSxFQUFZLElBQUksRUFBVyxDQUNsRCxRQUNBLE9BQ0EsT0FDQSxXQUNBLFNBQVUsRUFBUSxTQUdsQixlQUNOLENBQUssRUFjRCxHQVZJLEdBQWtCLEVBQVEsQ0FBSyxHQUNqQyxHQUFRLEVBQU0sSUFBSSxHQUFVLEVBQU8sRUFBZSxHQUtoRCxHQUNGLEdBQVEsRUFBUSxHQUFZLEdBSTVCLGtCQUFhLGVBRWIsSUFBWSxJQUNaLEVBQVcsQ0FBTyxHQUFLLEVBQVEsRUFBVSxDQUFFLEVBRTNDLE1BQU8sR0FBYyxPQUNoQixDQUdMLEtBQU0sR0FBZSxpQkFBYSxhQUNsQyxBQUFJLEdBQ0YsR0FBUSxFQUFhLEVBQVEsRUFBTyxFQUFVLENBQUssR0FFckQsRUFBYyxHQUFRLENBQ3ZCLENBQ0YsRUFTQyxDQUNELEVBRU0sRUFBTSxRQUFRLEVBQWMsRUFBZSxDQUFPLENBQzNELENBRU8sWUFDTCxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLENBQ0EsS0FBTSxHQUFvQixHQUFjLENBQ3RDLEtBQU0sR0FBYyxDQUFDLEVBQVUsSUFBVSxHQUFZLEtBQ2pELEVBQWUsRUFBVSxDQUFLLEVBQzlCLEtBRUosR0FBSSxFQUNGLFNBQVcsQ0FBQyxFQUFNLElBQW9CLFFBQU8sUUFBUSxDQUFVLEVBQzdELEdBQUksQ0FBQyxHQUFTLENBQWUsRUFFM0IsR0FDRSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxDQUNELE1BQ0ksQ0FDTCxLQUFNLEdBQW9CLEVBQVksRUFBVSxDQUFJLEVBRTlDLEVBQWMsQ0FBQyxFQUFNLEVBQVEsT0FBUyxPQUMxQyxLQUFNLEdBQVcsSUFBVSxLQUN2QixFQUFZLEVBQW1CLENBQUssRUFDcEMsRUFDRSxFQUFVLEVBQVksSUFBSSxFQUFRLFVBQVcsQ0FDakQsT0FDQSxNQUFPLEVBQ1AsV0FDQSxRQUNBLFNBQVUsRUFBUSxRQUNoQyxDQUFhLEVBS0ssRUFBUSxBQUhaLE9BQWUsQ0FBZSxJQUE5QixjQUFpQyw4QkFDaEMsR0FFb0IsRUFBaUIsQ0FBTyxFQUN6QyxFQUFPLEdBQTJCLEVBQU8sQ0FBSSxFQUNuRCxHQUFJLEVBQU0sQ0FDUixLQUFNLEdBQWdCLEVBQ2xCLEdBQVUsRUFBaUIsRUFBTSxDQUFPLEVBQ3hDLEtBQ0osTUFBTyxJQUNMLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUNBLENBQ0QsQ0FDZixLQUdjLE9BQU8sTUFBSyxFQUVmLEVBRUQsV0FDRSxFQUFpQixFQUFNLEVBQU0sRUFBbUIsR0FFbEQsR0FBSSxHQUFRLEVBQWdCLEVBQWMsR0FBUSxFQUFLLEdBQ3ZELEFBQUksR0FBUyxNQUFRLEVBQWMsQ0FBZSxHQUVoRCxDQUFJLEVBQVEsQ0FBSyxFQUVmLEVBQVEsRUFDSixFQUFNLElBQUksQ0FBVyxFQUNyQixFQUFNLFFBQVEsQ0FBVyxFQUU3QixFQUFRLEVBQVksQ0FBSyxFQUV2QixHQUNGLEdBQWMsR0FBUSxJQUcxQixXQUNFLEVBQWlCLEVBQU0sRUFBTSxFQUFtQixFQUVuRCxDQUdOLEVBR0QsR0FEQSxFQUFrQixFQUFPLFVBQVUsRUFDL0IsRUFBTyxLQUNULFNBQVcsS0FBTyxRQUFPLE9BQU8sRUFBTyxJQUFJLEVBQ3pDLEVBQWtCLEVBQUksVUFBVSxFQUdwQyxTQUFXLEtBQVMsSUFBbUIsRUFBUSxDQUFRLEVBQ3JELEVBQWtCLEVBQU0sT0FBTyxVQUFVLEVBRzNDLE1BQU8sSUFBaUIsQ0FDMUIsQ0FFTyxXQUF5QixFQUFjLEVBQVUsQ0FDdEQsS0FBTSxHQUFXLENBQUMsRUFBTyxJQUNoQixFQUFNLE9BQVMsRUFDbEIsRUFBTSxPQUFPLENBQUMsRUFBUSxJQUFVLENBQ2hDLEtBQU0sR0FBUyxFQUFTLENBQUssRUFDN0IsTUFBSSxJQUNGLEdBQU8sRUFBTyxNQUFRLEdBQVUsRUFDNUIsT0FBSyxHQUFhLEdBQ2xCLEdBRUMsQ0FDUixFQUFFLEVBQUUsRUFDSCxLQUdOLE1BQU8sR0FBUSxDQUFZLEVBQ3ZCLEVBQVMsRUFBYyxHQUN2QixFQUFTLENBQUssRUFBSSxFQUFRLENBQ3hCLEtBQU0sR0FBUyxFQUFPLEVBQUssQ0FDNUIsQ0FDRixFQUNDLEVBQVMsQ0FBWSxFQUNuQixFQUNBLE9BQU8sUUFBUSxDQUFZLEVBQzNCLENBQUMsQ0FBQyxFQUFNLEtBQ04sRUFBUyxDQUFLLEVBQUksR0FDaEIsUUFDRyxHQUVILEVBQVMsQ0FBSyxFQUFJLENBQ2xCLE9BQ0EsTUFBTyxDQUNSLEVBQ0MsSUFDTCxFQUNDLElBQ1IsQ0FFTyxZQUEwQixFQUFTLENBQ3hDLE1BQU8sR0FDTCxFQUNBLENBQUUsS0FBTSxRQUFVLENBQ25CLENBQ0gsQ0FFQSxZQUFpQixFQUFjLENBQzdCLE1BQU8sR0FBUyxDQUFZLEVBQUksRUFBYSxLQUFPLENBQ3RELENBRU8sV0FBd0IsRUFBYyxTQUMzQyxNQUFPLFNBQWlCLEdBQVEsQ0FBWSxFQUFHLEVBQUksSUFBNUMsY0FBK0MsVUFBL0MsT0FBMEQsSUFDbkUsQ0FFTyxZQUF1QixFQUFjLFdBQzFDLE1BQU8sV0FBZSxDQUFZLElBQTNCLGNBQThCLGdCQUE5QixxQkFDTCxHQUFRLENBQVksS0FEZixPQUVGLElBQ1AsQ0FFTyxZQUF3QixFQUFRLEVBQVUsRUFBYyxDQUM3RCxNQUFPLEdBQ0gsQ0FDQSxTQUdBLFNBQVUsRUFBTyxLQUNiLEVBQWUsRUFBVSxFQUFPLElBQUksRUFDcEMsRUFDSixjQUNELEVBQ0MsSUFDTixDQUVPLFlBQXlCLEVBQVMsRUFBVSxFQUFjLEVBQVMsQ0FBQSxFQUFJLENBQzVFLEdBQUksRUFDRixTQUFXLENBQUMsRUFBSyxJQUFXLFFBQU8sUUFBUSxDQUFPLEVBQUcsQ0FDbkQsS0FBTSxHQUFRLEdBQ1osRUFDQSxFQUFlLEVBQVUsQ0FBRyxFQUM1QixDQUNELEVBQ0QsQUFBSSxHQUNGLEVBQU8sS0FBSyxDQUFLLENBRXBCLENBRUgsTUFBTyxFQUNULENBRU8sWUFDTCxFQUNBLEVBQ0EsRUFBa0IsS0FDbEIsRUFBZSxLQUNmLFNBQ0EsS0FBTSxHQUFRLFFBQWUsQ0FBTSxJQUFyQixjQUF3QixpQkFBeEIscUJBQ1osRUFDQSxFQUNBLEdBRUksRUFBUyxFQUFRLENBQUMsR0FBZSxFQUFPLEVBQVUsQ0FBWSxDQUFDLEVBQUksQ0FBRSxFQUczRSxVQUFnQixFQUFPLE9BQVEsRUFBVSxFQUFjLENBQU0sRUFDdEQsQ0FDVCxDQUVPLFdBQXdCLEVBQWMsQ0FDM0MsTUFBTyxJQUFjLENBQVksSUFBTSxRQUN6QyxDQUVPLFdBQXNCLEVBQWMsQ0FDekMsTUFBTyxJQUFjLENBQVksSUFBTSxNQUN6QyxDQUVPLFlBQW1CLEVBQWMsRUFBTSxDQUM1QyxLQUFNLEdBQUssRUFBSyxFQUFhLE9BQVMsTUFDdEMsTUFBTyxJQUFNLEtBQU8sT0FBTyxDQUFFLEVBQUksTUFDbkMsQ0FFTyxZQUFvQixFQUFjLEVBQU0sQ0FLN0MsTUFBTyxJQUFPLEVBQU0sR0FBVSxFQUFjLENBQUksQ0FBQyxDQUNuRCxDQ251QkEsR0FBZSxJQUFBLENBQ2IsT0FBUSxDQUFDLEVBQWUsRUFFeEIsTUFBTyxDQUNMLE9BQVEsQ0FBRSxLQUFNLE9BQVEsU0FBVSxFQUFNLEVBR3hDLFNBQVUsQ0FBRSxLQUFNLE9BQVEsU0FBVSxFQUFNLEVBQzFDLEtBQU0sQ0FBRSxLQUFNLENBQUMsT0FBUSxLQUFLLEVBQUcsU0FBVSxFQUFNLEVBQy9DLEtBQU0sQ0FBRSxLQUFNLE9BQVEsU0FBVSxFQUFNLEVBQ3RDLE1BQU8sQ0FBRSxLQUFNLE9BQVEsU0FBVSxFQUFNLEVBQ3ZDLE9BQVEsQ0FBRSxLQUFNLFFBQVMsUUFBUyxFQUFPLEVBQ3pDLE9BQVEsQ0FBRSxLQUFNLFFBQVMsUUFBUyxFQUFNLEVBQ3hDLFNBQVUsQ0FBRSxLQUFNLFFBQVMsUUFBUyxFQUFPLENBQzVDLEVBRUQsTUFBTyxDQUNMLE1BQU8sQ0FDTCxZQUFhLEtBQ2IsUUFBUyxFQUNWLENBQ0YsRUFFRCxTQUFVLENBQ1IsTUFBTyxDQUNMLE1BQU8sTUFBSyxPQUFPLElBQ3BCLEVBRUQsTUFBTyxDQUNMLE1BQU8sTUFBSyxPQUFPLElBQ3BCLEVBRUQsV0FBWSxDQUNWLE1BQU8sTUFBSyxxQkFBcUIsS0FBSyxPQUFPLFNBQVMsQ0FDdkQsRUFFRCxTQUFVLENBQ1IsTUFBTyxJQUFJLEdBQVksS0FBTSxDQUFFLE9BQVEsS0FBSyxPQUFRLENBQ3JELEVBRUQsTUFBTyxDQUNMLEtBQU0sQ0FDSixLQUFNLEdBQVEsR0FDWixLQUFLLE9BQ0wsS0FBSyxLQUNMLEtBQUssS0FDTCxLQUFLLFNBQ0wsQ0FBRSxVQUFXLElBQU0sQ0FDcEIsRUFDSyxDQUFFLFVBQVcsS0FBSyxPQUd4QixNQUFPLEdBQ0gsRUFBTyxLQUFLLEtBQU0sR0FBSSxHQUFZLEtBQU0sQ0FBRSxPQUFLLENBQUUsQ0FBQyxFQUNsRCxDQUNMLEVBRUQsSUFBSSxFQUFPLENBQ1QsS0FBTSxDQUFFLFNBQVUsS0FBSyxPQUd2QixLQUFLLFlBQWMsRUFDZixFQUFNLEtBQUssS0FBTSxHQUFJLEdBQVksS0FBTSxDQUFFLE9BQUssQ0FBRSxDQUFDLEVBQ2pELEVBQ0osS0FBSyxLQUFLLEtBQUssS0FBTSxLQUFLLEtBQU0sS0FBSyxXQUFXLENBQ2pELENBQ0YsRUFJRCxNQUFPLENBQ0wsTUFBTyxJQUFRLEtBQUssU0FBVSxLQUFLLFNBQVUsS0FBSyxNQUFNLENBQ3pELEVBRUQsWUFBYSxDQUNYLE1BQU8sSUFBYyxLQUFLLFNBQVUsS0FBSyxTQUFVLEtBQUssTUFBTSxDQUMvRCxFQUVELFVBQVcsQ0FDVCxNQUFPLE1BQUssUUFDYixFQUVELGVBQWdCLENBSWQsS0FBTSxDQUFFLG1CQUFvQixLQUM1QixNQUFPLElBQ0wsRUFBZ0IsY0FFaEIsS0FBSyxTQUFTLE1BQU0sRUFBZ0IsU0FBUyxNQUFNLEVBQ25ELEtBQUssTUFDTixDQUNGLEVBRUQsTUFBTyxFQUFrQixRQUFTLENBQ2hDLEtBQU0sQ0FBQyxPQUFRLE9BQU8sRUFDdEIsSUFBSSxFQUFPLENBQ1QsTUFBTyxHQUFTLENBQUssRUFDakIsRUFDQSxJQUFVLElBQVMsS0FBSyxTQUFTLGNBQy9CLEtBQUssU0FBUyxLQUFLLE1BQU0sRUFDekIsSUFDUCxDQUNQLENBQUssRUFFRCxNQUFPLEVBQWtCLFFBQVMsQ0FDaEMsS0FBTSxDQUFDLE9BQVEsTUFBTSxDQUMzQixDQUFLLEVBRUQsUUFBUyxFQUFrQixVQUFXLENBQ3BDLEtBQU0sUUFDTixTQUFVLENBQ1IsTUFBTyxNQUFLLFlBQVksY0FDekIsQ0FDUCxDQUFLLEVBR0QsUUFBUyxFQUFrQixVQUFXLENBQ3BDLEtBQU0sUUFDTixRQUFTLEVBQ2YsQ0FBSyxFQUVELFNBQVUsRUFBa0IsV0FBWSxDQUN0QyxLQUFNLFFBQ04sUUFBUyxFQUNmLENBQUssRUFHRCxTQUFVLEVBQWtCLFdBQVksQ0FDdEMsS0FBTSxRQUNOLFFBQVMsRUFDZixDQUFLLEVBRUQsVUFBVyxFQUFrQixZQUFhLENBQ3hDLEtBQU0sUUFDTixRQUFTLEVBQ2YsQ0FBSyxFQUdELFVBQVcsRUFBa0IsWUFBYSxDQUN4QyxLQUFNLFFBQ04sUUFBUyxFQUNmLENBQUssRUFFRCxZQUFhLEVBQWtCLGNBQWUsQ0FDNUMsS0FBTSxNQUNaLENBQUssRUFFRCxhQUFjLEVBQWtCLGVBQWdCLENBQzlDLEtBQU0sTUFDWixDQUFLLEVBRUQsWUFBYSxDQUNYLEtBQU0sQ0FBRSxjQUFhLGFBQWMsS0FBSyxTQUVsQyxFQUFhLENBQ2pCLFNBQVUsS0FBSyxRQUNoQixFQUVELE1BQUksSUFDRixHQUFXLEtBQU8sS0FBSyxLQUNuQixLQUFLLE9BQ1AsR0FBVyxNQUFRLEtBQUssT0FFMUIsRUFBVyxTQUFXLEtBQUssU0FDM0IsRUFBVyxVQUFZLEtBQUssVUFDeEIsR0FDRixHQUFXLFlBQWMsS0FBSyxZQUM5QixFQUFXLGFBQWUsS0FBSyxlQUc1QixDQUNSLEVBRUQsV0FBWSxDQUNWLEtBQU0sR0FBWSxLQUFLLGFBQWMsRUFDL0IsQ0FBRSxTQUFTLElBQU8sS0FBSyxPQUM3QixHQUFJLEVBR0YsU0FBVyxLQUFTLFFBQU8sS0FBSyxDQUFNLEVBQ3BDLFlBQXFCLElBQU0sS0FBSyxVQUFVLENBQUssR0FHbkQsTUFBTyxFQUNSLEVBRUQsYUFBYyxDQUNaLEtBQU0sR0FBYyxLQUFLLEtBQUssZUFBYyxHQUM1QyxBQUFJLEtBQUssVUFDUCxHQUFZLFNBQVcsSUFHekIsU0FBVyxDQUFDLEVBQUssSUFBVSxRQUFPLFFBQVEsS0FBSyxPQUFPLE9BQVMsQ0FBQSxDQUFFLEVBQy9ELEFBQUksSUFBVSxPQUNaLE1BQU8sR0FBWSxHQUVuQixFQUFZLEdBQU8sRUFHdkIsTUFBTyxFQUNSLEVBRUQsY0FBZSxDQUViLE1BQU8sRUFDUixFQUVELGlCQUFrQixDQUNoQixNQUFPLE1BQUssV0FBYSxLQUFLLE9BQVMsSUFDeEMsQ0FDRixFQUVELFNBQVUsQ0FDUixLQUFLLFVBQVUsRUFBSSxFQUNuQixLQUFLLGtCQUFtQixDQUN6QixFQUVELGVBQWdCLENBQ2QsS0FBSyxVQUFVLEVBQUssQ0FDckIsRUFFRCxRQUFTLENBQ1AsVUFBVSxFQUFLLENBRWIsQUFBSSxLQUFLLFFBQ1AsTUFBSyxnQkFBZ0IsbUJBQW1CLEtBQU0sQ0FBRyxFQUdqRCxLQUFLLEVBQU0sS0FBTyxPQUFPLEtBQUssTUFBTSxFQUV2QyxFQUdELGNBQWUsQ0FDYixNQUFPLENBQ0wsTUFBTyxLQUFLLFFBQ1osS0FBTSxLQUFLLE9BQ1gsTUFBTyxLQUFLLFFBQ1osT0FBUSxLQUFLLFFBQ2QsQ0FDRixFQUdELGdCQUFpQixDQUNmLE1BQU8sS0FDUixFQUdELGNBQWUsQ0FDYixLQUFNLENBQUMsR0FBVyxFQUFRLEtBQUssTUFBTSxPQUFPLEVBQzVDLEFBQUksR0FDRixLQUFLLFVBQVUsSUFBTSxTQUNuQixFQUFRLE1BQU8sRUFHWCxLQUFLLFVBQ04sU0FBUSxLQUFPLEdBQVMsaUJBQXhCLGdCQUViLENBQVMsQ0FFSixFQUVELE9BQVEsT0FFTixLQUFLLGdCQUFnQixNQUFPLEVBQzVCLFFBQUssZUFBTCxRQUFtQixRQUNuQixLQUFLLGFBQWMsQ0FDcEIsRUFFRCxPQUFRLENBQ04sS0FBSyxNQUFRLEtBQ2IsS0FBSyxTQUFVLENBQ2hCLEVBRUQsU0FBVSxDQUNSLEtBQUssUUFBVSxHQUNmLEtBQUssVUFBVSxPQUFPLENBQ3ZCLEVBRUQsUUFBUyxDQUNQLEtBQUssUUFBVSxHQUNmLEtBQUssVUFBVSxNQUFNLENBQ3RCLEVBRUQsU0FBVSxDQUNSLEtBQUssVUFBVSxPQUFPLENBQ3ZCLEVBRUQsVUFBVyxDQUNULEtBQUssVUFBVSxTQUFVLENBQ3ZCLFFBQVMsS0FBSyxjQUFnQixPQUMxQixDQUFFLE1BQU8sS0FBSyxXQUFhLEVBQzNCLEtBRUosT0FBUSxLQUFLLGVBQ3JCLENBQU8sQ0FDRixDQUNGLENBQ0gsRUM5U0EsS0FBTUMsSUFBYSxDQUFFLEVBRWYsRUFBZ0IsRUFBSSxPQUFPLENBRWpDLFdBQUVBLEdBQ0EsT0FBUSxDQUFDLEVBQVMsRUFFbEIsUUFBUyxDQUNQLG9CQUVBLGlCQUFpQixFQUFXLEVBQVMsR0FBSSxDQVF2QyxNQUFPLElBQ0gsVUFBWSxDQUVaLEdBQUksR0FBTyxFQUFXLENBQVMsRUFBSSxLQUFNLEdBQVcsRUFDaEQsR0FBVSxDQUFTLEVBQUksS0FBTSxHQUM3QixFQUNKLFNBQU8sa0JBQU0sVUFBVyxFQUN4QixFQUFLLE9BQVMsRUFDZCxFQUFLLFdBQWFBLEdBQ1gsQ0FDUixFQUVKLEVBRUQscUJBQXFCLEVBQVcsQ0FDOUIsTUFBTyxNQUFLLGlCQUFpQixFQUFXLENBQUMsRUFBUyxDQUFDLENBQ3BELEVBRUQscUJBQXFCLEVBQVcsQ0FDOUIsTUFBTyxNQUFLLGlCQUFpQixFQUFXLENBQUMsR0FBVyxFQUFTLENBQUMsQ0FDL0QsQ0FDRixDQUNILENBQUMsRUFFRCxFQUFjLFVBQVksU0FBUyxFQUFNLEVBQVMsQ0FDaEQsR0FBSSxFQUFTLENBQ1gsRUFBVSxHQUNSLFFBQ0csR0FFTCxLQUFNLEdBQU8sS0FBSyxPQUFPLENBQU8sRUFDaENBLFVBQVcsR0FBUSxFQUNaLENBQ1gsS0FDSSxPQUFPQSxJQUFXLElBQVMsRUFBSSxVQUFVLENBQUksQ0FFakQsRUM1RGUsTUFBTSxFQUFTLENBQzVCLFdBQVcsRUFBTyxDQUNoQixHQUFJLEtBQUssT0FDUCxTQUFXLEtBQVEsR0FDakIsR0FBSSxLQUFLLE1BQU0sU0FBUyxDQUFJLEVBQzFCLE1BQU8sR0FJYixNQUFPLEVBQ1IsQ0FDSCxDQ1ZBLEdBQWUsSUFBQSxDQUNiLFNBQVUsQ0FDUixNQUFPLENBQ0wsdUJBQXdCLElBQU0sSUFDL0IsQ0FDRixFQUVELE1BQU8sQ0FDTCxNQUFPLENBQ0wsaUJBQWtCLENBQUUsQ0FDckIsQ0FDRixFQUVELFNBQVUsQ0FDUixxQkFBc0IsQ0FDcEIsTUFBTyxNQUFLLGlCQUFpQixFQUM5QixDQUNGLEVBRUQsUUFBUyxDQUdQLHlCQUF5QixFQUFpQixFQUFLLENBQzdDLEtBQU0sQ0FBRSxvQkFBcUIsS0FDN0IsQUFBSSxFQUNGLEVBQWlCLEtBQUssQ0FBZSxFQUVyQyxFQUFpQixPQUFPLEVBQWlCLFFBQVEsQ0FBZSxFQUFHLENBQUMsQ0FFdkUsQ0FDRixDQUNILEVDN0JlLEdBQUEsQ0FDYixPQUFRLENBQUMsRUFBaUIsRUFFMUIsU0FBVSxDQUNSLFFBQVMsQ0FDUCxNQUFPLE1BQUssaUJBQWlCLE9BQzNCLENBQUMsRUFBUSxDQUFFLFlBQ1QsR0FBVSxFQUFTLEVBQU8sT0FBTyxDQUFNLEVBQUksRUFDN0MsSUFDRCxDQUNGLEVBRUQsV0FBWSxDQUNWLE1BQU8sTUFBSyxpQkFBaUIsS0FBSyxHQUFNLEVBQUcsU0FBUyxDQUNyRCxFQUVELFNBQVUsQ0FDUixNQUFPLE1BQUssaUJBQWlCLEtBQUssR0FBTSxFQUFHLE9BQU8sQ0FDbkQsRUFFRCxTQUFVLENBQ1IsTUFBTyxNQUFLLGlCQUFpQixNQUFNLEdBQU0sRUFBRyxPQUFPLENBQ3BELEVBRUQsYUFBYyxDQUNaLE1BQU8sTUFBSyxpQkFBaUIsTUFBTSxHQUFNLEVBQUcsT0FBTyxDQUNwRCxDQUNGLEVBRUQsUUFBUyxDQUNQLFlBQVksRUFBTyxFQUFTLEdBQU0sQ0FDaEMsTUFBTyxNQUFLLGlCQUFpQixNQUFNLEdBQU0sRUFBRyxZQUFZLEVBQU8sQ0FBTSxDQUFDLENBQ3ZFLEVBRUQsVUFBVSxFQUFPLENBQ2YsTUFBTyxNQUFLLGlCQUFpQixNQUFNLEdBQU0sRUFBRyxVQUFVLENBQUssQ0FBQyxDQUM3RCxFQUVELGlCQUFrQixDQUNoQixLQUFLLGlCQUFpQixRQUFRLEdBQU0sRUFBRyxnQkFBZSxDQUFFLENBQ3pELEVBRUQsYUFBYyxDQUNaLEtBQUssaUJBQWlCLFFBQVEsR0FBTSxFQUFHLFlBQVcsQ0FBRSxDQUNyRCxFQUVELHFCQUFxQixFQUFRLEVBQU8sQ0FDbEMsS0FBSyxpQkFBaUIsUUFDcEIsR0FBTSxFQUFHLHFCQUFxQixFQUFRLENBQUssQ0FDNUMsQ0FDRixDQUNGLENBQ0gsRUNuRGUsR0FBQSxDQUNiLE9BQVEsQ0FBQyxFQUFjLEVBRXZCLFNBQVUsQ0FDUixNQUFPLENBQ0wsZ0JBQWlCLElBQU0sSUFDeEIsQ0FDRixFQUVELGtCQUFrQixFQUFJLEVBQU0sRUFBTSxDQUNoQyxLQUFLLGtCQUFrQixFQUFJLEVBQU0sQ0FBSSxDQUN0QyxFQUVELGlCQUFpQixFQUFJLEVBQU0sRUFBTSxDQUMvQixLQUFLLGtCQUFrQixFQUFJLEVBQU0sQ0FBSSxDQUN0QyxFQUVELE1BQU8sQ0FDTCxNQUFPLENBQ0wsT0FBUSxHQUlSLE1BQU8sQ0FBRSxFQUNULFVBQVcsQ0FBRSxDQUNkLENBQ0YsRUFFRCxTQUFVLENBQ1IsZ0JBQWlCLENBRWYsTUFBTyxLQUNSLEVBRUQsYUFBYyxDQUlaLE1BQU8sTUFBSyxPQUFPLFFBQVEsS0FBSyxPQUFPLEtBQUssZ0JBQzdDLEVBRUQsYUFBYyxDQUVaLEtBQU0sQ0FBRSxXQUFZLEtBQUssT0FDekIsTUFBTyxNQUFLLGNBQWdCLEVBQVEsRUFBUSxPQUFTLEVBQ3RELEVBRUQscUJBQXNCLENBR3BCLEtBQU0sQ0FBRSxXQUFZLEtBQUssT0FDekIsT0FBUyxHQUFJLEVBQVEsT0FBUyxFQUFHLEdBQUssRUFBRyxJQUFLLENBQzVDLEtBQU0sR0FBUyxFQUFRLEdBQ3ZCLEdBQUksQ0FBQyxFQUFPLEtBQUssT0FDZixNQUFPLE1BQUssY0FBZ0IsQ0FFL0IsQ0FDRCxNQUFPLEVBQ1IsRUFFRCxlQUFnQixDQUNkLE1BQU8sTUFBSyxLQUFLLE1BQ2xCLEVBRUQsTUFBTyxPQUNMLE1BQU8sUUFBSyxjQUFMLGNBQWtCLElBQzFCLEVBRUQsTUFBTyxDQUNMLE1BQU8sTUFBSyxhQUFhLEtBQUssWUFBWSxJQUFJLENBQy9DLEVBRUQsT0FBUSxDQUNOLE1BQU8sTUFBSyxTQUFTLEtBQUssTUFBTSxDQUNqQyxFQUVELFlBQWEsQ0FDWCxLQUFNLENBQUUsY0FBZSxLQUFLLFFBQVUsQ0FBRSxFQUN4QyxNQUFPLElBQWMsR0FBRyxLQUFLLG9CQUFvQixLQUFLLE9BQ3ZELEVBRUQsa0JBQW1CLENBQ2pCLE1BQU8sRUFDUixFQUVELE9BQVEsT0FJTixNQUFPLE1BQUssT0FBTyxPQUFPLFFBQUssT0FBTCxjQUFXLFFBQVUsSUFDaEQsRUFHRCxZQUFhLENBQ1gsTUFBTyxFQUNSLENBQ0YsRUFFRCxTQUFVLENBSVIsS0FBSyxTQUFTLGdCQUFnQixLQUFLLElBQUksQ0FDeEMsRUFFRCxXQUFZLENBQ1YsS0FBTSxDQUFFLG1CQUFvQixLQUFLLFNBQ2pDLEVBQWdCLE9BQU8sRUFBZ0IsUUFBUSxJQUFJLEVBQUcsQ0FBQyxDQUN4RCxFQUVELFFBQVMsQ0FDUCxrQkFBa0IsRUFBSSxFQUFNLEVBQU0sQ0FDaEMsR0FBSSxHQUFLLEdBZ0JULEFBQUksQUFYRixFQUFLLEtBQUssV0FBVyxLQUFLLElBQUksR0FDOUIsQ0FBQyxFQUFHLEtBQUssV0FBVyxLQUFLLElBQUksR0FFN0IsRUFBSyxPQUFTLEVBQUcsTUFDZixNQUFLLGtCQUFrQixFQUFJLENBQUksR0FJL0IsRUFBRyxLQUFLLFFBQVUsRUFBSyxLQUFLLFNBSTlCLENBQUksS0FBSyxXQUlQLEVBQ0UsS0FBSyxhQUNMLEtBQUssWUFBYSxFQUtoQixLQUFLLFNBQ1AsR0FBSyxPQUFPLFFBQ1YsbURBQ0UsS0FBSyxNQUFNLFNBRWQsSUFJUCxFQUFLLENBQUUsQ0FDUixFQUVELGFBQWEsRUFBYyxDQUl6QixNQUFPLE1BQUssT0FBTyxLQUNoQixNQUFNLEdBQUcsRUFDVCxNQUFNLEVBQUcsRUFBYSxNQUFNLEdBQUcsRUFBRSxNQUFNLEVBQ3ZDLEtBQUssR0FBRyxDQUNaLEVBRUQsYUFBYSxFQUFNLENBQ2pCLE1BQU8sR0FBRyxLQUFLLFFBQVEsR0FDeEIsRUFFRCxrQkFBa0IsRUFBSSxFQUFNLENBRTFCLEtBQU0sR0FBVyxLQUFLLEtBQUssTUFBTSxZQUFZLEVBQUUsR0FDL0MsTUFBTyxDQUFDLEdBQWdCLEVBQUcsS0FBTSxFQUFLLElBQUksRUFBRSxXQUFXLENBQVEsQ0FDaEUsQ0FDRixDQUNILEVDaExJQyxHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQVEsQUFBQyxHQUFJLFlBQStDLEVBQUksYUFBYSxFQUFJLFVBQVUsRUFBRyxFQUFHLE1BQU0sQ0FBQyxZQUFZLDhCQUE4QixFQUFFLENBQUMsRUFBRyxjQUFjLENBQUMsWUFBWSxjQUFjLE1BQU0sQ0FBQyxPQUFTLEVBQUksV0FBVyxLQUFPLEVBQUksS0FBSyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksY0FBYyxFQUFJLElBQUksRUFBRSxTQUFXLEVBQUksVUFBVSxlQUFpQixHQUFNLFdBQWEsRUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFJLEtBQXZWLEVBQUcsY0FBYyxDQUFDLElBQUksRUFBSSxJQUFJLENBQUMsQ0FBNFQsRUFDMWNDLEdBQWtCLENBQUEsNnVCQzZCdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsWUFBQSxDQUNBLE9BQUEsQ0FBQSxFQUFBLEVBRUEsU0FBQSxDQUVBLE1BQUEsQ0FDQSxpQkFBQSxJQUFBLE9BQUEsZUFBQSxnQkFBQSxjQUFBLGtCQUFBLE1BQ0EsbUJBQUEsSUFBQSxPQUFBLGVBQUEsZ0JBQUEsY0FBQSxvQkFBQSxLQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLE9BQUEsR0FFQSxVQUFBLEdBR0EsS0FBQSxDQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxRQUFBLENBQ0EsTUFBQSxNQUFBLEtBQUEsTUFDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLE1BQUEsT0FBQSxJQUNBLEVBRUEsdUJBQUEsQ0FDQSxNQUFBLElBQUEsS0FBQSxNQUFBLENBQ0EsRUFFQSxlQUFBLENBQ0EsTUFBQSxNQUFBLG9CQUFBLHVCQUFBLEtBQUEsSUFBQSxDQUNBLEVBRUEsWUFBQSxDQUNBLEtBQUEsQ0FBQSxVQUFBLEtBR0EsTUFBQSxNQUFBLHNCQUNBLENBQ0EsS0FBQSxFQUFBLEtBQ0EsV0FBQSxFQUNBLEVBQUEsTUFBQSxPQUNBLEdBREEsQ0FFQSxNQUFBLEVBQ0EsRUFDQSxDQUNBLEVBQ0EsQ0FDQSxFQUVBLGNBQUEsQ0FDQSxNQUFBLElBQ0EsS0FBQSxXQUNBLEdBQUEsR0FBQSxDQUFBLENBQ0EsQ0FDQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE9BQUEsRUFBQSxFQUFBLENBRUEsQUFBQSxLQUFBLGtCQUFBLEVBQUEsQ0FBQSxHQUNBLE1BQUEsVUFBQSxHQUNBLEtBQUEsS0FBQSxDQUFBLEVBRUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxRQUFBLEVBQUEsQ0FDQSxLQUFBLEtBQUEsQ0FDQSxFQUVBLGFBQUEsRUFBQSxDQUVBLE1BQUEsTUFBQSxzQkFDQSxLQUFBLEtBQ0EsR0FBQSxLQUFBLFFBQUEsR0FDQSxFQUVBLFdBQUEsRUFBQSxDQUNBLEtBQUEsVUFBQSxDQUFBLENBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxvSUNwSGUsR0FBQSxDQUNiLE1BQU8sQ0FDTCxNQUFPLENBQ0wsWUFBYSxDQUFFLENBQ2hCLENBQ0YsRUFFRCxlQUFnQixDQUNkLFNBQVcsQ0FBRSxXQUFZLE1BQUssWUFDNUIsRUFBUSxFQUVWLEtBQUssWUFBYyxDQUFFLENBQ3RCLEVBRUQsUUFBUyxDQUNQLE1BQU0sRUFBUyxFQUFNLEVBQVMsQ0FDNUIsS0FBTSxHQUFTLEdBQ2IsRUFDQSxFQUFTLENBQUksRUFBSSxFQUFPLEVBQUcsR0FBTyxDQUFTLENBQzVDLEVBQ0QsWUFBSyxZQUFZLEtBQUssQ0FBTSxFQUNyQixDQUNSLENBQ0YsQ0FDSCxFQzVCSUYsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksV0FBVyxFQUFFLENBQUMsRUFBRyxrQkFBa0IsRUFBRSxFQUFHLGdCQUFnQixDQUFDLElBQUksZ0JBQWdCLFlBQVkscUJBQXFCLE1BQU0sQ0FBQyxTQUFXLFlBQVksUUFBVSxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsRUFBRyxXQUFXLEVBQUUsRUFBRyxPQUFPLENBQUMsWUFBWSw4QkFBOEIsRUFBRSxDQUFDLEVBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFVLEVBQUksUUFBUSxRQUFRLFVBQVksRUFBSSxTQUFTLENBQUMsRUFBRSxDQUFFLEVBQUksS0FBTSxFQUFHLGNBQWMsRUFBRyxFQUFJLFdBQVksRUFBRyxJQUFJLENBQUMsWUFBWSxhQUFhLEdBQUcsQ0FBQyxNQUFRLFNBQVMsRUFBTyxDQUFDLE1BQU8sR0FBSSxjQUFjLE1BQUssQ0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUcsT0FBTyxDQUFDLEVBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUUsQ0FBRSxFQUFFLENBQUMsRUFBRSxFQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUNscEJDLEdBQWtCLENBQUEsUUNrRHRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLFlBQUEsQ0FDQSxPQUFBLENBQUEsRUFBQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxJQUFBLEtBQUEsYUFDQSxDQUNBLEVBRUEsTUFBQSxDQUNBLGdCQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsU0FBQSxPQUFBLEVBQUEsU0FBQSxFQUFBLEVBQ0EsUUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFBQSxFQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLGNBQUEsQ0FBQSxFQUNBLFdBQUEsR0FDQSxhQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxlQUFBLENBQ0EsTUFBQSxNQUFBLE1BQUEsYUFDQSxFQUVBLFdBQUEsQ0FDQSxNQUFBLE1BQUEsYUFBQSxDQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxTQUFBLE1BQUEsU0FBQSxPQUFBLGdCQUdBLEtBQUEsU0FBQSxnQkFBQSxDQUFBLENBQ0EsT0FFQSxVQUFBLENBR0EsS0FBQSxNQUFBLFNBQUEsQ0FDQSxNQUFBLEdBQUEsQ0FDQSxBQUFBLEVBQUEsT0FBQSxRQUFBLGFBQUEsR0FDQSxNQUFBLFNBQUEsWUFBQSxLQUVBLEVBRUEsTUFBQSxHQUFBLENBQ0EsQUFBQSxFQUFBLE9BQUEsT0FDQSxNQUFBLFNBQUEsWUFBQSxLQUVBLENBQ0EsQ0FBQSxFQUNBLEdBQUEsQ0FDQSxLQUFBLFdBQUEsR0FDQSxBQUFBLEtBQUEsTUFBQSxZQUNBLEtBQUEsTUFBQSxhQUFBLEVBRUEsS0FBQSxNQUFBLE1BQUEsQ0FFQSxPQUFBLEVBQUEsQ0FDQSxRQUFBLE1BQUEsQ0FBQSxDQUNBLENBQ0EsS0FBQSxXQUFBLEVBQ0EsRUFFQSxRQUFBLENBQ0EsT0FBQSxDQUFBLE9BQUEsT0FBQSxRQUFBLFFBQUEsR0FBQSxDQUNBLE1BQUEsQ0FDQSxRQUFBLFVBQ0EsTUFBQSxRQUNBLEtBQUEsY0FDQSxRQUFBLFNBQ0EsRUFBQSxJQUFBLGdCQUNBLEVBQUEsTUFDQSxFQUFBLENBQUEsRUFBQSxLQUFBLFVBQUEsUUFDQSxRQUFBLGNBQUEsTUFBQSxFQUNBLEtBQUEsR0FBQSxDQUNBLFFBQUEsT0FDQSxNQUFBLFFBQ0EsS0FBQSxNQUNBLFFBQUEsS0FDQSxFQUFBLElBQUEsUUFFQSxRQUFBLEdBQUEsR0FBQSxDQUFBLENBQUEsRUFDQSxLQUFBLENBQUEsZ0JBQUEsSUFBQSxLQUFBLElBQ0EsR0FBQSxFQUFBLENBS0EsS0FBQSxDQUFBLGlCQUFBLElBQUEsRUFDQSxFQUFBLElBQUEsRUFBQSxPQUFBLEVBQUEsUUFBQSxFQUNBLEtBQUEsUUFBQSxDQUFBLE9BQUEsUUFBQSxPQUFBLFdBQUEsQ0FDQSxDQUNBLEVBRUEsb0JBQUEsQ0FDQSxLQUFBLGNBQUEsV0FBQSxDQUNBLEVBRUEsZ0JBQUEsRUFBQSxDQUNBLEtBQUEsY0FBQSxFQUFBLEVBQUEsRUFDQSxPQUVBLFFBQUEsU0FDQSxLQUFBLFdBQUEsR0FDQSxLQUFBLENBQ0EsdUJBQ0Esc0JBQ0EsS0FBQSxRQUFBLE9BQUEsQ0FBQSxFQUNBLEVBQUEsS0FBQSxNQUFBLFdBQUEsQ0FDQSxXQUFBLEdBQ0EsU0FBQSxDQUNBLEtBQUEsT0FDQSxVQUFBLEVBQ0EsRUFDQSxTQUFBLENBQ0EsS0FBQSxVQUNBLEdBQ0EsR0FFQSxRQUFBLENBQ0EsT0FBQSxDQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsUUFBQSxDQUNBLENBQ0EsQ0FBQSxFQUNBLEdBQUEsRUFDQSxHQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLENBQ0EsU0FBQSxLQUFBLElBQUEsTUFBQSxNQUNBLEtBQUEsRUFDQSxTQUFBLEVBQ0EsQ0FBQSxFQUNBLEFBQUEsRUFDQSxTQUFBLFFBQUEsQ0FBQSxFQUVBLE1BQUEsUUFBQSxFQUFBLEtBQUEsSUFBQSxFQUNBLEtBQUEsTUFBQSxhQUFBLEVBRUEsT0FBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLFFBQUEsV0FBQSxjQUFBLE9BQUEsY0FBQSxNQUNBLEtBQUEsT0FBQSxDQUNBLEtBQUEsUUFDQSxNQUFBLHVCQUNBLEtBQUEsR0FBQSxDQUNBLENBQUEsRUFDQSxHQUNBLFFBQUEsTUFBQSxFQUFBLEVBQUEsUUFBQSxFQUVBLEtBQUEsTUFBQSxDQUNBLENBRUEsRUFFQSxjQUFBLENBQ0EsTUFBQSxNQUFBLFNBQUEsR0FBQSxDQUNBLE9BRUEsU0FBQSxDQUNBLEdBQUEsQ0FLQSxBQUFBLEFBSkEsTUFBQSxNQUFBLFlBQUEsQ0FDQSxTQUFBLEtBQUEsSUFBQSxNQUFBLE9BQ0EsU0FBQSxFQUNBLENBQUEsR0FDQSxLQUFBLFNBQ0EsTUFBQSxRQUFBLElBQUEsRUFDQSxLQUFBLGFBQUEsRUFFQSxPQUFBLEVBQUEsQ0FDQSxRQUFBLE1BQUEsQ0FBQSxDQUNBLENBQ0EsT0FFQSxZQUFBLENBQ0EsR0FBQSxHQUFBLEtBQ0EsR0FBQSxDQUtBLEVBQUEsQUFKQSxNQUFBLE1BQUEsWUFBQSxDQUNBLFNBQUEsS0FBQSxJQUFBLE1BQUEsUUFDQSxTQUFBLEVBQ0EsQ0FBQSxHQUNBLEtBQUEsTUFBQSxJQUNBLE9BQUEsRUFBQSxDQUNBLEtBQUEsT0FBQSxDQUNBLEtBQUEsUUFDQSxNQUFBLHVCQUNBLEtBQUEsQ0FDQSxDQUFBLENBQ0EsQ0FDQSxZQUFBLFFBQUEsQ0FBQSxFQUNBLENBQ0EsRUFFQSxRQUFBLEVBQUEsQ0FDQSxLQUFBLFNBQUEsS0FDQSxHQUNBLE9BQUEsZUFBQSxFQUFBLEdBQUEsU0FBQSxFQUdBLEdBQ0EsTUFBQSxjQUFBLENBQUEsRUFDQSxLQUFBLGFBQUEsRUFFQSxPQUVBLGFBQUEsQ0FDQSxBQUFBLEtBQUEsTUFBQSxVQUFBLEdBQ0EsS0FBQSxNQUFBLE1BQUEsQ0FFQSxPQUVBLGVBQUEsQ0FDQSxHQUFBLENBQ0EsS0FBQSxjQUFBLEtBQUEsSUFBQSxLQUFBLGVBQUEsQ0FDQSxPQUFBLEVBQUEsQ0FDQSxNQUFBLEdBQUEsU0FDQSxRQUFBLE1BQUEsQ0FBQSxFQUVBLEtBQUEsTUFBQSxDQUNBLENBRUEsS0FBQSxHQUFBLENBQUEsRUFDQSxFQUFBLENBQUEsRUFDQSxTQUFBLENBQUEsRUFBQSxJQUFBLFFBQUEsUUFBQSxLQUFBLGFBQUEsRUFDQSxFQUFBLEtBQUEsR0FBQSxHQUFBLEtBQUEsSUFBQSxFQUFBLEVBQUEsQ0FBQSxDQUFBLEVBRUEsS0FBQSxTQUFBLElBQUEsQ0FBQSxFQUNBLFNBQUEsS0FBQSxHQUNBLEtBQUEsUUFBQSxTQUFBLENBQUEsQ0FFQSxDQUNBLENBQ0EsQ0FBQSxvSUM3UklGLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLE1BQU0sQ0FBQyxZQUFZLDhCQUE4QixFQUFFLENBQUMsRUFBRyxLQUFLLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUcsS0FBSyxDQUFDLFlBQVksYUFBYSxFQUFFLEVBQUksR0FBSSxFQUFJLE1BQU8sU0FBUyxFQUFLLENBQUMsTUFBTyxHQUFHLEtBQUssQ0FBRSxFQUFJLGFBQWEsQ0FBSSxFQUFHLEVBQUcsY0FBYyxDQUFDLFlBQVksWUFBWSxNQUFNLENBQUMsR0FBTSxJQUFPLEVBQUssS0FBTyxlQUFlLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLFNBQVMsQ0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2xkQyxHQUFrQixDQUFBLFFDNkN0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxZQUFBLENBQUEsQ0FBQSxvSUM5Q0lGLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLE9BQU8sUUFBUSxTQUFTLE1BQU8sRUFBSSxRQUFTLFdBQVcsU0FBUyxDQUFDLEVBQUUsWUFBWSxXQUFXLEVBQUUsQ0FBQyxFQUFHLE1BQU0sQ0FBQyxZQUFZLG1CQUFtQixNQUFPLENBQUMsRUFBSSxhQUFhLEVBQUksYUFBYSxDQUFFLENBQUMsRUFBRSxFQUFHLE1BQU0sQ0FBQyxZQUFZLG1CQUFtQixNQUFPLENBQUMsRUFBSSxhQUFhLEVBQUksYUFBYSxDQUFFLENBQUMsRUFBRSxFQUFHLE1BQU0sQ0FBQyxZQUFZLG1CQUFtQixNQUFPLENBQUMsRUFBSSxhQUFhLEVBQUksYUFBYSxDQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDOWRDLEdBQWtCLENBQUEsUUNTdEIsS0FBQUMsSUFBQSxDQUVBLEtBQUEsY0FFQSxNQUFBLENBQ0EsUUFBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEVBQ0EsRUFDQSxNQUFBLENBQ0EsS0FBQSxPQUNBLFFBQUEsU0FDQSxFQUNBLEtBQUEsQ0FDQSxLQUFBLE9BQ0EsUUFBQSxNQUNBLEVBQ0EsT0FBQSxDQUNBLEtBQUEsT0FDQSxRQUFBLEtBQ0EsRUFDQSxPQUFBLENBQ0EsS0FBQSxPQUNBLFFBQUEsTUFDQSxDQUNBLEVBQ0EsTUFBQSxDQUNBLE1BQUEsQ0FDQSxhQUFBLENBQ0EsZ0JBQUEsS0FBQSxNQUNBLE1BQUEsS0FBQSxLQUNBLE9BQUEsS0FBQSxLQUNBLE9BQUEsS0FBQSxPQUNBLGFBQUEsS0FBQSxPQUNBLFFBQUEsZUFDQSxjQUFBLHNCQUNBLGtCQUFBLFFBQ0Esd0JBQUEsV0FDQSx3QkFBQSxnQ0FDQSxrQkFBQSxNQUNBLEVBQ0EsY0FBQSxDQUNBLGVBQUEsT0FDQSxFQUNBLGNBQUEsQ0FDQSxlQUFBLE9BQ0EsRUFDQSxjQUFBLENBQ0EsZUFBQSxPQUNBLENBQ0EsQ0FDQSxDQUVBLG9JQy9ESUYsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksYUFBYSxFQUFFLENBQUMsRUFBRyxNQUFNLENBQUMsWUFBWSxZQUFZLEVBQUUsQ0FBQyxFQUFHLEtBQUssRUFBSSxHQUFJLEVBQUksTUFBTyxTQUFTLEVBQVUsRUFBTSxDQUFDLE1BQU8sR0FBRyxLQUFLLENBQUUsSUFBVSxFQUFJLE1BQU0sT0FBUyxFQUFHLENBQUMsRUFBRyxPQUFPLENBQUMsTUFBTSxFQUFJLG1CQUFtQixDQUFTLENBQUMsRUFBRSxDQUFDLEVBQUksR0FBRyxFQUFJLEdBQUcsRUFBVSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFHLGNBQWMsQ0FBQyxZQUFZLGtCQUFrQixNQUFNLENBQUMsR0FBSyxFQUFVLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRyxPQUFPLENBQUMsTUFBTSxFQUFJLG1CQUFtQixDQUFTLENBQUMsRUFBRSxDQUFDLEVBQUksR0FBRyxFQUFJLEdBQUcsRUFBVSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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QUEsSUFBQSxJQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsV0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxRQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFFBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFBQSxFQUFBLENBQ0EsRUFFQSxNQUFBLENBRUEsS0FBQSxHQUFBLEdBQUEsS0FBQSxJQUFBLEVBQ0EsU0FBQSxLQUFBLE1BQUEsV0FDQSxBQUFBLElBQUEsSUFDQSxHQUFBLEdBQUEsTUFHQSxNQUFBLENBQ0EsYUFBQSxLQUNBLFlBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxpQkFBQSxDQUNBLE1BQUEsS0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLE1BQUEsUUFBQSxJQUNBLEVBRUEsUUFBQSxDQUNBLE1BQUEsQ0FDQSxXQUFBLEtBQUEsVUFDQSxDQUNBLEVBRUEsZUFBQSxDQUNBLE1BQUEsUUFBQSxRQUFBLEdBQUEsS0FBQSxPQUFBLENBQUEsRUFBQSxPQUdBLENBQUEsRUFBQSxDQUFBLEVBQUEsS0FBQSxDQUNBLEtBQUEsQ0FBQSxPQUFBLFVBQUEsRUFDQSxHQUFBLENBQUEsRUFBQSxDQUNBLEtBQUEsR0FBQSxJQUFBLFNBQUEsSUFBQSxLQUFBLE9BQUEsRUFDQSxJQUFBLFNBQUEsSUFBQSxLQUFBLE9BQUEsRUFDQSxLQUNBLEFBQUEsR0FDQSxHQUFBLE9BQ0EsR0FEQSxDQUVBLE9BQUEsQ0FBQSxPQUFBLENBQ0EsR0FFQSxDQUNBLFNBQUEsR0FBQSxFQUNBLENBQ0EsRUFDQSxDQUFBLENBQ0EsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxNQUFBLFFBQUEsS0FBQSxLQUFBLGFBQUEsRUFBQSxTQUFBLFFBQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsYUFBQSxHQUFBLE9BQUEsQ0FDQSxNQUFBLElBQUEsQ0FDQSxBQUFBLE1BQUEsVUFBQSxJQUNBLEtBQUEsT0FBQSxDQUVBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsV0FBQSxDQUNBLEtBQUEsYUFBQSxPQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsTUFBQSxDQUNBLEtBQUEsT0FBQSxLQUFBLEtBQUEsSUFBQSxDQUNBLEVBRUEsUUFBQSxFQUFBLENBQ0EsS0FBQSxRQUFBLFFBQUEsQ0FBQSxFQUNBLEtBQUEsS0FBQSxDQUNBLEVBRUEsT0FBQSxFQUFBLENBQ0EsS0FBQSxRQUFBLE9BQUEsQ0FBQSxFQUNBLEtBQUEsS0FBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLEtBQUEsUUFBQSxLQUFBLFVBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxBQUFBLEtBQUEsV0FDQSxLQUFBLFFBQUEsSUFBQSxDQUVBLENBQ0EsQ0FDQSxDQUFBLG9JQ3hJSUYsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFRLEdBQUksUUFBUyxFQUFHLEVBQUksUUFBUSxLQUFPLEVBQUksSUFBSSxDQUFDLElBQUksWUFBWSxNQUFNLEVBQUksUUFBUSxNQUFPLEVBQUksTUFBTyxFQUFFLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUksSUFBSSxFQUMzT0MsR0FBa0IsQ0FBQSxRQ2dCdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsZUFBQSxDQUNBLE1BQUEsQ0FDQSxJQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsTUFBQSxFQUNBLFFBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxNQUFBLENBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxTQUFBLENBQ0EsS0FBQSxDQUFBLFdBQUEsS0FDQSxNQUFBLEdBQUEsQ0FBQSxFQUFBLEVBQUEsQ0FBQSxLQUFBLENBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLFFBQ0EsS0FBQSxPQUFBLE9BQ0EsR0FBQSxLQUFBLFFBQUEsS0FBQSxFQUVBLEVBRUEsUUFBQSxDQUNBLE1BQUEsUUFDQSxLQUFBLE9BQUEsT0FDQSxHQUFBLEtBQUEsUUFBQSxLQUFBLEVBRUEsQ0FDQSxDQUNBLENBQUEsRUFFQSxZQUFBLEVBQUEsQ0FDQSxNQUFBLEdBQUEsQ0FBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLElBQ0EsQ0FBQSxFQUFBLENBQUEsRUFDQSxFQUFBLEdBQUEsR0FDQSxFQUFBLENBQUEsR0FDQSxPQUFBLE9BQUEsRUFBQSxDQUFBLEVBRUEsR0FDQSxFQUFBLENBQ0EseUlDdERJRixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQVEsR0FBSSxNQUFRLEVBQUksWUFBYSxFQUFHLEVBQUksSUFBSSxFQUFJLEdBQUcsQ0FBQyxJQUFJLFlBQVksWUFBWSxhQUFhLE1BQU0sQ0FBRSxjQUFlLEVBQUksUUFBUSxDQUFFLEVBQUUsRUFBSSxTQUFTLEVBQUUsQ0FBRSxFQUFJLFlBQWEsRUFBRyxNQUFNLENBQUMsWUFBWSxlQUFlLE1BQU0sQ0FBRSxjQUFlLENBQUMsRUFBSSxTQUFTLENBQUUsQ0FBQyxFQUFFLEVBQUksR0FBSSxFQUFDLEVBQUksR0FBSSxFQUFJLFNBQVUsU0FBUyxFQUFPLEVBQU0sQ0FBQyxNQUFPLEdBQUcsZUFBZSxDQUFDLElBQUssVUFBWSxFQUFPLFlBQVksb0JBQW9CLE1BQU0sQ0FBQyxJQUFNLE9BQU8sUUFBVSxDQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBTSxFQUFJLFFBQVEsRUFBRSxTQUFTLENBQUMsVUFBWSxFQUFJLEdBQUcsRUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFJLEVBQUksU0FBVSxTQUFTLEVBQU8sRUFBTSxDQUFDLE1BQU8sR0FBRyxlQUFlLENBQUMsSUFBSyxVQUFZLEVBQU8sWUFBWSxvQkFBb0IsTUFBTSxDQUFDLElBQU0sT0FBTyxRQUFVLENBQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBRyxjQUFjLENBQUMsRUFB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QU8sRUFBSSxLQUFLLEtBQU8sRUFBSSxLQUFLLE1BQVEsRUFBSSxNQUFNLFNBQVcsRUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFJLENBQUEsRUFBRSxDQUFDLENBQUMsRUFDbDFEQyxHQUFrQixDQUFBLFFDb0t0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxjQUFBLENBQ0EsV0FBQSxDQUFBLG1CQUFBLEVBQ0EsT0FBQSxDQUFBLEVBQUEsRUFFQSxTQUFBLENBQ0EsTUFBQSxDQUNBLGlCQUFBLElBQUEsSUFDQSxDQUNBLEVBRUEsT0FBQSxDQUNBLHdCQUNBLEVBRUEsTUFBQSxDQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxNQUFBLEVBQUEsUUFBQSxJQUFBLEVBQ0EsUUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsWUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxlQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFdBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsV0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxLQUFBLENBQUEsUUFBQSxLQUFBLE9BQ0EsTUFBQSxRQUdBLEdBQUEsRUFBQSxDQUFBLEVBQ0EsRUFBQSxLQUFBLEtBQUEsS0FBQSxPQUFBLEVBQ0EsR0FMQSxDQU9BLG1CQUFBLENBQUEsRUFDQSxjQUFBLENBQUEsRUFDQSxlQUFBLENBQUEsQ0FDQSxFQUNBLEVBRUEsU0FBQSxDQUNBLGlCQUFBLENBRUEsTUFBQSxLQUNBLEVBRUEsdUJBQUEsQ0FJQSxNQUFBLE1BQUEsV0FBQSxLQUFBLEtBQUEsUUFBQSxlQUNBLEVBRUEsY0FBQSxDQUNBLEtBQUEsR0FBQSxHQUFBLEtBQUEsT0FBQSxPQUFBLEVBQUEsRUFDQSxTQUFBLEtBQUEsTUFBQSxNQUNBLEVBQUEsS0FBQSxHQUFBLEVBQUEsWUFBQSxFQUVBLE1BQUEsRUFDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLEdBQUEsS0FBQSxPQUFBLElBQUEsQ0FDQSxFQUVBLGFBQUEsU0FDQSxLQUFBLEdBQUEsU0FBQSxPQUFBLE9BQUEsY0FBQSxNQUFBLEtBQUEsS0FDQSxFQUFBLEdBQUEsS0FBQSxhQUFBLEtBQUEsS0FBQSxFQUFBLEVBQ0EsRUFDQSxTQUFBLGFBQUEsY0FBQSxPQUFBLEtBQ0EsTUFBQSxLQUFBLEdBRUEsS0FBQSxRQUFBLFFBQUEsQ0FBQSxLQUFBLENBQUEsQ0FBQSxFQUVBLENBQ0EsRUFFQSxZQUFBLENBQ0EsR0FBQSxLQUFBLEtBQUEsQ0FDQSxHQUFBLEdBQUEsS0FDQSxTQUFBLEtBQUEsUUFBQSxPQUFBLEtBQUEsSUFBQSxFQUFBLENBQ0EsS0FBQSxDQUFBLGNBQUEsRUFDQSxHQUFBLEVBQUEsQ0FBQSxFQUNBLEVBQUEsS0FBQSxLQUFBLEtBQUEsT0FBQSxFQUNBLEVBRUEsTUFBQSxHQUVBLEFBQUEsR0FDQSxHQUFBLEVBRUEsQ0FDQSxNQUFBLEVBQ0EsQ0FDQSxFQUVBLFdBQUEsT0FDQSxNQUFBLFFBQUEsU0FBQSxjQUFBLFNBQ0EsRUFFQSxlQUFBLENBQ0EsTUFBQSxNQUFBLFlBQUEsQ0FBQSxPQUFBLFNBQUEsV0FBQSxHQUFBLENBQ0EsRUFFQSxlQUFBLENBQ0EsTUFBQSxJQUNBLFFBQUEsS0FBQSxPQUFBLE1BQ0EsS0FBQSxZQUFBLENBQUEsT0FBQSxZQUFBLFdBQUEsR0FBQSxFQUVBLEVBUUEsTUFBQSxDQUNBLE1BQUEsTUFBQSxJQUNBLEVBRUEsVUFBQSxDQUNBLE1BQUEsTUFBQSxRQUNBLEVBRUEsZUFBQSxDQUNBLE1BQUEsTUFBQSxhQUNBLEVBRUEsZUFBQSxDQUNBLE1BQUEsTUFBQSxhQUNBLEVBRUEsWUFBQSxDQUNBLE1BQUEsSUFBQSxLQUFBLFNBQUEsS0FBQSxTQUFBLEVBQUEsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxNQUFBLE1BQUEsU0FDQSxLQUFBLGtCQUFBLEtBQUEsYUFBQSxLQUFBLEtBQUEsS0FBQSxPQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLE1BQUEsY0FBQSxHQUFBLEVBQUEsT0FBQSxDQUNBLEVBRUEsV0FBQSxDQUNBLE1BQUEsTUFBQSxjQUFBLEdBQUEsRUFBQSxTQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsTUFBQSxNQUFBLGVBQUEsR0FBQSxFQUFBLE9BQUEsQ0FDQSxFQUVBLGFBQUEsQ0FDQSxNQUFBLE1BQUEsZUFBQSxHQUFBLEVBQUEsV0FBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FBQSxDQUFBLEtBQUEsSUFDQSxFQUVBLFVBQUEsQ0FDQSxNQUFBLENBQUEsQ0FBQSxLQUFBLE9BQUEsS0FBQSxXQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLFNBQUEsQ0FBQSxDQUFBLEtBQUEsSUFDQSxFQUVBLGFBQUEsQ0FDQSxLQUFBLENBQUEsY0FBQSxLQUFBLE9BQ0EsTUFBQSxDQUFBLENBQUEsR0FBQSxPQUFBLEtBQUEsQ0FBQSxFQUFBLE9BQUEsQ0FDQSxFQUVBLE9BQUEsR0FBQSxTQUFBLENBQ0EsU0FBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLFNBQ0EsQ0FDQSxDQUFBLEVBRUEsWUFBQSxDQUNBLE1BQUEsUUFBQSxPQUFBLEtBQUEsa0JBQUEsQ0FDQSxFQUVBLE9BQUEsQ0FDQSxNQUFBLFFBQUEsT0FBQSxLQUFBLGFBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxNQUFBLFFBQUEsT0FBQSxLQUFBLGNBQUEsQ0FDQSxFQUVBLHNCQUFBLENBQ0EsTUFBQSxNQUFBLHVCQUFBLEtBQUEsa0JBQUEsQ0FDQSxFQUVBLGlCQUFBLENBQ0EsTUFBQSxNQUFBLHVCQUFBLEtBQUEsYUFBQSxDQUNBLEVBRUEsa0JBQUEsQ0FDQSxNQUFBLE1BQUEsdUJBQUEsS0FBQSxjQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLFVBQUEsRUFBQSxFQUNBLEtBQUEsa0JBQUEsRUFFQSxLQUFBLFNBQUEsU0FBQSxLQUFBLHFCQUFBLEVBQ0EsS0FBQSxVQUFBLFlBQUEsQ0FDQSxFQUVBLGVBQUEsQ0FDQSxLQUFBLFVBQUEsU0FBQSxFQUNBLEtBQUEsVUFBQSxFQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0Esd0JBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLHNCQUNBLEtBQUEscUJBQUEsRUFBQSxDQUNBLENBQ0EsRUFFQSx1QkFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsd0JBQUEsRUFBQSxDQUFBLEVBQUEsSUFBQSxJQUNBLEVBRUEsb0JBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLGtCQUFBLEtBQUEscUJBQUEsRUFBQSxDQUFBLENBQ0EsRUFFQSxtQkFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsb0JBQUEsRUFBQSxDQUFBLEVBQUEsSUFBQSxJQUNBLEVBRUEsY0FBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsWUFBQSxLQUFBLHFCQUFBLEVBQUEsQ0FBQSxDQUNBLEVBRUEsYUFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsY0FBQSxFQUFBLENBQUEsRUFBQSxJQUFBLElBQ0EsRUFFQSxvQkFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsc0JBQUEsS0FBQSxpQkFBQSxFQUFBLENBQUEsQ0FDQSxFQUVBLG1CQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxvQkFBQSxFQUFBLENBQUEsRUFBQSxJQUFBLElBQ0EsRUFFQSxVQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxZQUFBLEtBQUEsaUJBQUEsRUFBQSxDQUFBLENBQ0EsRUFFQSxTQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxVQUFBLEVBQUEsQ0FBQSxFQUFBLElBQUEsSUFDQSxFQUVBLGNBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxhQUFBLEtBQUEsV0FBQSxLQUFBLENBQUEsQ0FDQSxFQUVBLGVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxhQUFBLEtBQUEsV0FBQSxNQUFBLENBQUEsQ0FDQSxFQUVBLFNBQUEsRUFBQSxDQUNBLEtBQUEsVUFBQSxTQUFBLENBRUEsUUFBQSxDQUFBLFFBQUEsQ0FDQSxDQUFBLEVBUUEsRUFBQSxLQUFBLFFBQUEsR0FBQSxLQUFBLFlBQUEsSUFDQSxNQUFBLE9BQUEsRUFFQSxFQUVBLFVBQUEsQ0FDQSxLQUFBLFVBQUEsUUFBQSxDQUNBLEVBRUEsaUJBQUEsQ0FDQSxTQUFBLEtBQUEsTUFBQSxXQUNBLEVBQUEsZ0JBQUEsQ0FFQSxFQUVBLGFBQUEsQ0FDQSxTQUFBLEtBQUEsTUFBQSxXQUNBLEVBQUEsWUFBQSxDQUVBLEVBRUEsT0FBQSxPQUNBLFFBQUEsd0JBQUEsUUFBQSxRQUNBLEtBQUEsT0FBQSxFQUNBLEVBRUEsWUFBQSxFQUFBLEVBQUEsR0FBQSxDQUNBLEtBQUEsQ0FBQSx3QkFBQSxLQUNBLEdBQUEsR0FDQSxHQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsRUFBQSxDQUFBLEVBQ0EsRUFDQSxHQUFBLENBQUEsRUFDQSxHQUFBLEVBQUEsS0FBQSxDQUFBLEVBQ0EsS0FDQSxFQUFBLEVBQ0EsT0FBQSxLQUFBLENBQUEsRUFBQSxPQUFBLENBQUEsRUFDQSxFQUFBLENBQUEsRUFDQSxFQUNBLENBQUEsQ0FBQSxDQUNBLENBQ0EsQUFBQSxHQUNBLEtBQUEsWUFBQSxFQUVBLEdBQUEsR0FBQSxHQUNBLEVBQUEsR0FDQSxNQUFBLE9BQUEsS0FBQSxDQUFBLEdBQ0EsU0FBQSxLQUFBLEdBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSx3QkFBQSxDQUFBLEVBQ0EsU0FBQSxLQUFBLEdBQ0EsQUFBQSxFQUFBLFNBQUEsQ0FBQSxHQUVBLElBQUEsR0FDQSxFQUFBLE1BQUEsRUFFQSxFQUFBLEdBQ0EsRUFBQSxHQUdBLENBQ0EsTUFBQSxJQUFBLENBQUEsR0FDQSxLQUFBLGFBQUEsRUFFQSxDQUNBLEVBRUEsVUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLFlBQUEsRUFBQSxFQUFBLENBQ0EsT0FFQSxzQkFBQSxFQUFBLEVBQUEsT0FDQSxLQUFBLFlBQUEsRUFDQSxHQUFBLEdBQUEsR0FDQSxLQUFBLEdBQUEsQ0FBQSxFQUNBLFNBQUEsQ0FBQSxFQUFBLElBQUEsUUFBQSxRQUFBLENBQUEsRUFBQSxDQUdBLEtBQUEsR0FBQSxLQUFBLFdBQ0EsRUFBQSxLQUFBLFNBQUEsQ0FBQSxFQUNBLEVBSUEsRUFBQSxFQUFBLENBQUEsRUFDQSxHQUFBLEdBQUEsR0FDQSxLQUFBLEdBQUEsS0FBQSx3QkFBQSxDQUFBLEVBQ0EsU0FBQSxLQUFBLEdBQ0EsQUFBQSxFQUFBLHFCQUFBLEVBQUEsR0FBQSxDQUFBLEdBQ0EsR0FBQSxHQUNBLEVBQUEsSUFHQSxHQUFBLENBQUEsRUFBQSxDQUlBLEtBQUEsR0FBQSxFQUFBLElBQUEsRUFDQSxLQUFBLEVBQUEsT0FBQSxHQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsd0JBQUEsQ0FBQSxFQUNBLFNBQUEsS0FBQSxHQUNBLEdBQUEsS0FBQSxNQUFBLHNCQUFBLHFCQUNBLEVBQ0EsR0FBQSxDQUNBLEdBQUEsR0FBQSxHQUNBLFNBQUEsS0FBQSxHQUFBLENBQ0EsS0FBQSxHQUFBLEVBQUEsRUFBQSxVQUNBLEFBQ0EsR0FDQSxFQUFBLHFCQUFBLEVBQUEsR0FBQSxDQUFBLEdBRUEsR0FBQSxHQUNBLEVBQUEsR0FFQSxDQUNBLE1BQUEsRUFDQSxJQU1BLE9BSUEsRUFBQSxJQUFBLENBQ0EsQ0FHQSxLQUFBLEdBQUEsRUFBQSxDQUFBLEVBQ0EsU0FBQSxLQUFBLEdBQUEsQ0FDQSxLQUFBLEdBQUEsRUFDQSxhQUFBLElBQ0EsT0FBQSxLQUFBLFlBQ0EsRUFBQSxLQUFBLEdBQUEsS0FBQSxFQUFBLFNBQUEsQ0FDQSxDQUNBLENBQ0EsRUFBQSxFQUNBLENBQ0EsQUFBQSxHQUNBLEtBQUEsYUFBQSxFQUFBLEtBQUE7QUFBQSxDQUFBLENBQUEsQ0FFQSxFQUVBLGFBQUEsRUFBQSxDQUNBLEtBQUEsT0FBQSxDQUNBLEtBQUEsUUFDQSxNQUFBLG9CQUNBLEtBQUEsR0FBQSx3Q0FDQSxDQUFBLENBQ0EsRUFFQSxXQUFBLENBSUEsT0FBQSxPQUFBLEtBQUEsS0FBQSxHQUFBLEtBQUEsT0FBQSxHQUFBLElBQUEsQ0FBQSxFQUNBLEtBQUEsWUFBQSxDQUNBLEVBRUEsUUFBQSxFQUFBLENBQ0EsU0FBQSxLQUFBLEdBQ0EsR0FBQSxJQUFBLE1BQUEsS0FBQSxDQUNBLEtBQUEsS0FBQSxLQUFBLEtBQUEsRUFBQSxFQUFBLEVBQUEsRUFDQSxTQUFBLEtBQUEsTUFBQSxvQkFBQSxDQUFBLEVBQ0EsRUFBQSxVQUFBLENBRUEsQ0FFQSxFQUVBLFdBQUEsRUFBQSxDQUlBLEtBQUEsR0FBQSxDQUFBLEVBQ0EsU0FBQSxDQUFBLEVBQUEsSUFBQSxRQUFBLFFBQUEsQ0FBQSxFQUNBLEFBQUEsR0FBQSxDQUFBLEdBQUEsRUFBQSxDQUFBLElBRUEsQUFEQSxLQUFBLG9CQUFBLENBQUEsRUFDQSxLQUFBLEdBQUEsRUFBQSxZQUFBLEdBSUEsR0FBQSxHQUFBLEdBRUEsTUFBQSxFQUNBLEVBRUEsWUFBQSxDQUFBLFNBQUEsWUFBQSxhQUFBLElBQUEsR0FBQSxDQUNBLE1BQUEsSUFDQSxLQUFBLE9BQ0EsS0FBQSxhQUNBLEtBQUEsS0FDQSxLQUFBLFNBQUEsQ0FHQSxVQUFBLEtBQ0EsYUFDQSxRQUNBLENBQ0EsQ0FDQSxFQUVBLFVBQUEsRUFBQSxPQUdBLFFBQUEsdUJBQUEsSUFBQSxRQUFBLHlCQUFBLEtBQUEsRUFDQSxFQUVBLG1CQUFBLEVBQUEsRUFBQSxPQUNBLEtBQUEsZUFBQSxLQUFBLG1CQUFBLEVBQUEsQ0FBQSxFQUVBLFFBQUEsd0JBQUEsUUFBQSxtQkFBQSxFQUFBLEVBQ0EsRUFFQSxjQUFBLEVBQUEsRUFBQSxDQUNBLEtBQUEsZUFBQSxLQUFBLGNBQUEsRUFBQSxDQUFBLENBQ0EsRUFFQSxlQUFBLEVBQUEsRUFBQSxDQUNBLEtBQUEsZUFBQSxLQUFBLGVBQUEsRUFBQSxDQUFBLENBQ0EsRUFFQSxlQUFBLEVBQUEsRUFBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLEVBQUEsS0FDQSxBQUFBLEVBQ0EsS0FBQSxLQUFBLEVBQUEsRUFBQSxDQUFBLEVBRUEsS0FBQSxRQUFBLEVBQUEsQ0FBQSxDQUVBLEVBRUEsdUJBQUEsRUFBQSxDQUNBLE1BQUEsUUFBQSxPQUFBLENBQUEsRUFBQSxPQUFBLENBQUEsRUFBQSxJQUFBLENBR0EsS0FBQSxDQUFBLFlBQUEsRUFFQSxNQURBLGFBQUEsQ0FBQSxJQUNBLEtBQUEsQ0FBQSxFQUNBLENBQ0EsRUFBQSxFQUFBLENBQ0EsRUFFQSxZQUFBLEVBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxHQUFBLENBQUEsRUFBQSxXQUFBLEtBQUEsUUFBQSxFQUNBLEtBQUEsc0JBQUEsRUFBQSxFQUFBLENBQUEsRUFDQSxLQUFBLGtCQUFBLEVBQUEsRUFBQSxDQUFBLENBQ0EsRUFFQSxzQkFBQSxFQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxlQUNBLEVBQUEsRUFBQSxDQUFBLElBQUEsQ0FBQSxFQUNBLENBQ0EsQ0FDQSxFQUVBLGtCQUFBLEVBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLGVBQ0EsRUFBQSxFQUFBLEtBQUEsU0FBQSxDQUFBLElBQUEsQ0FBQSxFQUNBLENBQ0EsQ0FDQSxFQUVBLGVBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxHQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxvSUNodEJJRixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxjQUFjLENBQUMsWUFBWSxzQkFBc0IsTUFBTSxDQUFFLHNCQUF1QixFQUFJLFNBQVMsRUFBRyxNQUFNLENBQUMsT0FBUyxFQUFJLE9BQU8sU0FBVyxFQUFJLFNBQVMsS0FBTyxFQUFJLEtBQUssS0FBTyxFQUFJLEtBQUssTUFBUSxFQUFJLE1BQU0sTUFBUSxFQUFJLFVBQVksS0FBTyxFQUFJLE1BQU0sUUFBVSxHQUFLLFNBQVcsRUFBSSxTQUFTLFVBQVksRUFBSSxVQUFVLFlBQWMsRUFBSSxXQUFXLEVBQUUsWUFBWSxFQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFPLENBQUUsRUFBSSxXQUFhLEVBQUksV0FBYSxFQUFJLFNBQVUsRUFBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsVUFBWSxFQUFJLFVBQVUsVUFBWSxFQUFJLFVBQVUsU0FBVyxFQUFJLFNBQVMsU0FBVyxFQUFJLFNBQVMsT0FBUyxFQUFJLE9BQU8sU0FBVyxFQUFJLFNBQVMsS0FBTyxFQUFJLEtBQUssS0FBTyxFQUFJLEtBQUssTUFBUSxFQUFJLEtBQUssRUFBRSxHQUFHLENBQUMsT0FBUyxTQUFTLEVBQU8sQ0FBQyxNQUFPLEdBQUksTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUksQ0FBQSxDQUFDLEVBQUUsTUFBTSxFQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNyMUJDLEdBQWtCLENBQUEsUUN1RHRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLHNCQUFBLENBQ0EsTUFBQSxDQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsTUFBQSxFQUFBLFFBQUEsSUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsU0FBQSxFQUFBLEVBQ0EsVUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxZQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxVQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsV0FBQSxDQUNBLE1BQUEsSUFBQSxLQUFBLE1BQUEsQ0FDQSxFQUVBLFVBQUEsQ0FDQSxNQUFBLENBQUEsS0FBQSxXQUFBLENBQUEsQ0FBQSxLQUFBLEtBQ0EsQ0FDQSxDQUNBLENBQUEsb0lDbEZJRixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQVEsR0FBSSxhQUFlLEVBQUksaUJBQWlCLE9BQVMsRUFBRyxFQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLE9BQU8sUUFBUSxTQUFTLE1BQU8sRUFBSSxRQUFTLFdBQVcsU0FBUyxDQUFDLEVBQUUsWUFBWSxXQUFXLEVBQUUsQ0FBQyxFQUFJLEdBQUksRUFBSSxpQkFBa0IsU0FBUyxFQUFJLENBQ3JULEdBQUksR0FBUyxFQUFJLE9BQ2IsRUFBVyxFQUFJLFNBQ2YsRUFBaUIsRUFBSSxlQUNyQixFQUFTLEVBQUksT0FDYixFQUFRLEVBQUksTUFDcEIsTUFBTyxDQUFFLEVBQU8sUUFBVSxTQUFVLEVBQUcsTUFBTSxDQUFDLFlBQVksWUFBWSxDQUFDLEVBQUUsRUFBSSxHQUFFLEVBQUksRUFBSSxhQUFhLENBQU0sRUFBRyxFQUFHLGlCQUFpQixDQUFDLElBQUksRUFBZSxNQUFNLENBQUMsT0FBUyxFQUFPLFNBQVcsRUFBUyxLQUFPLEVBQUksS0FBSyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQU0sT0FBUyxFQUFJLGtCQUFrQixPQUFTLEVBQU8sU0FBVyxFQUFJLFNBQVMsZUFBaUIsRUFBSSxjQUFjLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBRSxFQUFJLEVBQU8sUUFBVSxRQUFTLEVBQUcsTUFBTSxDQUFDLFlBQVksWUFBWSxDQUFDLEVBQUUsRUFBSSxHQUFJLENBQUEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBSSxJQUFJLEVBQ3piQyxHQUFrQixDQUFBLFFDa0V0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxZQUFBLENBQ0EsU0FBQSxDQUNBLE1BQUEsQ0FDQSxjQUFBLElBQUEsS0FBQSxZQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLElBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxRQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsZUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxjQUFBLENBQ0EsTUFBQSxNQUFBLElBQUEsS0FBQSxLQUFBLGNBQUEsQ0FDQSxFQUVBLGtCQUFBLFNBUUEsS0FBQSxHQUFBLFFBQUEsZUFBQSxjQUFBLGVBQ0EsTUFBQSxRQUFBLFFBQUEsU0FBQSxTQUFBLGNBQUEsYUFBQSxDQUFBLENBQUEsRUFBQSxJQUNBLENBQUEsQ0FBQSxFQUFBLEtBQUEsQ0FFQSxFQUFBLEtBQUEsRUFFQSxLQUFBLEdBQUEsR0FBQSxDQUFBLEVBQ0EsRUFBQSxFQUFBLEtBQUEsU0FBQSxDQUFBLEVBQ0EsTUFBQSxDQUNBLFNBQ0EsU0FBQSxHQUFBLENBQUEsRUFDQSxFQUNBLEtBQUEsU0FDQSxpQkFDQSxTQUNBLE1BQUEsRUFBQSxLQUFBLGNBQUEs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QSxDQUFBLENBQ0EsRUFFQSxVQUFBLENBQ0EsS0FBQSxDQUFBLFVBQUEsS0FDQSxDQUFBLFNBQUEsRUFDQSxNQUNBLEtBQUEsSUFDQSxFQUFBLENBQUEsR0FBQSxLQUFBLFlBQUEsZUFBQSxLQUFBLGVBRUEsRUFFQSxPQUFBLENBQ0EsTUFBQSxNQUFBLFNBQUEsS0FBQSxTQUFBLEtBQUEsTUFBQSxFQUFBLElBQ0EsRUFFQSxlQUFBLENBRUEsTUFBQSxNQUFBLE9BQUEsS0FBQSxTQUFBLElBQ0EsRUFFQSxlQUFBLEVBQUEsUUFBQSxDQUNBLEtBQUEsQ0FBQSxPQUFBLE1BQUEsRUFDQSxTQUFBLENBQ0EsTUFBQSxNQUFBLFlBQUEsWUFDQSxFQUNBLElBQUEsRUFBQSxDQUVBLE1BQUEsS0FBQSxPQUNBLEVBQ0EsRUFBQSxDQUFBLEVBQ0EsRUFBQSxNQUFBLG1CQUFBLEVBQUEsR0FDQSxDQUNBLENBQ0EsQ0FBQSxFQUVBLHVCQUFBLEVBQUEsUUFBQSxDQUNBLEtBQUEsT0FDQSxJQUFBLEVBQUEsQ0FDQSxNQUFBLEdBQUEsQ0FBQSxHQUNBLEVBQUEsTUFBQSxhQUFBLEVBQUEsSUFBQSxJQUVBLENBQ0EsQ0FBQSxFQUVBLGlCQUFBLEVBQUEsVUFBQSxDQUNBLEtBQUEsUUFDQSxTQUFBLENBQ0EsTUFBQSxNQUFBLFlBQUEsY0FDQSxDQUNBLENBQUEsRUFFQSxrQkFBQSxFQUFBLFdBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxHQUNBLElBQUEsRUFBQSxDQUNBLE1BQUEsSUFBQSxLQUFBLFFBQ0EsQ0FDQSxDQUFBLEVBRUEsZ0JBQUEsQ0FDQSxLQUFBLENBQUEsTUFBQSxHQUFBLEtBQUEsT0FDQSxNQUFBLElBQ0EsY0FBQSxLQUFBLE9BQ0Esb0JBQUEsR0FBQSxLQUFBLE1BQUEsR0FFQSxFQUFBLENBQUEsRUFDQSxFQUFBLEdBQUEsRUFBQSxFQUNBLEVBR0EsRUFFQSxnQkFBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLGVBRUEsRUFDQSxDQUFBLEtBQUEsT0FBQSxNQUFBLEVBQUEsU0FBQSxDQUFBLEVBQUEsT0FDQSxL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QUEsRUFBQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLENBQ0EsZ0JBQUEsSUFBQSxLQUNBLGNBQUEsSUFBQSxLQUFBLGlCQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsU0FBQSxFQUFBLEVBQ0Esa0JBQUEsQ0FBQSxLQUFBLEVBQUEsUUFBQSxJQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLFFBQUEsSUFDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLGdCQUFBLENBQ0EsTUFBQSxLQUNBLEVBRUEsY0FBQSxDQUNBLE1BQUEsTUFBQSxpQkFDQSxFQUVBLGVBQUEsQ0FDQSxNQUFBLElBQUEsS0FBQSxPQUFBLE9BQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxNQUFBLE1BQUEsT0FBQSxRQUFBLEtBQUEsUUFDQSxFQUVBLFlBQUEsQ0FDQSxNQUFBLENBQUEsQ0FBQSxLQUFBLE9BQ0EsRUFFQSxXQUFBLENBQ0EsTUFBQSxNQUFBLFNBQUEsS0FBQSxJQUNBLEVBRUEsYUFBQSxDQUNBLEdBQUEsS0FBQSxXQUNBLE1BQUEsTUFBQSxPQUNBLENBR0EsS0FBQSxRQUFBLE9BQUEsU0FBQSxFQUNBLE1BREEsR0FBQSxFQUFBLENBQUEsUUFFQSxDQUNBLEVBRUEsVUFBQSxDQUVBLE1BQUEsTUFBQSxXQUFBLE9BQUEsS0FDQSxFQUVBLGVBQUEsQ0FJQSxNQUFBLE1BQUEsV0FBQSxLQUFBLFNBQUEsS0FBQSxnQkFBQSxRQUNBLEVBRUEsUUFBQSxFQUFBLFVBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxFQUNBLENBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLFVBQUEsRUFBQSxF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QSxDQUNBLE9BQUEsQ0FBQSxFQUFBLEVBRUEsTUFBQSxDQUNBLFVBQUEsQ0FBQSxLQUFBLENBQUEsUUFBQSxNQUFBLEVBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsS0FBQSxFQUFBLFFBQUEsSUFBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxZQUFBLEdBQ0EsYUFBQSxHQUNBLGFBQUEsRUFDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLGtCQUFBLENBQ0EsTUFBQSxHQUFBLEtBQUEsU0FBQSxFQUFBLEtBQUEsVUFBQSxDQUFBLENBQ0EsRUFFQSxVQUFBLENBQ0EsS0FBQSxDQUFBLFFBQUEsS0FBQSxpQkFDQSxNQUFBLEdBQ0EsR0FBQSxFQUFBLEtBQUEsS0FBQSxHQUFBLEdBQUEsS0FBQSxDQUNBLGVBQ0EsQ0FBQSxDQUFBLEVBQ0EsR0FBQSxHQUFBLENBQUEsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxLQUFBLENBQUEsU0FBQSxLQUFBLGlCQUNBLE1BQUEsR0FDQSxHQUFBLEVBQUEsS0FBQSxLQUFBLEdBQUEsR0FBQSxLQUFBLENBQ0EsZUFDQSxDQUFBLENBQUEsRUFDQSxHQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FHQSxLQUFBLE1BQUEsU0FBQSxDQUNBLEtBQUEsS0FBQSxjQUNBLENBQUEsRUFDQSxLQUFBLE1BQUEsT0FBQSxDQUNBLE1BQUEsS0FBQSxjQUNBLENBQUEsRUFDQSxLQUFBLE9BQUEsT0FBQSxDQUVBLFVBQUEsR0FDQSxRQUFBLENBQUEsRUFBQSxJQUFBLENBQ0EsQUFBQSxJQUFBLEdBQ0EsS0FBQSxlQUFBLENBRUEsQ0FDQSxDQUFBLENBQ0EsRUFFQSxRQUFBLE1BQ0Esa0JBQUEsRUFBQSxlQUVBLEdBQUEsQ0FBQSxpQkFBQSxLQUFBLFNBQ0EsR0FBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLGlCQUFBLFlBQUEsY0FBQSxXQUFBLHVCQUNBLEFBQUEsS0FBQSxjQUFBLEdBR0EsTUFBQSxpQkFBQSxZQUFBLGNBQUEsWUFBQSxxQkFBQSxJQUNBLEtBQUEsYUFBQSxJQUVBLEdBQ0EsR0FBQSxLQUFBLE1BQUEsQ0FBQSxFQUVBLE9BQUEsRUFBQSxDQUNBLEFBQUEsR0FDQSxTQUFBLE1BQUEsRUFBQSxFQUFBLEtBQUEsRUFBQSxPQUFBLEVBQ0EsRUFBQSxPQUFBLGVBQ0EsTUFBQTtBQUFBO0FBQUEsZ0JBRUEsRUFBQTtBQUFBLGFBQ0EsRUFHQSxDQUNBLEtBQUEsTUFBQSxDQUFBLEVBQUEsWUFBQSxFQUFBLElBQUEsRUFBQSxDQUFBLFlBQ0EsTUFBQSxLQUFBLFNBQUEsa0JBQUEsY0FBQSxPQUFBLE1BQUEsRUFBQSxJQUNBLE9BRUEsaUJBQUEsQ0FDQSxLQUFBLFlBQUEsQ0FBQSxDQUFBLEtBQUEsS0FHQSxLQUFBLGFBQUEsQ0FBQSxDQUFBLEtBQUEsTUFBQSxpQkFBQSxFQUFBLENBQ0EsT0FFQSxTQUFBLFdBQ0EsR0FBQSxHQUFBLFFBQUEsa0JBQUEsY0FBQSxjQUNBLEdBQUEsQ0FDQSxFQUFBLEdBQUEsS0FBQSxTQUFBLENBQUEsRUFFQSxLQUFBLFNBQUEsY0FBQSxFQUNBLEdBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxVQUFBLEVBQUEsS0FBQSxDQUFBLEVBQ0EsS0FBQSxpQkFBQSxZQUFBLGNBQUEsWUFBQSxxQkFBQSxJQUVBLEtBQUEsTUFBQSxlQUFBLENBQ0EsT0FBQSxFQUFBLENBQ0EsUUFBQSxNQUFBLEVBQUEsRUFBQSxLQUFBLEVBQUEsT0FBQSxDQUNBLENBQ0EsT0FBQSxFQUFBLENBQ0EsUUFBQSxNQUFBLENBQUEsRUFDQSxNQUFBLEVBQUEsT0FBQSxDQUNBLENBQ0EsT0FFQSxVQUFBLENBQ0EsR0FBQSxHQUFBLEtBQUEsTUFBQSxpQkFBQSxFQUFBLEVBQ0EsR0FBQSxDQUNBLEVBQUEsR0FBQSxLQUFBLFVBQUEsQ0FBQSxFQUNBLEdBQ0EsS0FBQSxnQkFBQSxRQUFBLENBQUEsQ0FFQSxPQUFBLEVBQUEsQ0FDQSxRQUFBLE1BQUEsQ0FBQSxFQUNBLE1BQUEsRUFBQSxPQUFBLENBQ0Es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QUFPLGVBQWMsQ0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssT0FBTyxRQUFRLFNBQVMsTUFBTyxHQUFPLFdBQVcsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQU8sU0FBUyxTQUFXLE9BQU8sY0FBYyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFTLEVBQUksT0FBTyxTQUFXLEVBQUksU0FBUyxLQUFPLEVBQUksS0FBSyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksTUFBTSxTQUFXLEVBQUksVUFBVSxXQUFhLEVBQUksQ0FBQyxFQUFFLENBQUMsRUFBRyxlQUFlLENBQUMsWUFBWSwwREFBMEQsTUFBTSxDQUFDLEtBQU8sVUFBVSxRQUFVLEVBQUksY0FBYyxTQUFXLEVBQUksU0FBUyxLQUFPLEVBQUksS0FBSyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksTUFBTSxTQUFXLEVBQUksU0FBUyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDM3BDQyxHQUFrQixDQUFBLEVDdUR0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxZQUFBLENBQ0EsT0FBQSxDQUFBLEdBQUEsRUFBQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsWUFBQSxLQUNBLFdBQUEsT0FDQSxVQUFBLEtBQ0EsT0FBQSxFQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsT0FBQSxDQUlBLEtBQUEsR0FBQSxLQUFBLFNBQUEsRUFDQSxDQUFBLGFBQUEsZ0JBQUEsS0FDQSxNQUFBLFFBQ0EsR0FEQSxDQUVBLE9BQUEsRUFBQSxFQUFBLE9BQUEsRUFBQSxLQUNBLFVBQUEsRUFBQSxFQUFBLFFBQUEsRUFBQSxNQUNBLE9BQUEsRUFBQSxFQUFBLE9BQUEsRUFBQSxNQUNBLFVBQUEsRUFBQSxFQUFBLFVBQUEsRUFBQSxNQUNBLEVBQ0EsRUFFQSxRQUFBLENBQ0EsTUFBQSxNQUFBLGtCQUNBLEtBQUEsYUFHQSxLQUFBLE1BQUEsQ0FBQSxLQUFBLEtBQUEsSUFBQSxFQUNBLEtBQUEsT0FDQSxHQUFBLENBQUEsQ0FDQSxFQUVBLGVBQUEsQ0FDQSxNQUFBLElBQ0EsR0FDQSxDQUNBLE9BQUEsQ0FDQSxLQUFBLFNBQ0EsT0FBQSxDQUNBLE1BQUEsSUFBQSxLQUFBLE9BQUEsQ0FDQSxDQUNBLEVBRUEsT0FBQSxDQUFBLEtBQUEsWUFBQSxDQUNBLEtBQUEsU0FFQSxVQUFBLEdBQ0EsT0FBQSxDQUNBLE1BQUEsQ0FBQSxDQUFBLFVBQUEsS0FBQSxFQUFBLE9BQUEsQ0FDQSxDQUNBLENBQ0EsRUFDQSxLQUFBLE9BQUEsT0FDQSxDQUNBLENBQ0EsRUFFQSxVQUFBLENBQ0EsTUFBQSxNQUFBLGFBQUEsS0FBQSxtQkFDQSxFQUVBLGFBQUEsQ0FDQSxNQUFBLENBQUEsS0FBQSxZQUNBLEVBRUEsWUFBQSxDQUVBLE1BQUEsTUFBQSxRQUFBLFFBQ0EsRUFFQSxTQUFBLE9BQ0EsTUFBQSxDQUFBLEtBQUEsWUFBQSxDQUFBLENBQUEsU0FBQSxzQkFBQSxRQUFBLFFBQ0EsRUFFQSxhQUFBLE9BQ0EsTUFBQSxTQUFBLHNCQUFBLGNBQUEsY0FBQSxJQUNBLEVBRUEsWUFBQSxDQUlBLE1BQUEsTUFBQSxhQUFBLE1BQ0EsRUFFQSxNQUFBLENBRUEsTUFBQSxNQUFBLE9BQUEsTUFBQSxJQUNBLEVBRUEsUUFBQSxPQUNBLE1BQUEsTUFBQSxXQUNBLEtBQ0EsUUFBQSxRQUFBLE9BQUEsSUFDQSxFQUVBLFFBQUEsQ0FDQSxNQUFBLE1BQUEsV0FBQSxPQUFBLE9BQ0EsRUFFQSxVQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsWUFBQSxFQUNBLE1BQUEsSUFBQSxLQUFBLE9BQUEsQ0FBQSxHQUFBLENBQ0EsRUFFQSxrQkFBQSxDQUNBLE1BQUEsR0FBQSxLQUFBLFdBQUEsS0FBQSxNQUFBLE9BQUEsS0FBQSxNQUFBLElBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FTQSxNQUFBLE1BQUEsYUFBQSxLQUFBLFlBQUEsS0FBQSxlQUFBLElBQ0EsRUFFQSxVQUFBLENBQ0EsTUFBQSxNQUFBLGdCQUFBLEtBQUEsYUFBQSxDQUNBLEVBRUEsWUFBQSxDQUlBLEdBQUEsQ0FBQSxRQUFBLEtBQUEscUJBQ0EsR0FBQSxFQUFBLENBR0EsS0FBQSxHQUFBLEVBQ0EsS0FBQSxnQkFBQSxLQUFBLG9CQUFBLENBQ0EsRUFHQSxFQUFBLEtBQUEsWUFBQSxLQUFBLE1BQUEsR0FBQSxFQUNBLEVBQUEsRUFBQSxNQUFBLEVBQUEsT0FBQSxFQUFBLE1BQUEsRUFDQSxLQUFBLFVBQUEsS0FDQSxLQUFBLEdBQUEsRUFBQSxFQUFBLE9BQUEsR0FDQSxBQUFBLEVBQUEsS0FBQSxZQUFBLEdBQUEsSUFBQSxVQUlBLEVBQUEsU0FFQSxPQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsT0FBQSxFQUFBLEdBQUEsRUFBQSxJQUFBLENBQ0EsS0FBQSxHQUFBLEVBQUEsR0FFQSxFQUFBLE9BQUEsS0FBQSxFQUFBLEVBQUEsRUFDQSxJQUFBLFNBQ0EsS0FDQSxLQUFBLGdCQUFBLEtBQUEsYUFBQSxFQUFBLENBQUEsRUFDQSxFQUdBLEFBQUEsSUFBQSxFQUFBLEVBQ0EsS0FBQSxVQUFBLEVBRUEsRUFBQSxFQUFBLEVBRUEsQ0FDQSxDQUNBLE1BQUEsRUFDQSxFQUVBLGVBQUEsQ0FJQSxHQUNBLEtBQUEsYUFDQSxLQUFBLGFBQUEsUUFDQSxLQUFBLFlBQ0EsS0FBQSxZQUFBLEtBQ0EsQ0FDQSxHQUFBLEdBQUEsS0FBQSxXQUFBLEtBQUEsV0FDQSxNQUFBLE1BQUEsWUFHQSxNQUFBLFdBQUEsRUFBQSxHQUFBLENBQUEsR0FHQSxJQUFBLE1BQ0EsQ0FBQSxLQUFBLFlBQ0EsRUFBQSxLQUFBLFlBQUEsR0FHQSxLQUFBLFFBQUEsS0FBQSxDQUFBLEtBQUEsU0FBQSxPQUFBLEdBQUEsRUFFQSxDQUNBLENBQ0EsTUFBQSxNQUFBLFVBQ0EsRUFHQSxTQUFBLENBQ0EsTUFBQSxDQUFBLENBQUEsS0FBQSxJQUNBLEVBRUEsV0FBQSxDQUNBLE1BQUEsTUFBQSxhQUFBLEtBQUEsYUFBQSxLQUFBLEtBQUEsQ0FBQSxTQUFBLEdBQUEsQ0FDQSxDQUNBLEVBRUEsTUFBQSxDQUNBLFdBQUEsa0JBRUEsT0FBQSxXQUNBLEVBRUEsUUFBQSxDQUNBLGdCQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxvQkFBQSxVQUFBLEVBQUEsQ0FBQSxDQUNBLEVBRUEsZ0JBQUEsRUFBQSxDQUVBLE1BQUEsTUFBQSxJQUFBLGdCQUFBLEtBQUEsS0FFQSxNQUFBLEdBQUEsT0FBQSxFQUFBLEVBQUEsS0FBQSxRQUFBLENBQUEsQ0FBQSxDQUNBLEVBR0EsV0FBQSxDQUNBLEFBQUEsS0FBQSxXQUNBLEtBQUEsWUFBQSxLQUFBLGFBQ0EsS0FBQSxXQUFBLEtBQUEsT0FBQSxLQUFBLElBQUEsRUFFQSxLQUFBLFdBQUEsQ0FFQSxFQUVBLGNBQUEsRUFBQSxDQUNBLEdBQUEsS0FBQSxZQUFBLEtBQUEsWUFBQSxLQUFBLENBQ0EsS0FBQSxDQUFBLHVCQUFBLEtBQ0EsWUFBQSxLQUNBLEtBQUEsV0FDQSxLQUFBLFVBQ0EsRUFBQSxXQUFBLENBQUEsQ0FDQSxFQUNBLEVBQUEsU0FBQSxFQUNBLEVBQ0EsQ0FDQSxNQUFBLEVBQ0EsRUFFQSxjQUFBLEVBQUEsT0FDQSxNQUFBLEdBQUEsS0FBQSxZQUFBLEVBQ0EsS0FBQSxjQUFBLENBQUEsRUFDQSxDQUFBLENBQUEsU0FBQSxhQUFBLFFBQUEsS0FBQSxHQUNBLEVBR0EsV0FBQSxDQUNBLEtBQUEsUUFBQSxJQUFBLENBQ0EsRUFHQSxRQUFBLEVBQUEsQ0FFQSxBQUFBLEtBQUEsWUFFQSxLQUFBLGNBQUEsQ0FBQSxFQUVBLE1BQUEsWUFBQSxLQUNBLEtBQUEsV0FBQSxFQUVBLEVBRUEsZ0JBQUEsRUFBQSxFQUFBLENBRUEsQUFBQSxJQUFBLEdBQ0EsTUFBQSxXQUFBLE9BRUEsT0FFQSxTQUFBLENBQ0EsTUFBQSxNQUFBLE1BQUEsQ0FDQSxPQUVBLFFBQUEsQ0FDQSxNQUFBLE1BQUEsU0FBQSxLQUFBLHFCQUFBLElBQUEsQ0FDQSxFQUVBLGNBQUEsRUFBQSxHQUFBLENBQ0EsTUFBQSxNQUFBLFdBQ0EsRUFBQSxTQUFBLFVBQ0EsRUFBQSxTQUFBLFdBQ0EsT0FFQSxRQUFBLEVBQUEsQ0FBQSxXQUFBLEdBQUEsWUFBQSxJQUFBLEdBQUEsQ0FDQSxHQUFBLEdBQUEsQ0FBQSxLQUFBLGNBQ0EsTUFBQSxHQUdBLEtBQUEsR0FBQSxHQUFBLEtBQUEsTUFBQSxLQUFBLGNBQUEsQ0FBQSxHQUdBLEVBQUEsRUFBQSxFQUFBLE9BQUEsU0FBQSxDQUNBLE9BQUEsS0FBQSxRQUNBLENBQUEsRUFDQSxFQUFBLEdBQUEsS0FBQSxTQUNBLEVBQUEsa0JBQUEsU0FBQSxLQUFBLE9BQ0EsRUFBQSxLQUFBLGVBQUEsRUFBQSxDQUFBLEVBQ0EsR0FBQSxHQTJEQSxHQTFEQSxBQUFBLENBQUEsR0FBQSxLQUFBLFlBQ0EsRUFBQSxLQUFBLE1BQUEsZ0JBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxDQUNBLFVBQUEsSUFBQSxLQUFBLGdCQUFBLEtBQUEsY0FBQSxDQUFBLEVBQ0EsUUFBQSxHQUFBLEtBQUEsZ0JBQUEsUUFBQSxDQUNBLFFBQUEsQ0FBQSxPQUFBLENBQ0EsQ0FBQSxFQUNBLGNBQUEsSUFBQSxDQUNBLEtBQUEsR0FBQSxFQUFBLEVBQUEsRUFDQSxLQUFBLE9BQUEsQ0FDQSxLQUFBLE9BQ0EsTUFBQSxLQUFBLFdBQ0EsUUFBQSxFQUFBLENBQUEsSUFDQSxVQUFBLEVBQUEsQ0FBQSxJQUNBLEtBQUEsQ0FDQSxLQUFBLFdBQ0EsR0FBQSxLQUFBLGlCQUFBLEtBQ0EsY0FBQSxLQUFBLGtCQUFBLEtBQ0EsS0FBQSxhQUNBLENBQ0EsQ0FBQSxDQUNBLEVBQ0EsWUFBQSxJQUFBLENBQ0EsS0FBQSxHQUFBLEVBQUEsRUFBQSxFQUNBLEtBQUEsT0FBQSxDQUNBLEtBQUEsUUFDQSxNQUFBLGdCQUNBLEtBQUEsYUFBQSxLQUFBLEtBQUEsWUFDQSxDQUFBLENBQ0EsQ0FDQSxDQUFBLEVBRUEsRUFBQSxLQUFBLE1BQUEsZUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLENBQ0EsUUFBQSxHQUNBLFVBQUEsSUFBQSxLQUFBLGdCQUFBLEtBQUEsY0FBQSxDQUFBLEVBQ0EsUUFBQSxHQUFBLEtBQUEsZ0JBQUEsUUFBQSxDQUNBLFFBQUEsQ0FBQSxPQUFBLENBQ0EsQ0FBQSxFQUNBLGNBQUEsSUFBQSxDQUNBLEtBQUEsR0FBQSxFQUFBLEVBQUEsRUFDQSxLQUFBLE9BQUEsQ0FDQSxLQUFBLFVBQ0EsTUFBQSxnQkFBQSxFQUFBLENBQUEsSUFDQSxLQUFBLEdBQUEsS0FBQSxpQkFBQSxJQUNBLENBQUEsQ0FDQSxFQUNBLFlBQUEsR0FBQSxDQUNBLEtBQUEsR0FBQSxFQUFBLEVBQUEsRUFDQSxLQUFBLE9BQUEsQ0FDQSxLQUFBLFFBQ0EsTUFBQSxnQkFDQSxLQUFBLENBQ0EsYUFBQSxLQUFBLEtBQUEsWUFBQSxFQUFBLElBQUEsS0FDQSxrQkFBQSxVQUFBLENBQ0EsQ0FDQSxDQUFBLENBQ0EsQ0FDQSxDQUFBLEVBRUEsR0FFQSxHQURBLEtBQUEsZ0JBQUEsRUFDQSxHQUFBLEVBQUEsVUFDQSxLQUFBLE1BQUEsVUFDQSxLQUFBLFdBQUEsQ0FFQSxLQUFBLEdBQUEsS0FBQSxVQUFBLEtBQUEsT0FBQSxLQUFBLElBQUEsRUFDQSxLQUFBLFFBQUEsUUFBQSxDQUFBLEtBQUEsTUFBQSxJQUFBLE9BQUEsR0FBQSxDQUNBLEVBRUEsTUFBQSxFQUNBLE9BRUEsaUJBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxDQUNBLFlBQ0EsVUFDQSxnQkFDQSxlQUNBLENBRUEsS0FBQSxHQUFBLEtBQUEsV0FDQSxLQUFBLGNBQUEsQ0FBQSxFQUNBLEtBQUEsY0FBQSxDQUFBLEVBQ0EsR0FBQSxFQUNBLGFBQ0EsS0FBQSxNQUFBLGdCQUFBLEVBQUEsVUFBQSxDQUNBLE9BQUEsQ0FDQSxDQUFBLE1BQ0EsQ0FDQSxLQUFBLEdBQUEsa0NBQ0EsV0FBQSxHQUNBLEtBQUEsTUFBQSxnQkFBQSxFQUFBLFFBQUEsQ0FDQSxPQUFBLEVBQ0EsT0FDQSxDQUFBLENBQ0EsQ0FDQSxNQUFBLEVBQ0EsQ0FDQSxDQUNBLENBQUEsMElDdmNBLEtBQUFBLElBQUEsR0FBQSxVQUFBLG1CQUFBLENBQUEsQ0FBQSxvSkNaSUYsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFRLEdBQUksT0FBUSxFQUFHLE1BQU0sQ0FBQyxZQUFZLGFBQWEsRUFBRSxDQUFDLEVBQUcsS0FBSyxFQUFJLEdBQUksRUFBSSxPQUFRLFNBQVMsRUFBTSxDQUFDLE1BQU8sR0FBRyxLQUFLLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxDQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxJQUFJLEVBQ2xQQyxHQUFrQixDQUFBLFFDcUJ0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxjQUFBLENBQ0EsTUFBQSxDQUNBLE9BQUEsQ0FBQSxLQUFBLE1BQUEsUUFBQSxJQUFBLENBQ0EsQ0FDQSxDQUFBLG9JQzFCSUYsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksYUFBYSxFQUFFLEVBQUksR0FBSSxFQUFJLE9BQVEsU0FBUyxFQUFNLEVBQUksQ0FBQyxNQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBSSxNQUFNLENBQUMsR0FBSyxFQUFJLGFBQWEsQ0FBSyxFQUFFLE9BQVMsRUFBRSxFQUFFLFlBQVksRUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLFVBQVUsR0FBRyxTQUFTLEVBQUksQ0FDbFQsR0FBSSxHQUFXLEVBQUksU0FDbkIsTUFBTyxDQUFDLEVBQUcsU0FBUyxDQUFDLFlBQVksY0FBYyxNQUFNLENBQUUsZ0JBQWlCLEVBQU0sT0FBUyxFQUFJLE1BQU0sT0FBUSxNQUFNLENBQUMsS0FBTyxTQUFTLE1BQVEsRUFBTSxNQUFRLEVBQUksU0FBUyxDQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBUSxDQUFRLENBQUMsRUFBRSxDQUFDLEVBQUksR0FBRyxFQUFJLEdBQUcsRUFBSSxTQUFTLENBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDMVBDLEdBQWtCLENBQUEsUUMyQ3RCLEtBQUFDLElBQUEsRUFBQSxVQUFBLGNBQUEsQ0FDQSxNQUFBLENBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxPQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLGFBQUEsRUFBQSxDQUNBLEtBQUEsR0FBQSxPQUFBLEtBQUEsT0FBQSxDQUFBLE1BQUEsRUFBQSxJQUFBLEdBQ0EsTUFBQSxHQUFBLE1BQ0EsR0FBQSxLQUFBLEdBRUEsS0FBQSxhQUFBLENBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxvSUM3RElGLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBVyxFQUFJLE1BQU0sTUFBUSxFQUFJLE1BQU0sS0FBTyxFQUFJLElBQUksRUFBRSxHQUFHLENBQUMsY0FBYyxTQUFTLEVBQU8sQ0FBQyxFQUFJLEtBQUssQ0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2xPQyxHQUFrQixDQUFBLEVDWXRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLGtCQUFBLENBQ0EsV0FBQSxDQUFBLGFBQUEsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxDQUNBLEtBQUEsQ0FDQSxNQUFBLEVBQUEsS0FBQSxNQUFBLE1BQUEsR0FBQSxDQUNBLEVBRUEsSUFBQSxFQUFBLENBQ0EsQUFBQSxLQUFBLE9BQUEsR0FDQSxLQUFBLFFBQUEsS0FBQSxLQUFBLGFBQUEsT0FDQSxLQUFBLE9BREEsQ0FFQSxLQUFBLEVBQUEsQ0FDQSxFQUFBLENBQUEsQ0FFQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQ25DZSxHQUFBLENBQ2IsT0FBUSxDQUFDLEVBQVMsRUFFbEIsTUFBTyxDQUNMLE1BQU8sQ0FDTCxTQUFVLEVBQ1gsQ0FDRixFQUVELFFBQVMsQ0FDUCxhQUFjLENBQ1osS0FBSyxTQUFXLEVBQ2pCLEVBRUQsVUFBVSxDQUFFLFdBQVUsWUFBWSxDQUNoQyxLQUFLLFNBQVcsR0FDWixJQUFhLEdBQ2YsS0FBSyxTQUFVLENBRWxCLEVBRUQsWUFBWSxFQUFjLEVBQU0sRUFBaUIsQ0FDL0MsS0FBTSxDQUFFLFlBQWEsRUFDckIsR0FBSSxFQUFVLENBR1osS0FBTSxHQUFTLGtCQUFrQixLQUFNLEVBQ3ZDLE9BQVMsR0FBSSxFQUFHLEVBQUksRUFBSyxPQUFRLElBQy9CLEVBQUssR0FBRyxHQUFZLEVBQUksQ0FFM0IsQ0FDRCxNQUFPLEVBQ1IsQ0FDRixDQUNILEVDckNJRixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxNQUFNLENBQUMsWUFBWSxpQkFBaUIsTUFBTSxDQUN6SSxnQkFBaUIsRUFBSSxTQUNyQixjQUFlLEVBQUksTUFDcEIsRUFBQyxNQUFPLEVBQUksTUFBUSxHQUFLLENBQUUsVUFBVyxFQUFJLEtBQUssRUFBSSxNQUFNLENBQUMsR0FBSyxFQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUUsRUFBSSxNQUFPLEVBQUcsTUFBTSxDQUFDLFlBQVksa0JBQWtCLEVBQUUsQ0FBRSxFQUFJLFdBQVksRUFBRyxNQUFNLENBQUMsWUFBWSxtQkFBbUIsR0FBRyxDQUFDLE1BQVEsU0FBUyxFQUFPLENBQUMsRUFBTyxnQkFBZSxFQUFHLEVBQUksT0FBUyxDQUFDLEVBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFFLEVBQUksV0FBWSxFQUFHLE1BQU0sQ0FBQyxZQUFZLGVBQWUsTUFBTSxDQUFFLGNBQWUsRUFBSSxNQUFNLENBQUUsQ0FBQyxFQUFFLEVBQUksS0FBSyxFQUFHLE1BQU0sQ0FBQyxZQUFZLGtCQUFrQixTQUFTLENBQUMsVUFBWSxFQUFJLEdBQUcsRUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUcsRUFBSSxRQUFTLEVBQUcsTUFBTSxDQUFDLFlBQVksZ0JBQWdCLEVBQUUsQ0FBQyxFQUFJLEdBQUcsRUFBSSxHQUFHLEVBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBSSxDQUFBLENBQUMsRUFBRSxFQUFHLE1BQU0sQ0FBQyxZQUFZLGdCQUFnQixFQUFFLENBQUMsRUFBRyxNQUFNLENBQUMsWUFBWSxrQkFBa0IsU0FBUyxDQUFDLFVBQVksRUFBSSxHQUFHLEVBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRyxFQUFJLGVBQWdCLEVBQUcsTUFBTSxDQUFDLFlBQVksaUNBQWlDLEVBQUUsQ0FBRSxFQUFJLFVBQVcsRUFBRyxJQUFJLEVBQUksR0FBRyxDQUFDLFlBQVksYUFBYSxFQUFFLElBQUksRUFBSSxvQkFBb0IsRUFBSSxNQUFNLElBQUksRUFBRSxFQUFLLENBQUMsRUFBRSxFQUFJLEdBQUksRUFBRSxFQUFJLFNBQVUsRUFBRyxTQUFTLEVBQUksR0FBRyxDQUFDLFlBQVksY0FBYyxNQUFNLENBQUMsS0FBTyxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQVEsRUFBSSxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUksb0JBQW9CLEVBQUksTUFBTSxJQUFJLEVBQUUsRUFBSyxDQUFDLEVBQUUsRUFBSSxHQUFJLEVBQUUsRUFBSSxVQUFXLEVBQUcsU0FBUyxFQUFJLEdBQUcsQ0FBQyxZQUFZLGNBQWMsTUFBTSxDQUFDLEtBQU8sUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFRLEVBQUksUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFJLG9CQUFvQixFQUFJLE1BQU0sTUFBTSxFQUFFLEVBQUssQ0FBQyxFQUFFLEVBQUksR0FBSSxDQUFBLENBQUMsRUFBRSxFQUFJLEdBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBSSxHQUFFLEVBQUksRUFBSSxXQUFZLEVBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssT0FBTyxRQUFRLFNBQVMsTUFBTyxFQUFJLE9BQVEsV0FBVyxRQUFRLENBQUMsRUFBRSxZQUFZLGlCQUFpQixFQUFFLEVBQUksR0FBSSxFQUFJLFdBQVksU0FBUyxFQUFTLENBQUMsTUFBTyxHQUFHLEtBQUssQ0FBQyxFQUFHLEtBQUssQ0FBRSxFQUFTLFFBQVUsR0FBTyxFQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBVyxFQUFJLG9CQUFvQixDQUFRLEVBQUUsTUFBUSxFQUFJLFNBQVMsQ0FBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFPLEVBQVMsT0FBUyxFQUFTLFNBQVcsRUFBSSxvQkFBb0IsQ0FBUSxFQUFFLEtBQU8sRUFBSSxLQUFLLEtBQU8sRUFBSSxXQUFXLE1BQVEsRUFBSSxNQUFNLFNBQVcsRUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBSSxLQUFNLEVBQUksZUFBZ0IsRUFBRyxnQkFBZ0IsRUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxPQUFPLFFBQVEsU0FBUyxNQUFPLEVBQUksT0FBUSxXQUFXLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFPLEVBQUksWUFBWSxFQUFJLGVBQWdCLEVBQUksWUFBWSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQVEsRUFBSSxZQUFZLElBQU0sU0FBUyxFQUFPLENBQUMsTUFBTyxHQUFJLFVBQVUsRUFBUSxFQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBSSxlQUFlLEVBQUksa0JBQW1CLEVBQUksRUFBRSxFQUFLLEVBQUUsRUFBSSxHQUFJLEVBQUksY0FBZSxTQUFTLEVBQUssRUFBTSxDQUFDLE1BQU8sR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUksV0FBVyxFQUFJLGVBQWdCLEVBQUssSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFTLEVBQUksZUFBZSxTQUFXLEVBQUksZ0JBQWdCLEVBQUksZUFBZ0IsQ0FBSyxFQUFFLEtBQU8sRUFBSyxLQUFLLEtBQU8sRUFBSyxLQUFLLEtBQU8sRUFBSyxLQUFLLE9BQVMsRUFBSyxPQUFPLFVBQVksRUFBSSxrQkFBa0IsTUFBUSxFQUFJLGFBQWEsRUFBSSxlQUFnQixFQUFLLEtBQU0sQ0FBRSxNQUFPLENBQUssQ0FBRSxFQUFFLE1BQVEsRUFBSSxNQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFJLElBQUksRUFBRSxDQUFDLENBQUMsRUFDM2tGQyxHQUFrQixDQUFBLFFDMkp0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxpQkFBQSxDQUNBLFdBQUEsQ0FBQSxlQUFBLEVBQ0EsT0FBQSxDQUFBLEVBQUEsRUFDQSxPQUFBLENBQUEsV0FBQSxFQUVBLE1BQUEsQ0FDQSxPQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsQ0FBQSxNQUFBLE1BQUEsRUFBQSxRQUFBLElBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxVQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLENBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxLQUFBLE1BQUEsS0FBQSxPQUFBLElBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLENBQ0EsTUFBQSxNQUFBLFVBQUEsSUFDQSxFQUVBLE9BQUEsQ0FDQSxNQUFBLE1BQUEsVUFBQSxLQUNBLEVBRUEsVUFBQSxDQUNBLE1BQUEsTUFBQSxVQUFBLFFBQ0EsRUFFQSxZQUFBLENBQ0EsTUFBQSxRQUNBLEtBQUEsTUFEQSxDQUVBLE9BQUEsS0FBQSxNQUNBLEVBQ0EsRUFFQSxZQUFBLENBQ0EsTUFBQSxHQUFBLEtBQUEsT0FBQSxVQUFBLENBQ0EsRUFHQSxnQkFBQSxDQUNBLE1BQUEsTUFBQSxPQUFBLFFBQ0EsRUFFQSxjQUFBLE9BQ0EsS0FBQSxHQUFBLFFBQUEsaUJBQUEsY0FBQSxLQUNBLE1BQUEsSUFBQSxLQUFBLEtBQUEsRUFDQSxFQUVBLG1CQUFBLE9BQ0EsTUFDQSxTQUFBLGVBQUEsY0FBQSxRQUFBLEdBQ0EsS0FBQSxlQUFBLFlBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxHQUNBLE9BQUEsS0FBQSxjQUNBLENBQUEsQ0FFQSxFQUVBLGFBQUEsT0FDQSxNQUFBLFNBQUEsZUFBQSxjQUFBLFNBQUEsQ0FDQSxFQUVBLGVBQUEsT0FDQSxNQUFBLFNBQUEsYUFBQSxjQUFBLFNBQUEsQ0FDQSxFQUVBLFlBQUEsQ0FDQSxNQUFBLE1BQUEsY0FBQSxLQUFBLFdBQ0EsRUFFQSxlQUFBLE9BQ0EsS0FBQSxDQUFBLGtCQUFBLEtBQ0EsR0FBQSxFQUFBLENBQ0EsS0FBQSxDQUFBLFlBQUEsS0FBQSxVQUNBLEVBQUEsQ0FBQSxLQUFBLE1BQUEsRUFBQSxLQUVBLE1BQUEsU0FBQSxlQUFBLGNBQUEsSUFBQSxDQUFBLEVBQUEsSUFBQSxDQUNBLEtBQUEsR0FDQSxFQUFBLE1BQ0EsR0FBQSxLQUFBLFFBQUEsRUFBQSxRQUFBLElBRUEsRUFBQSxHQUVBLEVBQUEsV0FBQSxDQUFBLEdBQUEsRUFBQSxPQUFBLEVBQUEsT0FFQSxNQUFBLENBQ0EsT0FDQSxPQUNBLE9BQ0EsT0FMQSxJQUFBLENBTUEsQ0FDQSxLQUFBLENBQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsQ0FBQSxlQUFBLEtBQ0EsTUFBQSxJQUFBLEdBQUEsS0FDQSxJQUFBLEVBQUEsT0FBQSxTQUVBLEVBRUEsZ0JBQUEsQ0FDQSxNQUFBLE1BQUEsV0FBQSxLQUFBLFVBQUEsS0FBQSxTQUNBLEVBTUEsVUFBQSxFQUFBLFlBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxHQUNBLElBQUEsRUFBQSxDQUNBLE1BQUEsSUFBQSxFQUFBLEtBQUEsTUFBQSxDQUNBLENBQ0EsQ0FBQSxFQUVBLFNBQUEsRUFBQSxXQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsR0FDQSxJQUFBLEVBQUEsQ0FDQSxNQUFBLElBQUEsRUFBQSxLQUFBLE1BQUEsQ0FDQSxDQUNBLENBQUEsRUFFQSxVQUFBLEVBQUEsWUFBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEVBQ0EsQ0FBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLG9CQUFBLEVBQUEsQ0FDQSxNQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsSUFBQSxDQUNBLEVBRUEsUUFBQSxDQUdBLEtBQUEsUUFBQSxLQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsVUFBQSxPQUFBLEtBQUEsT0FFQSxNQUFBLEtBQUEsT0FBQSxLQUNBLENBQUEsQ0FDQSxFQUVBLFVBQUEsQ0FFQSxFQUVBLFVBQUEsQ0FDQSxLQUFBLFVBQUEsU0FBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQ3BVSUYsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsUUFBUSxDQUFDLFlBQVksaUJBQWlCLEVBQUUsQ0FBQyxFQUFHLEtBQUssQ0FBQyxFQUFJLEdBQUksRUFBSSxRQUFTLFNBQVMsRUFBTyxFQUFNLENBQUMsTUFBUSxHQUFJLGFBQWEsQ0FBTSxFQUFHLEVBQUcsS0FBSyxDQUFDLE1BQU0sRUFBSSxlQUFlLENBQU0sQ0FBQyxFQUFFLENBQUUsRUFBTyxTQUFVLEVBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFLLEVBQUksWUFBWSxDQUFNLEVBQUUsT0FBUyxFQUFFLEVBQUUsWUFBWSxFQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLFNBQVMsRUFBSSxDQUN2WixHQUFJLEdBQVcsRUFBSSxTQUNuQixNQUFPLENBQUMsRUFBRyxTQUFTLENBQUMsWUFBWSxjQUFjLE1BQU0sRUFBSSxhQUFhLENBQU0sRUFBRSxNQUFNLENBQUMsS0FBTyxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQVEsQ0FBUSxDQUFDLEVBQUUsQ0FBQyxFQUFHLE1BQU0sQ0FBQyxZQUFZLG1CQUFtQixDQUFDLEVBQUUsRUFBRyxPQUFPLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLFNBQVMsQ0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUcsT0FBTyxDQUFDLEVBQUksR0FBRyxFQUFJLEdBQUcsRUFBSSxTQUFTLENBQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUksR0FBRSxDQUFFLENBQUMsRUFBRyxFQUFJLGVBQWdCLEVBQUcsS0FBSyxDQUFDLEVBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUUsQ0FBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDcldDLEdBQWtCLENBQUEsUUN3RHRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLGtCQUFBLENBQ0EsTUFBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsUUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxlQUFBLENBQUEsS0FBQSxRQUFBLFNBQUEsRUFBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FDQSxLQUFBLEdBQUEsTUFBQSxNQUFBLE9BQUEsSUFBQSxNQUFBLEtBQUEsRUFDQSxNQUFBLENBQ0EsS0FBQSxFQUFBLEdBQ0EsTUFBQSxFQUFBLEVBQ0EsQ0FDQSxDQUNBLEVBRUEsUUFBQSxDQUNBLGVBQUEsRUFBQSxDQUNBLE1BQUEsZUFBQSxFQUFBLEVBQUEsSUFBQSxHQUNBLEVBRUEsYUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLEtBQUEsT0FBQSxFQUFBLEtBQ0EsNEJBQUEsS0FBQSxLQUFBLFFBQ0EsSUFDQSxFQUVBLFlBQUEsRUFBQSxDQUVBLEtBQUEsR0FBQSxLQUFBLEtBQUEsT0FBQSxFQUFBLE1BQUEsS0FBQSxLQUFBLFFBQUEsTUFDQSxPQUNBLE1BQ0EsTUFBQSxNQUFBLGFBQUEsT0FDQSxLQUFBLE9BREEsQ0FFQSxNQUFBLEdBQUEsRUFBQSxRQUFBLEdBQ0EsRUFBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQ2xHSUYsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBSSxLQUFLLE1BQU0sTUFBTyxFQUFJLEtBQUssS0FBTSxFQUFFLENBQUUsRUFBSSxVQUFXLEVBQUcsRUFBSSxVQUFVLENBQUMsSUFBSSxZQUFZLE1BQU0sQ0FBQyxPQUFTLEVBQUksT0FBTyxTQUFXLEVBQUksU0FBUyxLQUFPLEVBQUksS0FBSyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksTUFBTSxPQUFTLEVBQUksT0FBTyxTQUFXLEVBQUksUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBWSxFQUFJLEdBQUcsRUFBSSxXQUFXLEVBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDamFDLEdBQWtCLENBQUEsRUM2QnRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLGtCQUFBLENBQ0EsTUFBQSxDQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE9BQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxXQUFBLENBQ0EsTUFBQSxNQUFBLHFCQUFBLEtBQUEsS0FBQSxTQUFBLENBQ0EsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxXQUFBLEVBQUEsQ0FDQSxLQUFBLENBQUEsT0FBQSxVQUFBLEtBQUEsS0FDQSxFQUFBLEVBQUEsR0FDQSxNQUFBLEdBQ0EsRUFBQSxLQUNBLEtBQ0EsR0FBQSxHQUFBLEtBQUEsQ0FDQSxPQUNBLFFBQ0EsS0FBQSxFQUNBLFNBQUEsRUFBQSxLQUFBLFNBQUEsQ0FBQSxDQUNBLENBQUEsQ0FDQSxFQUNBLEdBQUEsQ0FBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQzNEQSxLQUFBQSxJQUFBLEVBQUEsVUFBQSxhQUFBLENBQ0EsV0FBQSxHQUNBLE9BQUEsQ0FBQSxFQUFBLElBQUEsRUFBQSxNQUFBLElBQ0EsQ0FBQSxzcEJDREEsS0FBTUMsR0FBZ0IsRUFBYyxPQUFPLENBQ3pDLE9BQVEsQ0FBQyxFQUFTLEVBRWxCLFlBQWEsR0FDYixVQUFXLEdBR1gsYUFBYyxLQUNkLGNBQWUsR0FDZixlQUFnQixHQUNoQixjQUFlLEdBQ2YsYUFBYyxHQUNkLG1CQUFvQixLQUNwQixZQUFhLEVBQ2YsQ0FBQyxFQUVEQSxFQUFjLFNBQVcsU0FBUyxFQUFPLEVBQWEsQ0FBQSxFQUFJLENBQ3hELEVBQVEsRUFBUSxDQUFLLEVBQ3JCLEtBQU0sR0FBWSxLQUFLLFVBQVUsYUFBYSxFQUFNLEtBQU0sQ0FBVSxFQUNwRSxTQUFXLEtBQVEsR0FDakIsR0FBc0IsRUFBTSxDQUFTLEVBRXZDLE1BQU8sRUFDVCxFQUVBQSxFQUFjLElBQU0sR0NqQ3BCLEdBQUlILElBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLFNBQVMsRUFBSSxHQUFHLEVBQUksR0FBRyxDQUFDLElBQUksVUFBVSxZQUFZLGNBQWMsTUFBTyxlQUFpQixFQUFJLEtBQU0sTUFBTSxDQUFDLEdBQUssRUFBSSxTQUFTLEtBQU8sRUFBSSxLQUFLLE1BQVEsRUFBSSxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUksV0FBVyxFQUFLLEVBQUUsRUFBSSxTQUFTLEVBQUUsQ0FBQyxFQUFJLEdBQUcsRUFBSSxHQUFHLEVBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3RVQyxHQUFrQixDQUFBLEVDaUJ0QixLQUFBQyxJQUFBQyxFQUFBLFNBQUEsQ0FDQSxTQUFBLFFBQ0EsRUFFQSxDQUNBLGFBQUEsSUFBQSxHQUNBLGFBQUEsR0FDQSxhQUFBLE9BSUEsU0FBQSxDQUNBLE1BQUEsQ0FDQSxNQUFBLE1BQUEsTUFBQSxLQUFBLE9BQUEsS0FBQSxJQUNBLEVBRUEsS0FBQSxFQUFBLE9BQUEsQ0FDQSxLQUFBLE9BQ0EsSUFBQSxFQUFBLENBQ0EsTUFBQSxJQUFBLEVBQUEsS0FBQSxJQUFBLENBQ0EsQ0FDQSxDQUFBLEVBRUEsVUFBQSxFQUFBLFlBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxFQUNBLENBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FFQSxjQUFBLENBQ0EsTUFBQSxDQUNBLE1BQUEsS0FBQSxRQUNBLEtBQUEsS0FBQSxPQUNBLE1BQUEsS0FBQSxPQUNBLENBQ0EsT0FFQSxRQUFBLEVBQUEsT0FDQSxNQUFBLFFBQUEsb0JBQUEsY0FBQSxPQUFBLEtBQUEsRUFDQSxPQUVBLFVBQUEsQ0FLQSxBQUNBLEFBTEEsS0FBQSxNQUFBLFVBQUEsUUFBQSxDQUNBLE9BQUEsS0FBQSxlQUNBLENBQUEsSUFHQSxRQUNBLEdBQUEsS0FBQSxNQUFBLEdBRUEsS0FBQSxNQUFBLE9BQUEsQ0FFQSxDQUNBLENBQ0EsQ0FBQSxvSUMxRUlILEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLFFBQVEsRUFBSSxHQUFHLEVBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssUUFBUSxRQUFRLFVBQVUsTUFBTyxFQUFJLE1BQU8sV0FBVyxPQUFPLENBQUMsRUFBRSxJQUFJLFVBQVUsWUFBWSxnQkFBZ0IsTUFBTSxDQUFDLEdBQUssRUFBSSxTQUFTLEtBQU8sVUFBVSxFQUFFLFNBQVMsQ0FBQyxRQUFVLE1BQU0sUUFBUSxFQUFJLEtBQUssRUFBRSxFQUFJLEdBQUcsRUFBSSxNQUFNLElBQUksRUFBRSxHQUFJLEVBQUksS0FBTSxFQUFFLEdBQUcsQ0FBQyxPQUFTLFNBQVMsRUFBTyxDQUFDLEdBQUksR0FBSSxFQUFJLE1BQU0sRUFBSyxFQUFPLE9BQU8sRUFBSSxJQUFLLFFBQXVCLEdBQUcsTUFBTSxRQUFRLENBQUcsRUFBRSxDQUFDLEdBQUksR0FBSSxLQUFLLEVBQUksRUFBSSxHQUFHLEVBQUksQ0FBRyxFQUFFLEFBQUcsRUFBSyxRQUFTLEVBQUksR0FBSSxHQUFJLE1BQU0sRUFBSSxPQUFPLENBQUMsQ0FBRyxDQUFDLEdBQVEsRUFBSSxJQUFLLEdBQUksTUFBTSxFQUFJLE1BQU0sRUFBRSxDQUFHLEVBQUUsT0FBTyxFQUFJLE1BQU0sRUFBSSxDQUFDLENBQUMsRUFBRyxLQUFNLEdBQUksTUFBTSxDQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBSSxXQUFXLEVBQUssRUFBRSxFQUFJLFNBQVMsQ0FBQyxDQUFDLEVBQzVzQkMsR0FBa0IsQ0FBQSxRQ21CdEIsS0FBQUMsSUFBQUMsRUFBQSxTQUFBLFdBQUEsQ0FDQSxZQUFBLEVBQ0EsQ0FBQSxvSUNoQmUsR0FBQSxDQUNiLE9BQVEsQ0FBQyxFQUFZLEVBRXJCLE1BQU8sQ0FDTCxNQUFPLENBQ0wsVUFBVyxHQUNYLGlCQUFrQixDQUFFLENBQ3JCLENBQ0YsRUFFRCxRQUFTLENBQ1AsaUJBQWlCLEVBQVEsRUFBTSxFQUczQixHQUFJLENBSHVCLFFBQzdCLGtCQUFpQixHQURZLEVBRTFCLElBRjBCLEVBRTFCLENBREgseUJBR0EsQUFBSyxFQUFTLENBQU0sR0FDbEIsR0FBUyxDQUFFLEtBQU0sQ0FBUSxHQUUzQixHQUFJLENBQUUsT0FBTyxPQUFXLFdBQVcsTUFBUyxFQUU1QyxLQUFNLEdBQ0osS0FBSyxpQkFBaUIsSUFDdEIsS0FBSyxLQUFLLEtBQUssaUJBQWtCLEVBQU0sQ0FDckMsbUJBQW9CLEtBQ3BCLGVBQWdCLEVBQ2hCLGFBQWMsS0FDZCxVQUFXLEVBQ3JCLENBQVMsRUFPSCxHQUZBLEtBQVcscUJBQVgsUUFBK0IsS0FBSyxLQUFNLEtBQUssU0FFM0MsRUFBVyxlQUFpQixFQUFHLENBUWpDLEtBQU0sQ0FBRSxnQkFBaUIsRUFDekIsTUFBSSxFQUFFLEVBQVcsaUJBQW1CLEdBQ2xDLEdBQVcsYUFBZSxNQUVyQixDQUNSLENBRUQsR0FBSSxFQUFXLFVBQ2IsRUFBTyxhQUNFLEVBQU0sQ0FDZixHQUFJLEVBQVcsQ0FBSSxFQUFHLENBQ3BCLEtBQU0sR0FBUyxFQUFLLEtBQUssS0FBTSxLQUFLLE9BQU8sRUFPM0MsQUFBSSxFQUFXLENBQU0sRUFDbkIsR0FBVyxtQkFBcUIsRUFDaEMsRUFBTyxFQUFPLEtBQUssS0FBTSxLQUFLLE9BQU8sR0FFckMsRUFBTyxDQUVWLENBQ0QsQUFBSSxHQUFVLENBQUksR0FNaEIsR0FBVyxVQUFZLEdBQ3ZCLEtBQUssWUFBWSxFQUFNLENBQWMsRUFBRSxLQUFLLEdBQVEsQ0FDbEQsRUFBVyxlQUFpQixFQUM1QixFQUFXLGFBQWUsRUFDMUIsRUFBVyxVQUFZLEVBQ25DLENBQVcsRUFFRCxFQUFPLEtBRVYsS0FBTSxBQUFJLElBQ1QsR0FBTyxFQUNMLEtBQUssU0FDTCxFQUFrQixHQUFHLEtBQUssWUFBWSxHQUFVLENBQ2pELEdBRUgsTUFBTyxFQUNSLE9BRUssYUFBWSxFQUFNLEVBQWlCLEdBQUksQ0FDM0MsS0FBSyxXQUFXLEdBQU0sQ0FBYyxFQUNwQyxHQUFJLEdBQU8sS0FDWCxHQUFJLENBQ0YsRUFBTyxLQUFPLEdBQVcsQ0FBSSxFQUFJLEVBQUksRUFBSyxFQUMzQyxPQUFRLEVBQVAsQ0FDQSxLQUFLLFNBQVMsRUFBTSxTQUFXLENBQUssQ0FDckMsQ0FDRCxZQUFLLFdBQVcsR0FBTyxDQUFjLEVBQzlCLENBQ1IsQ0FDRixDQUNILEVDbkdlLEdBQUEsQ0FDYixPQUFRLENBQUMsRUFBUyxFQUVsQixNQUFPLENBQ0wsTUFBTyxDQUNMLFdBQVksRUFDYixDQUNGLEVBRUQsU0FBVSxDQUNSLGNBQWUsQ0FDYixLQUFNLENBQ0osS0FBTSxHQUFlLEdBQVMsS0FBSyxPQUMvQixLQUFLLFVBQVUsQ0FBSyxFQUNsQixLQUFLLGtCQUFrQixDQUFLLEVBQzVCLEtBQ0YsRUFDRSxFQUFRLEVBQVEsS0FBSyxLQUFLLEVBQzVCLEtBQUssTUFBTSxJQUFJLENBQVksRUFBRSxPQUFPLEdBQVMsSUFBVSxJQUFJLEVBQzNELEVBQWEsS0FBSyxLQUFLLEVBQzNCLE1BRUUsTUFBSyxRQUFVLEtBQUssWUFFbEIsS0FBVSxNQUFRLEtBQUssUUFBVSxNQUdqQyxHQUFZLEtBQUssS0FBSyxJQUd4QixNQUFLLGNBQWdCLEdBRWhCLENBQ1IsRUFFRCxJQUFJLEVBQU8sQ0FDVCxLQUFNLEdBQVUsR0FBUyxLQUFLLE9BQzFCLEtBQUssa0JBQWtCLENBQUssRUFDNUIsRUFDSixLQUFLLE1BQVEsRUFBUSxDQUFLLEVBQ3RCLEVBQU0sSUFBSSxDQUFPLEVBQ2pCLEVBQVEsQ0FBSyxDQUNsQixDQUNGLEVBRUQsZ0JBQWlCLENBQ2YsTUFBTyxNQUFLLGtCQUFrQixLQUFLLGFBQWEsQ0FDakQsRUFFRCxTQUFVLE9BQ1IsS0FBTSxHQUFPLFFBQUssaUJBQWlCLEtBQUssT0FBTyxRQUFTLFVBQVcsQ0FDakUsZUFBZ0IsQ0FDakIsQ0FBQSxJQUZZLE9BRVAsQ0FBRSxFQUNSLEdBQUksQ0FBQyxFQUFRLENBQUksRUFDZixLQUFNLElBQUksT0FBTSwwQ0FBMEMsR0FBTSxFQUVsRSxZQUFLLFdBQWEsRUFBSyxPQUFTLEVBQ3pCLEtBQUssZUFBZSxDQUFJLENBQ2hDLEVBRUQsZUFBZ0IsQ0FHZCxNQUFPLE1BQUssT0FDYixFQUVELE9BQVEsRUFBa0IsU0FBVSxDQUVsQyxLQUFNLFFBQ04sUUFBUyxHQUdULFNBQVUsRUFDaEIsQ0FBSyxFQUVELFFBQVMsRUFBa0IsVUFBVyxDQUNwQyxLQUFNLE9BQ04sUUFBUyxJQUNmLENBQUssRUFFRCxZQUFhLEVBQWtCLGdCQUFpQixDQUM5QyxLQUFNLENBQUMsT0FBUSxRQUFRLEVBQ3ZCLFFBQVMsS0FDVCxJQUFJLEVBQU8sQ0FHVCxNQUNFLElBQ0EsS0FBSyxhQUFhLE9BQU8sR0FDekIsSUFFSCxDQUNQLENBQUssRUFFRCxZQUFhLEVBQWtCLGdCQUFpQixDQUM5QyxLQUFNLENBQUMsT0FBUSxRQUFRLEVBQ3ZCLFFBQVMsS0FDVCxJQUFJLEVBQU8sQ0FHVCxNQUNFLElBQ0EsS0FBSyxRQUFVLE1BQ2YsS0FBSyxhQUFhLE9BQU8sR0FDekIsSUFFSCxDQUNQLENBQUssRUFHRCxhQUFjLEVBQWtCLFNBQVUsQ0FDeEMsS0FBTSxDQUFDLE9BQVEsUUFBUSxFQUN2QixRQUFTLEtBQ1QsSUFBSSxFQUFRLENBQ1YsR0FBSSxFQUFRLENBQ1YsS0FBTSxDQUFFLFNBQVEsWUFBYSxFQUFXLENBQU0sRUFDMUMsQ0FBRSxPQUFRLENBQVEsRUFDbEIsRUFDSixNQUFPLEdBQVcsR0FBYyxFQUFRLENBQVEsRUFBSSxDQUNyRCxDQUNGLENBQ1AsQ0FBSyxFQUVELGNBQWUsQ0FDYixNQUFPLE1BQUssUUFBVSxRQUFVLElBQ2pDLEVBRUQsZ0JBQWlCLENBQ2YsTUFBTyxNQUFLLFFBQVUsVUFBWSxJQUNuQyxDQUNGLEVBRUQsUUFBUyxDQUNQLGFBQWEsRUFBSyxDQUNoQixLQUFNLENBQUMsR0FBVSxLQUFLLGNBQ3RCLE1BQU8sR0FBUyxDQUFNLEdBQUssSUFBTyxHQUFTLEVBQU0sSUFDbEQsRUFFRCxlQUFlLEVBQVMsQ0FDdEIsR0FBSSxFQUFRLE9BQVEsQ0FDbEIsR0FBSSxLQUFLLE9BTVAsU0FBVyxLQUFVLEdBQ25CLEFBQU0sTUFBUSxJQUNaLEdBQWUsRUFBUSxJQUFJLEVBSWpDLEdBQUksS0FBSyxRQUFTLENBQ2hCLEtBQU0sR0FBVSxDQUFFLEVBQ2xCLEVBQVUsRUFBUSxPQUNoQixDQUFDLEVBQVMsSUFBVyxDQUNuQixLQUFNLEdBQVEsRUFBTyxLQUFLLFNBQzFCLEdBQUksR0FBUSxFQUFRLEdBQ3BCLE1BQUssSUFDSCxHQUFRLEVBQVEsR0FBUyxFQUN0QixLQUFLLGNBQWUsR0FDcEIsS0FBSyxnQkFBaUIsQ0FBRSxDQUMxQixFQUNELEVBQVEsS0FBSyxDQUFLLEdBRXBCLEVBQU0sUUFBUSxLQUFLLENBQU0sRUFDbEIsQ0FDUixFQUNELENBQUUsQ0FDSCxDQUNGLENBQ0YsQ0FDRCxNQUFPLEVBQ1IsRUFFRCxVQUFVLEVBQVEsQ0FDaEIsTUFBTyxDQUFDLENBQUMsS0FBSyxrQkFBa0IsS0FBSyxrQkFBa0IsQ0FBTSxDQUFDLENBQy9ELEVBRUQsa0JBQWtCLEVBQU8sQ0FDdkIsS0FBTSxHQUFhLENBQUMsRUFBUyxFQUFPLElBQVksQ0FHOUMsU0FBVyxLQUFVLEdBQ25CLEdBQUksRUFBUyxDQUNYLEtBQU0sR0FBUSxFQUFXLEVBQU8sUUFBUyxFQUFPLElBQUksRUFDcEQsR0FBSSxFQUNGLE1BQU8sRUFFVixTQUFVLElBQVUsS0FBSyxrQkFBa0IsQ0FBTSxFQUNoRCxNQUFPLEVBR1osRUFFRCxNQUFPLE1BQUssWUFDUixFQUFXLEtBQUssY0FBZSxFQUFPLEtBQUssT0FBTyxFQUNsRCxDQUNMLEVBRUQsa0JBQWtCLEVBQVEsQ0FDeEIsS0FBTSxDQUFFLGVBQWdCLEtBQ3hCLE1BQU8sR0FBUyxDQUFXLEVBQ3ZCLGlCQUFTLEdBQ1QsRUFBVyxDQUFXLEVBQ3BCLEVBQVksS0FBSyxLQUFNLEdBQUksR0FBWSxLQUFNLENBQUUsUUFBTSxDQUFFLENBQUMsRUFDeEQsQ0FDUCxFQUVELGtCQUFrQixFQUFRLENBQ3hCLEtBQU0sQ0FBRSxlQUFnQixLQUN4QixNQUFPLEdBQVMsQ0FBVyxFQUN2QixpQkFBUyxHQUNULEVBQVcsQ0FBVyxFQUNwQixFQUFZLEtBQUssS0FBTSxHQUFJLEdBQVksS0FBTSxDQUFFLFFBQU0sQ0FBRSxDQUFDLEVBQ3hELEVBQVMsR0FBRyxHQUFRLENBQzNCLENBQ0YsRUFFRCxhQUFhLEVBQVEsRUFBTyxFQUFVLEVBQU8sT0FDM0MsR0FBSSxFQUFPLE9BQVEsQ0FJakIsS0FBTSxHQUFPLEtBQU8sVUFBUCxjQUFnQixTQUN2QixFQUFrQixFQUNwQixFQUFrQixHQUFHLEtBQVksR0FBTSxFQUN2QyxLQUNKLEVBQU0sWUFBWSxFQUFVLEVBQWlCLENBQU0sRUFDL0MsR0FDRixFQUFNLGlCQUFpQixDQUFlLEVBSXhDLEtBQU0sR0FBZ0IsR0FBUyxHQUFRLENBQUUsR0FBSSxFQUFNLEVBQUUsRUFFckQsRUFBUSxFQUFRLENBQUssRUFDakIsRUFBTSxJQUFJLENBQWEsRUFDdkIsRUFBYyxDQUFLLENBQ3hCLENBQ0QsTUFBTyxFQUNSLENBQ0gsRUM1UElILEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLEtBQUssQ0FBQyxZQUFZLGtCQUFrQixNQUFPLGVBQWtCLEdBQUksT0FBTyxRQUFVLFlBQWEsTUFBTSxDQUFDLEdBQUssRUFBSSxRQUFRLENBQUMsRUFBRSxFQUFJLEdBQUksRUFBSSxRQUFTLFNBQVMsRUFBTyxDQUFDLE1BQU8sR0FBRyxLQUFLLENBQUMsRUFBRyxRQUFRLENBQUMsRUFBRyxRQUFRLEVBQUksR0FBRyxFQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLFFBQVEsUUFBUSxVQUFVLE1BQU8sRUFBSSxnQkFBaUIsV0FBVyxpQkFBaUIsQ0FBQyxFQUFFLElBQUksVUFBVSxTQUFTLEdBQUssWUFBWSxnQkFBZ0IsTUFBTSxDQUFDLEtBQU8sVUFBVSxFQUFFLFNBQVMsQ0FBQyxNQUFRLEVBQUksa0JBQWtCLENBQU0sRUFBRSxRQUFVLE1BQU0sUUFBUSxFQUFJLGVBQWUsRUFBRSxFQUFJLEdBQUcsRUFBSSxnQkFBZ0IsRUFBSSxrQkFBa0IsQ0FBTSxDQUFDLEVBQUUsR0FBSSxFQUFJLGVBQWdCLEVBQUUsR0FBRyxDQUFDLE9BQVMsU0FBUyxFQUFPLENBQUMsR0FBSSxHQUFJLEVBQUksZ0JBQWdCLEVBQUssRUFBTyxPQUFPLEVBQUksSUFBSyxRQUF1QixHQUFHLE1BQU0sUUFBUSxDQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUksRUFBSSxrQkFBa0IsQ0FBTSxFQUFFLEVBQUksRUFBSSxHQUFHLEVBQUksQ0FBRyxFQUFFLEFBQUcsRUFBSyxRQUFTLEVBQUksR0FBSSxHQUFJLGdCQUFnQixFQUFJLE9BQU8sQ0FBQyxDQUFHLENBQUMsR0FBUSxFQUFJLElBQUssR0FBSSxnQkFBZ0IsRUFBSSxNQUFNLEVBQUUsQ0FBRyxFQUFFLE9BQU8sRUFBSSxNQUFNLEVBQUksQ0FBQyxDQUFDLEVBQUcsS0FBTSxHQUFJLGdCQUFnQixDQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBSSxXQUFXLEVBQUssRUFBRSxFQUFJLFNBQVMsQ0FBQyxFQUFFLEVBQUksR0FBRyxFQUFJLEdBQUcsRUFBSSxrQkFBa0IsQ0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDaG5DQyxHQUFrQixDQUFBLFFDOEJ0QixLQUFBQyxJQUFBQyxFQUFBLFNBQUEsYUFBQSxDQUNBLE9BQUEsQ0FBQSxFQUFBLEVBRUEsWUFBQSxHQUNBLGFBQUEsQ0FBQSxFQUVBLFNBQUEsQ0FDQSxnQkFBQSxDQUNBLEtBQUEsQ0FDQSxNQUFBLE1BQUEsZUFBQSxDQUFBLEdBQUEsT0FBQSxHQUFBLENBQUEsQ0FDQSxFQUVBLElBQUEsRUFBQSxDQUNBLEtBQUEsY0FBQSxHQUFBLEVBQ0EsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxvSUNoRElILEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLE9BQU8sWUFBWSxZQUFZLE1BQU8sRUFBSSxNQUFPLE1BQU0sQ0FBQyxHQUFLLEVBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUN0TEMsR0FBa0IsQ0FBQSxRQzBDdEIsS0FBQUMsSUFBQUMsRUFBQSxTQUFBLE9BQUEsQ0FDQSxPQUFBLENBQUEsRUFBQSxFQUVBLFNBQUEsQ0FDQSxPQUFBLENBQ0EsTUFBQSxNQUFBLE9BQUEsT0FBQSxDQUNBLEVBRUEsT0FBQSxDQUNBLE1BQUEsZ0JBQUEsS0FBQSwrQkFDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsR0FBQSxHQUFBLElBQUEsS0FBQSxNQUFBLEtBQUEsQ0FDQSxTQUFBLEtBQUEsT0FBQSxVQUFBLGFBQ0EsUUFBQSxLQUFBLE9BQUEsWUFBQSxFQUNBLFlBQUEsRUFDQSxDQUFBLEVBRUEsR0FBQSxHQUFBLEdBQ0EsRUFBQSxHQUNBLEVBQUEsR0FFQSxLQUFBLEdBQUEsSUFBQSxDQUNBLEFBQUEsQ0FBQSxLQUFBLFNBQUEsR0FDQSxHQUFBLEdBQ0EsS0FBQSxTQUFBLEVBRUEsRUFFQSxFQUFBLElBQUEsS0FBQSxRQUFBLEVBRUEsRUFBQSxJQUFBLENBQ0EsS0FBQSxPQUFBLEVBQ0EsRUFBQSxDQUNBLEVBRUEsS0FBQSxNQUFBLEtBQUEsTUFBQSxLQUFBLGNBQUEsVUFBQSxFQUFBLENBQ0EsTUFBQSxFQUNBLEtBQUEsQ0FDQSxDQUFBLEVBRUEsS0FBQSxHQUFBLEdBQUEsQ0FDQSxBQUFBLElBQUEsRUFBQSxNQUNBLEdBQUEsR0FDQSxFQUFBLFdBQUEsQ0FBQSxFQUVBLEVBRUEsRUFBQSxHQUFBLENBQ0EsQUFBQSxJQUFBLEtBQUEsT0FDQSxHQUFBLEdBQ0EsS0FBQSxNQUFBLEVBQ0EsRUFBQSxHQUNBLEVBQUEsRUFFQSxFQUVBLEVBQUEsU0FBQSxHQUFBLENBQ0EsQUFBQSxFQUNBLEVBQUEsR0FFQSxFQUFBLENBQUEsQ0FFQSxDQUFBLEVBRUEsS0FBQSxPQUFBLFFBQUEsR0FBQSxDQUNBLEFBQUEsRUFDQSxFQUFBLEdBRUEsRUFBQSxHQUFBLEVBQUEsQ0FFQSxDQUFBLEVBRUEsRUFBQSxLQUFBLE9BQUEsRUFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLGNBQUEsT0FDQSxRQUFBLElBQUEsY0FBQSxVQUFBLElBQUEsUUFBQSxPQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQzlISUgsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsVUFBVSxDQUFDLFlBQVksYUFBYSxNQUFNLENBQUMsUUFBVSxRQUFRLEtBQU8sRUFBSSxTQUFTLEVBQUUsR0FBRyxDQUFDLGNBQWMsU0FBUyxFQUFPLENBQUMsRUFBSSxVQUFVLENBQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFHLE1BQU0sQ0FBQyxZQUFZLGFBQWEsTUFBTSxDQUFFLGFBQWMsRUFBSSxTQUFXLEVBQUMsTUFBTSxDQUFDLEtBQU8sU0FBUyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUMsRUFBRyxRQUFRLEVBQUksR0FBRyxFQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLFFBQVEsUUFBUSxVQUFVLE1BQU8sRUFBSSxTQUFVLFdBQVcsVUFBVSxDQUFDLEVBQUUsSUFBSSxVQUFVLE1BQU0sQ0FBQyxHQUFLLEVBQUksU0FBUyxLQUFPLFFBQVEsS0FBTyxHQUFHLEVBQUUsU0FBUyxDQUFDLE1BQVMsRUFBSSxRQUFTLEVBQUUsR0FBRyxDQUFDLE1BQVEsU0FBUyxFQUFPLENBQUMsQUFBRyxFQUFPLE9BQU8sV0FBcUIsR0FBSSxTQUFTLEVBQU8sT0FBTyxNQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBSSxXQUFXLEVBQUssRUFBRSxFQUFJLFNBQVMsQ0FBQyxFQUFHLEVBQUksTUFBTyxFQUFHLE1BQU0sQ0FBQyxZQUFZLHVDQUF1QyxFQUFFLENBQUMsRUFBRyxNQUFNLENBQUMsTUFBTyxDQUFFLFdBQWEsSUFBTyxHQUFJLFVBQVksV0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFFLEVBQUksRUFBSSxnQkFBaUIsRUFBRyxTQUFTLENB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QkFBa0IsQ0FBQyxNQUFNLENBQUMsTUFBUSxFQUFJLE1BQU0sUUFBVSxFQUFJLFFBQVEsZUFBaUIsRUFBSSxjQUFjLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBSSxFQUFDLEVBQUcsZ0JBQWdCLEVBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFNLFFBQVEsS0FBTyxFQUFJLFlBQVksRUFBSSxhQUFjLEVBQUksU0FBVSxFQUFJLGVBQWUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFRLEVBQUksWUFBWSxJQUFNLEVBQUksU0FBUyxDQUFDLEVBQUUsZ0JBQWdCLEVBQUksZUFBZSxFQUFJLFNBQVMsRUFBRSxFQUFLLEVBQUUsRUFBSSxHQUFJLEVBQUksU0FBVSxTQUFTLEVBQUssRUFBTSxDQUFDLE1BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFJLFdBQVcsRUFBSSxPQUFRLENBQUksRUFBRSxNQUFNLENBQUMsR0FBSyxFQUFJLFlBQVksQ0FBSyxDQUFDLENBQUMsRUFBRSxDQUFFLEVBQUksUUFBUyxFQUFJLEdBQUksRUFBSSxRQUFTLFNBQVMsRUFBTyxDQUFDLE1BQVEsR0FBSSxhQUFhLENBQU0sRUFBRyxFQUFHLGtCQUFrQixDQUFDLElBQUksRUFBTyxLQUFLLE1BQU0sRUFBSSxhQUFhLENBQU0sRUFBRSxNQUFNLENBQUMsS0FBTyxFQUFPLE9BQVMsRUFBSSxPQUFPLFNBQVcsRUFBSSxZQUFZLENBQUssRUFBRSxLQUFPLEVBQUssS0FBTyxFQUFJLFdBQVcsTUFBUSxFQUFJLE1BQU0sT0FBUyxHQUFNLFNBQVcsRUFBSSxVQUFZLEVBQUksU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRyxLQUFLLENBQUUsRUFBSSxVQUFXLEVBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLE1BQVEsRUFBSSxhQUFhLEVBQUksT0FBUSxFQUFNLENBQUUsTUFBTyxFQUFPLFNBQVUsRUFBTSxDQUFBLEVBQUUsT0FBUyxFQUFJLGtCQUFrQixFQUFJLE9BQVEsRUFBTSxFQUFJLE9BQU8sRUFB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RUFBQSxFQUFBLENBQ0EsS0FBQSxDQUFBLFdBQUEsRUFHQSxHQUFBLEVBQUEsQ0FJQSxLQUFBLEdBQUEsSUFBQSxFQUFBLHVCQUNBLEVBQ0EsR0FBQSxFQUFBLE9BQUEsTUFDQSxFQUVBLE1BQUEsSUFDQSxFQUFBLENBQUEsRUFDQSxFQUNBLElBQ0EsUUFBQSxPQUNBLE1BQUEsS0FBQSxJQUFBLGNBQUEsS0FDQSxLQUNBLE9BQUEsRUFBQSxDQUNBLEtBQUEsR0FBQSxFQUFBLEVBQ0EsR0FBQSxFQUFBLENBRUEsS0FBQSxHQUFBLEdBQUEsR0FBQSxFQUFBLEdBQUEsSUFBQSxNQUFBLEVBQ0EsQUFBQSxHQUFBLEVBQUEsQ0FBQSxFQUFBLEVBQUEsRUFBQSxLQUFBLENBQUEsR0FDQSxHQUFBLE1BQUEsRUFDQSxFQUFBLFNBQUEsRUFBQSxFQUVBLENBQ0EsQ0FDQSxDQUNBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxnQkFBQSxDQUNBLE1BQUEsQ0FBQSxDQUNBLE1BQUEsZUFDQSxLQUFBLFVBRUEsRUFFQSxnQkFBQSxDQUNBLEtBQUEsQ0FBQSxZQUFBLEtBQ0EsTUFBQSxHQUFBLE9BQUEsR0FDQSxNQUFBLFVBQ0EsS0FBQSxXQUNBLEtBQUEsVUFFQSxFQUVBLG9CQUFBLENBQ0EsTUFBQSxDQUFBLEtBQUEsV0FBQSxLQUFBLGNBQ0EsRUFFQSxjQUFBLENBQ0EsTUFBQSxDQUFBLE1BQUEsU0FBQSxPQUFBLEVBQ0EsRUFFQSxZQUFBLENBQ0EsTUFDQSxNQUFBLFFBQUEsT0FBQSxLQUFBLEtBQUEsT0FBQSxFQUFBLE9BQUEsR0FDQSxNQUFBLG1CQUFBLEVBQUEsRUFFQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFlBQUEsRUFBQSxDQUNBLE1BQUEsR0FBQSxLQUFBLFNBQUEsQ0FBQSxDQUNBLEVBRUEsWUFBQSxFQUFBLEVBQUEsQ0FDQSxHQUFBLEtBQUEsU0FBQSxDQUNBLEtBQUEsR0FBQSxHQUFBLEtBQUEsT0FBQSxLQUFBLE9BQUEsR0FBQSxLQUFBLEtBQ0EsRUFBQSxLQUFBLFVBQUEsS0FBQSxPQUFBLEVBQUEs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QUEsQ0FDQSxLQUFBLEdBQ0EsT0FBQSxHQUNBLFVBQUEsR0FDQSxPQUFBLEdBQ0EsTUFBQSxHQUNBLEtBQUEsR0FDQSxLQUFBLENBQ0EsUUFBQSxHQUFBLEtBQUEsWUFBQSxDQUFBLENBQ0EsQ0FDQSxDQUFBLENBQ0EsRUFFQSxrQkFBQSxDQUNBLE1BQUEsTUFBQSxXQUFBLFFBQUEsQ0FDQSxVQUFBLENBR0EsYUFBQSxJQUNBLEtBQUEsaUJBQUEsS0FBQSxHQUFBLEVBQUEsUUFBQSxDQUNBLEVBQ0EsUUFBQSxDQUNBLEtBQUEsUUFDQSxPQUFBLENBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLENBQUEsQ0FDQSxDQUNBLENBQUEsQ0FDQSxFQUVBLGtCQUFBLENBQ0EsTUFBQSxNQUFBLFdBQUEsUUFBQSxDQUNBLFdBQUEsR0FDQSxZQUFBLEdBQ0EsV0FBQSxHQUNBLFVBQUEsRUFDQSxDQUFBLENBQ0EsRUFFQSxhQUFBLENBQ0EsTUFBQSxNQUFBLFdBQUEsUUFBQSxDQUNBLEtBQUEsR0FDQSxLQUFBLEVBQ0EsQ0FBQSxDQUNBLEVBRUEsZ0JBQUEsQ0FDQSxLQUFBLENBQ0EsY0FDQSxtQkFDQSxtQkFDQSxlQUNBLEtBQ0EsTUFBQSxDQUNBLEVBQ0EsRUFDQSxFQUNBLENBQ0EsRUFBQSxPQUFBLEdBQUEsRUFBQSxPQUFBLENBQUEsQ0FDQSxFQUVBLGNBQUEsQ0FDQSxNQUFBLENBQ0EsbUJBQUEsQ0FDQSxTQUFBLEdBQ0EsU0FBQSxHQUNBLGVBQUEsTUFDQSxFQUFBLEtBQUEsV0FDQSxDQUNBLEVBRUEsZUFBQSxDQUNBLE1BQUEsQ0FDQSxTQUFBLENBQUEsS0FBQSxVQUNBLFVBQUEsS0FBQSxVQUNBLGtCQUFBLENBQUEsS0FBQSxZQUFBLE1BQ0Esa0JBQUEsQ0FBQSxLQUFBLFlBQUEsTUFDQSxhQUFBLEtBQUEsWUFDQSxDQUNBLEVBRUEsVUFBQSxFQUFBLFlBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxFQUNBLENBQUEsRUFFQSxXQUFBLEVBQUEsYUFBQSxDQUNBLEtBQUEsT0FDQSxRQUFBLFVBRUEsQ0FBQSxFQUVBLFlBQUEsRUFBQSxjQUFBLENBQ0EsS0FBQSxDQUFBLE9BQUEsT0FBQSxFQUNBLFFBQUEsR0FDQSxJQUFBLEVBQUEsQ0FDQSxNQUFBLEdBQUEsQ0FBQSxFQUNBLEVBQ0EsQ0FDQSxNQUFBLENBQUEsQ0FBQSxFQUNBLE1BQUEsQ0FBQSxDQUFBLENBQ0EsQ0FDQSxDQUNBLENBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxVQUFBLHNCQUNBLFVBQUEsc0JBQ0EsWUFBQSxxQkFDQSxFQUVBLFNBQUEsQ0FDQSxHQUFBLEdBQUEsR0FDQSxFQUFBLEdBRUEsS0FBQSxHQUFBLElBQUEsQ0FDQSxBQUFBLENBQUEsS0FBQSxTQUFBLEdBQ0EsR0FBQSxHQUNBLEtBQUEsU0FBQSxFQUVBLEVBRUEsRUFBQSxJQUFBLEtBQUEsUUFBQSxFQUVBLEVBQUEsSUFBQSxDQUNBLEtBQUEsT0FBQSxFQUNBLEVBQUEsQ0FDQSxFQUVBLEVBQUEsR0FBQSxHQUFBLENBQ0EsRUFBQSxHQUNBLEtBQUEsTUFBQSxFQUFBLEVBQ0EsRUFBQSxHQUNBLEVBQUEsQ0FDQSxFQUFBLEdBQUEsRUFFQSxFQUFBLENBQUEsQ0FBQSxhQUFBLENBQ0EsRUFBQSxDQUFBLEVBQ0EsS0FBQSxRQUFBLENBQ0EsRUFFQSxLQUFBLE9BQUEsUUFBQSxHQUFBLENBQ0EsQUFBQSxFQUNBLEVBQUEsR0FFQSxLQUFBLE9BQUEsV0FBQSxFQUFBLEdBQUEsS0FBQSxZQUFBLENBRUEsQ0FBQSxFQUVBLEtBQUEsT0FBQSxHQUFBLElBQUEsT0FDQSxLQUFBLGVBREEsQ0FFQSxVQUNBLFNBQ0EsV0FDQSxXQUFBLEtBQUEsaUJBQUEsRUFDQSxRQUFBLEtBQUEsT0FBQSxFQUNBLEVBQUEsQ0FDQSxFQUVBLGVBQUEsQ0FDQSxLQUFBLE9BQUEsUUFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLGFBQUEsRUFBQSxDQUNBLEtBQUEsR0FBQSxDQUFBLENBQUEsUUFBQSxFQUFBLFFBQUEsS0FBQSxFQUFBLElBQUEsTUFFQSxHQUFBLEdBQUEsRUFBQSxDQUFBLEVBQUEsRUFDQSxFQUFBLFdBQUEsaUJBQUEsS0FBQSxNQUFBLE9BQUEsR0FBQSxFQUFBLE1BQUEsRUFFQSxLQUFBLEdBQUEsR0FBQSxDQUNBLEtBQUEsQ0FBQSxLQUFBLEVBQUEsQ0FBQSxFQUNBLEdBQUEsRUFBQSxFQUNBLEVBQUEsRUFDQSxLQUFBLE9BQUEsR0FBQSxLQUFBLElBQUEsRUFBQSxDQUFBLEtBQ0EsRUFFQSxFQUFBLEtBQUEsTUFBQSxTQUFBLENBQ0EsWUFFQSxRQUFBLEVBQUEsQ0FDQSxFQUFBLENBQUEsRUFDQSxFQUFBLE9BQUEsQ0FDQSxDQUNBLENBQUEsQ0FDQSxFQUVBLHFCQUFBLENBQ0EsS0FBQSxPQUFBLFdBQUEsS0FBQSxhQUFBLENBQ0EsT0FFQSxhQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxNQUFBLFdBQUEsQ0FDQSxXQUFBLENBQ0EsS0FBQSxDQUNBLEtBQUEsTUFDQSxNQUFBLE9BQ0EsVUFBQSxFQUNBLEVBQ0EsTUFBQSxDQUNBLEtBQUEsT0FDQSxNQUFBLE9BQ0EsQ0FDQSxFQUNBLFFBQUEsQ0FDQSxPQUFBLENBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxRQUFBLEVBQ0EsT0FBQSxDQUNBLE9BQUEsQ0FDQSxNQUFBLENBQUEsbUJBQUEsQ0FDQSxFQUFBLFFBQUEsQ0FDQSxLQUFBLEtBQ0EsTUFBQSxJQUNBLENBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FDQSxFQUNBLEtBQUEsS0FBQSxPQUFBLGFBQUEsTUFBQSxDQUNBLENBQUEsRUFDQSxHQUFBLEVBQUEsQ0FDQSxHQUFBLENBQUEsT0FBQSxTQUFBLEVBQ0EsR0FBQSxFQUdBLEdBQUEsQ0FDQSxHQUFBLEtBQUEsQ0FBQSxDQUNBLE1BQUEsQ0FDQSxFQUFBLFVBQUEsR0FDQSxDQUVBLEVBQUEsQ0FBQSxPQUFBLFFBQUEsQ0FDQSxDQUNBLEVBRUEsa0JBQUEsQ0FDQSxLQUFBLENBQ0EsUUFBQSxDQUFBLEVBQ0EsUUFBQSxDQUFBLEVBQ0EsUUFBQSxDQUFBLEdBQ0EsS0FBQSxPQUNBLE1BQUEsQ0FFQSxFQUFBLE1BQUEsR0FBQSxJQUNBLEVBQUEsUUFBQSxHQUFBLElBQ0EsRUFBQSxXQUFBLEdBQUEsSUFDQSxFQUFBLFFBQUEsR0FBQSxJQUNBLEVBQUEsT0FBQSxHQUFBLElBQ0EsRUFBQSxNQUFBLEdBQUEsSUFDQSxFQUFBLE1BQUEsR0FBQSxJQUdBLEVBQUEsWUFBQSxHQUFBLElBQ0EsRUFBQSxXQUFBLEdBQUEsSUFDQSxHQUFBLElBQ0EsRUFBQSxTQUFBLEdBQUEsSUFBQSxDQUFBLE9BQUEsRUFBQSxRQUFBLEVBQ0EsRUFBQSxnQkFBQSxHQUFBLElBQ0EsR0FBQSxhQUFBLEVBQUEsYUFBQSxHQUFBLElBQ0EsRUFBQSxZQUFBLEdBQUEsSUFDQSxFQUFBLGFBQUEsR0FBQSxJQU1BLEVBQUEsU0FBQSxHQUFBLEdBQ0EsRUFBQSxPQUFBLEdBQUEsQ0FBQSxDQUFBLENBQUEsQ0FDQSxFQUVBLFdBQUEsRUFBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLENBQUEsRUFFQSxFQUFBLENBQUEsQ0FBQSxPQUFBLE9BQUEsUUFBQSxlQUFBLGFBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxPQUFBLFNBQUEsR0FDQSxFQUFBLEtBQUEsT0FBQSxTQUFBLEdBQ0EsRUFBQSxLQUFBLENBQ0EsT0FDQSxPQUNBLFNBQ0Esa0JBQUEsS0FDQSxJQUFBLE1BQUEsQ0FBQSxLQUVBLFFBQUEsSUFBQSxFQUNBLEVBQUEsRUFBQSxDQUFBLEVBQ0EsRUFBQSxDQUFBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsRUFBQSxLQUFBLE9BQUEsR0FDQSxHQUFBLEVBQ0EsU0FBQSxDQUFBLEVBQUEsSUFBQSxRQUFBLFFBQUEsQ0FBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLENBQUEsT0FBQSxNQUFBLEVBQUEsU0FBQSxDQUFBLEVBQUEsVUFBQSxFQUNBLEVBQUEsRUFBQSxHQUNBLEVBQUEsR0FBQSxDQUFBLEVBQ0EsRUFBQSxFQUFBLENBQUEsRUFDQSxHQUFBLEdBQ0EsR0FBQSxJQUFBLEdBQ0EsRUFBQSxDQUFBLE9BQUEsT0FBQSxVQUNBLEVBQUEsQ0FBQSxFQUFBLENBQ0EsS0FBQSxDQUFBLE9BQUEsU0FBQSxlQUFBLFdBQUEsRUFDQSxHQUFBLEdBQ0EsR0FBQSxFQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsRUFFQSxTQUFBLEtBQUEsR0FDQSxBQUFBLEVBQUEsU0FBQSxDQUFBLEdBQ0EsRUFBQSxDQUNBLE9BQ0EsS0FBQSxHQUFBLEtBQUEsSUFDQSxNQUFBLEVBQUEsR0FBQSxDQUFBLEVBQ0EsZUFDQSxTQUNBLENBQUEsTUFLQSxHQUFBLENBQUEsT0FBQSxPQUFBLGVBQUEsU0FBQSxDQUFBLENBRUEsRUFFQSxDQUVBLE1BQUEsRUFDQSxFQUVBLGNBQUEsU0FDQSxXQUFBLEtBQUEsaUJBQUEsZ0JBQ0EsS0FBQSxPQUFBLE1BQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxFQUVBLE1BQUEsVUFBQSxHQUFBLElBQ0EsT0FBQSxDQUNBLE1BQUEsT0FDQSxJQUVBLFNBQUEsQ0FDQSxNQUFBLENBQ0EsU0FBQSxDQUNBLENBQUEsSUFBQSxPQUFBLENBQ0EsRUFDQSxNQUFBLElBQUEsQ0FBQSxRQUFBLENBQUEsQ0FDQSxDQUNBLENBRUEsU0FBQSxDQUFBLFFBQUEsQ0FDQSxNQUFBLElBQUEsR0FBQSxDQUFBLENBQ0EsQ0FDQSxDQUNBLE1BQUEsVUFBQSxHQUFBLElBQ0EsU0FBQSxDQUNBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsS0FBQSxDQUNBLFFBQUEsSUFDQSxFQUNBLE1BQUEsQ0FDQSxRQUFBLElBQ0EsQ0FDQSxFQUNBLFVBQUEsR0FDQSxTQUFBLENBQUEsQ0FDQSxJQUFBLElBQ0EsU0FBQSxHQUFBLEVBQ0EsS0FBQSxFQUFBLGFBQUEsTUFBQSxFQUNBLE1BQUEsRUFBQSxhQUFBLE9BQUEsQ0FDQSxFQUNBLENBQUEsRUFDQSxNQUFBLEdBQUEsQ0FBQSxJQUFBLEVBQUEsTUFBQSxDQUFBLENBQ0EsQ0FDQSxDQUNBLCtJQzVoQklILEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLE1BQU0sQ0FBQyxZQUFZLG1CQUFtQixNQUFNLENBQzNJLDBCQUEyQixDQUFDLEVBQUksU0FDaEMsNEJBQTZCLEVBQUksUUFDbEMsQ0FBQSxFQUFFLENBQUMsRUFBRyxrQkFBa0IsRUFBSSxHQUFHLEVBQUksR0FBRyxDQUFDLElBQUksVUFBVSxNQUFNLENBQUMsY0FBYyxHQUFNLFlBQWMsRUFBSSxZQUFZLGtCQUFrQiw2QkFBNkIsUUFBVSxFQUFJLFVBQVksRUFBSSxlQUFpQixDQUFFLEVBQUMsZUFBZSxFQUFJLGtCQUFrQixXQUFXLEVBQUksWUFBWSxjQUFjLEVBQUksYUFBYSxlQUFlLEVBQUksZUFBZSxTQUFXLEVBQUksU0FBUyxTQUFXLEVBQUksU0FBUyxXQUFhLEVBQUksV0FBVyxrQkFBa0IsQ0FBQyxFQUFJLGFBQWEsa0JBQWtCLENBQUMsQ0FBQyxFQUFJLGFBQWEsa0JBQWtCLENBQUMsRUFBSSxhQUFhLGtCQUFrQixDQUFDLEVBQUksU0FBUyxRQUFVLEVBQUksU0FBUyxFQUFFLEdBQUcsQ0FBQyxLQUFPLFNBQVMsRUFBTyxDQUFDLEVBQUksU0FBVyxFQUFJLEVBQUUsSUFBTSxFQUFJLFNBQVMsZ0JBQWdCLEVBQUksY0FBYyxFQUFFLE1BQU0sQ0FBQyxNQUFPLEVBQUksZ0JBQWlCLFNBQVMsU0FBVSxFQUFLLENBQUMsRUFBSSxnQkFBZ0IsQ0FBRyxFQUFFLFdBQVcsaUJBQWlCLENBQUMsRUFBRSxrQkFBa0IsRUFBSSxXQUFXLEVBQUssRUFBRSxFQUFJLFNBQVMsQ0FBQyxFQUFHLEVBQUksZ0JBQWlCLEVBQUcsU0FBUyxDQUFDLFlBQVksd0NBQXdDLE1BQU0sQ0FBQyxLQUFPLFNBQVMsU0FBVyxFQUFJLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBUSxFQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFFLENBQUUsRUFBRSxDQUFDLENBQUMsRUFDamdDQyxHQUFrQixDQUFBLFFDcU90QixLQUFBQyxJQUFBQyxFQUFBLFNBQUEsY0FBQSxDQUNBLFdBQUEsQ0FBQSxpQkFBQSxFQUNBLE9BQUEsQ0FBQSxFQUFBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxnQkFBQSxLQUNBLFNBQUEsRUFDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLGdCQUFBLENBQ0EsS0FBQSxDQUNBLE1BQUEsTUFBQSxTQUNBLE1BQUEsZUFBQSxDQUFBLEdBQ0EsSUFHQSxHQUFBLEtBQUEsa0JBQUEsQ0FBQSxHQUFBLEtBQUEsYUFBQSxDQUFBLENBQ0EsRUFHQSxPQUFBLEdBQUEsQ0FBQSxFQUNBLEtBQUEsY0FDQSxFQUVBLElBQUEsRUFBQSxDQUdBLEtBQUEsY0FBQSxLQUFBLFNBQ0EsSUFBQSxDQUFBLEdBQUEsSUFBQSxHQUFBLEtBQUEsa0JBQUEsQ0FBQSxDQUFBLEVBQ0EsS0FBQSxrQkFBQSxDQUFBLENBQ0EsQ0FDQSxFQUVBLGVBQUEsQ0FDQSxNQUFBLE1BQUEsaUJBQUEsS0FBQSxPQUNBLEVBRUEsU0FBQSxFQUFBLFdBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxFQUNBLENBQUEsRUFFQSxXQUFBLEVBQUEsYUFBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEVBQ0EsQ0FBQSxFQUVBLFNBQUEsRUFBQSxXQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsRUFDQSxDQUFBLEVBRUEsU0FBQSxFQUFBLFdBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxFQUNBLENBQUEsRUFFQSxhQUFBLENBQ0EsS0FBQSxDQUFBLGNBQUEsYUFBQSxZQUFBLEtBQUEsT0FDQSxNQUFBLElBQ0EsSUFBQSxFQUFBLHNCQUNBLEVBQUEseUJBQ0EsT0FFQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEFBQUEsS0FBQSxXQUdBLEtBQUEsTUFBQSxDQUVBLEVBRUEsUUFBQSxDQUVBLGNBQUEsQ0FFQSxNQUFBLENBQ0EsTUFBQSxLQUFBLFFBQ0EsS0FBQSxLQUFBLE9BQ0EsTUFBQSxLQUFBLFFBQ0EsQ0FDQSxFQUVBLGFBQUEsRUFBQSxDQUNBLEdBQUEsS0FBQSxTQUFBLENBQ0EsS0FBQSxDQUFBLGNBQUEsZUFBQSxLQUNBLEVBQUEsR0FBQSxFQUNBLEVBQ0EsR0FBQSxHQUdBLEdBQUEsQ0FDQSxFQUNBLEVBQ0EsWUFBQSxRQUFB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T0FBQSxDQUFBLEVBQUEsRUFFQSxTQUFBLENBQ0EsTUFBQSxDQUFBLFVBQUEsSUFBQSxDQUNBLEVBRUEsY0FBQSxFQUFBLENBQ0EsTUFBQSxLQUFBLGNBQUEsU0FBQSxNQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsT0FFQSxNQUFBLFFBQUEsZ0JBQUEsY0FBQSxJQUNBLEVBRUEsVUFBQSxPQUVBLE1BQUEsTUFBQSxPQUFBLEtBQUEsTUFBQSxRQUFBLE9BQUEsY0FBQSxNQUFBLENBQ0EsRUFFQSxVQUFBLENBQ0EsTUFBQSxNQUFBLGFBQ0EsRUFBQSxLQUFBLE1BQUEsS0FBQSxLQUFBLEVBQ0EsS0FBQSxLQUNBLEVBRUEsY0FBQSxDQUdBLE1BQUEsTUFBQSxhQUNBLEtBQUEsU0FBQSxNQUFBLEVBQUEsS0FBQSxTQUFBLE9BQUEsS0FBQSxLQUFBLE1BQUEsRUFDQSxLQUFBLFFBQ0EsRUFFQSxZQUFBLENBQ0EsTUFBQSxNQUFBLGFBQ0EsQ0FDQSxTQUFBLEdBQ0EsS0FBQSxLQUFBLE1BQ0EsS0FBQSxPQUVBLEVBQ0EsS0FBQSxNQUNBLEVBRUEsa0JBQUEsQ0FDQSxLQUFBLEdBQUEsR0FFQSxFQUFBLENBQUEsR0FDQSxNQUFBLGVBQUEsV0FBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEdBQ0EsUUFDQSxDQUFBLEdBQ0EsRUFBQSxVQUNBLEVBQUEsRUFBQSxRQUFBLEdBSUEsTUFBQSxHQUFBLEtBQUEsTUFBQSxDQUNBLENBQ0EsT0FFQSxlQUNBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFDQSxFQUFBLEdBQUEsRUFBQSxHQUNBLEVBQUEsS0FDQSxDQUNBLE1BQUEsSUFBQSxjQUNBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFDQSxFQUFBLEVBRUEsQ0FBQSxFQUFBLElBQUEsQ0FDQSxLQUFBLENBQUEsWUFBQSxFQUNBLEdBQUEsRUFFQSxTQUFBLEtBQUEsWUFDQSxLQUFBLGNBQ0EsRUFBQSxFQUFBLEVBQUEsS0FBQSxFQUFBLEVBQ0EsRUFBQSxHQUNBLENBQ0EsQ0FFQSxDQUNBLENBQ0EsRUFFQSw0QkFBQSxFQUFBLEVBQUEsQ0FHQSxLQUFBLENBQUEsWUFBQSxFQUNBLE1BQUEsR0FBQSxFQUFBLEVBQUEsRUFDQSxHQUFBLE9BQ0EsR0FEQSxDQUVBLFdBQUEsT0FDQSxFQUFBLFlBREEsRUFFQSxFQUFBLE1BQUEsQ0FDQSxFQUNBLEdBQ0EsSUFDQSxDQUNBLENBQ0EsQ0FBQSxvSUN4Sk8sWUFBd0IsRUFBTSxDQUNuQyxNQUFPLElBQVMsRUFBTSxDQUFFLEtBQU0sRUFBRSxDQUFFLENBQ3BDLENDSkEsR0FBSSxJQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxNQUFNLENBQUMsWUFBWSxhQUFhLEVBQUUsQ0FBQyxFQUFHLFFBQVEsQ0FBQyxZQUFZLHdEQUF3RCxFQUFFLENBQUMsRUFBSSxHQUFHLENBQUMsRUFBRSxFQUFHLGdCQUFnQixFQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBTSxRQUFRLEtBQU8sRUFBSSxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQVEsRUFBSSxZQUFZLElBQU0sRUFBSSxTQUFTLENBQUMsRUFBRSxnQkFBZ0IsRUFBSSxlQUFlLEVBQUksU0FBUyxFQUFFLEVBQUssRUFBRSxFQUFJLEdBQUksRUFBSSxNQUFPLFNBQVMsRUFBSyxFQUFNLENBQUMsTUFBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUssR0FBRyxFQUFFLENBQUMsRUFBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVksRUFBSSxHQUFHLEVBQUksV0FBVyxFQUFNLENBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUcsS0FBSyxDQUFDLEVBQUksR0FBRyxFQUFJLEdBQUcsRUFBSSxHQUFHLGdCQUFnQixFQUFFLEVBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRyxLQUFLLENBQUUsRUFBSyxPQUFRLENBQUUsRUFBSyxPQUFPLE1BQU8sQ0FBQyxFQUFJLEdBQUcsVUFBVSxFQUFJLEdBQUcsRUFBSyxPQUFPLEtBQUssQ0FBQyxDQUFDLEVBQUcsRUFBSyxPQUFPLE9BQVEsQ0FBQyxFQUFJLEdBQUcsY0FBYyxDQUFDLEVBQUcsRUFBSyxPQUFPLFFBQVMsQ0FBQyxFQUFJLEdBQUcsVUFBVSxDQUFDLEVBQUUsRUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRyxLQUFLLENBQUMsWUFBWSx3QkFBd0IsRUFBRSxDQUFDLEVBQUcsTUFBTSxDQUFDLFlBQVksaUNBQWlDLEVBQUUsQ0FBRSxFQUFJLFVBQVcsRUFBRyxJQUFJLEVBQUksR0FBRyxDQUFDLFlBQVksYUFBYSxFQUFFLElBQUksRUFBSSxvQkFBb0IsRUFBSSxNQUFNLElBQUksRUFBRSxFQUFLLENBQUMsRUFBRSxFQUFJLEdBQUUsRUFBSSxFQUFJLFVBQVcsRUFBRyxTQUFTLEVBQUksR0FBRyxDQUFDLFlBQVksY0FBYyxNQUFNLENBQUMsS0FBTyxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQVEsU0FBUyxFQUFPLENBQUMsTUFBTyxHQUFJLFdBQVcsRUFBTSxDQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFJLG9CQUFvQixFQUFJLE1BQU0sTUFBTSxFQUFFLEVBQUssQ0FBQyxFQUFFLEVBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUcsUUFBUSxDQUFDLEVBQUcsS0FBSyxDQUFDLEVBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRyxNQUFNLENBQUMsWUFBWSxvQkFBb0IsRUFBRSxDQUFFLEVBQUksZUFBZ0IsRUFBRyxXQUFXLENBQUMsWUFBWSxnQkFBZ0IsTUFBTSxDQUFDLElBQU0sS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFRLEVBQUksY0FBYyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUUsRUFBRyxFQUFHLE1BQU0sQ0FBQyxZQUFZLGlDQUFpQyxFQUFFLENBQUUsRUFBSSxlQUFnQixFQUFHLFNBQVMsQ0FBQyxZQUFZLGNBQWMsTUFBTSxDQUFDLEtBQU8sUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFRLFNBQVMsRUFBTyxDQUFDLEVBQU8sZUFBZ0IsRUFBQyxFQUFJLE9BQU8sT0FBUyxFQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQUcsRUFBSSxjQUFlLEVBQUcsU0FBUyxDQUFDLFlBQVksY0FBYyxNQUFNLENBQUMsS0FBTyxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQVEsU0FBUyxFQUFPLENBQUMsRUFBTyxlQUFnQixFQUFDLEVBQUksT0FBTyxPQUFTLEVBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFJLEdBQUcsWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFJLEtBQUssRUFBRyxhQUFhLENBQUMsSUFBSSxTQUFTLFlBQVkscUNBQXFDLE1BQU0sQ0FBQyxXQUFXLEVBQUksU0FBUyxLQUFPLEVBQUksU0FBUyxTQUFXLEVBQUksU0FBUyxjQUFjLEVBQUksV0FBVyxXQUFhLEVBQUksV0FBVyxPQUFTLEVBQUksT0FBTyxTQUFXLEVBQUksU0FBUyxLQUFPLEVBQUksUUFBUSxNQUFRLGNBQWMsRUFBRSxHQUFHLENBQUMsZUFBZSxFQUFJLFlBQVksYUFBYSxFQUFJLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTyxFQUFJLFFBQVMsU0FBUyxTQUFVLEVBQUssQ0FBQyxFQUFJLFFBQVEsQ0FBRyxFQUFFLFdBQVcsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQy8yRSxHQUFrQixDQUFDLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxRQUFRLENBQUMsWUFBWSxpQkFBaUIsRUFBRSxDQUFDLEVBQUcsS0FBSyxDQUFDLEVBQUcsS0FBSyxDQUFDLEVBQUcsT0FBTyxDQUFDLEVBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFHLEtBQUssQ0FBQyxFQUFHLE9BQU8sQ0FBQyxFQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRyxLQUFLLENBQUMsRUFBRyxPQUFPLENBQUMsRUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUcsS0FBSyxDQUFDLEVBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUNzSGhULEtBQUEsSUFBQUEsRUFBQSxTQUFBLFNBQUEsQ0FDQSxXQUFBLENBQUEsYUFBQSxlQUFBLEVBQ0EsUUFBQSxDQUFBLGlCQUFBLEVBQ0EsT0FBQSxDQUFBLEVBQUEsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLFFBQUEsQ0FBQSxDQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsUUFBQSxDQUNBLE1BQUEsTUFBQSxNQUFBLE1BQ0EsRUFFQSxPQUFBLENBQ0EsTUFBQSxJQUFBLEtBQUEsS0FBQSxDQUNBLEVBRUEsU0FBQSxFQUFBLFdBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxHQUVBLFNBQUEsRUFDQSxDQUFBLEVBRUEsV0FBQSxFQUFBLGFBQUEsQ0FDQSxLQUFBLENBQUEsTUFBQSxPQUFBLE1BQUEsQ0FDQSxDQUFBLEVBRUEsT0FBQSxFQUFBLFNBQUEsQ0FDQSxLQUFBLE1BQ0EsSUFBQSxFQUFBLENBQ0EsTUFBQSxHQUFBLENBQUEsRUFBQSxFQUFBLEtBQUEsR0FBQSxFQUFBLENBQ0EsQ0FDQSxDQUFBLEVBRUEsUUFBQSxFQUFBLFVBQUEsQ0FDQSxLQUFBLENBQUEsT0FBQSxNQUFBLEVBQ0EsSUFBQSxFQUFBLENBQ0EsTUFBQSxHQUFBLEdBQUEsQ0FBQSxFQUFBLE1BQ0EsQ0FDQSxDQUFBLEVBRUEsVUFBQSxFQUFBLFlBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxHQUNBLElBQUEsRUFBQSxDQUNBLE1BQUEsSUFBQSxLQUFBLE1BQUEsT0FBQSxDQUNBLENBQ0EsQ0FBQSxFQUVBLFVBQUEsRUFBQSxZQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsRUFDQSxDQUFBLEVBRUEsZUFBQSxDQUNBLE1BQUEsTUFBQSxRQUFBLFFBQ0EsQ0FBQSxNQUFBLE9BQUEsUUFBQSxLQUFBLE9BQUEsU0FDQSxFQUVBLGdCQUFBLENBQ0EsTUFBQSxNQUFBLFFBQUEsUUFBQSxLQUFBLE9BQUEsTUFDQSxFQUVBLGdCQUFBLENBQ0EsTUFDQSxNQUFBLFFBQUEsT0FBQSxDQUFBLEVBQUEsSUFBQSxFQUFBLEVBQUEsU0FBQSxDQUFBLEVBQ0EsS0FBQSxRQUFBLE1BRUEsRUFFQSxZQUFBLENBQ0EsTUFBQSxNQUFBLGVBQUEsQ0FDQSxLQUFBLFNBQ0EsS0FBQSxLQUFBLElBQUEsY0FBQSxLQUFBLFFBQUEsQ0FDQSxDQUFBLENBQ0EsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxXQUFBLEVBQUEsRUFBQSxDQUNBLEtBQUEsQ0FBQSxVQUFBLEtBQUEsT0FDQSxNQUFBLEdBQ0EsRUFBQSxLQUNBLEtBQ0EsR0FBQSxHQUFBLEtBQUEsQ0FDQSxNQUFBLEVBQ0EsS0FBQSxLQUFBLE1BQ0EsUUFDQSxTQUFBLEVBQUEsS0FBQSxTQUFBLENBQUEsQ0FDQSxDQUFBLENBQ0EsRUFDQSxHQUFBLEVBQUEsSUFBQSxDQUNBLEVBRUEsV0FBQSxFQUFBLEVBQUEsQ0FDQSxLQUFBLENBQUEsUUFBQSxFQUVBLEFBQUEsR0FBQSxPQUFBLFFBQ0EseUJBQUEsS0FBQSxNQUFBLFVBQUEsSUFBQSxHQUVBLENBQUEsS0FBQSxTQUNBLEtBQUEsTUFBQSxPQUFBLEVBQUEsQ0FBQSxFQUVBLEtBQUEsTUFBQSxLQUVBLEVBQUEsUUFDQSxLQUFBLE9BQUEsT0FBQSxFQUFBLE1BQUEsRUFFQSxLQUFBLFNBQUEsRUFDQSxLQUFBLE9BQUEsQ0FDQSxLQUFBLE9BQ0EsTUFBQSx1QkFDQSxLQUFBLEdBQUEsU0FBQSxLQUFBLE1BQUEsVUFDQSxDQUFBLEVBRUEsRUFFQSxhQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsVUFBQSxLQUFBLE1BQ0EsS0FBQSxNQUFBLFVBQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxFQUFBLEVBQ0EsRUFDQSxFQUVBLFFBQUEsRUFBQSxDQUNBLEFBQUEsS0FBQSxTQUNBLEFBQUEsS0FBQSxNQUNBLEtBQUEsTUFBQSxLQUFBLENBQUEsRUFFQSxLQUFBLE1BQUEsQ0FBQSxDQUFBLEVBR0EsS0FBQSxNQUFBLENBRUEsRUFFQSxZQUFBLEVBQUEsRUFBQSxDQUNBLEdBQUEsS0FBQSxTQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsYUFBQSxDQUFBLEVBQ0EsQUFBQSxHQUFBLEdBQ0EsQ0FBQSxFQUNBLEtBQUEsS0FBQSxLQUFBLE1BQUEsRUFBQSxDQUFBLEVBRUEsS0FBQSxNQUFBLE9BQUEsRUFBQSxDQUFBLEVBR0EsS0FDQSxNQUFBLE1BQUEsQ0FFQSxFQUVBLFdBQUEsRUFBQSxDQUNBLEtBQUEsWUFBQSxFQUFBLElBQUEsQ0FDQSxFQUVBLFVBQUEsRUFBQSxFQUFBLENBQ0EsR0FBQSxHQUFBLENBQUEsRUFBQSxDQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxFQUNBLEtBQUEsUUFBQSxDQUFBLEtBQUEsT0FBQSxPQUFBLE9BQUEsRUFBQSxDQUNBLENBQ0EsR0FBQSxHQUFBLEVBQUEsQ0FDQSxLQUFBLENBQUEsVUFBQSxTQUFBLEVBQ0EsR0FBQSxFQUFBLENBQ0EsS0FBQSxTQUFBLEVBQ0EsS0FBQSxHQUFBLEVBQUEsU0FBQSxHQUNBLEFBQUEsRUFDQSxHQUFBLE9BQUEsRUFHQSxLQUFBLFlBQUEsRUFBQSxDQUFBLEdBRUEsS0FBQSxXQUFBLENBQUEsQ0FFQSxTQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsQ0FDQSxNQUFBLGlCQUNBLE9BQUEsZ0JBQ0EsVUFBQSwwQkFBQSxFQUFBLE9BQ0EsUUFBQSwwQ0FDQSxPQUFBLHNDQUNBLEtBQUEsc0JBQUEsR0FBQSxFQUFBLElBQUEsSUFDQSxRQUFBLGdDQUVBLEVBQUEsSUFBQSwrQkFBQSxLQUNBLEtBQUEsT0FBQSxDQUNBLEtBQUEsUUFDQSxNQUFBLG9CQUNBLE1BQ0Es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
5
+ `))}const u=e||{},{$schema:s}=u,n=F(u,["$schema"]);return s===((l=this.schemaComponent)==null?void 0:l.schema.name)?n:null},async checkClipboard(){this.copyEnabled=!!this.data,this.pasteEnabled=!!await this.getClipboardData(!1)},async onCopy(){var e,s,n;let t=(e=this.schemaComponent)==null?void 0:e.clipboardData;try{t=t&&this.copyData(t),this.appState.clipboardData=t;try{const a=JSON.stringify(t,null,2);await((n=(s=navigator.clipboard)==null?void 0:s.writeText)==null?void 0:n.call(s,a)),await this.checkClipboard()}catch(a){console.error(a,a.name,a.message)}}catch(a){console.error(a),alert(a.message)}},async onPaste(){let t=await this.getClipboardData(!0);try{t=t&&this.pasteData(t),t&&this.schemaComponent.setData(t)}catch(e){console.error(e),alert(e.message)}}}}),Ze={};var Ji=p(Wi,Hi,Ki,!1,Qi,null,null,null);function Qi(t){for(let e in Ze)this[e]=Ze[e]}var Gi=function(){return Ji.exports}(),ts={data(){return{isLoading:!1}},methods:{setLoading(t,{updateRoot:e=!1,updateView:s=!1}={}){!this.isLoading^!t&&(this.isLoading=!!t,e&&this.rootComponent.registerLoading(t),s&&this.viewComponent.setLoading(this.isLoading))}}},es={mixins:[Mt,ts],provide(){return{$resourceComponent:()=>this,$verbs:()=>this.verbs,$isPopulated:()=>this.hasData}},data(){return{loadedData:null}},computed:{resourceComponent(){return this},resource(){return this.getResource()},providesData(){return!!this.resource},linksToView(){return!1},isTransient(){const t=this.formComponent;return!this.providesData&&!this.linksToView||t&&(t.isTransient||t.isCreating)},transientNote(){return this.isTransient&&"<b>Note</b>: the parent still needs to be saved in order to persist this change."},shouldLoad(){return!this.isTransient&&!this.isLoading},hasData(){return!!this.loadedData},verbs(){return this.getVerbs()},paginationRange(){const{paginate:t}=this.sourceSchema;if(this.isListSource&&t){const{page:e=0}=this.query||{},s=e*t;return[s,s+t-1]}},queryParams(){const t=this.paginationRange,n=this.query||{},{page:e}=n,s=F(n,["page"]);return d(d({},s),t&&{range:t.join(",")})}},created(){(this.providesData||this.isCreating)&&this.setupData()},methods:{getResource(){var t,e,s;return I((t=this.sourceSchema)==null?void 0:t.resource,{type:"collection",parent:(s=(e=this.parentFormComponent)==null?void 0:e.resource)!=null?s:null})},getVerbs(){const t=this.$verbs();return this.isTransient?S(d({},t),{create:"add",created:"added",save:"apply",saved:"applied",delete:"remove",deleted:"removed"}):t},clearData(){this.loadedData=null},setData(t){this.loadedData=t},setupData(){this.ensureData()},ensureData(){this.shouldLoad&&(this.hasData?this.reloadData():this.loadData(!0))},reloadData(){this.loadData(!1)},loadData(t){this.isTransient||(t&&this.clearData(),this.requestData())},createData(t,e){return ge(t,e?{type:e}:{},this)},requestData(){const t=this.queryParams;this.handleRequest({method:"get",params:t},(e,s)=>{var n;if(e){if(s){const{data:a}=s;if((a==null?void 0:a.type)==="FilterValidation"&&((n=this.onFilterErrors)==null?void 0:n.call(this,a.errors)))return!0;if(this.isUnauthorizedError(s))return!0}}else this.setData(s.data),this.emitSchemaEvent("load")})},isValidationError(t){return(t==null?void 0:t.status)===400},isUnauthorizedError(t){return(t==null?void 0:t.status)===401},async handleRequest({method:t,resource:e=this.resource,data:s,params:n},a){const r={updateRoot:!0,updateView:this.isInView};this.setLoading(!0,r);const i={method:t,resource:e,data:s,params:n};try{const o=await this.sendRequest(i);a(null,o)}catch(o){const{response:u}=o;if(!a(o,u)){const l=u==null?void 0:u.data;l&&V(l.type)?this.notify({type:"error",title:U(l.type),text:l.message||o}):this.notify({type:"error",title:"Request Error",text:o})}}this.setLoading(!1,r)},getPayloadData(t,e){return["post","put","patch"].includes(e)&&(t.getSchemaValue(["resource","data"])||t.processedItem)},async submit(t){const e=I(t.schema.resource,{parent:this.resource});if(e){const{method:s}=e,n=this.getPayloadData(t,s);return this.submitResource(t,e,s,n)}return!1},async submitResource(t,e,s,n,{setData:a=!1,onSuccess:r,onError:i,notifySuccess:o=()=>this.notify({type:"success",title:"Request Successful",text:"Request was successfully sent."}),notifyError:u=l=>this.notify({type:"error",title:"Request Error",text:[`Unable to send request${l?":":""}`,(l==null?void 0:l.message)||l]})}={}){return new Promise(l=>{this.handleRequest({method:s,data:n,resource:e},async(c,_)=>{const f=_==null?void 0:_.data;if(c){const y=this.isValidationError(_)&&f.errors;if(y)await this.showValidationErrors(y,!0);else{const m=C(f)?f:c;i==null||i(m),await this.emitButtonEvent(t,"error",{notify:u,error:m})}l(!1)}else a&&f&&this.setData(f),r==null||r(),await this.emitButtonEvent(t,"success",{notify:o}),l(!0)})})},async emitButtonEvent(t,e,{notify:s,error:n}){const a=new O(t,{nested:!1,data:this.data,itemLabel:this.itemLabel,error:n}),r=await t.emitEvent(e,{context:a});return s&&r===void 0&&!a.wasNotified&&s(n),r}}},Xi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-form dito-scroll-parent",class:{"dito-form-nested":t.isNestedRoute}},[t.isLastUnnestedRoute||t.isNestedRoute?t._e():s("router-view",{directives:[{name:"show",rawName:"v-show",value:!t.isActive,expression:"!isActive"}]}),s(t.isNestedRoute?"div":"form",{directives:[{name:"show",rawName:"v-show",value:t.isActive,expression:"isActive"}],tag:"component",staticClass:"dito-scroll",on:{submit:function(n){n.preventDefault()}}},[s("button",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}],attrs:{type:"submit",disabled:"true","aria-hidden":"true"}}),s("dito-schema",{attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,disabled:t.isLoading,menuHeader:!0}},[s("dito-buttons",{staticClass:"dito-buttons-round dito-buttons-main dito-buttons-large",attrs:{slot:"buttons",buttons:t.buttonSchemas,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,disabled:t.isLoading},slot:"buttons"})],1)],1)],1)},Yi=[];const Zi=v.component("dito-form",{mixins:[Ee,es],data(){return{createdData:null,clonedData:void 0,sourceKey:null,isForm:!0}},computed:{verbs(){const t=this.getVerbs(),{isCreating:e,providesData:s}=this;return S(d({},t),{submit:e?t.create:t.save,submitted:e?t.created:t.saved,cancel:s?t.cancel:t.close,cancelled:s?t.cancelled:t.closed})},schema(){return this.getItemFormSchema(this.sourceSchema,this.data||{type:this.type},this.context)||{}},buttonSchemas(){return it(gt({cancel:{type:"button",events:{click:()=>this.cancel()}},submit:!this.doesMutate&&{type:"submit",closeForm:!0,events:{click:({component:t})=>t.submit()}}},this.schema.buttons))},isActive(){return this.isLastRoute||this.isLastUnnestedRoute},isTransient(){return!this.providesData},isCreating(){return this.param==="create"},isDirty(){var t;return!this.doesMutate&&!!((t=this.mainSchemaComponent)!=null&&t.isDirty)},selectedTab(){var t;return((t=this.mainSchemaComponent)==null?void 0:t.selectedTab)||null},doesMutate(){return this.sourceSchema.mutate},type(){return this.$route.query.type},itemId(){var t;return this.isCreating?null:(t=this.param)!=null?t:null},method(){return this.isCreating?"post":"patch"},resource(){const t=this.getResource();return Et(this.itemId,t)||t},breadcrumbPrefix(){return G(this.isCreating?this.verbs.create:this.verbs.edit)},data(){return this.createdData||this.loadedData||this.inheritedData||null},dataPath(){return this.getDataPathFrom(this.dataComponent)},sourceData(){let{data:t}=this.parentRouteComponent;if(t){const e=N(this.getDataPathFrom(this.parentRouteComponent)),s=this.routeRecord.path.split("/"),n=s.slice(s.length-e.length);this.sourceKey=null;const a=e[e.length-1];Y(this.sourceSchema)&&a==="create"&&e.length--;for(let r=0,i=e.length;r<i&&t;r++){const o=e[r],u=/^:id/.test(n[r])?o==="create"?null:this.findItemIdIndex(this.sourceSchema,t,o):o;r===i-1?this.sourceKey=u:t=t[u]}}return t},inheritedData(){if(this.isTransient&&this.clonedData===void 0&&this.sourceData&&this.sourceKey!==null){let t=this.sourceData[this.sourceKey];return this.doesMutate||(this.clonedData=t=nt(t)),t===null&&!this.isCreating&&Y(this.sourceSchema)&&this.$router.push({path:"create",append:!0}),t}return this.clonedData},hasData(){return!!this.data},itemLabel(){return this.getItemLabel(this.sourceSchema,this.data,{extended:!0})}},watch:{sourceData:"clearClonedData",create:"setupData"},methods:{emitSchemaEvent(t,e){return this.mainSchemaComponent.emitEvent(t,e)},getDataPathFrom(t){return this.api.denormalizePath(this.path.slice((t.isView?0:t.path.length)+1))},setupData(){this.isCreating?this.createdData=this.createdData||this.createData(this.schema,this.type):this.ensureData()},setSourceData(t){if(this.sourceData&&this.sourceKey!==null){const{mainSchemaComponent:e}=this;return this.$set(this.sourceData,this.sourceKey,e.filterData(t)),e.onChange(),!0}return!1},addSourceData(t){var e;return Y(this.sourceSchema)?this.setSourceData(t):!!((e=this.sourceData)!=null&&e.push(t))},clearData(){this.setData(null)},setData(t){this.isTransient?this.setSourceData(t):(this.createdData=null,this.loadedData=t)},clearClonedData(t,e){t!==e&&(this.clonedData=void 0)},async cancel(){return this.close()},async close(){return this.navigate(this.parentRouteComponent.path)},getSubmitVerb(t=!0){return this.isCreating?t?"create":"created":t?"submit":"submitted"},async submit(t,{validate:e=!0,closeForm:s=!1}={}){if(e&&!this.validateAll())return!1;const n=l=>this.verbs[this.getSubmitVerb(l)],a=I(t.schema.resource,{parent:this.resource}),r=a||this.resource,i=(r==null?void 0:r.method)||this.method,o=this.getPayloadData(t,i);let u;if(!a&&this.isTransient?u=await this.submitTransient(t,r,i,o,{onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:l=>this.emitSchemaEvent("error",{context:{error:l}}),notifySuccess:()=>{const l=n(!1);this.notify({type:"info",title:this.isCreating?`Item ${G(l)}`:`Change ${G(l)}`,text:[this.isCreating?`${this.itemLabel} was ${l}.`:`Changes to ${this.itemLabel} were ${l}.`,this.transientNote]})},notifyError:()=>{const l=n(!0);this.notify({type:"error",title:"Request Error",text:`Unable to ${l} ${this.itemLabel}.`})}}):u=await this.submitResource(t,r,i,o,{setData:!0,onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:l=>this.emitSchemaEvent("error",{context:{error:l}}),notifySuccess:()=>{const l=n(!1);this.notify({type:"success",title:`Successfully ${G(l)}`,text:`${this.itemLabel} was ${l}.`})},notifyError:l=>{const c=n(!0);this.notify({type:"error",title:"Request Error",text:[`Unable to ${c} ${this.itemLabel}${l?":":""}`,(l==null?void 0:l.message)||l]})}}),u){if(this.resetValidation(),s||t.closeForm)this.close();else if(this.isCreating){const l=this.getItemId(this.schema,this.data);this.$router.replace({path:`../${l}`,append:!0})}}return u},async submitTransient(t,e,s,n,{onSuccess:a,onError:r,notifySuccess:i,notifyError:o}){const u=this.isCreating?this.addSourceData(n):this.setSourceData(n);if(u)a==null||a(),await this.emitButtonEvent(t,"success",{notify:i});else{const l="Could not submit transient item";r==null||r(l),await this.emitButtonEvent(t,"error",{notify:o,error:l})}return u}}}),ss={};var to=p(Zi,Xi,Yi,!1,eo,null,null,null);function eo(t){for(let e in ss)this[e]=ss[e]}var ns=function(){return to.exports}(),Ld="";const so=ns.component("dito-form-nested",{});let no,ao;const as={};var ro=p(so,no,ao,!1,io,null,null,null);function io(t){for(let e in as)this[e]=as[e]}var oo=function(){return ro.exports}(),lo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.errors?s("div",{staticClass:"dito-errors"},[s("ul",t._l(t.errors,function(n){return s("li",[t._v(t._s(n))])}),0)]):t._e()},uo=[],Bd="";const co=v.component("dito-errors",{props:{errors:{type:Array,default:null}}}),rs={};var ho=p(co,lo,uo,!1,po,null,null,null);function po(t){for(let e in rs)this[e]=rs[e]}var mo=function(){return ho.exports}(),fo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-scopes"},t._l(t.scopes,function(n,a){return s("router-link",{key:a,attrs:{to:t.getScopeLink(n),custom:""},scopedSlots:t._u([{key:"default",fn:function(r){var i=r.navigate;return[s("button",{staticClass:"dito-button",class:{"dito-selected":n.name===t.query.scope},attrs:{type:"button",title:n.hint||t.getLabel(n)},on:{click:i}},[t._v(t._s(t.getLabel(n)))])]}}],null,!0)})}),1)},_o=[],Fd="";const vo=v.component("dito-scopes",{props:{query:{type:Object,required:!0},scopes:{type:Object,required:!0}},methods:{getScopeLink(t){const e=S(d({},this.query),{scope:t.name});return e.page&&(e.page=0),this.getQueryLink(e)}}}),is={};var go=p(vo,fo,_o,!1,bo,null,null,null);function bo(t){for(let e in is)this[e]=is[e]}var yo=function(){return go.exports}(),$o=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("pagination",{attrs:{pageSize:t.limit,total:t.total,page:t.page},on:{"update:page":function(n){t.page=n}}})},Co=[];const Do=v.component("dito-pagination",{components:{Pagination:hn},props:{query:{type:Object,required:!0},limit:{type:Number,required:!0},total:{type:Number,required:!0}},computed:{page:{get(){return(+this.query.page||0)+1},set(t){this.page!==t&&this.$router.push(this.getQueryLink(S(d({},this.query),{page:t-1})))}}}}),os={};var wo=p(Do,$o,Co,!1,Po,null,null,null);function Po(t){for(let e in os)this[e]=os[e]}var xo=function(){return wo.exports}(),At={mixins:[Mt],data(){return{dragging:!1}},methods:{onStartDrag(){this.dragging=!0},onEndDrag({oldIndex:t,newIndex:e}){this.dragging=!1,t!==e&&this.onChange()},updateOrder(t,e,s){const{orderKey:n}=t;if(n){const a=(s==null?void 0:s[0])||0;for(let r=0;r<e.length;r++)e[r][n]=r+a}return e}}},So=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tree-item",class:{"dito-dragging":t.dragging,"dito-active":t.active},style:t.level>0&&{"--level":t.level},attrs:{id:t.dataPath}},[t.label?s("div",{staticClass:"dito-tree-header"},[t.numEntries?s("div",{staticClass:"dito-tree-branch",on:{click:function(n){n.stopPropagation(),t.opened=!t.opened}}},[t.numEntries?s("div",{staticClass:"dito-chevron",class:{"dito-opened":t.opened}}):t._e(),s("div",{staticClass:"dito-tree-label",domProps:{innerHTML:t._s(t.label)}}),t.details?s("div",{staticClass:"dito-tree-info"},[t._v(t._s(t.details))]):t._e()]):s("div",{staticClass:"dito-tree-leaf"},[s("div",{staticClass:"dito-tree-label",domProps:{innerHTML:t._s(t.label)}})]),t.hasEditButtons?s("div",{staticClass:"dito-buttons dito-buttons-small"},[t.draggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.editable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:t.onEdit}},"button",t.getButtonAttributes(t.verbs.edit),!1)):t._e(),t.deletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:t.onDelete}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()]):t._e()]):t._e(),t.properties?s("table",{directives:[{name:"show",rawName:"v-show",value:t.opened,expression:"opened"}],staticClass:"dito-properties"},t._l(t.properties,function(n){return s("tr",[s("td",[n.label!==!1?s("dito-label",{attrs:{dataPath:t.getPropertyDataPath(n),label:t.getLabel(n)}}):t._e()],1),s("dito-table-cell",{attrs:{cell:n,schema:n,dataPath:t.getPropertyDataPath(n),data:t.data,meta:t.nestedMeta,store:t.store,disabled:t.disabled}})],1)}),0):t._e(),t.childrenSchema?s("vue-draggable",t._b({directives:[{name:"show",rawName:"v-show",value:t.opened,expression:"opened"}],attrs:{list:t.updateOrder(t.childrenSchema,t.childrenList)},on:{start:t.onStartDrag,end:function(n){return t.onEndDrag(n,t.childrenSchema)}}},"vue-draggable",t.getDragOptions(t.childrenDraggable,!0),!1),t._l(t.childrenItems,function(n,a){return s("dito-tree-item",{key:t.getItemUid(t.childrenSchema,n.data),attrs:{schema:t.childrenSchema,dataPath:t.getItemDataPath(t.childrenSchema,a),data:n.data,path:n.path,open:n.open,active:n.active,draggable:t.childrenDraggable,label:t.getItemLabel(t.childrenSchema,n.data,{index:a}),level:t.level+1}})}),1):t._e()],1)},Oo=[],Td="";const Eo=v.component("dito-tree-item",{components:{VueDraggable:yt},mixins:[At],inject:["container"],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Array,Object],default:null},path:{type:String,default:""},open:{type:Boolean,default:!1},active:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},label:{type:String,default:null},level:{type:Number,default:0}},data(){return{opened:this.open||this.schema.open}},computed:{meta(){return this.container.meta},store(){return this.container.store},disabled(){return this.container.disabled},nestedMeta(){return S(d({},this.meta),{schema:this.schema})},properties(){return K(this.schema.properties)},childrenSchema(){return this.schema.children},childrenList(){var e;const t=(e=this.childrenSchema)==null?void 0:e.name;return t&&this.data[t]},childrenDraggable(){var t;return((t=this.childrenList)==null?void 0:t.length)>1&&this.getSchemaValue("draggable",{type:Boolean,default:!1,schema:this.childrenSchema})},numChildren(){var t;return((t=this.childrenList)==null?void 0:t.length)||0},numProperties(){var t;return((t=this.properties)==null?void 0:t.length)||0},numEntries(){return this.numProperties+this.numChildren},childrenItems(){var e;const{childrenSchema:t}=this;if(t){const{editPath:s}=this.container,n=!this.path&&t.open;return((e=this.childrenList)==null?void 0:e.map((a,r)=>{const i=t.path&&`${this.path}/${t.path}/${r}`,o=n||s.startsWith(i)&&i.length<s.length;return{data:a,path:i,open:o,active:s===i}}))||[]}},details(){const{numChildren:t}=this;return t&&`${t} ${t===1?"item":"items"}`},hasEditButtons(){return this.draggable||this.editable||this.deletable},creatable:h("creatable",{type:Boolean,default:!1,get(t){return t&&H(this.schema)}}),editable:h("editable",{type:Boolean,default:!1,get(t){return t&&H(this.schema)}}),deletable:h("deletable",{type:Boolean,default:!1})},methods:{getPropertyDataPath(t){return B(this.dataPath,t.name)},onEdit(){this.$router.push({path:`${this.container.path}${this.path}`,query:this.$route.query})},onDelete(){},onChange(){this.container.onChange()}}}),ls={};var jo=p(Eo,So,Oo,!1,Vo,null,null,null);function Vo(t){for(let e in ls)this[e]=ls[e]}var ko=function(){return jo.exports}(),Lo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("thead",{staticClass:"dito-table-head"},[s("tr",[t._l(t.columns,function(n,a){return t.shouldRender(n)?s("th",{class:t.getColumnClass(n)},[n.sortable?s("router-link",{attrs:{to:t.getSortLink(n),custom:""},scopedSlots:t._u([{key:"default",fn:function(r){var i=r.navigate;return[s("button",{staticClass:"dito-button",class:t.getSortClass(n),attrs:{type:"button"},on:{click:i}},[s("div",{staticClass:"dito-order-arrows"}),s("span",[t._v(t._s(t.getLabel(n)))])])]}}],null,!0)}):s("span",[t._v(t._s(t.getLabel(n)))])],1):t._e()}),t.hasEditButtons?s("th",[s("span")]):t._e()],2)])},Bo=[],Rd="";const Fo=v.component("dito-table-head",{props:{query:{type:Object,required:!0},columns:{type:Object,required:!0},hasEditButtons:{type:Boolean,required:!0}},computed:{sort(){const t=(this.query.order||"").split(/\s+/);return{name:t[0],order:t[1]}}},methods:{getColumnClass(t){return`dito-column-${Q(t.name)}`},getSortClass(t){return this.sort.name===t.name?`dito-selected dito-order-${this.sort.order}`:null},getSortLink(t){const e=this.sort.name===t.name&&this.sort.order==="asc"?"desc":"asc";return this.getQueryLink(S(d({},this.query),{order:`${t.name} ${e}`}))}}}),us={};var To=p(Fo,Lo,Bo,!1,Ro,null,null,null);function Ro(t){for(let e in us)this[e]=us[e]}var Io=function(){return To.exports}(),qo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("td",{class:t.cell.class,style:t.cell.style},[t.component?s(t.component,{tag:"component",attrs:{schema:t.schema,dataPath:t.dataPath,data:t.data,meta:t.meta,store:t.store,nested:t.nested,disabled:t.disabled}}):s("span",{domProps:{innerHTML:t._s(t.renderCell(t.data))}})],1)},Mo=[];const Ao=v.component("dito-table-cell",{props:{cell:{type:Object,required:!0},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},computed:{component(){return this.resolveTypeComponent(this.cell.component)}},methods:{renderCell(t){const{name:e,render:s}=this.cell,n=t[e];return s?s.call(this,new O(this,{name:e,value:n,data:t,dataPath:B(this.dataPath,e)})):Gt(n)}}}),cs={};var No=p(Ao,qo,Mo,!1,Uo,null,null,null);function Uo(t){for(let e in cs)this[e]=cs[e]}var zo=function(){return No.exports}();const Ho=v.component("dito-vnode",{functional:!0,render:(t,e)=>e.props.node});let Ko,Wo;const ds={};var Jo=p(Ho,Ko,Wo,!1,Qo,null,null,null);function Qo(t){for(let e in ds)this[e]=ds[e]}var Go=function(){return Jo.exports}(),Xo=Object.freeze(Object.defineProperty({__proto__:null,DitoRoot:qt,DitoMenu:er,DitoHeader:pr,DitoAccount:br,DitoDialog:Pr,DitoElement:Vr,DitoLabel:Rr,DitoSchema:Ur,DitoSchemaInlined:Qr,DitoPane:ei,DitoContainer:li,DitoTabs:mi,DitoPanel:yi,DitoPanels:xi,DitoButtons:ki,DitoEditButtons:Ii,DitoCreateButton:zi,DitoClipboard:Gi,DitoView:Ve,DitoForm:ns,DitoFormNested:oo,DitoErrors:mo,DitoScopes:yo,DitoPagination:xo,DitoTreeItem:ko,DitoTableHead:Io,DitoTableCell:zo,DitoVNode:Go},Symbol.toStringTag,{value:"Module"}));const $=v.extend({mixins:[ot],nativeField:!1,textField:!1,defaultValue:null,defaultNested:!0,defaultVisible:!0,generateLabel:!0,excludeValue:!1,ignoreMissingValue:null,omitPadding:!1});$.register=function(t,e={}){t=T(t);const s=this.component(`dito-type-${t[0]}`,e);for(const n of t)Oa(n,s);return s},$.get=kt;var Yo=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("button",t._g(t._b({ref:"element",staticClass:"dito-button",class:"dito-button-"+t.verb,attrs:{id:t.dataPath,type:t.type,title:t.text}},"button",t.attributes,!1),t.listeners),[t._v(t._s(t.text))])},Zo=[];const tl=$.register(["button","submit"],{defaultValue:()=>{},excludeValue:!0,defaultWidth:"auto",computed:{verb(){return this.verbs[this.name]||this.name},text:h("text",{type:String,get(t){return t||U(this.verb)}}),closeForm:h("closeForm",{type:Boolean,default:!1})},methods:{getListeners(){return{focus:this.onFocus,blur:this.onBlur,click:this.onClick}},async submit(t){var e;return(e=this.resourceComponent)==null?void 0:e.submit(this,t)},async onClick(){await this.emitEvent("click",{parent:this.schemaComponent})===void 0&&ee(this.schema)&&await this.submit()}}}),hs={};var el=p(tl,Yo,Zo,!1,sl,null,null,null);function sl(t){for(let e in hs)this[e]=hs[e]}var nl=function(){return el.exports}(),al=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.value,expression:"value"}],ref:"element",staticClass:"dito-checkbox",attrs:{id:t.dataPath,type:"checkbox"},domProps:{checked:Array.isArray(t.value)?t._i(t.value,null)>-1:t.value},on:{change:function(n){var a=t.value,r=n.target,i=!!r.checked;if(Array.isArray(a)){var o=null,u=t._i(a,o);r.checked?u<0&&(t.value=a.concat([o])):u>-1&&(t.value=a.slice(0,u).concat(a.slice(u+1)))}else t.value=i}}},"input",t.attributes,!1),t.listeners))},rl=[],Id="";const il=$.register("checkbox",{nativeField:!0}),ps={};var ol=p(il,al,rl,!1,ll,null,null,null);function ll(t){for(let e in ps)this[e]=ps[e]}var ul=function(){return ol.exports}(),ms={mixins:[ts],data(){return{isLoading:!1,asyncDataEntries:{}}},methods:{handleDataSchema(t,e,a={}){var r=a,{resolveCounter:s=1}=r,n=F(r,["resolveCounter"]);var l;C(t)||(t={data:t});let{data:i=void 0,dataPath:o=null}=t;const u=this.asyncDataEntries[e]||this.$set(this.asyncDataEntries,e,{dependencyFunction:null,resolveCounter:0,resolvedData:null,resolving:!1});if((l=u.dependencyFunction)==null||l.call(this,this.context),u.resolveCounter>0){const{resolvedData:c}=u;return--u.resolveCounter===0&&(u.resolvedData=null),c}if(u.resolving)i=null;else if(i){if(b(i)){const c=i.call(this,this.context);b(c)?(u.dependencyFunction=i,i=c.call(this,this.context)):i=c}vt(i)&&(u.resolving=!0,this.resolveData(i,n).then(c=>{u.resolveCounter=s,u.resolvedData=c,u.resolving=!1}),i=null)}else o&&(i=J(this.rootData,z(`${this.dataPath}/${o}`)));return i},async resolveData(t,e={}){this.setLoading(!0,e);let s=null;try{s=await(b(t)?t():t)}catch(n){this.addError(n.message||n)}return this.setLoading(!1,e),s}}},ut={mixins:[ms],data(){return{hasOptions:!1}},computed:{selectedValue:{get(){const t=s=>this.relate?this.hasOption(s)?this.getValueForOption(s):null:s,e=x(this.value)?this.value.map(t).filter(s=>s!==null):t(this.value);return this.relate&&this.hasOptions&&(e===null&&this.value!==null||Xn(this.value))&&(this.selectedValue=e),e},set(t){const e=s=>this.relate?this.getOptionForValue(s):s;this.value=x(t)?t.map(e):e(t)}},selectedOption(){return this.getOptionForValue(this.selectedValue)},options(){var e;const t=(e=this.handleDataSchema(this.schema.options,"options",{resolveCounter:1}))!=null?e:[];if(!x(t))throw new Error(`Invalid options data, should be array: ${t}`);return this.hasOptions=t.length>0,this.processOptions(t)},activeOptions(){return this.options},relate:h("relate",{type:Boolean,default:!1,callback:!1}),groupBy:h("groupBy",{type:String,default:null}),optionLabel:h("options.label",{type:[String,Function],default:null,get(t){return t||this.getOptionKey("label")||null}}),optionValue:h("options.value",{type:[String,Function],default:null,get(t){return t||this.relate&&"id"||this.getOptionKey("value")||null}}),searchFilter:h("search",{type:[Object,Function],default:null,get(t){if(t){const{filter:e,debounce:s}=b(t)?{filter:t}:t;return s?an(e,s):e}}}),groupByLabel(){return this.groupBy?"label":null},groupByOptions(){return this.groupBy?"options":null}},methods:{getOptionKey(t){const[e]=this.activeOptions;return C(e)&&t in e?t:null},processOptions(t){if(t.length){if(this.relate)for(const e of t)"id"in e||Gn(e,"id");if(this.groupBy){const e={};t=t.reduce((s,n)=>{const a=n[this.groupBy];let r=e[a];return r||(r=e[a]={[this.groupByLabel]:a,[this.groupByOptions]:[]},s.push(r)),r.options.push(n),s},[])}}return t},hasOption(t){return!!this.getOptionForValue(this.getValueForOption(t))},getOptionForValue(t){const e=(s,n,a)=>{for(const r of s)if(a){const i=e(r.options,n,null);if(i)return i}else if(n===this.getValueForOption(r))return r};return this.optionValue?e(this.activeOptions,t,this.groupBy):t},getValueForOption(t){const{optionValue:e}=this;return V(e)?t==null?void 0:t[e]:b(e)?e.call(this,new O(this,{option:t})):t},getLabelForOption(t){const{optionLabel:e}=this;return V(e)?t==null?void 0:t[e]:b(e)?e.call(this,new O(this,{option:t})):U(`${t}`)}},processValue(t,e,s,n){var a;if(t.relate){const r=(a=t.options)==null?void 0:a.dataPath,i=r?z(`${s}/${r}`):null;n.addRelation(s,i,t),i&&n.setSourceRelated(i);const o=u=>u&&{id:u.id};e=x(e)?e.map(o):o(e)}return e}},cl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ul",{staticClass:"dito-checkboxes",class:"dito-layout-"+(t.schema.layout||"vertical"),attrs:{id:t.dataPath}},t._l(t.options,function(n){return s("li",[s("label",[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedOptions,expression:"selectedOptions"}],ref:"element",refInFor:!0,staticClass:"dito-checkbox",attrs:{type:"checkbox"},domProps:{value:t.getValueForOption(n),checked:Array.isArray(t.selectedOptions)?t._i(t.selectedOptions,t.getValueForOption(n))>-1:t.selectedOptions},on:{change:function(a){var r=t.selectedOptions,i=a.target,o=!!i.checked;if(Array.isArray(r)){var u=t.getValueForOption(n),l=t._i(r,u);i.checked?l<0&&(t.selectedOptions=r.concat([u])):l>-1&&(t.selectedOptions=r.slice(0,l).concat(r.slice(l+1)))}else t.selectedOptions=o}}},"input",t.attributes,!1),t.listeners)),t._v(t._s(t.getLabelForOption(n)))])])}),0)},dl=[],qd="";const hl=$.register("checkboxes",{mixins:[ut],nativeField:!0,defaultValue:[],computed:{selectedOptions:{get(){return(this.selectedValue||[]).filter(t=>t)},set(t){this.selectedValue=t||[]}}}}),fs={};var pl=p(hl,cl,dl,!1,ml,null,null,null);function ml(t){for(let e in fs)this[e]=fs[e]}var fl=function(){return pl.exports}(),_l=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{ref:"code",staticClass:"dito-code",style:t.style,attrs:{id:t.dataPath}})},vl=[],Md="";const gl=$.register("code",{mixins:[tt],computed:{lines(){return this.schema.lines||3},style(){return`height: calc(${this.lines}em * var(--line-height))`}},mounted(){const t=new bn(this.$refs.code,{language:this.schema.language||"javascript",tabSize:this.schema.indentSize||2,lineNumbers:!1});let e=!1,s=!1,n=!1;const a=()=>{!this.focused&&e&&(e=!1,this.onChange())},r=()=>this.onFocus(),i=()=>{this.onBlur(),a()};this.domOn(this.$refs.code.querySelector("textarea"),{focus:r,blur:i});const o=l=>{l!==t.code&&(n=!0,t.updateCode(l))},u=l=>{l!==this.value&&(s=!0,this.value=l,e=!0,a())};t.onUpdate(l=>{n?n=!1:u(l)}),this.$watch("value",l=>{s?s=!1:o(l||"")}),o(this.value||"")},methods:{focusElement(){var t;(t=this.$el.querySelector("textarea"))==null||t.focus()}}}),_s={};var bl=p(gl,_l,vl,!1,yl,null,null,null);function yl(t){for(let e in _s)this[e]=_s[e]}var $l=function(){return bl.exports}(),Cl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("trigger",{staticClass:"dito-color",attrs:{trigger:"click",show:t.showPopup},on:{"update:show":function(n){t.showPopup=n}}},[s("div",{staticClass:"dito-input",class:{"dito-focus":t.showPopup},attrs:{slot:"trigger"},slot:"trigger"},[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.hexValue,expression:"hexValue"}],ref:"element",attrs:{id:t.dataPath,type:"input",size:"8"},domProps:{value:t.hexValue},on:{input:function(n){n.target.composing||(t.hexValue=n.target.value)}}},"input",t.attributes,!1),t.listeners)),t.value?s("div",{staticClass:"dito-color-preview dito-inherit-focus"},[s("div",{style:{background:"#"+(t.hexValue||"00000000")}})]):t._e(),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{disabled:t.disabled},on:{click:function(n){return n.stopPropagation(),t.clear.apply(null,arguments)}}}):t._e()]),s("sketch-picker",{staticClass:"dito-color-picker",attrs:{slot:"popup","disable-alpha":!t.alpha,"disable-fields":!t.inputs,"preset-colors":t.presets},slot:"popup",model:{value:t.colorValue,callback:function(n){t.colorValue=n},expression:"colorValue"}})],1)},Dl=[],Ad="";const wl=$.register("color",{components:{Trigger:pn,SketchPicker:yn},data(){return{showPopup:!1,convertedHexValue:null}},computed:{colorValue:{get(){return this.value||{}},set(t){const e=this.colorFormat,s={hex:(t==null?void 0:t.a)<1?"hex8":"hex",rgb:"rgba"}[e]||e;s?this.value=t[s]:this.value=$t(t).toString(e),this.onChange()}},hexValue:{get(){if(this.value==null)this.convertedHexValue=null;else if(!this.focused){const t=$t(this.value);t.isValid()&&(this.convertedHexValue=t.toString(t.getAlpha()<1?"hex8":"hex6").slice(1).toUpperCase())}return this.convertedHexValue},set(t){this.convertedHexValue=t}},colorFormat:h("format",{type:String,default:"hex"}),alpha:h("alpha",{type:Boolean,default:!1}),inputs:h("inputs",{type:Boolean,default:!0}),presets:h("presets",{type:Array,default:["#ffffff","#c3c3c3","#7f7f7f","#000000","#880015","#ed1c24","#ff7f27","#fff200","#22b14c","#00a2e8","#3f48cc","#a349a4","#b97a57","#ffaec9","#ffc90e","#00000000"]})},watch:{focused(t){if(!t&&this.convertedHexValue){const e=$t(`#${this.convertedHexValue}`);e!=null&&e.isValid()&&(this.value=e.toString(this.colorFormat),this.onChange())}}}}),vs={};var Pl=p(wl,Cl,Dl,!1,xl,null,null,null);function xl(t){for(let e in vs)this[e]=vs[e]}var Sl=function(){return Pl.exports}(),Ol=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s(t.component,t._b({tag:"component"},"component",t.$props,!1))},El=[];const jl=$.register("component",{defaultValue:()=>{},ignoreMissingValue:t=>!("default"in t)}),gs={};var Vl=p(jl,Ol,El,!1,kl,null,null,null);function kl(t){for(let e in gs)this[e]=gs[e]}var Ll=function(){return Vl.exports}(),Bl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input",{ref:"element",staticClass:"dito-text dito-input",attrs:{id:t.dataPath,name:t.name,type:"text",disabled:t.disabled,readonly:!0},domProps:{value:t.value}})},Fl=[];const Tl=$.register(["computed","data","hidden"],{mixins:[ms],defaultValue:()=>{},defaultVisible:!1,computed:{value:{get(){const{schema:t}=this;if(t.data||t.dataPath){const e=this.handleDataSchema(t,"schema",{resolveCounter:2});this.$set(this.data,this.name,e)}return ot.computed.value.get.call(this)},set(t){ot.computed.value.set.call(this,t)}}}}),bs={};var Rl=p(Tl,Bl,Fl,!1,Il,null,null,null);function Il(t){for(let e in bs)this[e]=bs[e]}var ql=function(){return Rl.exports}(),Ml=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-date"},[s(t.getComponent(t.type),t._g(t._b({ref:"element",tag:"component",attrs:{id:t.dataPath,locale:t.locale,dateFormat:Object.assign({},t.api.formats.date,t.dateFormat)},model:{value:t.dateValue,callback:function(n){t.dateValue=n},expression:"dateValue"}},"component",t.attributes,!1),t.listeners))],1)},Al=[];const Nl=$.register(["date","datetime","time"],{components:{DatePicker:mn,TimePicker:fn,DateTimePicker:_n},nativeField:!0,textField:!0,computed:{dateValue:{get(){const{value:t}=this;return t&&new Date(t)},set(t){this.value=t}},dateFormat:h("dateFormat",{type:Object,default:null})},methods:{getComponent(t){return{date:"date-picker",time:"time-picker",datetime:"date-time-picker"}[t]}},processValue(t,e){return mt(e)?e.toISOString():e}}),ys={};var Ul=p(Nl,Ml,Al,!1,zl,null,null,null);function zl(t){for(let e in ys)this[e]=ys[e]}var Hl=function(){return Ul.exports}(),ct={mixins:[es,Se],defaultValue(t){return Z(t)?[]:null},provide(){return{$sourceComponent:()=>this}},data(){return{wrappedPrimitives:null,unwrappingPrimitives:!1,ignoreRouteChange:!1}},computed:{sourceComponent(){return this},isObjectSource(){return Y(this.type)},isListSource(){return Z(this.type)},hasData(){return!!this.value},isReady(){return this.hasData||!this.providesData},isInView(){return!!this.viewComponent},wrapPrimitives(){return this.schema.wrapPrimitives},listData:{get(){let t=this.value;this.isObjectSource?t=t!=null?[t]:[]:t=this.unwrapListData(t)||t,t=t||[];const{wrapPrimitives:e}=this;return e?(this.unwrappingPrimitives?this.unwrappingPrimitives=!1:this.wrappedPrimitives=t.map(s=>({[e]:s})),this.wrappedPrimitives):t},set(t){this.wrapPrimitives?this.wrappedPrimitives=t:this.value=this.isObjectSource?t&&t.length>0?t[0]:null:t}},objectData:{get(){return this.listData[0]||null},set(t){this.listData=t?[t]:[]}},sourceSchema(){return this.schema},path(){return this.routeComponent.getChildPath(this.schema.path)},defaultQuery(){const{defaultOrder:t}=this;return t?{order:t}:{}},query:Vt("query",{get(t){return d(d({},this.defaultQuery),t)},set(t){var n;const{scope:e=(n=this.defaultScope)==null?void 0:n.name,page:s=this.schema.page}=this.query;return t=d(d(d(d({},this.query),e!=null&&{scope:e}),s!=null&&{page:s}),t),_t(t,this.$route.query)||(this.ignoreRouteChange=!0,this.$router.replace({query:t,hash:this.$route.hash})),t}}),total:Vt("total"),columns(){return K(this.schema.columns)},scopes(){return K(this.schema.scopes)},defaultScope(){if(this.scopes){let t=null;for(const e of Object.values(this.scopes)){if(e.defaultScope)return e;t||(t=e)}return t}},defaultOrder(){if(this.columns)for(const t of Object.values(this.columns)){const{defaultSort:e}=t;if(e){const s=V(e)?e:"asc";return`${t.name} ${s}`}}},nestedMeta(){return S(d({},this.meta),{schema:this.schema})},forms(){return Object.values(X(this.schema,this.context))},view(){return Tt(this.schema,this.context)},linksToView(){return!!this.view},buttonSchemas(){return it(this.schema.buttons)},hasLabels(){return this.forms.some(Ta)},isCompact(){return this.forms.every(me)},isInlined(){return It(this.schema)},paginate:h("paginate",{type:Number}),render:h("render",{type:Function,default:null}),creatable:h("creatable",{type:Boolean,default:!1,get(t){return t&&H(this.schema)?this.isObjectSource?!this.value:!0:!1}}),editable:h("editable",{type:Boolean,default:!1,get(t){return t&&!this.isInlined}}),deletable:h("deletable",{type:Boolean,default:!1}),draggable:h("draggable",{type:Boolean,default:!1,get(t){return this.isListSource&&this.listData.length>1&&t}}),collapsible:h("collapsible",{type:Boolean,default:null,get(t){return this.isInlined&&!!(t!=null?t:this.collapsed!==null)}}),collapsed:h("collapsed",{type:Boolean,default:null})},watch:{$route(t,e){if(this.ignoreRouteChange){this.ignoreRouteChange=!1;return}e.path===t.path&&e.hash===t.hash&&(this.query=t.query,this.loadData(!1))},wrappedPrimitives:{deep:!0,handler(t,e){const{wrapPrimitives:s}=this;s&&e!==null&&(this.unwrappingPrimitives=!0,this.value=t.map(n=>n[s]))}}},methods:{setupData(){this.query=this.$route.query,this.ensureData()},clearData(){this.total=0,this.value=null},setData(t){!t||this.isListSource&&x(t)||this.isObjectSource&&C(t)?this.value=t:this.unwrapListData(t)||C(t)&&this.isInView&&this.viewComponent.setData(t)},unwrapListData(t){if(this.isListSource&&C(t)&&st(t.total)&&x(t.results))return this.total=t.total,this.value=t.results,this.value},createItem(t,e){const s=this.createData(t,e);return this.isObjectSource?this.objectData=s:this.listData.push(s),this.collapsible&&this.$nextTick(()=>this.openSchemaComponent(-1)),this.onChange(),s},removeItem(t){if(this.isObjectSource)this.objectData=null,this.onChange();else{const{listData:e}=this,s=e&&e.indexOf(t);s>=0&&(e.splice(s,1),this.onChange())}},deleteItem(t,e){const s=t&&this.getItemLabel(this.schema,t,{index:e,extended:!0}),n=()=>this.notify({type:this.isTransient?"info":"success",title:"Successfully Removed",text:[`${s} was ${this.verbs.deleted}.`,this.transientNote]});if(t&&window.confirm(`Do you really want to ${this.verbs.delete} ${s}?`))if(this.isTransient)this.removeItem(t),n();else{const a=this.getItemId(this.schema,t),r=Et(a,this.resource);r&&this.handleRequest({method:"delete",resource:r},i=>{i||(this.removeItem(t),n()),this.reloadData()})}},getSchemaComponent(t){const{schemaComponents:e}=this,{length:s}=e;return e[(t%s+s)%s]},openSchemaComponent(t){const e=this.getSchemaComponent(t);e&&(e.opened=!0)},async navigateToComponent(t,e){var s,n;if(this.collapsible){const a=t.startsWith(this.dataPath)?this.isListSource?(s=N(t.slice(this.dataPath.length+1))[0])!=null?s:null:0:null;if(a!==null&&st(+a)){const r=this.getSchemaComponent(+a);if(r){const{opened:i}=r;i||(r.opened=!0,await this.$nextTick());const o=r.getComponentsByDataPath(t);if(o.length>0&&((n=e==null?void 0:e(o))!=null?n:!0))return!0;r.opened=i}}}return this.navigateToRouteComponent(t,e)},navigateToRouteComponent(t,e){return new Promise((s,n)=>{const a=()=>{var u;const{routeComponents:i}=this.appState,o=i[i.length-1];s((u=e==null?void 0:e([o]))!=null?u:!0)},r=N(t);for(;r.length>0;){const i=this.routeComponent.getChildPath(this.api.normalizePath(z(r))),{matched:o}=this.$router.match(i);o.length&&(this.$route.path===i?a():this.$router.push({path:i},()=>{this.$nextTick(a)},n)),r.pop()}s(!1)})}},async processSchema(t,e,s,n,a,r=!1,i=!1,o=null){ce(t,e,s);const u=It(e);if(u&&e.resource)throw new Error("Lists with nested forms cannot load data from their own resources");const l=`id${a+1}`,c={api:t,schema:e},_=S(d({},c),{flatten:i,nested:r,param:l}),f=await Va(t,e,a);if(o&&await o(f,a+1),H(e)&&!u){const y=(g,E)=>E?g?`${g}/:${E}`:`:${E}`:g,m=a===0?"":e.path,w={path:y(m,Z(e)&&l),component:v.component(r?"dito-form-nested":"dito-form"),meta:_};Y(e)&&n.push(S(d({},w),{path:y(m,l)})),m&&n.push({path:m,redirect:".",meta:c});const[j,P]=f.reduce((g,E)=>(g[E.meta.flatten?0:1].push(E),g),[[],[]]);if(P.length&&(w.children=P),n.push(w),j.length)for(const g of j)n.push(S(d({},g.redirect?g:w),{path:`${w.path}/${g.path}`,meta:S(d({},g.meta),{flatten:i})}))}},processValue(t,e,s,n){return n.addSource(s,t),e}};const Nt={text(t){const e=[{label:"contains",value:"contains"},{label:"equals",value:"equals"},{label:"starts with",value:"starts-with"},{label:"ends with",value:"ends-with"}];return{operator:t.operators?{type:"select",options:x(t.operators)?e.filter(s=>t.operators.includes(s.value)):e,width:"40%"}:null,text:{type:"text",width:t.operators?"60%":"fill"}}},"date-range"(){const t={day:"2-digit",month:"2-digit",year:"numeric"};return{from:{type:"datetime",width:"50%",dateFormat:t},to:{type:"datetime",width:"50%",dateFormat:t}}}};function Kl(t,e,s){const n={label:"Filters",name:"$filters",target:e,disabled:!1,data(){return Ql(n,s.query)},components:Wl(t),buttons:{clear:{text:"Clear",events:{click({schemaComponent:a}){a.resetData(),a.applyFilters()}}},filter:{type:"submit",text:"Filter",events:{click({schemaComponent:a}){a.applyFilters()}}}},methods:{applyFilters(){s.query=S(d({},s.query),{filter:Jl(this.schema,this.data),page:void 0})}}};return n}function Wl(t){var n;const e={};for(const a of Object.values(t||{})){const s=a,{filter:r}=s,i=F(s,["filter"]),o=r?(n=Nt[r])==null?void 0:n.call(Nt,a):a.components;if(o){i.components={};for(const[u,l]of Object.entries(o))if(l){const c=l.label||U(l.name||u);i.components[u]=S(d({},l),{label:!1,placeholder:c})}e[a.name]={label:i.label,type:"object",default:()=>({}),form:i,inlined:!0}}else throw new Error(`Invalid filter '${a.name}': Unknown filter type '${r}'.`)}return e}function $s(t,e){var n;const s=t.components[e];return(n=s==null?void 0:s.form)==null?void 0:n.components}function Jl(t,e){const s=[];for(const n in e){const a=e[n];if(a){const r=Object.keys($s(t,n)).map(i=>{var o;return(o=a[i])!=null?o:null});r.some(i=>i!==null)&&s.push(`${n}:${r.map(JSON.stringify).join(",")}`)}}return s.length?s:void 0}function Ql(t,e){const s={};if(e)for(const a of T(e.filter)){const[,r,i]=a.match(/^(\w+):(.*)$/);try{s[r]=T(JSON.parse(`[${i}]`))}catch{}}const n={};for(const a in t.components){const r={},i=s[a];if(i){const o=$s(t,a);if(o){let u=0;for(const l in o)r[l]=i[u++]}}n[a]=r}return n}var Gl=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isReady?s("div",{staticClass:"dito-list",class:t.schema.class,style:t.schema.style,attrs:{id:t.dataPath}},[s("div",{staticClass:"dito-navigation"},[t.scopes?s("dito-scopes",{attrs:{query:t.query,scopes:t.scopes}}):t.paginate?s("div",{staticClass:"dito-spacer"}):t._e(),t.paginate?s("dito-pagination",{attrs:{query:t.query,limit:t.paginate,total:t.total||0}}):t._e()],1),s("table",{staticClass:"dito-table",class:{"dito-table-separators":t.isInlined,"dito-table-larger-padding":t.hasEditButtons&&!t.isInlined,"dito-table-alternate-colors":!t.isInlined,"dito-table-even-count":t.hasEvenCount}},[t.columns?s("dito-table-head",{attrs:{query:t.query,columns:t.columns,hasEditButtons:t.hasEditButtons}}):t._e(),s("vue-draggable",t._b({attrs:{tag:"tbody",list:t.updateOrder(t.sourceSchema,t.listData,t.paginationRange)},on:{start:t.onStartDrag,end:t.onEndDrag}},"vue-draggable",t.getDragOptions(t.draggable),!1),t._l(t.listData,function(n,a){return s("tr",{key:t.getItemUid(t.schema,n),attrs:{id:t.getDataPath(a)}},[t.columns?t._l(t.columns,function(r){return t.shouldRender(r)?s("dito-table-cell",{key:r.name,class:t.getCellClass(r),attrs:{cell:r,schema:t.schema,dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.store,nested:!1,disabled:t.disabled||t.isLoading}}):t._e()}):[s("td",[t.isInlined?s("dito-schema-inlined",{attrs:{label:t.getItemLabel(t.schema,n,{index:a,asObject:!0}),schema:t.getItemFormSchema(t.schema,n,t.context),dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.getChildStore(a),disabled:t.disabled||t.isLoading,collapsed:t.collapsed,collapsible:t.collapsible,deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.getEditPath(n,a)},on:{delete:function(r){return t.deleteItem(n,a)}}}):t.component?s(t.component,{tag:"component",attrs:{dataPath:t.getDataPath(a),data:n,nested:!1}}):t.render?s("span",{domProps:{innerHTML:t._s(t.render(t.getContext(n,a)))}}):s("span",{domProps:{innerHTML:t._s(t.getItemLabel(t.schema,n,{index:a}))}})],1)],t.hasCellEditButtons?s("td",{staticClass:"dito-cell-edit-buttons"},[s("dito-edit-buttons",{attrs:{deletable:t.deletable,draggable:t.draggable,editable:t.editable,editPath:t.getEditPath(n,a),schema:t.getItemFormSchema(t.schema,n,t.context),dataPath:t.getDataPath(a),data:n,meta:t.nestedMeta,store:t.getChildStore(a)},on:{delete:function(r){return t.deleteItem(n,a)}}})],1):t._e()],2)}),0),t.hasListButtons&&!t.single?s("tfoot",[s("tr",[s("td",{staticClass:"dito-cell-edit-buttons",attrs:{colspan:t.numColumns}},[s("dito-edit-buttons",{attrs:{creatable:t.creatable,createPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.listData,meta:t.meta,store:t.store}})],1)])]):t._e()],1),t.hasListButtons&&t.single?s("dito-edit-buttons",{staticClass:"dito-buttons-main dito-buttons-large",attrs:{creatable:t.creatable,createPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.listData,meta:t.meta,store:t.store}}):t._e()],1):t._e()},Xl=[],Nd="";const Yl=$.register("list",{components:{VueDraggable:yt},mixins:[ct,At],getSourceType(t){return t},getPanelSchema(t,e,s){const{filters:n}=t;if(n){const a=()=>s.getComponentByDataPath(e,r=>r.type==="list");return Kl(K(n),e,{get query(){var r;return(r=a())==null?void 0:r.query},set query(r){const i=a();if(i){const o=u=>Jt(u,l=>l!==void 0);_t(o(r),o(i.query))||(i.query=r,i.loadData(!1))}}})}},computed:{hasListButtons(){return!!(this.buttonSchemas||this.creatable)},hasEditButtons(){const{listData:t}=this;return t.length>0&&(this.editable||this.deletable||this.draggable)},hasCellEditButtons(){return!this.isInlined&&this.hasEditButtons},hasEvenCount(){return!(this.listData.length%2)},numColumns(){return(this.columns?Object.keys(this.columns).length:1)+(this.hasCellEditButtons?1:0)}},methods:{getDataPath(t){return B(this.dataPath,t)},getEditPath(t,e){if(this.editable){const s=La(this.schema,this.context)||this.path,n=this.getItemId(this.schema,t,e);return`${s}/${n}`}return null},getCellClass(t){return`dito-cell-${Q(t.name)}`},getContext(t,e){return new O(this,{data:t,value:t,index:e,dataPath:this.getDataPath(e)})},onFilterErrors(t){const e=B(this.dataPath,"$filters"),s=this.schemaComponent.getPanelByDataPath(e);if(s)return s.showValidationErrors(t,!0),!0}}}),Cs={};var Zl=p(Yl,Gl,Xl,!1,tu,null,null,null);function tu(t){for(let e in Cs)this[e]=Cs[e]}var eu=function(){return Zl.exports}(),su=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("dito-label",{staticClass:"dito-label-component",attrs:{label:t.value,dataPath:t.dataPath}})},nu=[],Ud="";const au=$.register("label",{generateLabel:!1}),Ds={};var ru=p(au,su,nu,!1,iu,null,null,null);function iu(t){for(let e in Ds)this[e]=Ds[e]}var ou=function(){return ru.exports}(),lu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-markup",attrs:{id:t.dataPath}},[s("editor-menu-bar",{staticClass:"dito-markup-toolbar",attrs:{editor:t.editor}},[t.groupedButtons.length>0?s("div",{staticClass:"dito-buttons dito-buttons-toolbar"},t._l(t.groupedButtons,function(n){return s("div",{staticClass:"dito-button-group"},t._l(n,function(a){a.name;var r=a.icon,i=a.isActive,o=a.onClick;return s("button",{staticClass:"dito-button",class:{"dito-active":i},on:{click:o}},[s("icon",{attrs:{name:r}})],1)}),0)}),0):t._e()]),s("editor-content",{ref:"editor",staticClass:"dito-markup-editor",style:t.styles,attrs:{editor:t.editor}}),t.resizable?s("div",{staticClass:"dito-resize",on:{mousedown:function(n){return n.stopPropagation(),n.preventDefault(),t.onDragResize.apply(null,arguments)}}}):t._e()],1)},uu=[],zd="";const cu=$.register("markup",{components:{EditorContent:$n,EditorMenuBar:Cn,Icon:vn},mixins:[tt],data(){return{editor:null,height:null}},computed:{lines(){return this.schema.lines||10},styles(){return{height:this.height||`calc(${this.lines}em * var(--line-height))`}},markButtons(){return this.getButtons("marks",{bold:!0,italic:!0,underline:!0,strike:!0,small:!0,code:!0,link:{onClick:t=>this.onClickLink(t)}})},basicNodeButtons(){return this.getButtons("nodes",{paragraph:{ignoreActive:()=>this.otherNodeButtons.some(t=>t.isActive)},heading:{attr:"level",values:[1,2,3,4,5,6]}})},otherNodeButtons(){return this.getButtons("nodes",{bulletList:!0,orderedList:!0,blockquote:!0,codeBlock:!0})},toolButtons(){return this.getButtons("tools",{undo:!0,redo:!0})},groupedButtons(){const{markButtons:t,basicNodeButtons:e,otherNodeButtons:s,toolButtons:n}=this;return[t,e,s,n].filter(a=>a.length>0)},parseOptions(){return{preserveWhitespace:{collapse:!1,preserve:!0,"preserve-all":"full"}[this.whitespace]}},editorOptions(){return{editable:!this.readyonly,autoFocus:this.autofocus,disableInputRules:!this.enableRules.input,disablePasteRules:!this.enableRules.paste,parseOptions:this.parseOptions}},resizable:h("resizable",{type:Boolean,default:!1}),whitespace:h("whitespace",{type:String,default:"collapse"}),enableRules:h("enableRules",{type:[Object,Boolean],default:!1,get(t){return C(t)?t:{input:!!t,paste:!!t}}})},watch:{readyonly:"updateEditorOptions",autofocus:"updateEditorOptions",enableRules:"updateEditorOptions"},created(){let t=!1,e=!1;const s=()=>{!this.focused&&t&&(t=!1,this.onChange())},n=()=>this.onFocus(),a=()=>{this.onBlur(),s()},r=rn(o=>{e=!0,this.value=o(),t=!0,s()},100),i=({getHTML:o})=>{r(o),this.onInput()};this.$watch("value",o=>{e?e=!1:this.editor.setContent(o,!1,this.parseOptions)}),this.editor=new Dn(S(d({},this.editorOptions),{onFocus:n,onBlur:a,onUpdate:i,extensions:this.createExtensions(),content:this.value||""}))},beforeDestroy(){this.editor.destroy()},methods:{onDragResize(t){const e=({clientX:i,clientY:o})=>({x:i,y:o});let s=e(t).y,n=parseFloat(getComputedStyle(this.$refs.editor.$el).height);const a=i=>{const{y:o}=e(i);n+=o-s,s=o,this.height=`${Math.max(n,0)}px`},r=this.domOn(document,{mousemove:a,mouseup(i){a(i),r.remove()}})},updateEditorOptions(){this.editor.setOptions(this.editorOptions)},async onClickLink(t){const e=await this.showDialog({components:{href:{type:"url",label:"Link",autofocus:!0},title:{type:"text",label:"Title"}},buttons:{cancel:{},apply:{type:"submit"},remove:{events:{click({dialogComponent:s}){s.resolve({href:null,title:null})}}}},data:this.editor.getMarkAttrs("link")});if(e){let{href:s,title:n}=e;if(s)try{new URL(s)}catch{s=`http://${s}`}t({href:s,title:n})}},createExtensions(){const{marks:t={},nodes:e={},tools:s={}}=this.schema;return[t.bold&&new xn,t.italic&&new Sn,t.underline&&new On,t.strike&&new En,t.small&&new du,t.code&&new jn,t.link&&new hu,e.blockquote&&new Vn,e.codeBlock&&new kn,new Ln,e.heading&&new Bn({levels:e.heading}),e.horizontalRule&&new Fn,(e.orderedList||e.bulletList)&&new Tn,e.bulletList&&new Rn,e.orderedList&&new In,s.history&&new qn].filter(n=>!!n)},getButtons(t,e){const s=[],n=({name:r,icon:i,attrs:o,ignoreActive:u,onClick:l})=>{const c=this.editor.isActive[r],_=this.editor.commands[r];s.push({name:r,icon:i,isActive:(c==null?void 0:c(o))&&(u==null||!u()),onClick:()=>l?l(_,o):_(o)})},a=this.schema[t];if(a)for(const[r,i]of Object.entries(e)){const o=["undo","redo"].includes(r)?"history":r,u=a[o],l=on(r),c=Q(r);if(u){if(i===!0)n({name:l,icon:c});else if(C(i)){const{attr:_,values:f,ignoreActive:y,onClick:m}=i;if(_){if(x(f)&&x(u))for(const w of f)u.includes(w)&&n({name:l,icon:`${c}-${w}`,attrs:{[_]:w},ignoreActive:y,onClick:m})}else n({name:l,icon:c,ignoreActive:y,onClick:m})}}}return s},focusElement(){var t,e;(e=(t=this.$el).scrollIntoView)==null||e.call(t),this.editor.focus()}}});class du extends wn{get name(){return"small"}get schema(){return{parseDOM:[{tag:"small"}],toDOM:()=>["small",0]}}commands({type:e}){return()=>Pn(e)}}class hu extends Mn{get schema(){return{attrs:{href:{default:null},title:{default:null}},inclusive:!1,parseDOM:[{tag:"a",getAttrs:e=>({href:e.getAttribute("href"),title:e.getAttribute("title")})}],toDOM:e=>["a",e.attrs,0]}}}const ws={};var pu=p(cu,lu,uu,!1,mu,null,null,null);function mu(t){for(let e in ws)this[e]=ws[e]}var fu=function(){return pu.exports}(),Hd="",_u=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-multiselect",class:{"dito-multiselect-single":!t.multiple,"dito-multiselect-multiple":t.multiple}},[s("vue-multiselect",t._g(t._b({ref:"element",attrs:{"show-labels":!1,placeholder:t.placeholder,"tag-placeholder":"Press enter to add new tag",options:t.populate&&t.activeOptions||[],"custom-label":t.getLabelForOption,"track-by":t.optionValue,"group-label":t.groupByLabel,"group-values":t.groupByOptions,multiple:t.multiple,taggable:t.taggable,searchable:t.searchable,"internal-search":!t.searchFilter,"preserve-search":!!t.searchFilter,"clear-on-select":!t.searchFilter,"close-on-select":!t.stayOpen,loading:t.isLoading},on:{open:function(n){t.populate=!0},tag:t.onAddTag,"search-change":t.onSearchChange},model:{value:t.selectedOptions,callback:function(n){t.selectedOptions=n},expression:"selectedOptions"}},"vue-multiselect",t.attributes,!1),t.listeners)),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{type:"button",disabled:t.disabled},on:{click:t.clear}}):t._e()],1)},vu=[],Kd="";const gu=$.register("multiselect",{components:{VueMultiselect:An},mixins:[ut],data(){return{searchedOptions:null,populate:!1}},computed:{selectedOptions:{get(){return this.multiple?(this.selectedValue||[]).map(t=>this.getOptionForValue(t)||this.addTagOption(t)).filter(t=>t):this.selectedOption},set(t){this.selectedValue=this.multiple?(t||[]).map(e=>this.getValueForOption(e)):this.getValueForOption(t)}},activeOptions(){return this.searchedOptions||this.options},multiple:h("multiple",{type:Boolean,default:!1}),searchable:h("searchable",{type:Boolean,default:!1}),taggable:h("taggable",{type:Boolean,default:!1}),stayOpen:h("stayOpen",{type:Boolean,default:!1}),placeholder(){const{placeholder:t,searchable:e,taggable:s}=this.schema;return t||(e&&s?"Search or add a tag":e?"Select or search entry":void 0)}},mounted(){this.autofocus&&this.focus()},methods:{getListeners(){return{focus:this.onFocus,blur:this.onBlur,input:this.onChange}},addTagOption(t){if(this.taggable){const{optionLabel:e,optionValue:s}=this,n=e&&s?{[e]:t,[s]:t}:t;return this.options.push(n),n}},focusElement(){this.$refs.element.activate()},onAddTag(t){const e=this.addTagOption(t);e&&this.value.push(this.getValueForOption(e))},async onSearchChange(t){this.searchFilter&&(t?(this.searchedOptions=[],this.searchedOptions=await this.resolveData(()=>this.searchFilter(new O(this,{query:t})))):this.searchedOptions=null)}}}),Ps={};var bu=p(gu,_u,vu,!1,yu,null,null,null);function yu(t){for(let e in Ps)this[e]=Ps[e]}var $u=function(){return bu.exports}(),Ut={computed:{inputValue:{get(){return this.value!==null?this.value:""},set(t){this.value=t!==""?this.isInteger?parseInt(t,10):parseFloat(t):null}},isInteger(){return!1},stepValue(){return this.step==null&&!this.isInteger?"any":this.step},decimals:h("decimals",{type:Number}),step:h("step",{type:Number,get(t){return this.isInteger&&t!=null?Math.ceil(t):t}}),min:h("min",{type:Number,get(t){var e;return t=t===void 0?(e=this.getSchemaValue("range",{type:Array}))==null?void 0:e[0]:t,this.isInteger&&t!=null?Math.floor(t):t}}),max:h("max",{type:Number,get(t){var e;return t=t===void 0?(e=this.getSchemaValue("range",{type:Array}))==null?void 0:e[1]:t,this.isInteger&&t!=null?Math.ceil(t):t}}),range:h("range",{type:Array,get(){const{min:t,max:e}=this;return t!=null&&e!=null?[t,e]:void 0},set(t){x(t)&&([this.min,this.max]=t)}})},methods:{getValidations(){const t={},{range:e,min:s,max:n,decimals:a,step:r}=this;if(e?t.range=e:(s!=null&&(t.min=s),n!=null&&(t.max=n)),a!=null)t.decimals=a;else if(r){const i=(`${r}`.split(".")[1]||"").length;i>0?t.decimals=i:t.integer=!0}return this.isInteger&&(t.integer=!0),t}}},Cu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input-field",t._g(t._b({ref:"element",staticClass:"dito-number",attrs:{id:t.dataPath,type:"number",min:t.min,max:t.max,step:t.stepValue},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners))},Du=[],Wd="";const wu=$.register(["number","integer"],{components:{InputField:bt},mixins:[Ut],nativeField:!0,textField:!0,computed:{isInteger(){return this.type==="integer"}}}),xs={};var Pu=p(wu,Cu,Du,!1,xu,null,null,null);function xu(t){for(let e in xs)this[e]=xs[e]}var Su=function(){return Pu.exports}(),Ou=function(){var t=this,e=t.$createElement,s=t._self._c||e;return t.isReady?s("div",{staticClass:"dito-object",class:t.schema.class,style:t.schema.style,attrs:{id:t.dataPath}},[t.objectData?s("div",{staticClass:"dito-object-content"},[t.isInlined?s("dito-schema-inlined",{attrs:{schema:t.getItemFormSchema(t.schema,t.objectData,t.context),dataPath:t.dataPath,data:t.objectData,meta:t.nestedMeta,store:t.store,disabled:t.disabled||t.isLoading,collapsed:t.collapsed,collapsible:t.collapsible}}):t.component?s(t.component,{tag:"component",attrs:{dataPath:t.dataPath,data:t.objectData,nested:!1}}):t.render?s("span",{domProps:{innerHTML:t._s(t.render(t.getContext()))}}):s("span",{domProps:{innerHTML:t._s(t.getItemLabel(t.schema,t.objectData))}})],1):t._e(),s("dito-edit-buttons",{attrs:{creatable:t.creatable,deletable:t.objectData&&t.deletable,editable:t.objectData&&t.editable,createPath:t.path,editPath:t.path,buttons:t.buttonSchemas,schema:t.schema,dataPath:t.dataPath,data:t.objectData,path:t.path,meta:t.meta,store:t.store},on:{delete:function(n){return t.deleteItem(t.objectData)}}})],1):t._e()},Eu=[],Jd="";const ju=$.register("object",{mixins:[ct],getSourceType(t){return t},methods:{getContext(){return new O(this,{data:this.objectData})}}}),Ss={};var Vu=p(ju,Ou,Eu,!1,ku,null,null,null);function ku(t){for(let e in Ss)this[e]=Ss[e]}var Lu=function(){return Vu.exports}();const Bu=$.register("panel",{defaultValue:()=>{},excludeValue:!0,generateLabel:!1,omitPadding:!0,getPanelSchema(t){const n=t,{name:e}=n;return F(n,["name"])}});let Fu,Tu;const Os={};var Ru=p(Bu,Fu,Tu,!1,Iu,null,null,null);function Iu(t){for(let e in Os)this[e]=Os[e]}var qu=function(){return Ru.exports}(),Mu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("progress",t._g(t._b({ref:"element",staticClass:"dito-progress",attrs:{id:t.dataPath,max:t.progressMax},domProps:{value:t.progressValue}},"progress",t.attributes,!1),t.listeners))},Au=[];const Nu=$.register("progress",{mixins:[Ut],computed:{progressValue(){let{value:t,range:e,step:s}=this;return t!==null?(e&&(t-=e[0]),s&&(t=Math.round(t/s)*s)):t="",t},progressMax(){const{range:t}=this;if(t)return t[1]-t[0]}}}),Es={};var Uu=p(Nu,Mu,Au,!1,zu,null,null,null);function zu(t){for(let e in Es)this[e]=Es[e]}var Hu=function(){return Uu.exports}(),Ku=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ul",{staticClass:"dito-radio-buttons",class:"dito-layout-"+(t.schema.layout||"vertical"),attrs:{id:t.dataPath}},t._l(t.options,function(n){return s("li",[s("label",[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedValue,expression:"selectedValue"}],ref:"element",refInFor:!0,staticClass:"dito-radio-button",attrs:{type:"radio"},domProps:{value:t.getValueForOption(n),checked:t._q(t.selectedValue,t.getValueForOption(n))},on:{change:function(a){t.selectedValue=t.getValueForOption(n)}}},"input",t.attributes,!1),t.listeners)),t._v(t._s(t.getLabelForOption(n)))])])}),0)},Wu=[],Qd="";const Ju=$.register("radio",{mixins:[ut],nativeField:!0}),js={};var Qu=p(Ju,Ku,Wu,!1,Gu,null,null,null);function Gu(t){for(let e in js)this[e]=js[e]}var Xu=function(){return Qu.exports}(),Yu=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-section",class:{"dito-section-labelled":!!t.schema.label}},[s("dito-pane",{staticClass:"dito-section-pane",attrs:{schema:t.getItemFormSchema(t.schema,t.item,t.context),dataPath:t.dataPath,data:t.item,meta:t.meta,store:t.store,disabled:t.disabled}})],1)},Zu=[],Gd="";const tc=$.register("section",{defaultValue:()=>{},ignoreMissingValue:t=>!t.nested&&!("default"in t),defaultNested:!1,generateLabel:!1,omitFlexGrow:!0,computed:{item(){return this.nested?this.value:this.data}},methods:{getItemFormSchema:Rt},async processSchema(t,e,s,n,a){await Ft(t,e,n,a)}}),Vs={};var ec=p(tc,Yu,Zu,!1,sc,null,null,null);function sc(t){for(let e in Vs)this[e]=Vs[e]}var nc=function(){return ec.exports}(),ac=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-select"},[s("select",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.selectedValue,expression:"selectedValue"}],ref:"element",attrs:{id:t.dataPath},on:{mousedown:function(n){t.populate=!0},focus:function(n){t.populate=!0},change:function(n){var a=Array.prototype.filter.call(n.target.options,function(r){return r.selected}).map(function(r){var i="_value"in r?r._value:r.value;return i});t.selectedValue=n.target.multiple?a:a[0]}}},"select",t.attributes,!1),t.listeners),[t.populate?[t._l(t.options,function(n){return[t.groupBy?s("optgroup",{attrs:{label:n[t.groupByLabel]}},t._l(n[t.groupByOptions],function(a){return s("option",{domProps:{value:t.getValueForOption(a)}},[t._v(t._s(t.getLabelForOption(a)))])}),0):s("option",{domProps:{value:t.getValueForOption(n)}},[t._v(t._s(t.getLabelForOption(n)))])]})]:t.selectedOption?[s("option",{domProps:{value:t.selectedValue}},[t._v(t._s(t.getLabelForOption(t.selectedOption)))])]:t._e()],2),t.showClearButton?s("button",{staticClass:"dito-button-clear dito-button-overlay",attrs:{disabled:t.disabled},on:{click:t.clear}}):t._e()])},rc=[],Xd="";const ic=$.register("select",{mixins:[ut],nativeField:!0,data(){return{populate:!0}}}),ks={};var oc=p(ic,ac,rc,!1,lc,null,null,null);function lc(t){for(let e in ks)this[e]=ks[e]}var uc=function(){return oc.exports}(),cc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-slider"},[s("input",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.inputValue,expression:"inputValue"}],ref:"element",staticClass:"dito-range",attrs:{id:t.dataPath,type:"range",min:t.min,max:t.max,step:t.stepValue},domProps:{value:t.inputValue},on:{__r:function(n){t.inputValue=n.target.value}}},"input",t.attributes,!1),t.listeners)),t.input?s("input-field",t._g(t._b({staticClass:"dito-number",attrs:{type:"number",min:t.min,max:t.max,step:t.stepValue},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners)):t._e()],1)},dc=[],Yd="";const hc=$.register("slider",{components:{InputField:bt},mixins:[Ut],nativeField:!0,computed:{input:h("input",{type:Boolean,default:!0})}}),Ls={};var pc=p(hc,cc,dc,!1,mc,null,null,null);function mc(t){for(let e in Ls)this[e]=Ls[e]}var fc=function(){return pc.exports}(),_c=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("switch-button",t._g(t._b({ref:"element",staticClass:"dito-switch",attrs:{id:t.dataPath,sync:!0,labels:t.labels},model:{value:t.value,callback:function(n){t.value=n},expression:"value"}},"switch-button",t.attributes,!1),t.listeners))},vc=[],Zd="";const gc=$.register("switch",{defaultValue:!1,defaultWidth:"auto",components:{SwitchButton:gn},computed:{labels(){return this.schema.labels}}}),Bs={};var bc=p(gc,_c,vc,!1,yc,null,null,null);function yc(t){for(let e in Bs)this[e]=Bs[e]}var $c=function(){return bc.exports}(),Cc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("input-field",t._g(t._b({ref:"element",staticClass:"dito-text",attrs:{id:t.dataPath,type:t.inputType},model:{value:t.inputValue,callback:function(n){t.inputValue=n},expression:"inputValue"}},"input-field",t.attributes,!1),t.listeners))},Dc=[];const wc="****************",Pc=$.register(["text","email","url","hostname","domain","tel","password","creditcard"],{components:{InputField:bt},nativeField:!0,textField:!0,ignoreMissingValue:t=>t.type==="password",computed:{inputType(){return{creditcard:"text",hostname:"text",domain:"text"}[this.type]||this.type},inputValue:{get(){return this.type==="password"&&this.value===void 0&&!this.focused?wc:this.value},set(t){this.value=t}}},methods:{getValidations(){const t={email:"email",url:"url",hostname:"hostname",domain:"domain",password:"password",creditcard:"creditcard"}[this.type];return t?{[t]:!0}:{}}}}),Fs={};var xc=p(Pc,Cc,Dc,!1,Sc,null,null,null);function Sc(t){for(let e in Fs)this[e]=Fs[e]}var Oc=function(){return xc.exports}(),Ec=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("textarea",t._g(t._b({directives:[{name:"model",rawName:"v-model",value:t.value,expression:"value"}],ref:"element",staticClass:"dito-textarea dito-input",class:{"dito-resizable":t.resizable},attrs:{id:t.dataPath,rows:t.lines},domProps:{value:t.value},on:{input:function(n){n.target.composing||(t.value=n.target.value)}}},"textarea",t.attributes,!1),t.listeners))},jc=[],th="";const Vc=$.register("textarea",{nativeField:!0,textField:!0,computed:{lines(){return this.schema.lines||4},resizable:h("resizable",{type:Boolean,default:!1})}}),Ts={};var kc=p(Vc,Ec,jc,!1,Lc,null,null,null);function Lc(t){for(let e in Ts)this[e]=Ts[e]}var Bc=function(){return kc.exports}(),Fc=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-tree-list"},[t.scopes?s("dito-scopes",{attrs:{query:t.query,scopes:t.scopes}}):t._e(),s("div",{staticClass:"dito-tree-panel"},[s("dito-tree-item",{attrs:{schema:t.treeSchema,dataPath:t.treeDataPath,data:t.treeData,draggable:t.draggable,open:!0}}),t.hasEditableForms?s("div",{staticClass:"dito-tree-form-container"},[s("router-view")],1):t._e()],1)],1)},Tc=[],eh="";const Rc=$.register(["tree-list","tree-object"],{mixins:[ct],provide(){return{container:this}},getSourceType(t){return t==="tree-object"?"object":"list"},computed:{path(){var t;return(t=this.formComponent)==null?void 0:t.path},editPath(){var t;return this.$route.path.slice((t=this.path)==null?void 0:t.length)},treeData(){return this.isListSource?{[this.name]:this.value}:this.value},treeDataPath(){return this.isListSource?this.dataPath.slice(0,this.dataPath.length-this.name.length):this.dataPath},treeSchema(){return this.isListSource?{children:d({name:this.name},this.schema)}:this.schema},hasEditableForms(){const t=e=>H(e)&&(this.getSchemaValue("editable",{type:Boolean,default:!1,schema:e})||e.children&&t(e.children));return t(this.schema)}},async processSchema(t,e,s,n,a,r=!0,i=!1,o=null){return ct.processSchema(t,e,s,n,a,r,i,(u,l)=>{const{children:c}=e;if(c)return c.type="tree-list",this.processSchema(t,c,c.name,u,l,r,!0,o)})},getFormSchemasForProcessing(t,e){const{children:s}=t;return X(t,e,s?n=>S(d({},n),{components:S(d({},n.components),{[s.name]:s})}):null)}}),Rs={};var Ic=p(Rc,Fc,Tc,!1,qc,null,null,null);function qc(t){for(let e in Rs)this[e]=Rs[e]}var Mc=function(){return Ic.exports}();function Is(t){return zn(t,{base:10})}var Ac=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-upload"},[s("table",{staticClass:"dito-table dito-table-separators dito-table-background"},[t._m(0),s("vue-draggable",t._b({attrs:{tag:"tbody",list:t.files},on:{start:t.onStartDrag,end:t.onEndDrag}},"vue-draggable",t.getDragOptions(t.draggable),!1),t._l(t.files,function(n,a){return s("tr",{key:n.key},[s("td",{domProps:{innerHTML:t._s(t.renderFile(n,a))}}),s("td",[t._v(t._s(t._f("formatFileSize")(n.size)))]),s("td",[n.upload?[n.upload.error?[t._v("Error: "+t._s(n.upload.error))]:n.upload.active?[t._v("Uploading...")]:n.upload.success?[t._v("Uploaded")]:t._e()]:[t._v("Stored")]],2),s("td",{staticClass:"dito-cell-edit-buttons"},[s("div",{staticClass:"dito-buttons dito-buttons-round"},[t.draggable?s("a",t._b({staticClass:"dito-button"},"a",t.getButtonAttributes(t.verbs.drag),!1)):t._e(),t.deletable?s("button",t._b({staticClass:"dito-button",attrs:{type:"button"},on:{click:function(r){return t.deleteFile(n,a)}}},"button",t.getButtonAttributes(t.verbs.delete),!1)):t._e()])])])}),0),s("tfoot",[s("tr",[s("td",{attrs:{colspan:4}},[s("div",{staticClass:"dito-upload-footer"},[t.isUploadActive?s("progress",{staticClass:"dito-progress",attrs:{max:"100"},domProps:{value:t.uploadProgress}}):t._e(),s("div",{staticClass:"dito-buttons dito-buttons-round"},[t.isUploadActive?s("button",{staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){n.preventDefault(),t.upload.active=!1}}},[t._v("Cancel All")]):t.isUploadReady?s("button",{staticClass:"dito-button",attrs:{type:"button"},on:{click:function(n){n.preventDefault(),t.upload.active=!0}}},[t._v("Upload All")]):t._e(),s("vue-upload",{ref:"upload",staticClass:"dito-button dito-button-add-upload",attrs:{"input-id":t.dataPath,name:t.dataPath,disabled:t.disabled,"post-action":t.uploadPath,extensions:t.extensions,accept:t.accept,multiple:t.multiple,size:t.maxSize,title:"Upload Files"},on:{"input-filter":t.inputFilter,"input-file":t.inputFile},model:{value:t.uploads,callback:function(n){t.uploads=n},expression:"uploads"}})],1)])])])])],1)])},Nc=[function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("thead",{staticClass:"dito-table-head"},[s("tr",[s("th",[s("span",[t._v("Name")])]),s("th",[s("span",[t._v("Size")])]),s("th",[s("span",[t._v("Status")])]),s("th",[s("span")])])])}],sh="";const Uc=$.register("upload",{components:{VueUpload:Nn,VueDraggable:yt},filters:{formatFileSize:Is},mixins:[At],data(){return{uploads:[]}},computed:{upload(){return this.$refs.upload},files(){return qs(this.value)},multiple:h("multiple",{type:Boolean,default:!1,callback:!1}),extensions:h("extensions",{type:[Array,String,RegExp]}),accept:h("accept",{type:Array,get(t){return x(t)?t.join(","):t}}),maxSize:h("maxSize",{type:[String,Number],get(t){return t?Un(t):void 0}}),draggable:h("draggable",{type:Boolean,default:!1,get(t){return t&&this.files.length>1}}),deletable:h("deletable",{type:Boolean,default:!1}),isUploadReady(){return this.uploads.length&&!(this.upload.active||this.upload.uploaded)},isUploadActive(){return this.uploads.length&&this.upload.active},uploadProgress(){return this.uploads.reduce((t,e)=>t+e.progress,0)/this.uploads.length},uploadPath(){return this.getResourceUrl({type:"upload",path:this.api.normalizePath(this.dataPath)})}},methods:{renderFile(t,e){const{render:s}=this.schema;return s?s.call(this,new O(this,{value:t,data:this.files,index:e,dataPath:B(this.dataPath,e)})):Gt(t.name)},deleteFile(t,e){const{name:s}=t;t&&window.confirm(`Do you really want to ${this.verbs.remove} ${s}?`)&&(this.multiple?this.value.splice(e,1):this.value=null,t.upload&&this.upload.remove(t.upload),this.onChange(),this.notify({type:"info",title:"Successfully Removed",text:`${s} was ${this.verbs.deleted}.`}))},getFileIndex(t){return this.multiple&&this.value?this.value.findIndex(e=>e.id===t.id):-1},addFile(t){this.multiple?this.value?this.value.push(t):this.value=[t]:this.value=t},replaceFile(t,e){if(this.multiple){const s=this.getFileIndex(t);s>=0&&(e?this.$set(this.value,s,e):this.value.splice(s,1))}else this.value=e},removeFile(t){this.replaceFile(t,null)},inputFile(t,e){if(t&&!e){const{id:s,name:n,size:a}=t;this.addFile({id:s,name:n,size:a,upload:t})}if(t&&e){const{success:s,error:n}=t;if(s){this.onChange();const a=t.response[0];a?(a.upload=t,this.replaceFile(t,a)):this.removeFile(t)}else if(n){const a={abort:"Upload aborted",denied:"Upload denied",extension:`Unsupported file-type: ${t.name}`,network:"Network error encountered during upload",server:"Server error occurred during upload",size:`File is too large: ${Is(t.size)}`,timeout:"Timeout occurred during upload"}[n]||`Unknown File Upload Error: '${n}'`;this.notify({type:"error",title:"File Upload Error",text:a}),this.removeFile(t)}}},inputFilter(t){var s;const e=t==null?void 0:t.xhr;((s=this.api.cors)==null?void 0:s.credentials)&&e&&!e.withCredentials&&(e.withCredentials=!0)}},processValue(t,e){const s=qs(e).map(r=>{var i=r,{upload:n}=i,a=F(i,["upload"]);return!n||n.success?a:null}).filter(n=>n);return t.multiple?s:s[0]||null}});function qs(t){return t?T(t):[]}const Ms={};var zc=p(Uc,Ac,Nc,!1,Hc,null,null,null);function Hc(t){for(let e in Ms)this[e]=Ms[e]}var Kc=function(){return zc.exports}(),Wc=Object.freeze(Object.defineProperty({__proto__:null,TypeButton:nl,TypeCheckbox:ul,TypeCheckboxes:fl,TypeCode:$l,TypeColor:Sl,TypeComponent:Ll,TypeComputed:ql,TypeDate:Hl,TypeList:eu,TypeLabel:ou,TypeMarkup:fu,TypeMultiselect:$u,TypeNumber:Su,TypeObject:Lu,TypePanel:qu,TypeProgress:Hu,TypeRadio:Xu,TypeSection:nc,TypeSelect:uc,TypeSlider:fc,TypeSwitch:$c,TypeText:Oc,TypeTextarea:Bc,TypeTreeList:Mc,TypeUpload:Kc},Symbol.toStringTag,{value:"Module"})),Jc=["create","created","save","saved","submit","submitted","delete","deleted","edit","edited","close","closed","cancel","cancelled","drag","dragged"].reduce((t,e)=>(t[e]=e,t),{});A.config.productionTip=!1,A.use(Kt),A.use(zs,{dynamic:!0}),A.use(Hs);class Qc{constructor(e,i={}){var o=i,{dito:s={},api:n,views:a={}}=o,r=F(o,["dito","api","views"]);this.el=e,this.api=n=gt({base:"/"},s.api,n),this.options=r,n.locale||(n.locale="en-US"),n.formats=gt({},ln,n.formats),n.request||(n.request=l=>this.request(l)),n.normalizePath=n.normalizePath||n.normalizePaths?Q:l=>l,n.denormalizePath=n.denormalizePath||n.normalizePaths?Qt:l=>l;const u=n.users=I(n.users,{type:"collection"})||{};u.login=I(u.login||"login",{method:"post",parent:u}),u.logout=I(u.logout||"logout",{method:"post",parent:u}),u.session=I(u.session||"session",{method:"get",parent:u}),n.resources=d({any(l){const c=this[l==null?void 0:l.type]||this.default;return l&&c.call(this,l)},default(l){const c=this.any(l.parent);return c?`${c}/${l.path}`:l.path},collection(l){return this.default(l)},member(l){return`${l.path}/${l.id}`},upload(l){return`${this.collection(l.parent)}/upload/${l.path}`}},n.resources),n.headers=d({"Content-Type":"application/json"},n.headers),n.isApiRequest=n.isApiRequest||function(l){return!un(l)||l.startsWith(n.url)},V(e)&&(e=document.querySelector(e)),this.root=new A({el:e,router:new Kt({mode:"history",base:s.base,linkActiveClass:"",linkExactActiveClass:""}),components:{DitoRoot:qt},provide:{api:n,$verbs:()=>Jc,$views:()=>{},$isPopulated:()=>!0,$schemaComponent:()=>null,$schemaParentComponent:()=>null,$routeComponent:()=>null,$dataComponent:()=>null,$sourceComponent:()=>null,$resourceComponent:()=>null,$dialogComponent:()=>null,$panelComponent:()=>null,$tabComponent:()=>null},render:l=>l(qt,{attrs:{id:e.id},props:{unresolvedViews:a,options:r},components:d(d({},Xo),Wc)})})}register(e,s){return $.register(e,s)}request({url:e,method:s="get",data:n=null,params:a=null,headers:r=null}){var o;const i=this.api.isApiRequest(e);return Ks.request(S(d({url:e,method:s,params:a},n&&{data:n}),{baseURL:i?this.api.url:null,headers:d(d({},i&&this.api.headers),r),withCredentials:i&&!!((o=this.api.cors)!=null&&o.credentials)}))}}export{Qc as default};
6
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL3V0aWxzL2RlcHJlY2F0ZS5qcyIsIi4uL3NyYy9taXhpbnMvRGl0b01peGluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19jcmVkaXRjYXJkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kZWNpbWFscy5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZW1haWwuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2hvc3RuYW1lLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kb21haW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2ludGVnZXIuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21heC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19wYXNzd29yZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmFuZ2UuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JlcXVpcmVkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL191cmwuanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRpb25NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9hY2Nlc3Nvci5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvc2NoZW1hLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvRGl0b0NvbXBvbmVudC5qcyIsIi4uL3NyYy9EaXRvVXNlci5qcyIsIi4uL3NyYy9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzIiwiLi4vc3JjL21peGlucy9Sb3V0ZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWUiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSGVhZGVyLnZ1ZSIsIi4uL3NyYy9taXhpbnMvUHVsbGRvd25NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9BY2NvdW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlIiwiLi4vc3JjL3V0aWxzL21hdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NyZWF0ZUJ1dHRvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY29wZXMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvbWl4aW5zL09yZGVyZWRNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlSGVhZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlQ2VsbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVk5vZGUudnVlIiwiLi4vc3JjL1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRGF0YU1peGluLmpzIiwiLi4vc3JjL21peGlucy9PcHRpb25zTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbG9yLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvZmlsdGVyLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxhYmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTWFya3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTXVsdGlzZWxlY3QudnVlIiwiLi4vc3JjL21peGlucy9OdW1iZXJNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVPYmplY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2xpZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVVcGxvYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWUiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIHJldHVybiBpc1RlbXBvcmFyeUlkKGRhdGE/LltpZEtleV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW1EYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSwgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSwgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQoY29udGV4dClcbiAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAvLyBJZiBgb2JqZWN0YCBleHBsaWNpdGx5IHNldHMgdGhlIGtleSB0byBgdW5kZWZpbmVkYCwgcmV0dXJuIGl0LlxuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCB8fCBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgID8gdmFsdWVcbiAgICA6IGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgPyBkZWZhdWx0VmFsdWUoKVxuICAgICAgOiBkZWZhdWx0VmFsdWVcbn1cblxuZnVuY3Rpb24gc2V0KGNvbnRleHQsIGtleSwgdmFsdWUpIHtcbiAgY29udGV4dHMuZ2V0KGNvbnRleHQpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IChpc0Z1bmN0aW9uKGNvbnRleHQpID8gY29udGV4dCgpIDogeyAuLi5jb250ZXh0IH0pXG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICAvLyBgbmVzdGVkYCBpcyBgdHJ1ZWAgd2hlbiB0aGUgZGF0YS1wYXRoIHBvaW50cyBhIHZhbHVlIGluc2lkZSBhbiBpdGVtLCBhbmRcbiAgLy8gYGZhbHNlYCB3aGVuIGl0IHBvaW50cyB0byB0aGUgaXRlbSBpdHNlbGYuXG4gIGdldCBuZXN0ZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmVzdGVkJywgdHJ1ZSlcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2YWx1ZScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBkYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhUGF0aCcsICcnKVxuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmFtZScsICgpID0+IGdldExhc3REYXRhUGF0aE5hbWUodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaW5kZXgnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldFBhcmVudEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBpdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuaXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5wYXJlbnRJdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgaXRlbSgpIHtcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAgIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YScsICgpID0+XG4gICAgICBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIC8vIE5PVEU6IGBwYXJlbnRJdGVtYCBpc24ndCB0aGUgY2xvc2VzdCBkYXRhIHBhcmVudCB0byBgaXRlbWAsIGl0J3MgdGhlXG4gIC8vIGNsb3Nlc3QgcGFyZW50IHRoYXQgaXNuJ3QgYW4gYXJyYXksIGUuZy4gZm9yIHJlbGF0aW9ucyBvciBuZXN0ZWQgSlNPTlxuICAvLyBkYXRhLiAgVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlXG4gIC8vIHVzZSBvZiBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0XG4gIC8vIHBhcmVudC4gSWYgbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsXG4gIC8vIHNvcnRzIG9mIGRhdGEgcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IHBhcmVudEl0ZW0gPVxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHwgbnVsbFxuICAgIHJldHVybiBwYXJlbnRJdGVtICE9PSB0aGlzLml0ZW0gPyBwYXJlbnRJdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgZXhwb3N1cmUgc2luY2UgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LFxuICAvLyBlLmcuIG5lc3RlZCBmb3JtcyBpbiBgcHJvY2Vzc0RhdGEoKWAuIEluc3RlYWQsIGJpbmQgY29tcG9uZW50IHRvIGB0aGlzYFxuICAvLyBvbmx5IHdoZXJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGV2ZW50czogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQXN5bmMgdmVyc2lvbnMgb2YgVnVlJ3MgJG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGVcbiAgICAvLyBldmVudHMgYWRkZWQgLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrc1xuICAgIC8vIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLiRldmVudHMgfHwgKHRoaXMuJGV2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBldmVudHNbZXZlbnRdIHx8IChldmVudHNbZXZlbnRdID0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGhhbmRsZXJzIGZvciB0aGlzIGV2ZW50XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLCBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZWdhdGUoZXZlbnQsIHRhcmdldCkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlKGV2LCB0YXJnZXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub24oZXZlbnQsICguLi5hcmdzKSA9PiB0YXJnZXQuZW1pdChldmVudCwgLi4uYXJncykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzQm9vbGVhbiwgaXNOdW1iZXIsIGlzRnVuY3Rpb24sIGlzRGF0ZSxcbiAgaXNSZWdFeHAsIGFzQXJyYXlcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNoZWNrZXJzID0ge1xuICBCb29sZWFuOiBpc0Jvb2xlYW4sXG4gIE51bWJlcjogaXNOdW1iZXIsXG4gIFN0cmluZzogaXNTdHJpbmcsXG4gIERhdGU6IGlzRGF0ZSxcbiAgQXJyYXk6IGlzQXJyYXksXG4gIE9iamVjdDogaXNPYmplY3QsXG4gIFJlZ0V4cDogaXNSZWdFeHAsXG4gIEZ1bmN0aW9uOiBpc0Z1bmN0aW9uXG59XG5cbi8vIERlY2xhcmUgdGhlc2Ugc2VwYXJhdGVseSBmcm9tIHRoZSBgdHlwZUNvbnZlcnRlcnNgIG9iamVjdCwgdG8gcHJldmVudFxuLy8gQmFiZWwgaXNzdWVzIHdpdGggYE9iamVjdGAgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIGBPYmplY3RgOlxuY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4gISF2YWx1ZVxuY29uc3QgdG9OdW1iZXIgPSB2YWx1ZSA9PiArdmFsdWVcbmNvbnN0IHRvU3RyaW5nID0gdmFsdWUgPT4gU3RyaW5nKHZhbHVlKVxuXG5jb25zdCB0b0RhdGUgPSB2YWx1ZSA9PiBpc0RhdGUodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+IGlzQXJyYXkodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICA6IGFzQXJyYXkodmFsdWUpXG5cbmNvbnN0IHRvT2JqZWN0ID0gdmFsdWUgPT4gaXNPYmplY3QodmFsdWUpXG4gID8gdmFsdWVcbiAgLy8gSWYgYSBPYmplY3QgaXMgZXhwZWN0ZWQgYnV0IGEgQm9vbGVhbiBwcm92aWRlLCBjb252ZXJ0IHRvIGFuIGVtcHR5XG4gIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICA6IHZhbHVlID09PSB0cnVlXG4gICAgPyB7fVxuICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+IGlzUmVnRXhwKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSkgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICksXG4gICAgICBpZDogYCR7aWR9YFxuICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImNvbnN0IGxvZ2dlZERlcHJlY2F0aW9ucyA9IG5ldyBTZXQoKVxuXG5leHBvcnQgZnVuY3Rpb24gZGVwcmVjYXRlKG1lc3NhZ2UpIHtcbiAgLy8gT25seSBsb2cgZGVwcmVjYXRpb24gbWVzc2FnZXMgb25jZS5cbiAgaWYgKCFsb2dnZWREZXByZWNhdGlvbnMuaGFzKG1lc3NhZ2UpKSB7XG4gICAgbG9nZ2VkRGVwcmVjYXRpb25zLmFkZChtZXNzYWdlKVxuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcsIGlzRnVuY3Rpb24sIGFzQXJyYXksIGVxdWFscyxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoLCBsYWJlbGl6ZSwgaHlwaGVuYXRlLCBmb3JtYXRcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBhcHBTdGF0ZSBmcm9tICcuLi9hcHBTdGF0ZS5qcydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZGVwcmVjYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGVwcmVjYXRlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtFbWl0dGVyTWl4aW5dLFxuXG4gIGluamVjdDogW1xuICAgICdhcGknLFxuICAgICckdmVyYnMnLFxuICAgICckdmlld3MnLFxuICAgICckaXNQb3B1bGF0ZWQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8geyAkZGF0YUNvbXBvbmVudDogKCkgPT4gdGhpcyB9XG4gICAgICA6IHt9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGUsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRjaGlsZHJlblswXVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBVc2UgY29tcHV0ZWQgcHJvcGVydGllcyBhcyBsaW5rcyB0byBpbmplY3RzLCBzbyBEaXRvU2NoZW1hIGNhblxuICAgICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICAgIHJldHVybiB0aGlzLiRzY2hlbWFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIFJvdXRlTWl4aW4gY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzRm9ybSA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlld0NvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzVmlldyA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIGN1cnJlbnQgY29tcG9uZW50LCB0aGF0IGlzIGxpbmtlZCB0byBhIHJlc291cmNlIChhbmQgdGh1cyBsb2FkcyBpdHNcbiAgICAvLyBvd24gZGF0YSBhbmQgZG9lc24ndCBob2xkIG5lc3RlZCBkYXRhKS5cbiAgICBkYXRhQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhID8gdGhpcyA6IHRoaXMuJGRhdGFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZGlhbG9nQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFuZWxDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50Py4kcGFyZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50Py4kcGFyZW50LnJvdXRlQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudEZvcm1Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py4kcGFyZW50LmZvcm1Db21wb25lbnRcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlQ3JlYXRlKCkge1xuICAgIHRoaXMuJHVpZCA9ICsrdWlkXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2V0KHRoaXMuc3RvcmUsIGtleSwgdmFsdWUpXG4gICAgfSxcblxuICAgIGdldENoaWxkU3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdG9yZShrZXkpIHx8IHRoaXMuc2V0U3RvcmUoa2V5LCB7fSlcbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hVmFsdWUoXG4gICAgICBrZXlPckRhdGFQYXRoLFxuICAgICAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIHNjaGVtYSA9IHRoaXMuc2NoZW1hLCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4gICAgKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IHR5cGUgJiYgYXNBcnJheSh0eXBlKVxuICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gICAgICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgICAgIGxldCB2YWx1ZSA9IHNjaGVtYVxuICAgICAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgICAgICA6IHNjaGVtYVtrZXlPckRhdGFQYXRoXVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihkZWYpICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgZGVmKSkge1xuICAgICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgICAgICBkZWYgPSBkZWYuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH1cbiAgICAgIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAgICAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgICAgIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydGVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0TGFiZWwoc2NoZW1hLCBuYW1lKSB7XG4gICAgICByZXR1cm4gc2NoZW1hXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnbGFiZWwnLCB7IHR5cGU6IFN0cmluZywgc2NoZW1hIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBsYWJlbGl6ZSxcblxuICAgIGdldEJ1dHRvbkF0dHJpYnV0ZXMobmFtZSwgYnV0dG9uKSB7XG4gICAgICBjb25zdCB2ZXJiID0gdGhpcy52ZXJic1tuYW1lXSB8fCBuYW1lXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzczogYGRpdG8tYnV0dG9uLSR7dmVyYn1gLFxuICAgICAgICB0aXRsZTogYnV0dG9uPy50ZXh0IHx8IGxhYmVsaXplKHZlcmIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldERyYWdPcHRpb25zKGRyYWdnYWJsZSwgZmFsbGJhY2sgPSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGRpc2FibGVkOiAhZHJhZ2dhYmxlLFxuICAgICAgICBoYW5kbGU6ICcuZGl0by1idXR0b24tZHJhZycsXG4gICAgICAgIGRyYWdDbGFzczogJ2RpdG8tZHJhZy1hY3RpdmUnLFxuICAgICAgICBjaG9zZW5DbGFzczogJ2RpdG8tZHJhZy1jaG9zZW4nLFxuICAgICAgICBnaG9zdENsYXNzOiAnZGl0by1kcmFnLWdob3N0JyxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogJ2RpdG8tZHJhZy1mYWxsYmFjaycsXG4gICAgICAgIGZvcmNlRmFsbGJhY2s6IGZhbGxiYWNrXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFF1ZXJ5TGluayhxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiAhIXNjaGVtYSAmJiB0aGlzLmdldFNjaGVtYVZhbHVlKCdpZicsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHtcbiAgICAgIGNvbXBvbmVudHMsXG4gICAgICBidXR0b25zLFxuICAgICAgZGF0YSxcbiAgICAgIHNldHRpbmdzID0ge1xuICAgICAgICB3aWR0aDogNDgwLFxuICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfVxuICAgIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IHRocm91Z2ggdnVlLWpzLW1vZGFsLCBhbmQgd3JhcHMgaXQgaW4gYVxuICAgICAgLy8gcHJvbWlzZSBzbyB0aGF0IHRoZSBidXR0b25zIGluIHRoZSBkaWFsb2cgY2FuIHVzZSBgZGlhbG9nLnJlc29sdmUoKWBcbiAgICAgIC8vIGFuZCBgZGlhbG9nLnJlamVjdCgpYCB0byBjbG9zZSB0aGUgbW9kYWwgZGlhbG9nIGFuZCByZXNvbHZlIC8gcmVqZWN0XG4gICAgICAvLyB0aGUgcHJvbWlzZSBhdCBvbmNlLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy4kbW9kYWwuc2hvdyhEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1kaWFsb2cnKSwge1xuICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgfSwgc2V0dGluZ3MpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UpXG4gICAgICAvLyBSZXNvdXJjZXMgd2l0aG91dCBhIHBhcmVudCBpbmhlcml0IHRoZSBvbmUgZnJvbSBgZGF0YUNvbXBvbmVudGBcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICBpZiAocmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb3VyY2UucGFyZW50ID0gdGhpcy5kYXRhQ29tcG9uZW50Py5yZXNvdXJjZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkoZ2V0UmVzb3VyY2UocmVzb3VyY2UpKVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVVybChyZXNvdXJjZSkge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgbGV0IHVybCA9IG51bGxcbiAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgIC8vIFVzZSBzYW1lIGFwcHJvYWNoIGFzIGF4aW9zIGludGVybmFsbHkgdG8gam9pbiBiYXNlVVJMIHdpdGggcGF0aDpcbiAgICAgICAgdXJsID0gYCR7XG4gICAgICAgICAgdGhpcy5hcGkudXJsLnJlcGxhY2UoL1xcLyskLywgJycpXG4gICAgICAgIH0vJHtcbiAgICAgICAgICBwYXRoLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgICAgIH1gXG4gICAgICAgIC8vIFN1cHBvcnQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycywgd2hpY2ggYXJlIGFkZGVkIHRvIHRoZSBVUkw6XG4gICAgICAgIGNvbnN0IHsgcXVlcnkgfSA9IHJlc291cmNlXG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KS5tYXAoXG4gICAgICAgICAgICAoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgICBgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWBcbiAgICAgICAgICApXG4gICAgICAgICAgdXJsID0gYCR7dXJsfT8ke3BhcmFtcy5qb2luKCcmJyl9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdXJsXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIHJlc291cmNlLCBkYXRhLCBwYXJhbXMsIGludGVybmFsIH0pIHtcbiAgICAgIHVybCA9IHVybCB8fCB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCA9IG1ldGhvZCB8fCByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlSZXF1ZXN0KHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIGRhdGEsIHBhcmFtcyB9KVxuICAgICAgLy8gRGV0ZWN0IGNoYW5nZSBvZiB0aGUgb3duIHVzZXIsIGFuZCBmZXRjaCBpdCBhZ2FpbiBpZiBpdCB3YXMgY2hhbmdlZC5cbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tVc2VyICYmXG4gICAgICAgIG1ldGhvZCA9PT0gJ3BhdGNoJyAmJlxuICAgICAgICBlcXVhbHMocmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlKHRoaXMudXNlci5pZCwgdGhpcy5hcGkudXNlcnMpKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5mZXRjaFVzZXIoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSxcblxuICAgIHJlcXVlc3QoeyBjYWNoZSwgLi4ub3B0aW9ucyB9KSB7XG4gICAgICAvLyBBbGxvdyBjYWNoaW5nIG9mIGxvYWRlZCBkYXRhIG9uIHR3byBsZXZlbHM6XG4gICAgICAvLyAtICdnbG9iYWwnOiBjYWNoZSBnbG9iYWxseSwgZm9yIHRoZSBlbnRpcmUgYWRtaW4gc2Vzc2lvblxuICAgICAgLy8gLSAnbG9jYWwnOiBjYWNoZSBsb2NhbGx5IHdpdGhpbiB0aGUgY2xvc2VzdCByb3V0ZSBjb21wb25lbnQgdGhhdCBpc1xuICAgICAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UgYW5kIGxvYWRzIGl0cyBvd24gZGF0YS5cbiAgICAgIGNvbnN0IGNhY2hlUGFyZW50ID0gY2FjaGUgJiYge1xuICAgICAgICBnbG9iYWw6IHRoaXMuYXBwU3RhdGUsXG4gICAgICAgIGxvY2FsOiB0aGlzLmRhdGFDb21wb25lbnRcbiAgICAgIH1bY2FjaGVdXG4gICAgICBjb25zdCBsb2FkQ2FjaGUgPSBjYWNoZVBhcmVudD8ubG9hZENhY2hlXG4gICAgICAvLyBCdWlsZCBhIGNhY2hlIGtleSBmcm9tIHRoZSBjb25maWc6XG4gICAgICBjb25zdCBjYWNoZUtleSA9IGxvYWRDYWNoZSAmJiBgJHtcbiAgICAgICAgb3B0aW9ucy5tZXRob2QgfHwgJ2dldCd9ICR7XG4gICAgICAgIG9wdGlvbnMudXJsfSAke1xuICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBhcmFtcyB8fCAnJyl9ICR7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgIH1gXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBsb2FkKG9wdGlvbnMpIHtcbiAgICAgIGRlcHJlY2F0ZSgnbG9hZCgpIGlzIGRlcHJlY2F0ZWQuIFVzZSByZXF1ZXN0KCkgaW5zdGVhZC4nKVxuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChvcHRpb25zKVxuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZSh0cnVlKSxcbiAgICAgICAgICAoKSA9PiByZXNvbHZlKGZhbHNlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgY29uc3QgeyB1cmwsIGZpbGVuYW1lIH0gPSBvcHRpb25zXG4gICAgICAvLyBTZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80OTkxNzA2Ni8xMTYzNzA4XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBhLmhyZWYgPSB1cmxcbiAgICAgIGlmIChmaWxlbmFtZSkge1xuICAgICAgICBhLmRvd25sb2FkID0gZmlsZW5hbWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSlcbiAgICAgIGEuY2xpY2soKVxuICAgICAgYm9keS5yZW1vdmVDaGlsZChhKVxuICAgIH0sXG5cbiAgICBub3RpZnkob3B0aW9ucykge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQuY2xvc2VOb3RpZmljYXRpb25zKClcbiAgICB9LFxuXG4gICAgc2V0dXBTY2hlbWFGaWVsZHMoKSB7XG4gICAgICB0aGlzLnNldHVwTWV0aG9kcygpXG4gICAgICB0aGlzLnNldHVwQ29tcHV0ZWQoKVxuICAgICAgdGhpcy5zZXR1cEV2ZW50cygpXG4gICAgfSxcblxuICAgIHNldHVwTWV0aG9kcygpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLm1ldGhvZHMgfHwge30pKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHRoaXNba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBtZXRob2QgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBDb21wdXRlZCgpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLmNvbXB1dGVkIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IGlzRnVuY3Rpb24odmFsdWUpXG4gICAgICAgICAgPyB7IGdldDogdmFsdWUgfVxuICAgICAgICAgIDogaXNPYmplY3QodmFsdWUpICYmIGlzRnVuY3Rpb24odmFsdWUuZ2V0KVxuICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChhY2Nlc3Nvcikge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIGFjY2Vzc29yKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBjb21wdXRlZCBwcm9wZXJ0eSBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgd2F0Y2gsIGV2ZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmICh3YXRjaCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGlzRnVuY3Rpb24od2F0Y2gpID8gd2F0Y2guY2FsbCh0aGlzKSA6IHdhdGNoXG4gICAgICAgIGlmIChpc09iamVjdChoYW5kbGVycykpIHtcbiAgICAgICAgICAvLyBJbnN0YWxsIHRoZSB3YXRjaCBoYW5kbGVycyBpbiB0aGUgbmV4dCB0aWNrLCBzbyBhbGwgY29tcG9uZW50cyBhcmVcbiAgICAgICAgICAvLyBpbml0aWFsaXplZCBhbmQgd2UgY2FuIGNoZWNrIGFnYWluc3QgdGhlaXIgbmFtZXMuXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgICAgIC8vIEV4cGFuZCBwcm9wZXJ0eSBuYW1lcyB0byAnZGF0YS5wcm9wZXJ0eSc6XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeU5hbWUoa2V5KVxuICAgICAgICAgICAgICAgID8gYGRhdGEuJHtrZXl9YFxuICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgIHRoaXMuJHdhdGNoKGV4cHIsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkRXZlbnQgPSAoa2V5LCBldmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgdGhpcy5vbihoeXBoZW5hdGUoZXZlbnQpLCBjYWxsYmFjaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGV2ZW50IGRlZmluaXRpb246ICR7a2V5fTogJHtjYWxsYmFja31gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzY2FuIHNjaGVtYSBmb3IgYG9uW0EtWl1gLXN0eWxlIGNhbGxiYWNrcyBhbmQgYWRkIHRoZW1cbiAgICAgIC8vIFRPRE86IERlcGVyZWNhdGUgb25lIGZvcm1hdCBvciB0aGUgb3RoZXIsIGluIGZhdm91ciBvZiBvbmx5IG9uZSB3YXkgb2ZcbiAgICAgIC8vIGRvaW5nIHRoaW5ncy4gRGVjaWRlIHdoaWNoIG9uZSB0byByZW1vdmUuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYSkpIHtcbiAgICAgICAgaWYgKC9eb25bQS1aXS8udGVzdChrZXkpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXkuc2xpY2UoMiksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRFdmVudChldmVudCwge1xuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBwYXJlbnQgPSBudWxsXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCBoYXNMaXN0ZW5lcnMgPSB0aGlzLmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGNvbnN0IHBhcmVudEhhc0xpc3RlbmVycyA9IHBhcmVudD8uaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgaWYgKGhhc0xpc3RlbmVycyB8fCBwYXJlbnRIYXNMaXN0ZW5lcnMpIHtcbiAgICAgICAgLy8gVGhlIGVmZmVjdHMgb2Ygc29tZSBldmVudHMgbmVlZCBzb21lIHRpbWUgdG8gcHJvcGFnYXRlIHRocm91Z2ggVnVlLlxuICAgICAgICAvLyBVc2UgJG5leHRUaWNrKCkgdG8gbWFrZSBzdXJlIG91ciBoYW5kbGVycyBzZWUgdGhlc2UgY2hhbmdlcy5cbiAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9jZXNzZWRJdGVtYCBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgY29tcG9uZW50cyB0aGF0XG4gICAgICAgIC8vIGFyZSBuZXdseSByZW5kZXJlZCBkdWUgdG8gZGF0YSBjaGFuZ2VzIGhhdmUgcmVnaXN0ZXJlZCB0aGVtc2VsdmVzLlxuICAgICAgICBpZiAoWydsb2FkJywgJ2NoYW5nZSddLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiAoY29udGV4dCA9IERpdG9Db250ZXh0LmdldCh0aGlzLCBjb250ZXh0KSlcbiAgICAgICAgY29uc3QgcmVzID0gaGFzTGlzdGVuZXJzXG4gICAgICAgICAgPyBhd2FpdCB0aGlzLmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAvLyBEb24ndCBidWJibGUgdG8gcGFyZW50IGlmIGhhbmRsZWQgZXZlbnQgcmV0dXJuZWQgYGZhbHNlYFxuICAgICAgICBpZiAocGFyZW50SGFzTGlzdGVuZXJzICYmIHJlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBwYXJlbnQuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9XG4gIH1cbn1cblxubGV0IHVpZCA9IDBcbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT4gKFxuICAgIGBtdXN0IGJlIG51bWVyaWMgYW5kIG1heSBjb250YWluICR7XG4gICAgICAhZGVjaW1hbHMgfHwgZGVjaW1hbHMgPT09ICcqJyA/ICcnIDogZGVjaW1hbHNcbiAgICB9IGRlY2ltYWwgcG9pbnRzYFxuICApXG59XG4iLCJpbXBvcnQgeyBpc0VtYWlsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGVtYWlsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNFbWFpbCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIGEgdmFsaWQgZW1haWwnXG59XG4iLCJpbXBvcnQgeyBpc0hvc3RuYW1lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGhvc3RuYW1lID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNIb3N0bmFtZSh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBob3N0IG5hbWUnXG59XG4iLCJpbXBvcnQgeyBpc0RvbWFpbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBkb21haW4gPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0RvbWFpbih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBkb21haW4nXG59XG4iLCJpbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaW50ZWdlciA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSW50ZWdlcih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIHdob2xlIG51bWJlcidcbn1cbiIsImV4cG9ydCBjb25zdCBtYXggPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1heCkgPT4gdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBtYXgpIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttYXh9IG9yIGxlc3NgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBtaW4gPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1pbikgPT4gdmFsdWUgPj0gbWluLFxuICBtZXNzYWdlKHZhbHVlLCBtaW4pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttaW59IG9yIG1vcmVgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBwYXNzd29yZCA9IHtcbiAgLy8gQWxsb3cgYW55IHZhbHVlLiBGb3Igbm93IHRoaXMgaXMgb25seSB1c2VkIGFzIGEgbWFya2VyLCB0byBhbGxvdyB0aGVcbiAgLy8gcmVxdWlyZWQgdmFsaWRhdGlvbiB0byBoYW5kbGUgdW5jaGFuZ2VkIHBhc3N3b3JkcyBzZXBhcmF0ZWx5LlxuICB2YWxpZGF0ZTogKCkgPT4gdHJ1ZVxufVxuIiwiZXhwb3J0IGNvbnN0IHJhbmdlID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBbbWluLCBtYXhdKSA9PiB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBbbWluLCBtYXhdKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlIGJldHdlZW4gJHttaW59IGFuZCAke21heH1gXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCByZXF1aXJlZCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgc2V0dGluZ3MsIHsgcGFzc3dvcmQgfSkgPT4gKFxuICAgICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJykgfHxcbiAgICAvLyBQYXNzd29yZCBmaWVsZHMgdXNlIGB1bmRlZmluZWRgIGFzIG9wcG9zZWQgdG8gYG51bGxgIHdoZW4gdGhleSdyZSBzZXRcbiAgICAvLyBidXQgdW5jaGFuZ2VkLCBhbGxvdyB0aGlzIHRvIHBhc3MgdGhyb3VnaDpcbiAgICAocGFzc3dvcmQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgKSxcbiAgbWVzc2FnZTogJ2lzIHJlcXVpcmVkJyxcbiAgbnVsbGlzaDogdHJ1ZVxufVxuIiwiaW1wb3J0IHsgaXNVcmwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgdXJsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNVcmwodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgdmFsaWQgVVJMJ1xufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyB2YWxpZGF0aW9ucyBmcm9tICcuLi92YWxpZGF0aW9ucy9pbmRleC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNUb3VjaGVkOiBmYWxzZSxcbiAgICAgIGlzRGlydHk6IGZhbHNlLFxuICAgICAgaXNWYWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBldmVudHMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNUb3VjaGVkID0gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZSgpXG4gICAgICAgIH0sXG4gICAgICAgIGNoYW5nZTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGUobm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlJywgdGhpcy5kYXRhUGF0aCwgdmFsdWUsIHRoaXMudmFsaWRhdGlvbnMpXG4gICAgICBmb3IgKGNvbnN0IFtydWxlLCBzZXR0aW5nXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB2YWxpZGF0aW9uc1tydWxlXVxuICAgICAgICBpZiAodmFsaWRhdG9yICYmICh2YWxpZGF0b3IubnVsbGlzaCB8fCB2YWx1ZSAhPSBudWxsKSkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsaWRhdGUsIG1lc3NhZ2UgfSA9IHZhbGlkYXRvclxuICAgICAgICAgIGlmICghdmFsaWRhdGUodmFsdWUsIHNldHRpbmcsIHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc0Z1bmN0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlKHZhbHVlLCBzZXR0aW5nLCB0aGlzKVxuICAgICAgICAgICAgICAgIDogbWVzc2FnZVxuICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmlzVmFsaWRhdGVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmlzVmFsaWQgPSBpc1ZhbGlkXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnkoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShmYWxzZSlcbiAgICB9LFxuXG4gICAgbWFya0RpcnR5KCkge1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgLy8gQ2xlYXIgY3VycmVudGx5IGRpc3BsYXllZCBlcnJvcnMgb24gbmV3IGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIGFkZEVycm9yKGVycm9yLCBhZGRMYWJlbCA9IGZhbHNlKSB7XG4gICAgICB0aGlzLmVycm9ycyB8fD0gW11cbiAgICAgIGlmIChhZGRMYWJlbCkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwgfHwgdGhpcy5wbGFjZWhvbGRlciB8fCB0aGlzLm5hbWVcbiAgICAgICAgZXJyb3IgPSBgVGhlICR7bGFiZWx9IGZpZWxkICR7ZXJyb3J9LmBcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgLy8gQ29udmVydCBmcm9tIEFKViBlcnJvcnMgb2JqZWN0cyB0byBhbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlc1xuICAgICAgdGhpcy5lcnJvcnMgPSBbXVxuICAgICAgZm9yIChjb25zdCB7IG1lc3NhZ2UgfSBvZiBlcnJvcnMpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihtZXNzYWdlLCB0cnVlKVxuICAgICAgfVxuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgZ2V0RXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzID8gWy4uLnRoaXMuZXJyb3JzXSA6IG51bGxcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IG51bGxcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFBY2Nlc3NvcihcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIGdldCwgc2V0LCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4pIHtcbiAgLy8gYGtleU9yRGF0YVBhdGhgIGNhbiBiZSBhIHNpbXBsZSBwcm9wZXJ0eSBrZXksXG4gIC8vIG9yIGEgZGF0YS1wYXRoIGludG8gc3ViLXByb3BlcnRpZXMsIGJvdGggaW4gYXJyYXkgb3Igc3RyaW5nIGZvcm1hdC5cbiAgaWYgKGlzU3RyaW5nKGtleU9yRGF0YVBhdGgpICYmIGtleU9yRGF0YVBhdGguaW5jbHVkZXMoJy4nKSkge1xuICAgIGtleU9yRGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIH1cbiAgLy8gVXNlIHRoZSBub3JtYWxpemVkIGRhdGEgcGF0aCBmb3IgdGhlIGhhbmRsaW5nIG92ZXJyaWRlc1xuICBjb25zdCBuYW1lID0gbm9ybWFsaXplRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICAvLyBPbmx5IGRldGVybWluZSBzY2hlbWEgdmFsdWUgaWYgd2UgaGF2ZSBubyBnZXR0ZXIsIG9yIHRoZSBnZXR0ZXJcbiAgICAgIC8vIHdhbnRzIHRvIHJlY2VpdmUgdGhlIHZhbHVlIGFuZCBwcm9jZXNzIGl0IGZ1cnRoZXI6XG4gICAgICBjb25zdCB2YWx1ZSA9ICFnZXQgfHwgZ2V0Lmxlbmd0aCA+IDBcbiAgICAgICAgLy8gTk9URTogQmVjYXVzZSBgc2NoZW1hYCBvYmplY3RzIGFyZSByZXRyaWV2ZWQgZnJvbSBgbWV0YWAgb2JqZWN0LCB0aGV5XG4gICAgICAgIC8vIGRvbid0IHNlZW0gdG8gYmUgcmVhY3RpdmUuIFRvIGFsbG93IGNoYW5nZWQgaW4gYHNjaGVtYWAgdmFsdWVzLFxuICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICA/IHRoaXMub3ZlcnJpZGVzICYmIG5hbWUgaW4gdGhpcy5vdmVycmlkZXNcbiAgICAgICAgICA/IHRoaXMub3ZlcnJpZGVzW25hbWVdXG4gICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBjYWxsYmFjayB9KVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHNldCkge1xuICAgICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzIHx8PSB7fVxuICAgICAgICB0aGlzLiRzZXQodGhpcy5vdmVycmlkZXMsIG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmVBY2Nlc3NvcihuYW1lLCB7IGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQgfSA9IHt9KSB7XG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZGVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnM6XG4gICAgICAgIHZhbHVlID0gaXNGdW5jdGlvbihkZWYpID8gZGVmLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KSA6IGRlZlxuICAgICAgICAvLyBUcmlnZ2VyIHNldHRlciBieSBzZXR0aW5nIHZhbHVlIGFuZCBhY2Nlc3NvciB0byBkZWZhdWx0OlxuICAgICAgICB0aGlzW25hbWVdID0gdmFsdWVcbiAgICAgICAgLy8gTm93IGFjY2VzcyBzdG9yZSBhZ2FpbiwgZm9yIHJlYWN0aXZpdHkgdHJhY2tpbmdcbiAgICAgICAgdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIGdldHRlciB0byBmdXJ0aGVyIGNoYW5nZSBvciBwcm9jZXNzIHRoZSB2YWx1ZVxuICAgICAgLy8gcmV0cmlldmVkIGZyb20gdGhlIHN0b3JlOlxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIHNldHRlciB0byByZXR1cm4gYSBuZXcgdmFsdWUgdG8gc2V0LCBvciBkbyB0aGVcbiAgICAgIC8vIHNldHRpbmcgaXRzZWxmLCBhbmQgdGhlbiByZXR1cm4gYHVuZGVmaW5lZGA6XG4gICAgICBpZiAoIXNldCB8fCAodmFsdWUgPSBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdG9yZShuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImNvbnN0IHVpZE1hcCA9IG5ldyBXZWFrTWFwKClcblxuLy8gR2VuZXJhdGVkIGFuZCByZW1lbWJlcnMgdW5pcXVlIGlkcyBwZXIgcGFzc2VkIG9iamVjdCB1c2luZyBhIHdlYWsgbWFwLlxubGV0IHVpZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBnZXRVaWQob2JqZWN0LCBpdGVtSWQpIHtcbiAgbGV0IGlkID0gdWlkTWFwLmdldChvYmplY3QpXG4gIGlmICghaWQpIHtcbiAgICBpZCA9IGlkID0gaXRlbUlkIHx8IGBAJHsrK3VpZH1gXG4gICAgdWlkTWFwLnNldChvYmplY3QsIGlkKVxuICB9XG4gIHJldHVybiBpZFxufVxuIiwiaW1wb3J0IHsgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzSW50ZWdlciwgYXNBcnJheSwgcGFyc2VEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnXG5cbi8vIFNjaGVtYUdyYXBoIGlzIGEgY2xhc3MgdG8gY29sbGVjdCBzY2hlbWEgZ3JhcGggbWV0YSBpbmZvcm1hdGlvbiBpbiBvcmRlciB0b1xuLy8gcHJvY2VzcyBzb3VyY2VzIGFuZCByZWxhdGlvbnMgZm9yIHRoZSBnaXZlbiB0YXJnZXRzICdzZXJ2ZXInIGFuZCAnY2xpcGJvYXJkJyxcbi8vIGFjY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSAoc3ViR3JhcGhba2V5XSA/Pz0ge30pXG4gICAgfVxuICAgIHN1YkdyYXBoLiRzZXR0aW5ncyA9IHtcbiAgICAgIC4uLmRlZmF1bHRzLCAvLyBTZWUgYGFkZFNvdXJjZShkYXRhUGF0aClgXG4gICAgICAuLi5zdWJHcmFwaC4kc2V0dGluZ3MsXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgLy8gT25seSBzZXQgYHJlbGF0ZWQ6IGZhbHNlYCB0aHJvdWdoIHRoZSBkZWZhdWx0cywgYXMgYHNldFNvdXJjZVJlbGF0ZWQoKWBcbiAgICAvLyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBgYWRkU291cmNlKClgLCBkZXBlbmRpbmcgb24gdGhlIGdyYXBoIHN0cnVjdHVyZS5cbiAgICB0aGlzLnNldChkYXRhUGF0aCwgeyB0eXBlOiAnc291cmNlJywgc2NoZW1hIH0sIHsgcmVsYXRlZDogZmFsc2UgfSlcbiAgfVxuXG4gIHNldFNvdXJjZVJlbGF0ZWQoZGF0YVBhdGgpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgcmVsYXRlZDogdHJ1ZSxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgc2NoZW1hLFxuICAgICAgaW50ZXJuYWw6ICEhcmVsYXRlZERhdGFQYXRoLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChyZWxhdGVkRGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aCkge1xuICAgIHJldHVybiBkYXRhUGF0aFxuICAgICAgPyAodGhpcy5yZWZlcmVuY2VzW2RhdGFQYXRoXSA/Pz0gbmFub2lkKDYpKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBmbGF0dGVuKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSBncmFwaCA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGZvciAoY29uc3QgW2tleSwgeyAkc2V0dGluZ3MsIC4uLnN1YkdyYXBoIH1dIG9mIE9iamVjdC5lbnRyaWVzKGdyYXBoKSkge1xuICAgICAgICBpZiAoJHNldHRpbmdzKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksICRzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbc3ViS2V5LCBzZXR0aW5nc10gb2YgZmxhdHRlbihzdWJHcmFwaCkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2Ake2tleX0vJHtzdWJLZXl9YCwgc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllc1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKHRoaXMuZ3JhcGgpXG4gIH1cblxuICBwcm9jZXNzKHNvdXJjZVNjaGVtYSwgZGF0YSwgeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGNsaXBib2FyZCA9IHRhcmdldCA9PT0gJ2NsaXBib2FyZCdcbiAgICBpZiAoY2xpcGJvYXJkKSB7XG4gICAgICBkZWxldGUgZGF0YVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIHNldHRpbmdzXSBvZiB0aGlzLmZsYXR0ZW4oKSkge1xuICAgICAgY29uc3QgeyB0eXBlLCBzY2hlbWEsIGludGVybmFsLCByZWxhdGVkLCByZWZlcmVuY2UgfSA9IHNldHRpbmdzXG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlID09PSAnc291cmNlJ1xuICAgICAgY29uc3QgcmVsYXRpb24gPSB0eXBlID09PSAncmVsYXRpb24nXG4gICAgICBpZiAoc291cmNlIHx8IHJlbGF0aW9uICYmIGludGVybmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlQXREYXRhUGF0aChkYXRhLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgY29uc3QgcmVtb3ZlSWQgPSBjbGlwYm9hcmQgJiYgc291cmNlICYmICFyZWxhdGVkXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gY2xpcGJvYXJkICYmIChcbiAgICAgICAgICByZWxhdGlvbiAmJiBpbnRlcm5hbCB8fFxuICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhc0FycmF5KHZhbHVlcykuZmxhdCgpKSB7XG4gICAgICAgICAgY29uc3QgaWRLZXkgPSAoXG4gICAgICAgICAgICBzb3VyY2UgJiYgc2NoZW1hLmlkS2V5IHx8XG4gICAgICAgICAgICByZWxhdGlvbiAmJiBzY2hlbWEucmVsYXRlQnkgfHxcbiAgICAgICAgICAgICdpZCdcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWU/LltpZEtleV1cbiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZUlkKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgIH0gaWYgKHJlZmVyZW5jZUlkIHx8IGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgIGlmIChpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICAgIGlkID0gaWQuc2xpY2UoMSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZWZLZXkgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICAvLyBDbGlwYm9hcmQganVzdCBuZWVkcyB0ZW1wb3JhcnkgaWRzIHVuZGVyIHRoZSBhY3R1YWwgYGlkS2V5YC5cbiAgICAgICAgICAgICAgICA/IGlkS2V5XG4gICAgICAgICAgICAgICAgLy8gU2VydmVyIHdhbnRzIE9iamVjdGlvbi1zdHlsZSAnI2lkJyAvICcjcmVmJyBwYWlycy5cbiAgICAgICAgICAgICAgICA6IHNvdXJjZSA/ICcjaWQnIDogJyNyZWYnXG4gICAgICAgICAgICAgIGNvbnN0IHJldlZhbHVlID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyBgQCR7aWR9YFxuICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleSByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAvLyBhY2Nyb3NzIHRoZSBmdWxsIGdyYXBoLlxuICAgICAgICAgICAgICAgIDogcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICA/IGAke3JlZmVyZW5jZX0tJHtpZH1gXG4gICAgICAgICAgICAgICAgICA6IGlkIC8vIEEgdGVtcG9yYXJ5IGlkIHdpdGhvdXQgYSByZWxhdGVkLCBqdXN0IHByZXNlcnZlIGl0LlxuICAgICAgICAgICAgICB2YWx1ZVtyZWZLZXldID0gcmV2VmFsdWVcbiAgICAgICAgICAgICAgaWYgKHJlZktleSAhPT0gaWRLZXkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRVaWQgfSBmcm9tICcuL3VpZC5qcydcbmltcG9ydCB7IFNjaGVtYUdyYXBoIH0gZnJvbSAnLi9TY2hlbWFHcmFwaC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIGNsb25lLCBjYW1lbGl6ZSwgaXNNb2R1bGVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNvbXBvbmVudHMgPSB7fVxuY29uc3QgdW5rbm93blR5cGVSZXBvcnRlZCA9IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KSB7XG4gIHR5cGVDb21wb25lbnRzW3R5cGVdID0gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29tcG9uZW50KHR5cGUsIGFsbG93TnVsbCA9IGZhbHNlKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVDb21wb25lbnRzW3R5cGVdIHx8IG51bGxcbiAgaWYgKCFjb21wb25lbnQgJiYgIWFsbG93TnVsbCAmJiAhdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSkge1xuICAgIC8vIFJlcG9ydCBlYWNoIG1pc3NpbmcgdHlwZSBvbmx5IG9uY2UsIHRvIGF2b2lkIGZsb29kaW5nIHRoZSBjb25zb2xlOlxuICAgIHVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0gPSB0cnVlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERpdG8gY29tcG9uZW50IHR5cGU6ICcke3R5cGV9J2ApXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaFNjaGVtYShzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHNjaGVtYXMgPSBbXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhzY2hlbWE/LnRhYnMgfHwge30pLFxuICAgIHNjaGVtYVxuICBdXG4gIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICBpZiAoc2NoZW1hKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEpXG4gICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgc2NoZW1hID0+IHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKVxuICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBjb21wb25lbnQgOiB1bmRlZmluZWRcbiAgKSB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyB0cnVlIDogdW5kZWZpbmVkXG4gICkgPT09IHRydWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5U2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+ICFjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gZmFsc2UgOiB1bmRlZmluZWRcbiAgKSAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWEoc2NoZW1hLCB1bndyYXBNb2R1bGUgPSBmYWxzZSkge1xuICBpZiAoaXNGdW5jdGlvbihzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gc2NoZW1hKClcbiAgfVxuICBpZiAoaXNQcm9taXNlKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBhd2FpdCBzY2hlbWFcbiAgfVxuICBpZiAoaXNNb2R1bGUoc2NoZW1hKSkge1xuICAgIC8vIENvcHkgdG8gY29udmVydCBmcm9tIG1vZHVsZSB0byBvYmplY3Q6XG4gICAgc2NoZW1hID0geyAuLi5zY2hlbWEgfVxuICAgIC8vIFVud3JhcCBkZWZhdWx0IG9yIG5hbWVkIHNjaGVtYVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgKHVud3JhcE1vZHVsZSB8fCBzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGtleXNbMF1cbiAgICAgICAgc2NoZW1hID0gc2NoZW1hW25hbWVdXG4gICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hcyhcbiAgdW5yZXNvbHZlZFNjaGVtYXMsXG4gIHJlc29sdmVJdGVtID0gcmVzb2x2ZVNjaGVtYVxuKSB7XG4gIGxldCBzY2hlbWFzID0gaXNGdW5jdGlvbih1bnJlc29sdmVkU2NoZW1hcylcbiAgICA/IHVucmVzb2x2ZWRTY2hlbWFzKClcbiAgICA6IHVucmVzb2x2ZWRTY2hlbWFzXG4gIHNjaGVtYXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYXMsIGZhbHNlKVxuICBpZiAoaXNBcnJheShzY2hlbWFzKSkge1xuICAgIC8vIFRyYW5zbGF0ZSBhbiBhcnJheSBvZiBkeW5hbWljIGltcG9ydCwgZWFjaCBpbXBvcnRpbmcgb25lIG5hbWVkIHNjaGVtYVxuICAgIC8vIG1vZHVsZSB0byBhbiBvYmplY3Qgd2l0aCBuYW1lZCBlbnRyaWVzLlxuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoYXdhaXQgUHJvbWlzZS5hbGwoc2NoZW1hcy5tYXAoXG4gICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZUl0ZW0oaXRlbSwgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIFtzY2hlbWEubmFtZSwgc2NoZW1hXVxuICAgICAgfVxuICAgICkpKVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNjaGVtYXMpKSB7XG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhhd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhzY2hlbWFzKS5tYXAoXG4gICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZUl0ZW0oaXRlbSwgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgIH1cbiAgICApKSlcbiAgfVxuICByZXR1cm4gc2NoZW1hc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVBhbmVscyhzY2hlbWEpIHtcbiAgY29uc3QgeyBwYW5lbHMgfSA9IHNjaGVtYVxuICBpZiAoc2NoZW1hLnBhbmVscykge1xuICAgIHNjaGVtYS5wYW5lbHMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhwYW5lbHMpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcykge1xuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgYXdhaXQgcmVzb2x2ZVBhbmVscyhzY2hlbWEpXG4gIGlmIChpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSkge1xuICAgIGF3YWl0IHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEsIG5hbWUsIGNoaWxkcmVuLCAwKVxuICB9IGVsc2Uge1xuICAgIC8vIEEgbXVsdGktY29tcG9uZW50IHZpZXcsIHN0YXJ0IGF0IGxldmVsIDFcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4sIDEpXG4gIH1cbiAgcm91dGVzLnB1c2goe1xuICAgIHBhdGg6IGAvJHtzY2hlbWEucGF0aH1gLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbXBvbmVudCxcbiAgICBtZXRhOiB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzQ29tcG9uZW50KGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gIHNjaGVtYS5sZXZlbCA9IGxldmVsXG4gIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICByZXR1cm4gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ucHJvY2Vzc1NjaGVtYT8uKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSkge1xuICAvLyBVc2VkIGZvciB2aWV3IGFuZCBzb3VyY2Ugc2NoZW1hcywgc2VlIFNvdXJjZU1peGluXG4gIHNjaGVtYS5uYW1lID0gbmFtZVxuICBzY2hlbWEucGF0aCA9IHNjaGVtYS5wYXRoIHx8IGFwaS5ub3JtYWxpemVQYXRoKG5hbWUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbCkge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGZvckVhY2hTY2hlbWFDb21wb25lbnQoc2NoZW1hLCAoY29tcG9uZW50LCBuYW1lKSA9PiB7XG4gICAgcHJvbWlzZXMucHVzaChwcm9jZXNzQ29tcG9uZW50KGFwaSwgY29tcG9uZW50LCBuYW1lLCByb3V0ZXMsIGxldmVsKSlcbiAgfSlcbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKSB7XG4gIC8vIEZpcnN0IHJlc29sdmUgdGhlIGZvcm1zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBiYWNrIG9uIHRoZSBzY2hlbWEuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzIH0gPSBzY2hlbWFcbiAgaWYgKGZvcm1zKSB7XG4gICAgZm9ybXMgPSBzY2hlbWEuZm9ybXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhmb3JtcywgcmVzb2x2ZUZvcm0pXG4gIH0gZWxzZSBpZiAoZm9ybSkge1xuICAgIGZvcm0gPSBzY2hlbWEuZm9ybSA9IGF3YWl0IHJlc29sdmVGb3JtKGZvcm0pXG4gIH0gZWxzZSBpZiAoY29tcG9uZW50cykge1xuICAgIC8vIE5PVEU6IFByb2Nlc3NpbmcgZm9ybXMgaW4gY29tcHV0ZWQgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSBpdFxuICAgIC8vIG9ubHkgY2FuIGJlIGNvbXB1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggYWN0dWFsIGRhdGEuXG4gICAgaWYgKGlzT2JqZWN0KGNvbXBvbmVudHMpKSB7XG4gICAgICBmb3JtID0geyBjb21wb25lbnRzIH1cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9IC8vIE9ubHkgdXNlZCBmb3IgcHJvY2VzcyBsb29wIGJlbG93LlxuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIGZvciAoY29uc3QgZm9ybSBvZiBPYmplY3QudmFsdWVzKGZvcm1zKSkge1xuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgZm9ybSwgY2hpbGRyZW4sIGxldmVsICsgMSlcbiAgfVxuICByZXR1cm4gY2hpbGRyZW5cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGb3JtKGZvcm0pIHtcbiAgZm9ybSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoZm9ybSwgdHJ1ZSlcbiAgaWYgKGZvcm0pIHtcbiAgICBhd2FpdCByZXNvbHZlUGFuZWxzKGZvcm0pXG4gIH1cbiAgcmV0dXJuIGZvcm1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgLy8gSWYgdGhlIHNjaGVtYSBoYXMgYSB0eXBlLCBpdCBpcyBhIHNpbmdsZS1jb21wb25lbnQgdmlldy5cbiAgcmV0dXJuICEhc2NoZW1hLnR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgYm90aCBzaW5nbGUgZm9ybSBhbmQgbXVsdGlwbGUgZm9ybXMgbm90YXRpb24sIGFzIHdlbGwgYXMgaW5saW5lZFxuICAvLyBjb21wb25lbnRzLlxuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hKSAmJiAhIShcbiAgICBzY2hlbWEuZm9ybSB8fFxuICAgIHNjaGVtYS5mb3JtcyB8fFxuICAgIHNjaGVtYS5jb21wb25lbnRzXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB7IHZpZXcgfSA9IHNjaGVtYVxuICBjb25zdCB2aWV3U2NoZW1hID0gdmlldyAmJiBjb250ZXh0LnZpZXdzW3ZpZXddXG4gIHJldHVybiB2aWV3U2NoZW1hXG4gICAgPyBoYXNGb3JtU2NoZW1hKHZpZXdTY2hlbWEpXG4gICAgICA/IHZpZXdTY2hlbWFcbiAgICAgIC8vIE5PVEU6IFZpZXdzIGNhbiBoYXZlIHRhYnMsIGluIHdoaWNoIGNhc2UgdGhlIHZpZXcgY29tcG9uZW50IGlzIG5lc3RlZFxuICAgICAgLy8gaW4gb25lIG9mIHRoZSB0YWJzLCBnbyBmaW5kIGl0LlxuICAgICAgOiBmb3JFYWNoU2NoZW1hKHZpZXdTY2hlbWEsIHNjaGVtYSA9PiB7XG4gICAgICAgIGNvbnN0IHZpZXdDb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50cz8uW3ZpZXddXG4gICAgICAgIGlmIChoYXNGb3JtU2NoZW1hKHZpZXdDb21wb25lbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHZpZXdDb21wb25lbnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICByZXR1cm4gdmlld1xuICAgID8gdmlldy5sZXZlbCA9PT0gMFxuICAgICAgPyBgLyR7dmlldy5wYXRofWAgLy8gQSBzaW5nbGUtY29tcG9uZW50IHZpZXdcbiAgICAgIDogYC8ke3ZpZXcucGF0aH0vJHt2aWV3LnBhdGh9YCAvLyBBIG11bHRpLWNvbXBvbmVudCB2aWV3XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIG1vZGlmeUZvcm0pIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlldykge1xuICAgIHNjaGVtYSA9IHZpZXdcbiAgfSBlbHNlIGlmIChzY2hlbWEudmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB2aWV3OiAnJHtzY2hlbWEudmlld30nYClcbiAgfVxuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzLCBjb21wYWN0IH0gPSBzY2hlbWFcbiAgaWYgKCFmb3JtICYmICFmb3Jtcykge1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAvLyBDb252ZXJ0IGlubGluZWQgY29tcG9uZW50cyB0byBmb3Jtcywgc3VwcG9ydGluZyBgY29tcGFjdGAgc2V0dGluZy5cbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMsIGNvbXBhY3QgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBgZm9ybXNgLCBgZm9ybWAgb3IgYGNvbXBvbmVudHNgLCByZXR1cm4gYW5kIGVtcHR5IGBmb3Jtc2Agb2JqZWN0LlxuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZvcm1zKS5tYXAoKFt0eXBlLCBmb3JtXSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBgc2NoZW1hLmNvbXBvbmVudHNgIGNhbGxiYWNrcyB0byBjcmVhdGUgY29tcG9uZW50cyBvbiB0aGUgZmx5LlxuICAgICAgaWYgKGlzRnVuY3Rpb24oZm9ybS5jb21wb25lbnRzKSkge1xuICAgICAgICBmb3JtID0ge1xuICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgY29tcG9uZW50czogZm9ybS5jb21wb25lbnRzKGNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbdHlwZSwgbW9kaWZ5Rm9ybT8uKGZvcm0pID8/IGZvcm1dXG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pIHtcbiAgcmV0dXJuIGZvcm1zW2l0ZW0/LnR5cGVdIHx8IGZvcm1zLmRlZmF1bHQgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KSB7XG4gIHJldHVybiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyhnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQpLCBpdGVtKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWwoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEubGFiZWwgIT09IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhY3Qoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5jb21wYWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEuaW5saW5lZCB8fCBzY2hlbWEuY29tcG9uZW50cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoXG4gICAgc2NoZW1hLm5lc3RlZCB8fFxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHROZXN0ZWQgPT09IHRydWVcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkT21pdFBhZGRpbmcoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lm9taXRQYWRkaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMgYm90aCBvbiBzY2hlbWEgYW5kIG9uIGNvbXBvbmVudCBsZXZlbC5cbiAgLy8gTk9URTogQXQgdGhlIHRpbWUgb2YgY3JlYXRpb24sIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQsIChlLmcuIGlmXG4gIC8vIGVudHJpZXMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBuZXN0ZWQgZm9ybXMsIHRoZSBwYXJlbnQgZm9ybSBpc24ndCBtb3VudGVkKSBzb1xuICAvLyB3ZSBjYW4ndCB1c2UgYGRhdGFQYXRoYCB0byBnZXQgdG8gY29tcG9uZW50cywgYW5kIHRoZSBgZGVmYXVsdFZhbHVlYCBmcm9tXG4gIC8vIHRoZXJlLiBUaGF0J3Mgd2h5IGBkZWZhdWx0VmFsdWVgIGlzIGRlZmluZWQgc3RhdGljYWxseSBpbiB0aGUgY29tcG9uZW50czpcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gc2NoZW1hLmRlZmF1bHRcbiAgY29uc3QgdmFsdWUgPSBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgID8gZGVmYXVsdFZhbHVlXG4gICAgOiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0VmFsdWVcbiAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUpXG4gICAgPyB2YWx1ZShzY2hlbWEpXG4gICAgOiBjbG9uZSh2YWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpIHtcbiAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG4gIHJldHVybiAhIShcbiAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgdHlwZU9wdGlvbnM/Lmlnbm9yZU1pc3NpbmdWYWx1ZT8uKHNjaGVtYSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWxzKHNjaGVtYSkge1xuICBjb25zdCBjaGVja0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+XG4gICAgT2JqZWN0LnZhbHVlcyhjb21wb25lbnRzIHx8IHt9KS5zb21lKGhhc0xhYmVsKVxuXG4gIHJldHVybiAoXG4gICAgY2hlY2tDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKSB8fFxuICAgIE9iamVjdC52YWx1ZXMoc2NoZW1hLnRhYnMgfHwge30pLnNvbWUoY2hlY2tDb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0cyhzY2hlbWEsIGRhdGEgPSB7fSwgY29tcG9uZW50KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgcm9vdERhdGE6IGRhdGEgfVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lKSA9PiB7XG4gICAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNldHMgdXAgYSBkYXRhIG9iamVjdCB0aGF0IGhhcyBrZXlzIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbFxuICAvLyBmb3JtIGZpZWxkcywgc28gdGhleSBjYW4gYmUgY29ycmVjdGx5IHdhdGNoZWQgZm9yIGNoYW5nZXMuXG4gIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsIGRhdGEsIG51bGwsIG51bGwsIHByb2Nlc3NCZWZvcmUsIG51bGwsIG9wdGlvbnNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50ID0gbnVsbCxcbiAgcm9vdERhdGEgPSBjb21wb25lbnQ/LnJvb3REYXRhXG59ID0ge30pIHtcbiAgY29uc3QgeyBjb21wdXRlIH0gPSBzY2hlbWFcbiAgaWYgKGNvbXB1dGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGUoRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgLy8gT3ZlcnJpZGUgdmFsdWUgdG8gcHJldmVudCBlbmRsZXNzIHJlY3Vyc2lvbiB0aHJvdWdoIGNhbGxpbmcgdGhlXG4gICAgICAvLyBnZXR0ZXIgZm9yIGB0aGlzLnZhbHVlYCBpbiBgRGl0b0NvbnRleHRgOlxuICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGFcbiAgICB9KSlcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVXNlIGAkc2V0KClgIGRpcmVjdGx5IGluc3RlYWQgb2YgYHRoaXMudmFsdWUgPSDigKZgIHRvIHVwZGF0ZSB0aGVcbiAgICAgIC8vIHZhbHVlIHdpdGhvdXQgY2FsbGluZyBwYXJzZSgpOlxuICAgICAgVnVlLnNldChkYXRhLCBuYW1lLCB2YWx1ZSlcbiAgICB9XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIHN0aWxsIG1pc3NpbmcgYWZ0ZXIgY29tcHV0ZSwgc2V0IHRoZSBkZWZhdWx0IGZvciBpdDpcbiAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICBWdWUuc2V0KGRhdGEsIG5hbWUsIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpKVxuICB9XG4gIC8vIE5vdyBhY2Nlc3MgdGhlIHZhbHVlLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgcmVhY3Rpdml0eSBhbmQgbmVlZHMgdG9cbiAgLy8gaGFwcGVuIGFmdGVyIGFsbCBwcmlvciBtYW5pcHVsYXRpb24gdGhyb3VnaCBgJHNldCgpYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHNjaGVtYU9ubHksIC8vIHdldGhlciB0byBvbmx5IGluY2x1ZGUgZGF0YSBjb3ZlcmVkIGJ5IHRoZSBzY2hlbWEsIG9yIGFsbCBkYXRhXG4gIHRhcmdldFxufSA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgc2NoZW1hT25seSwgdGFyZ2V0LCByb290RGF0YTogZGF0YSB9XG4gIGNvbnN0IHByb2Nlc3NlZERhdGEgPSBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBkYXRhLCBvcHRpb25zKVxuICBjb25zdCBncmFwaCA9IG5ldyBTY2hlbWFHcmFwaCgpXG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIG9wdGlvbnMpXG4gICAgLy8gVGhlIHNjaGVtYSBleHBlY3RzIHRoZSBgd3JhcFByaW1pdGl2ZXNgIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBwcmVzZW50IG9uXG4gICAgLy8gdGhlIGRhdGEgdGhhdCBpdCBpcyBhcHBsaWVkIG9uLCBzbyB3YXJwIGJlZm9yZSBhbmQgdW53cmFwIGFmdGVyLlxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgb3JkZXJLZXksIGlkS2V5ID0gJ2lkJyB9ID0gc2NoZW1hXG4gICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZW50cnkgPT4gKHtcbiAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiBlbnRyeVxuICAgICAgICB9KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFsd2F5cyBzaGFsbG93LWNsb25lIGFycmF5IHZhbHVlczpcbiAgICAgICAgdmFsdWUgPSBbLi4udmFsdWVdXG4gICAgICB9XG4gICAgICBpZiAob3JkZXJLZXkgJiYgdGFyZ2V0ID09PSAnY2xpcGJvYXJkJykge1xuICAgICAgICAvLyBTb3J0IHRoZSBkYXRhIGJhY2sgaW50byB0aGUgbmF0dXJhbCBzZXF1ZW5jZSBhcyBkZWZpbmVkIGJ5IHRoZWlyIGlkcyxcbiAgICAgICAgLy8gc28gY29weS1wYXN0aW5nIGJldHdlZW4gc2VydmVycyAoZS5nLiBuZXN0ZWQgZm9udC1jdXRzIG9uIExpbmV0bylcbiAgICAgICAgLy8gbmF0dXJhbGx5IGdldHMgbWFwcGVkIHRvIHRoZSBzYW1lIGVudHJpZXMgaW4gdGhlIGdyYXBoLlxuICAgICAgICB2YWx1ZS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQxID0gYT8uW2lkS2V5XVxuICAgICAgICAgIGNvbnN0IGlkMiA9IGI/LltpZEtleV1cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaWQxID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDEpID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMikgPyAtMVxuICAgICAgICAgICAgOiBpZDEgLSBpZDJcbiAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgdmFsdWUsXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGE6IG9wdGlvbnMucm9vdERhdGEsXG4gICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICBwcm9jZXNzZWREYXRhXG4gICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBmaXJzdCwgaWYgb25lIGlzIHByb3ZpZGVkLCBzbyB0aGF0XG4gICAgLy8gaXQgY2FuIG1vZGlmeSBkYXRhIGluIGBwcm9jZXNzZWREYXRhYCBldmVuIGlmIGl0IHByb3ZpZGVzIGBleGNsdWRlOiB0cnVlYFxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICB2YWx1ZSA9IHByb2Nlc3MoZ2V0Q29udGV4dCgpKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICAgIC8vIFN1cHBvcnQgZnVuY3Rpb25zIG5leHQgdG8gYm9vbGVhbnMgZm9yIGBzY2hlbWEuZXhjbHVkZWA6XG4gICAgICBleGNsdWRlID09PSB0cnVlIHx8XG4gICAgICBpc0Z1bmN0aW9uKGV4Y2x1ZGUpICYmIGV4Y2x1ZGUoZ2V0Q29udGV4dCgpKVxuICAgICkge1xuICAgICAgZGVsZXRlIHByb2Nlc3NlZERhdGFbbmFtZV1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IHR5cGVPcHRpb25zPy5wcm9jZXNzVmFsdWVcbiAgICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgZGF0YVBhdGgsXG4gICAgcHJvY2Vzc2VkRGF0YSxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIHByb2Nlc3NBZnRlcixcbiAgICBvcHRpb25zXG4gIClcblxuICByZXR1cm4gZ3JhcGgucHJvY2Vzcyhzb3VyY2VTY2hlbWEsIHByb2Nlc3NlZERhdGEsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgc2NoZW1hLFxuICBkYXRhLFxuICBkYXRhUGF0aCxcbiAgcHJvY2Vzc2VkRGF0YSxcbiAgcHJvY2Vzc0JlZm9yZSxcbiAgcHJvY2Vzc0FmdGVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgcHJvY2Vzc0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+IHtcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IChkYXRhUGF0aCwgdG9rZW4pID0+IGRhdGFQYXRoICE9IG51bGxcbiAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKVxuICAgICAgOiBudWxsXG5cbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgY29tcG9uZW50U2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoIWlzTmVzdGVkKGNvbXBvbmVudFNjaGVtYSkpIHtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gdW5uZXN0ZWQgY29tcG9uZW50cy5cbiAgICAgICAgICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgIHByb2Nlc3NlZERhdGEsXG4gICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgcHJvY2Vzc0FmdGVyLFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnREYXRhUGF0aCA9IGdldERhdGFQYXRoKGRhdGFQYXRoLCBuYW1lKVxuXG4gICAgICAgICAgY29uc3QgcHJvY2Vzc0l0ZW0gPSAoaXRlbSwgaW5kZXggPSBudWxsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGF0aCA9IGluZGV4ICE9PSBudWxsXG4gICAgICAgICAgICAgID8gZ2V0RGF0YVBhdGgoY29tcG9uZW50RGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICAgZ2V0Rm9ybVNjaGVtYXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybXMoY29tcG9uZW50U2NoZW1hLCBjb250ZXh0KVxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKVxuICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IGNsb25lSXRlbShjb21wb25lbnRTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHByb2Nlc3NBZnRlcj8uKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLCBkYXRhLCBuYW1lLCBjb21wb25lbnREYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBpZiAoc2NoZW1hLnRhYnMpIHtcbiAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSkge1xuICAgICAgcHJvY2Vzc0NvbXBvbmVudHModGFiLmNvbXBvbmVudHMpXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0QWxsUGFuZWxTY2hlbWFzKHNjaGVtYSwgZGF0YVBhdGgpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuc2NoZW1hLmNvbXBvbmVudHMpXG4gIH1cblxuICByZXR1cm4gcHJvY2Vzc2VkRGF0YSB8fCBkYXRhXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW1lZFNjaGVtYXMoZGVzY3JpcHRpb25zLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdG9TY2hlbWEodmFsdWUpXG4gICAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID0gc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICA/IHsgLi4uZGVmYXVsdHMsIC4uLnNjaGVtYSB9XG4gICAgICAgICAgICA6IHNjaGVtYVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgIH0sIHt9KVxuICAgICAgOiBudWxsXG4gIH1cblxuICByZXR1cm4gaXNBcnJheShkZXNjcmlwdGlvbnMpXG4gICAgPyB0b09iamVjdChkZXNjcmlwdGlvbnMsIHZhbHVlID0+IChcbiAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHZhbHVlIDoge1xuICAgICAgICBuYW1lOiBjYW1lbGl6ZSh2YWx1ZSwgZmFsc2UpXG4gICAgICB9XG4gICAgKSlcbiAgICA6IGlzT2JqZWN0KGRlc2NyaXB0aW9ucylcbiAgICAgID8gdG9PYmplY3QoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucyksXG4gICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgIGlzT2JqZWN0KHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAuLi52YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKSA/IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblNjaGVtYXMoYnV0dG9ucykge1xuICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKFxuICAgIGJ1dHRvbnMsXG4gICAgeyB0eXBlOiAnYnV0dG9uJyB9IC8vIERlZmF1bHRzXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYU9yVHlwZSkgPyBzY2hlbWFPclR5cGUudHlwZSA6IHNjaGVtYU9yVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KGdldFR5cGUoc2NoZW1hT3JUeXBlKSwgdHJ1ZSk/Lm9wdGlvbnMgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSk/LmdldFNvdXJjZVR5cGU/LihcbiAgICBnZXRUeXBlKHNjaGVtYU9yVHlwZSlcbiAgKSA/PyBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgc2NoZW1hLFxuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICBkYXRhUGF0aDogc2NoZW1hLm5hbWVcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogZGF0YVBhdGgsXG4gICAgICB0YWJDb21wb25lbnRcbiAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hcywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzID0gW10pIHtcbiAgaWYgKHNjaGVtYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hcykpIHtcbiAgICAgIGNvbnN0IHBhbmVsID0gZ2V0UGFuZWxTY2hlbWEoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGtleSksXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKHBhbmVsKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGgsXG4gIHNjaGVtYUNvbXBvbmVudCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGxcbikge1xuICBjb25zdCBwYW5lbCA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmdldFBhbmVsU2NoZW1hPy4oXG4gICAgc2NoZW1hLFxuICAgIGRhdGFQYXRoLFxuICAgIHNjaGVtYUNvbXBvbmVudFxuICApXG4gIGNvbnN0IHBhbmVscyA9IHBhbmVsID8gW2dldFBhbmVsU2NoZW1hKHBhbmVsLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV0gOiBbXVxuICAvLyBBbGxvdyBlYWNoIGNvbXBvbmVudCB0byBwcm92aWRlIGl0cyBvd24gc2V0IG9mIHBhbmVscywgaW5cbiAgLy8gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgb25lIChlLmcuICRmaWx0ZXIpOlxuICBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hLnBhbmVscywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxzKVxuICByZXR1cm4gcGFuZWxzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ29iamVjdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ2xpc3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIGNvbnN0IGlkID0gaXRlbVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgcmV0dXJuIGlkICE9IG51bGwgPyBTdHJpbmcoaWQpIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICAvLyBUcnkgdG8gdXNlIHRoZSBpdGVtIGlkIGFzIHRoZSB1aWQsIGZhbGxpbmcgYmFjayBvbiBhdXRvLWdlbmVyYXRlZCBpZHMsIGJ1dFxuICAvLyBlaXRoZXIgd2F5LCBwYXNzIHRocm91Z2ggYGdldFVpZCgpYCBzbyB0aGF0IHRoZSBpZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgLy8gaXRlbSB0aHJvdWdoIGEgd2VhayBtYXAsIGFzIHRoZSBpZHMgY2FuIGJlIGZpbHRlcmVkIG91dCBpbiBgcHJvY2Vzc0RhdGEoKWBcbiAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHVpZHMgYXMga2V5IGFyZSBzdGlsbCB2aXNpYmxlLlxuICByZXR1cm4gZ2V0VWlkKGl0ZW0sIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pKVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiBudWxsLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlXG4gICAgfSxcblxuICAgIGNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUeXBlQ29tcG9uZW50KHRoaXMuc2NoZW1hLmNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEuZm9ybWF0YCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgPyBmb3JtYXQuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5wYXJzZWAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSA9IHBhcnNlXG4gICAgICAgICAgPyBwYXJzZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB0aGlzLnBhcnNlZFZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgaXRlbXMgdGhyb3VnaCB0aGUgc2NoZW1hQ29tcG9uZW50LCBidXRcbiAgICAgIC8vIHRoYXQncyBub3QgbmVjZXNzYXJpbHkgdGhlIGl0ZW0gcmVwcmVzZW50ZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAgICAvLyBTb2x1dGlvbjogRmluZCB0aGUgcmVsYXRpdmUgcGF0aCBhbmQgdGhlIHByb2Nlc3NlZCBzdWItaXRlbSBmcm9tIHRoZXJlOlxuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBnZXRJdGVtKFxuICAgICAgICBzY2hlbWFDb21wb25lbnQucHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgLy8gR2V0IHRoZSBkYXRhUGF0aCByZWxhdGl2ZSB0byB0aGUgc2NoZW1hQ29tcG9uZW50J3MgZGF0YTpcbiAgICAgICAgdGhpcy5kYXRhUGF0aC5zbGljZShzY2hlbWFDb21wb25lbnQuZGF0YVBhdGgubGVuZ3RoKSxcbiAgICAgICAgdGhpcy5uZXN0ZWRcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdsYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEJvb2xlYW5dLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyhsYWJlbClcbiAgICAgICAgICA/IGxhYmVsXG4gICAgICAgICAgOiBsYWJlbCAhPT0gZmFsc2UgJiYgdGhpcy4kb3B0aW9ucy5nZW5lcmF0ZUxhYmVsXG4gICAgICAgICAgICA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdXG4gICAgfSksXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBleGNsdWRlZGAgZm9yIGNvbnNpc3RlbnQgbmFtaW5nXG4gICAgZXhjbHVkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4Y2x1ZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlcXVpcmVkOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVxdWlyZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gYSBzdWItY2xhc3MgY29tcG9uZW50IHVzZWQgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzP1xuICAgIHJlYWRvbmx5OiBnZXRTY2hlbWFBY2Nlc3NvcigncmVhZG9ubHknLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGF1dG9mb2N1czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9mb2N1cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVG8gYmUgdXNlZCBmb3Igc2VsZWN0cyBhbmQgaW5wdXRzIG9ubHk/XG4gICAgY2xlYXJhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xlYXJhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cblxuICAgICAgaWYgKG5hdGl2ZUZpZWxkKSB7XG4gICAgICAgIGF0dHJpYnV0ZXMubmFtZSA9IHRoaXMubmFtZVxuICAgICAgICBpZiAodGhpcy5sYWJlbCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMudGl0bGUgPSB0aGlzLmxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgYXR0cmlidXRlcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHlcbiAgICAgICAgYXR0cmlidXRlcy5hdXRvZm9jdXMgPSB0aGlzLmF1dG9mb2N1c1xuICAgICAgICBpZiAodGV4dEZpZWxkKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy5wbGFjZWhvbGRlciA9IHRoaXMucGxhY2Vob2xkZXJcbiAgICAgICAgICBhdHRyaWJ1dGVzLmF1dG9jb21wbGV0ZSA9IHRoaXMuYXV0b2NvbXBsZXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMuZ2V0TGlzdGVuZXJzKClcbiAgICAgIGNvbnN0IHsgZXZlbnRzID0ge30gfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyhldmVudHMpKSB7XG4gICAgICAgICAgbGlzdGVuZXJzW2V2ZW50XSB8fD0gKCkgPT4gdGhpcy5lbWl0RXZlbnQoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0ZW5lcnNcbiAgICB9LFxuXG4gICAgdmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHsgLi4udGhpcy5nZXRWYWxpZGF0aW9ucygpIH1cbiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJlcXVpcmVkID0gdHJ1ZVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGRlZmF1bHQgcnVsZXMgYW5kIGFkZCBhbnkgbmV3IG9uZXM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5ydWxlcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZWxldGUgdmFsaWRhdGlvbnNba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gTk9URTogVGhpcyBpcyBvdmVycmlkZGVuIGluIFJlc291cmNlTWl4aW4sIHVzZWQgYnkgbGlzdHMuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc2hvd0NsZWFyQnV0dG9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlICYmIHRoaXMudmFsdWUgIT0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgICAgLy8gSW5zdGFsbCAvIHJlbW92ZSB0aGUgZmllbGQgZXZlbnRzIHRvIHdhdGNoIG9mIGNoYW5nZXMgYW5kIGhhbmRsZVxuICAgICAgICAvLyB2YWxpZGF0aW9uIGZsYWdzLiBgZXZlbnRzYCBpcyBwcm92aWRlZCBieSBgVmFsaWRhdGlvbk1peGluLmV2ZW50cygpYFxuICAgICAgICB0aGlzW2FkZCA/ICdvbicgOiAnb2ZmJ10odGhpcy5ldmVudHMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBpbnB1dDogdGhpcy5vbklucHV0LFxuICAgICAgICBjaGFuZ2U6IHRoaXMub25DaGFuZ2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBbZWxlbWVudF0gPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZCwgYGZvY3VzKClgIHdpbGwgbGlrZWx5IG5vdCBoYXZlIHRoZVxuICAgICAgICAgIC8vIGRlc2lyZWQgZWZmZWN0LiBVc2UgYHNjcm9sbEludG9WaWV3KClgIGlmIGF2YWlsYWJsZTpcbiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgKGVsZW1lbnQuJGVsIHx8IGVsZW1lbnQpLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICAvLyBBbHNvIGZvY3VzIHRoaXMgY29tcG9uZW50J3Mgc2NoZW1hIGFuZCBwYW5lbCBpbiBjYXNlIGl0J3MgYSB0YWIuXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5mb2N1cygpXG4gICAgICB0aGlzLnRhYkNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5mb2N1c0VsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICB9LFxuXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWVcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLmVtaXRFdmVudCgnYmx1cicpXG4gICAgfSxcblxuICAgIG9uSW5wdXQoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5wdXQnKVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnLCB7XG4gICAgICAgIGNvbnRleHQ6IHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyB2YWx1ZTogdGhpcy5wYXJzZWRWYWx1ZSB9XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICAvLyBQYXNzIGBzY2hlbWFDb21wb25lbnRgIGFzIHBhcmVudCwgc28gY2hhbmdlIGV2ZW50cyBjYW4gcHJvcGFnYXRlIHVwLlxuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBpc1Byb21pc2UgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuL21peGlucy9EaXRvTWl4aW4uanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgY29tcG9uZW50cyA9IHt9XG5cbmNvbnN0IERpdG9Db21wb25lbnQgPSBWdWUuZXh0ZW5kKHtcbiAgLy8gTWFrZSBzdXJlIHRoYXQgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGFyZSBwcmVzZW50IGluIGFsbCBEaXRvQ29tcG9uZW50LlxuICBjb21wb25lbnRzLFxuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50LFxuXG4gICAgcmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIG1peGlucyA9IFtdKSB7XG4gICAgICAvLyBBIGhlbHBlciBtZXRob2QgdG8gYWxsb3cgdGhyZWUgdGhpbmdzOlxuICAgICAgLy8gLSBXaGVuIHVzZWQgaW4gYSBjb21wdXRlZCBwcm9wZXJ0eSwgaXQgcmVtb3ZlcyB0aGUgbmVlZCB0byBoYXZlIHRvXG4gICAgICAvLyAgIGxvYWQgY29tcG9uZW50cyB3aXRoIGFzeW5jIGZ1bmN0aW9ucyBgY29tcG9uZW50OiAoKSA9PiBpbXBvcnQoLi4uKWAuXG4gICAgICAvLyAgIGluc3RlYWQsIHRoZXkgY2FuIGJlIGRpcmVjdGx5IHByb3ZpZGVkOiBgY29tcG9uZW50OiBpbXBvcnQoLi4uKWBcbiAgICAgIC8vIC0gVGhlIHByb3BlcnRpZXMgcGFzc2VkIHRvIHN1Y2ggY29tcG9uZW50cyBkb24ndCBuZWVkIHRvIGJlIGRlZmluZWQuXG4gICAgICAvLyAgIEluc3RlYWQsIHRoZSBwcm92aWRlZCBtaXhpbnMgYXJlIGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkLlxuICAgICAgLy8gLSBUaGUgY29tcG9uZW50IGNhbiB1c2UgYWxsIGludGVybmFsIGNvbXBvbmVudHMga25vd24gdG8gRGl0by5qcyBBZG1pbi5cbiAgICAgIHJldHVybiBjb21wb25lbnRcbiAgICAgICAgPyBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gQXQgZmlyc3QsIHJlc29sdmUgY29tcG9uZW50IGlzIGl0IGlzIGxvYWRlZCBhc3luY2hyb25vdXNseS5cbiAgICAgICAgICBsZXQgY29tcCA9IGlzRnVuY3Rpb24oY29tcG9uZW50KSA/IGF3YWl0IGNvbXBvbmVudCgpXG4gICAgICAgICAgICA6IGlzUHJvbWlzZShjb21wb25lbnQpID8gYXdhaXQgY29tcG9uZW50XG4gICAgICAgICAgICA6IGNvbXBvbmVudFxuICAgICAgICAgIGNvbXAgPSBjb21wPy5kZWZhdWx0IHx8IGNvbXBcbiAgICAgICAgICBjb21wLm1peGlucyA9IG1peGluc1xuICAgICAgICAgIGNvbXAuY29tcG9uZW50cyA9IGNvbXBvbmVudHNcbiAgICAgICAgICByZXR1cm4gY29tcFxuICAgICAgICB9XG4gICAgICAgIDogY29tcG9uZW50XG4gICAgfSxcblxuICAgIHJlc29sdmVEaXRvQ29tcG9uZW50KGNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUNvbXBvbmVudChjb21wb25lbnQsIFtEaXRvTWl4aW5dKVxuICAgIH0sXG5cbiAgICByZXNvbHZlVHlwZUNvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBbRGl0b01peGluLCBUeXBlTWl4aW5dKVxuICAgIH1cbiAgfVxufSlcblxuRGl0b0NvbXBvbmVudC5jb21wb25lbnQgPSBmdW5jdGlvbihuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIG5hbWUsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfVxuICAgIGNvbnN0IGN0b3IgPSB0aGlzLmV4dGVuZChvcHRpb25zKVxuICAgIGNvbXBvbmVudHNbbmFtZV0gPSBjdG9yXG4gICAgcmV0dXJuIGN0b3JcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXSB8fCBWdWUuY29tcG9uZW50KG5hbWUpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudFxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS9kZXN0cm95ZWQoKWAgb24gaXRzXG4gICAgLy8gJHBhcmVudCwgaWYgdGhlIHBhcmVudCB1c2VzIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgIF9yZWdpc3RlclNjaGVtYUNvbXBvbmVudChzY2hlbWFDb21wb25lbnQsIGFkZCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMucHVzaChzY2hlbWFDb21wb25lbnQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnNwbGljZShzY2hlbWFDb21wb25lbnRzLmluZGV4T2Yoc2NoZW1hQ29tcG9uZW50KSwgMSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnJlZHVjZShcbiAgICAgICAgKHJlc3VsdCwgeyBlcnJvcnMgfSkgPT5cbiAgICAgICAgICBlcnJvcnMgJiYgcmVzdWx0ID8gcmVzdWx0LmNvbmNhdChlcnJvcnMpIDogZXJyb3JzLFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5KSlcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZlcmlmeUFsbChtYXRjaCkpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LnJlc2V0VmFsaWRhdGlvbigpKVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKGl0ID0+IGl0LmNsZWFyRXJyb3JzKCkpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5mb3JFYWNoKFxuICAgICAgICBpdCA9PiBpdC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKVxuICAgICAgKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldENvbW1vblByZWZpeCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlUm91dGVVcGRhdGUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzLmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBFYWNoIHJvdXRlLWNvbXBvbmVudCBkZWZpbmVzIGEgc3RvcmUgdGhhdCBnZXRzIHBhc3NlZCBvbiB0byBpdHNcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMsIHNvIHRoZXkgY2FuIHN0b3JlIHZhbHVlcyBpbiB0aGVtIHRoYXQgbGl2ZSBiZXlvbmRcbiAgICAgIC8vIHRoZWlyIGxpZmUtY3ljbGUuIFNlZTogRGl0b1BhbmUsIFNvdXJjZU1peGluXG4gICAgICBzdG9yZToge30sXG4gICAgICBsb2FkQ2FjaGU6IHt9IC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyByb3V0ZUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcm91dGVSZWNvcmQoKSB7XG4gICAgICAvLyBUT0RPOiBDYW4gdGhpcy4kcm91dGUuY3VycmVudFJvdXRlIGJlIG9mIHVzZSBzb21ld2hlcmUgaGVyZT9cbiAgICAgIC8vIFJldHJpZXZlIHRoZSByb3V0ZS1yZWNvcmQgdG8gd2hpY2ggdGhpcyBjb21wb25lbnQgd2FzIG1hcHBlZCB0bzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzM4I2lzc3VlY29tbWVudC0yOTYzODE0NTlcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMuJHZub2RlLmRhdGEucm91dGVyVmlld0RlcHRoXVxuICAgIH0sXG5cbiAgICBpc0xhc3RSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSB3aGVuIHRoaXMgcm91dGVyIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IG1hdGNoZWRbbWF0Y2hlZC5sZW5ndGggLSAxXVxuICAgIH0sXG5cbiAgICBpc0xhc3RVbm5lc3RlZFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgcm91dGUgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUgdGhhdFxuICAgICAgLy8gbmVlZHMgaXRzIG93biByb3V0ZXItdmlldyAoPSBpcyBub3QgbmVzdGVkKS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIGZvciAobGV0IGkgPSBtYXRjaGVkLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IG1hdGNoZWRbaV1cbiAgICAgICAgaWYgKCFyZWNvcmQubWV0YS5uZXN0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gcmVjb3JkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc05lc3RlZFJvdXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5uZXN0ZWRcbiAgICB9LFxuXG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkPy5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZC5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9lc011dGF0ZSkge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aFxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoMCwgdGVtcGxhdGVQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAuam9pbignLycpXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCJcbi8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbi8vIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4vLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbnJvdXRlci12aWV3KFxuICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgOmtleT1cIm5hbWVcIlxuKVxuLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4pXG4gIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8gT25seSByZW5kZXIgRGl0b1ZpZXcgd2hlbiBpdCBpcyBhY3RpdmUsIG90aGVyd2lzZSBhIG5vcm1hbCByb3V0ZXItdmlld1xuICAvLyBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbiAgLy8gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4gIC8vIHVzZWQgdG8gYWx3YXlzIHJlbmRlciBmb3JtcyBldmVuIHdoZW4gb3RoZXIgbmVzdGVkIGZvcm1zIGFyZSBwcmVzZW50LlxuICByb3V0ZXItdmlldyhcbiAgICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgICA6a2V5PVwibmFtZVwiXG4gIClcbiAgLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1lbHNlLWlmPVwic2hvdWxkUmVuZGVyKHZpZXdTY2hlbWEpXCJcbiAgKVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgeyBzb21lU2NoZW1hQ29tcG9uZW50LCBpc1NpbmdsZUNvbXBvbmVudFZpZXcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdmlldycsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICAvLyBSZWRpcmVjdCAkc291cmNlQ29tcG9uZW50IGFuZCAkcmVzb3VyY2VDb21wb25lbnQgdG8gdGhlIG1haW4gY29tcG9uZW50OlxuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnNvdXJjZUNvbXBvbmVudCB8fCBudWxsLFxuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnJlc291cmNlQ29tcG9uZW50IHx8IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNWaWV3OiB0cnVlLFxuICAgICAgLy8gVXBkYXRlZCBmcm9tIExvYWRpbmdNaXhpbiB0aHJvdWdoIGBzZXRMb2FkaW5nKGlzTG9hZGluZylgOlxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIC8vIE5PVEU6IERhdGEgaXMgc2hhcmVkIGFjcm9zcyBhbGwgdmlld3MgYmVjYXVzZSB0aGUgcm91dGVyIHJlY3ljbGVzIHRoZVxuICAgICAgLy8gRGl0b1ZpZXcgY29tcG9uZW50LlxuICAgICAgZGF0YToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLnNjaGVtYVxuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnRWaWV3KCkge1xuICAgICAgcmV0dXJuIGlzU2luZ2xlQ29tcG9uZW50Vmlldyh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgbWFpbkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aCh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHZpZXdTY2hlbWEoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgLy8gVHJhbnNsYXRlIHNpbmdsZS1jb21wb25lbnQgc2NoZW1hcyBpbnRvIG11bHRpLWNvbXBvbmVudCBzY2hlbWFzLFxuICAgICAgLy8gc28gdGhleSBjYW4gYmUgcmVuZGVyZWQgZGlyZWN0bHkgdGhyb3VnaCBEaXRvU2NoZW1hIGFsc286XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgbmFtZTogc2NoZW1hLm5hbWUsXG4gICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgW3NjaGVtYS5uYW1lXToge1xuICAgICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICAgIGxhYmVsOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZVNjaGVtYUNvbXBvbmVudChcbiAgICAgICAgdGhpcy52aWV3U2NoZW1hLFxuICAgICAgICBjb21wb25lbnQgPT4gaGFzUmVzb3VyY2UoY29tcG9uZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgLy8gU2VlIGlmIHRoZSByb3V0ZSBjaGFuZ2VzIGNvbXBsZXRlbHksIGFuZCBjbGVhciB0aGUgZGF0YSBpZiBpdCBkb2VzLlxuICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhID0ge31cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tSGFuZGxlcnM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbW92ZSB9IG9mIHRoaXMuZG9tSGFuZGxlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICAgIHRoaXMuZG9tSGFuZGxlcnMgPSBbXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb21PbihlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRFdmVudHMoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlzT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgW3R5cGVdOiBoYW5kbGVyIH1cbiAgICAgIClcbiAgICAgIHRoaXMuZG9tSGFuZGxlcnMucHVzaChyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXJvb3RcbiAgbW9kYWxzLWNvbnRhaW5lclxuICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgKVxuICBkaXRvLW1lbnVcbiAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgZGl0by1oZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgICBkaXRvLWFjY291bnQoXG4gICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgIClcbiAgICAgIGEuZGl0by1sb2dpbihcbiAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgICApXG4gICAgICAgIHNwYW4gTG9naW5cbiAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcm9vdFxuICAgIG1vZGFscy1jb250YWluZXJcbiAgICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICAgIHJlZj1cIm5vdGlmaWNhdGlvbnNcIlxuICAgICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgICApXG4gICAgZGl0by1tZW51XG4gICAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgICBkaXRvLWhlYWRlcihcbiAgICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIClcbiAgICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgICAgKVxuICAgICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNwYW4gTG9naW5cbiAgICAgIHJvdXRlci12aWV3XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL3N0eWxlLnNhc3MnXG5cbiAgLmRpdG8tcm9vdFxuICAgIGhlaWdodDogMTAwJVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdlXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAvLyBUaGUgcm9vdC1sZXZlbCB2aWV3cyBhbmQgZm9ybXMgbWF5IGhhdmUgYSBgLmRpdG8tc2NoZW1hLWhlYWRlcmAgdGhhdFxuICAgICAgLy8gc2hvdWxkIGFwcGVhciBsYXllcmVkIG92ZXIgYC5kaXRvLW1lbnVgLCB3aGlsZSBoYXZpbmcgYG92ZXJsYXk6IGhpZGRlbmBcbiAgICAgIC8vIHNldCBieSBgLmRpdG8tc2Nyb2xsLXBhcmVudGAgdG8gZGVsZWdhdGUgc2Nyb2xsaW5nIHRvIGAuZGl0by1zY3JvbGxgLlxuICAgICAgLy8gSW4gb3JkZXIgdG8gbm90IGhhdmUgdGhlIGhlYWRlciBjbGlwcGVkLCBhZGp1c3QgdGhlIHRvcCBoZXJlOlxuICAgICAgPiAuZGl0by1mb3JtLFxuICAgICAgPiAuZGl0by12aWV3XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWVudS1oZWlnaHRcbiAgICAgICAgcGFkZGluZy10b3A6ICRtZW51LWhlaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGFzQXJyYXksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IHByb2Nlc3NWaWV3LCByZXNvbHZlU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXJvb3QnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgYWxsb3dMb2dpbjogZmFsc2UsXG4gICAgICBsb2FkaW5nQ291bnQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5hcHBTdGF0ZS50aXRsZSA9IGRvY3VtZW50LnRpdGxlIHx8ICdEaXRvLmpzIEFkbWluJ1xuICAgIC8vIFdpdGggaG90LXJlbG9hZGluZywgaXQgbG9va3MgbGlrZSBkZXN0cm95ZWQgaG9va3MgYXJlbid0IGFsd2F5cyBjYWxsZWRcbiAgICAvLyBmb3Igcm91dGUgY29tcG9uZW50cyBzbyByZXNldCB0aGUgYXJyYXkgb2YgcmVnaXN0ZXJlZCBjb21wb25lbnRzIGluc3RlYWQuXG4gICAgdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMgPSBbXVxuICB9LFxuXG4gIGFzeW5jIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2xlYXIgdGhlIGxhYmVsIG1hcmtlZCBhcyBhY3RpdmUgb24gYWxsIG1vdXNlIGFuZCBrZXlib2FyZCBldmVudHMsIGV4Y2VwdFxuICAgIC8vIHRoZSBvbmVzIHRoYXQgRGl0b0xhYmVsIGl0c2VsZiBpbnRlcmNlcHRzLlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNsaWNrOiBldmVudCA9PiB7XG4gICAgICAgIGlmICghZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5kaXRvLWxhYmVsJykpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0ge1xuICAgICAgICB3YXJuaW5nOiAnV2FybmluZycsXG4gICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuICAgICAgICBzdWNjZXNzOiAnU3VjY2VzcydcbiAgICAgIH1bdHlwZV0gfHwgJ05vdGlmaWNhdGlvbidcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0ge1xuICAgICAgICB3YXJuaW5nOiAnd2FybicsXG4gICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICBpbmZvOiAnbG9nJyxcbiAgICAgICAgc3VjY2VzczogJ2xvZydcbiAgICAgIH1bdHlwZV0gfHwgJ2Vycm9yJ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9naW4oKSB7XG4gICAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFkZGl0aW9uYWxDb21wb25lbnRzLFxuICAgICAgICByZWRpcmVjdEFmdGVyTG9naW5cbiAgICAgIH0gPSB0aGlzLm9wdGlvbnMubG9naW4gfHwge31cbiAgICAgIGNvbnN0IGxvZ2luRGF0YSA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICB1c2VybmFtZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXNzd29yZDoge1xuICAgICAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uYWRkaXRpb25hbENvbXBvbmVudHNcbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgbG9naW46IHsgdHlwZTogJ3N1Ym1pdCcgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvciB8fCBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIucmVzcG9uc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHRoaXMudW5yZXNvbHZlZFZpZXdzKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCFlcnJvci5yZXF1ZXN0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgICAvLyBDb2xsZWN0IGFsbCByb3V0ZXMgZnJvbSB0aGUgcm9vdCBzY2hlbWEgY29tcG9uZW50c1xuICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgIGNvbnN0IHByb21pc2VzID0gW11cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHByb2Nlc3NWaWV3KERpdG9WaWV3LCB0aGlzLmFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMpKVxuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgICAgICB0aGlzLiRyb3V0ZXIuYWRkUm91dGUocm91dGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbm5hdi5kaXRvLW1lbnUuZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIHVsLmRpdG8tc2Nyb2xsXG4gICAgbGkodi1mb3I9XCJ2aWV3IGluIHZpZXdzXCIpXG4gICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICA6dG89XCJgLyR7dmlldy5wYXRofWBcIlxuICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBuYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gICAgdWwuZGl0by1zY3JvbGxcbiAgICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih2aWV3KVwiXG4gICAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1tZW51XG4gICAgZmxleDogaW5pdGlhbFxuICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHVsXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlclxuICAgICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXN0eWxlXG4gICAgYSxcbiAgICBoMVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICBoMVxuICAgICAgcGFkZGluZzogJG1lbnUtcGFkZGluZ1xuICAgICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlclxuICAgICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1kYXJrZXN0XG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tbGlua1xuICAgICAgcGFkZGluZzogJG1lbnUtcGFkZGluZ1xuICAgICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgICAmLmRpdG8tYWN0aXZlXG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAuZGl0by1saW5rXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSk6bm90KC5kaXRvLWFjdGl2ZSlcbiAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctZm9jdXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tbWVudScsIHt9KVxuPC9zY3JpcHQ+XG4iLCJcbjxkaXYgY2xhc3M9XCJ2LXNwaW5uZXJcIiB2LXNob3c9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTFcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTFdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTJcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTJdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTNcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTNdXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuIiwiPHRlbXBsYXRlPlxuPGRpdiBjbGFzcz1cInYtc3Bpbm5lclwiIHYtc2hvdz1cImxvYWRpbmdcIj5cbiAgICA8ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMVwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5MV1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlMlwiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5Ml1cIj5cbiAgICA8L2Rpdj48ZGl2IGNsYXNzPVwidi1wdWxzZSB2LXB1bHNlM1wiIHYtYmluZDpzdHlsZT1cIltzcGlubmVyU3R5bGUsc3Bpbm5lckRlbGF5M11cIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBcbiAgbmFtZTogJ1B1bHNlTG9hZGVyJyxcblxuICBwcm9wczoge1xuICAgIGxvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjogeyBcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcjNWRjNTk2J1xuICAgIH0sXG4gICAgc2l6ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzE1cHgnXG4gICAgfSxcbiAgICBtYXJnaW46IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcycHgnXG4gICAgfSxcbiAgICByYWRpdXM6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxMDAlJ1xuICAgIH1cbiAgfSxcbiAgZGF0YSAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNwaW5uZXJTdHlsZToge1xuICAgICAgXHRiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuY29sb3IsXG4gICAgICBcdHdpZHRoOiB0aGlzLnNpemUsXG4gICAgICAgIGhlaWdodDogdGhpcy5zaXplLFxuICAgICAgXHRtYXJnaW46IHRoaXMubWFyZ2luLFxuICAgICAgXHRib3JkZXJSYWRpdXM6IHRoaXMucmFkaXVzLFxuICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgYW5pbWF0aW9uTmFtZTogJ3YtcHVsc2VTdHJldGNoRGVsYXknLFxuICAgICAgICBhbmltYXRpb25EdXJhdGlvbjogJzAuNzVzJyxcbiAgICAgICAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ICdpbmZpbml0ZScsXG4gICAgICAgIGFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uOiAnY3ViaWMtYmV6aWVyKC4yLC42OCwuMTgsMS4wOCknLFxuICAgICAgICBhbmltYXRpb25GaWxsTW9kZTogJ2JvdGgnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5MToge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMTJzJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTI6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjI0cydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkzOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4zNnMnXG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4vKi52LXNwaW5uZXJcbntcbiAgICBtYXJnaW46IDEwMHB4IGF1dG87XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuKi9cblxuQC13ZWJraXQta2V5ZnJhbWVzIHYtcHVsc2VTdHJldGNoRGVsYXlcbntcbiAgICAwJSxcbiAgICA4MCVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDE7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxuICAgIDQ1JVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAtd2Via2l0LW9wYWNpdHk6IDAuNzsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMC43O1xuICAgIH1cbn1cblxuQGtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5XG57XG4gICAgMCUsXG4gICAgODAlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAxOyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA0NSVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAwLjc7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG59XG48L3N0eWxlPiIsIlxubmF2LmRpdG8taGVhZGVyXG4gIC5kaXRvLXRyYWlsXG4gICAgdWxcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihjb21wb25lbnQsIGluZGV4KSBpbiB0cmFpbFwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgICAgcm91dGVyLWxpbmsuZGl0by1icmVhZGNydW1iKHYtZWxzZSwgOnRvPVwiY29tcG9uZW50LnBhdGhcIilcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgc3Bpbm5lci5kaXRvLXNwaW5uZXIodi1pZj1cImlzTG9hZGluZ1wiKVxuICBzbG90XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBuYXYuZGl0by1oZWFkZXJcbiAgICAuZGl0by10cmFpbFxuICAgICAgdWxcbiAgICAgICAgbGkoXG4gICAgICAgICAgdi1mb3I9XCIoY29tcG9uZW50LCBpbmRleCkgaW4gdHJhaWxcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImluZGV4ID09PSB0cmFpbC5sZW5ndGggLSAxXCIpXG4gICAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgICAgICByb3V0ZXItbGluay5kaXRvLWJyZWFkY3J1bWIodi1lbHNlLCA6dG89XCJjb21wb25lbnQucGF0aFwiKVxuICAgICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICBzcGlubmVyLmRpdG8tc3Bpbm5lcih2LWlmPVwiaXNMb2FkaW5nXCIpXG4gICAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWhlYWRlclxuICAgIGJhY2tncm91bmQ6ICRjb2xvci1ibGFja1xuICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplXG4gICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHNwYW5cbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgcGFkZGluZzogJG1lbnUtcGFkZGluZ1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLXRyYWlsXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBoZWlnaHQ6IDNlbVxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAkY29udGVudC1wYWRkaW5nXG4gICAgICB1bFxuICAgICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBhXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwLjRlbVxuICAgICAgICAkYW5nbGU6IDMzZGVnXG4gICAgICAgICY6aG92ZXJcbiAgICAgICAgICBjb2xvcjogIzk5OVxuICAgICAgICAmOjpiZWZvcmUsXG4gICAgICAgICY6OmFmdGVyXG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgICAgY29udGVudDogJydcbiAgICAgICAgICB3aWR0aDogMXB4XG4gICAgICAgICAgaGVpZ2h0OiAxLjJlbVxuICAgICAgICAgIHJpZ2h0OiAtMXB4XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtcbiAgICAgICAgJjo6YmVmb3JlXG4gICAgICAgICAgdG9wOiA1MCVcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgkYW5nbGUpXG4gICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wXG4gICAgICAgICY6OmFmdGVyXG4gICAgICAgICAgYm90dG9tOiA1MCVcbiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtJGFuZ2xlKVxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbVxuICAgIC5kaXRvLXNwaW5uZXJcbiAgICAgIG1hcmdpbi10b3A6ICRtZW51LXBhZGRpbmctdmVyXG4gICAgLmRpdG8tZGlydHlcbiAgICAgICY6YWZ0ZXJcbiAgICAgICAgY29udGVudDogJydcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgICB3aWR0aDogOHB4XG4gICAgICAgIGhlaWdodDogOHB4XG4gICAgICAgIG1hcmdpbjogMnB4XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwLjVlbVxuICAgICAgICBib3JkZXItcmFkaXVzOiAxMDAlXG4gICAgLmRpdG8tYWNjb3VudCxcbiAgICAuZGl0by1sb2dpblxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICB0b3A6IDBcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgIC5kaXRvLWFjY291bnRcbiAgICAgIGxlZnQ6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZyAqIDJcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bHNlTG9hZGVyIGZyb20gJ3Z1ZS1zcGlubmVyL3NyYy9QdWxzZUxvYWRlci52dWUnXG5cbmNvbnN0IFNwaW5uZXIgPSBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnc3Bpbm5lcicsIFB1bHNlTG9hZGVyKVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8taGVhZGVyJywge1xuICBjb21wb25lbnRzOiB7IFNwaW5uZXIgfSxcblxuICBwcm9wczoge1xuICAgIHNwaW5uZXI6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIGlzTG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHJhaWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5yb3V0ZUNvbXBvbmVudHMuZmlsdGVyKFxuICAgICAgICBjb21wb25lbnQgPT4gISFjb21wb25lbnQucm91dGVSZWNvcmRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBzaXplID0gJzhweCcsXG4gICAgICBjb2xvciA9ICcjOTk5J1xuICAgIH0gPSB0aGlzLnNwaW5uZXIgfHwge31cbiAgICBjb25zdCB7IHByb3BzIH0gPSBTcGlubmVyLm9wdGlvbnNcbiAgICBwcm9wcy5zaXplLmRlZmF1bHQgPSBzaXplXG4gICAgcHJvcHMuY29sb3IuZGVmYXVsdCA9IGNvbG9yXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWRpcnR5JzogY29tcG9uZW50LmlzRGlydHlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEb21NaXhpbiBmcm9tICcuL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbGRvd246IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgY2hlY2tUaW1lOiB0cnVlLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBtb3VzZWRvd246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblB1bGxkb3duTW91c2VVcChudWxsKSkge1xuICAgICAgICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyczogbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldFB1bGxkb3duT3Blbih0cnVlKVxuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93bk1vdXNlVXAodmFsdWUpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnRUaW1lIH0gPSB0aGlzLnB1bGxkb3duXG4gICAgICBpZiAoIXRoaXMuY2hlY2tUaW1lIHx8IHN0YXJ0VGltZSAmJiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDI1MCkpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMub25QdWxsZG93blNlbGVjdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KC8qIHZhbHVlICovKSB7XG4gICAgICAvLyBOT1RFOiBUbyBiZSBvdmVycmlkZGVuLlxuICAgIH0sXG5cbiAgICBzZXRQdWxsZG93bk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5wdWxsZG93bi5vcGVuID0gb3BlblxuICAgICAgdGhpcy5wdWxsZG93bi5zdGFydFRpbWUgPSBvcGVuID8gRGF0ZS5ub3coKSA6IDBcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB0aGlzLnB1bGxkb3duLmV2ZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tYWNjb3VudFxuICBhKFxuICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gIClcbiAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgdWwuZGl0by1wdWxsZG93bihcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICApXG4gICAgbGkoXG4gICAgICB2LWZvcj1cIihsYWJlbCwgdmFsdWUpIG9mIGl0ZW1zXCJcbiAgICApXG4gICAgICBhKFxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHZhbHVlKVwiXG4gICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodmFsdWUpXCJcbiAgICAgICkge3sgbGFiZWwgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWFjY291bnRcbiAgICBhKFxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICApXG4gICAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICApXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgICApXG4gICAgICAgIGEoXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodmFsdWUpXCJcbiAgICAgICAgKSB7eyBsYWJlbCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWFjY291bnRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgdG9wOiAkcHVsbGRvd24tcGFkZGluZy12ZXJcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1hY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LmxvZ291dCgpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgIGNvbnNvbGUuaW5mbygnVE9ETzogSW1wbGVtZW50IFNldHRpbmdzJylcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJcIilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgKVxuICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBmb3JtLmRpdG8tZGlhbG9nKEBzdWJtaXQucHJldmVudD1cIlwiKVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAudi0tbW9kYWwtb3ZlcmxheVxuICAgIHotaW5kZXg6IDIwMDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1kaWFsb2cnLCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBjb21wb25lbnRzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwcm9taXNlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBNYWtlIHN1cmUgZGlhbG9nIGRhdGEgY29udGFpbnMgYWxsIHRoZSBleHBlY3RlZCBrZXlzXG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IGNsb25lKHRoaXMuZGF0YSlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBkaWFsb2dEYXRhKSkge1xuICAgICAgICBkaWFsb2dEYXRhW2tleV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB3aW5kb3dFdmVudHM6IG51bGwsXG4gICAgICBkaWFsb2dEYXRhXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQubmFtZVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21wb25lbnRzOiB0aGlzLmNvbXBvbmVudHNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLnJlZHVjZShcbiAgICAgICAgLy8gUHJvY2VzcyB0aGUgYnV0dG9uIHNjaGVtYXMgdG8gYWRkIGRlZmF1bHQgY2xpY2sgZXZlbnRzXG4gICAgICAgIC8vIGZvciBib3RoICdzdWJtaXQnIGFuZCAnY2FuY2VsJyBidXR0b25zOlxuICAgICAgICAoc2NoZW1hcywgW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgdHlwZSwgZXZlbnRzIH0gPSBzY2hlbWFcbiAgICAgICAgICBpZiAoIWV2ZW50cykge1xuICAgICAgICAgICAgY29uc3QgY2xpY2sgPSB0eXBlID09PSAnc3VibWl0JyA/ICgpID0+IHRoaXMuYWNjZXB0KClcbiAgICAgICAgICAgICAgOiBrZXkgPT09ICdjYW5jZWwnID8gKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIGlmIChjbGljaykge1xuICAgICAgICAgICAgICBzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICAgIGV2ZW50czogeyBjbGljayB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgc2NoZW1hc1trZXldID0gc2NoZW1hXG4gICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgfSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2FuY2VsKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYnV0dG9uU2NoZW1hcykuaW5jbHVkZXMoJ2NhbmNlbCcpXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICBrZXl1cDogKCkgPT4ge1xuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIGRlc3Ryb3llZCgpIHtcbiAgICB0aGlzLndpbmRvd0V2ZW50cy5yZW1vdmUoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoaWRlKCkge1xuICAgICAgdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgcmVqZWN0KHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVqZWN0KHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgYWNjZXB0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgaWYgKHRoaXMuaGFzQ2FuY2VsKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZShudWxsKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQoXG4gIHYtaWY9XCJjb250ZW50XCJcbiAgOmlzPVwib3B0aW9ucy50YWcgfHwgdGFnXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pIHt7IG9wdGlvbnMudGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjb250ZW50XCJcbiAgICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICAgIDpjbGFzcz1cImNsYXNzZXNcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gICkge3sgb3B0aW9ucy50ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lbGVtZW50Jywge1xuICBwcm9wczoge1xuICAgIHRhZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzcGFuJyB9LFxuICAgIGNvbnRlbnQ6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgeyBjb250ZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QoY29udGVudCkgPyBjb250ZW50IDogeyB0ZXh0OiBjb250ZW50IH1cbiAgICB9LFxuXG4gICAgY2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLmNsYXNzLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuY2xhc3MpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLnN0eWxlLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuc3R5bGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBhc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gYXNBcnJheSh2YWx1ZSkucmVkdWNlKChvYmplY3QsIGVudHJ5KSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKGVudHJ5KSkge1xuICAgICAgb2JqZWN0W2VudHJ5XSA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGVudHJ5KSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmplY3QsIGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0XG4gIH0sIHt9KVxufVxuXG48L3NjcmlwdD5cbiIsIlxuY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgOmlzPVwidGFnXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4pXG4gIC5kaXRvLWNoZXZyb24oXG4gICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6ICFjb2xsYXBzZWQgfVwiXG4gIClcbiAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6a2V5PVwiYHByZWZpeC0ke2luZGV4fWBcIlxuICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgKVxuICBsYWJlbCg6Zm9yPVwiZGF0YVBhdGhcIiB2LWh0bWw9XCJ0ZXh0XCIpXG4gIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXN1ZmZpeChcbiAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gIClcbiAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQuZGl0by1sYWJlbChcbiAgICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gICAgOmlzPVwidGFnXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuICApXG4gICAgLmRpdG8tY2hldnJvbihcbiAgICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6ICFjb2xsYXBzZWQgfVwiXG4gICAgKVxuICAgIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXByZWZpeChcbiAgICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgICApXG4gICAgbGFiZWwoOmZvcj1cImRhdGFQYXRoXCIgdi1odG1sPVwidGV4dFwiKVxuICAgIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXN1ZmZpeChcbiAgICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgICApXG4gICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbGFiZWxcbiAgICAtLWxhYmVsLXBhZGRpbmc6IDBcbiAgICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG4gICAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZy1oYWxmIDBcblxuICAgIGxhYmVsXG4gICAgICBkaXNwbGF5OiBpbmxpbmVcbiAgICAgIGN1cnNvcjogaW5oZXJpdFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcblxuICAgIGxhYmVsLFxuICAgIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgICAuZGl0by1sYWJlbC1zdWZmaXhcbiAgICAgICY6bnRoLWxhc3QtY2hpbGQoMilcbiAgICAgICAgLy8gVG8gc3RyZXRjaCBlaXRoZXIgbGFiZWwgb3IgLmRpdG8tbGFiZWwtc3VmZml4IHRvIGZ1bGwgYXZhaWxhYmxlIHdpZHRoXG4gICAgICAgIC8vIHNvIHRoYXQgYnV0dG9ucyBhbHdheXMgYXBwZWFyIHJpZ2h0LWFsaWduZWQ6XG4gICAgICAgIGZsZXg6IDEgMSBhdXRvXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb250ZW50OiAnXFxhMCcgLy8gJm5icHM7XG5cbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICtlbGxpcHNpc1xuXG4gICAgLmRpdG8tYnV0dG9uc1xuICAgICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgICAgbWFyZ2luOiBjYWxjKC0xICogdmFyKC0tbGFiZWwtcGFkZGluZykpXG4gICAgICBtYXJnaW4tbGVmdDogMFxuICAgICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZylcblxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gSW4gb3JkZXIgZm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gbGFiZWxzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGxheW91dCxcbiAgICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci5cbiAgICAgIGxhYmVsXG4gICAgICAgICtlbGxpcHNpc1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgICAvLyBzcGFjZSBvbiBpdHMgcGFyZW50IHRvIGVuZm9yY2UgdGhlIHJpZ2h0IHRleHQgaGVpZ2h0IGluIHRoZSBjb250YWluZXJcbiAgICAgICAgY29udGVudDogJ1xcMjAwYicgLy8gemVyby13aWR0aCBzcGFjZVxuXG4gIGEuZGl0by1sYWJlbFxuICAgICY6aG92ZXJcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXJcbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlKTpub3QoLmRpdG8tYWN0aXZlKVxuICAgICAgLmRpdG8tY2hldnJvblxuICAgICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmVcblxuICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0IGxheW91dHNcbiAgLy8gd2l0aCBgd2lkdGg6ICdhdXRvJ2AgZWxlbWVudHM6XG4gIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgLmRpdG8tc2NoZW1hLWNvbXBhY3RcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICA+IC5kaXRvLXBhbmVcbiAgICAgICAgPiAuZGl0by1jb250YWluZXJcbiAgICAgICAgICA+IC5kaXRvLWxhYmVsOm5vdCguZGl0by1sYWJlbC1jb21wb25lbnQpXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tbGFiZWwnLCB7XG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgbGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHRoaXMuY29sbGFwc2libGUgJiYge1xuICAgICAgICAgIGNsaWNrOiB0aGlzLm9uQ2xpY2tcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdleHBhbmQnLCB0aGlzLmNvbGxhcHNlZClcbiAgICB9XG4gIH1cbn0pXG5cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbUZvcm1TY2hlbWEsIGdldEl0ZW1JZCwgZ2V0SXRlbVVpZCwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYSxcblxuICAgIGdldEl0ZW1VaWQsXG5cbiAgICBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50ICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgID8gU3RyaW5nKGluZGV4KVxuICAgICAgICA6IGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pXG4gICAgfSxcblxuICAgIGdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSB7XG4gICAgICBsZXQgeyBkYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgaWYgKHNvdXJjZVNjaGVtYSAhPT0gdGhpcy5zY2hlbWEpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc291cmNlU2NoZW1hLm5hbWUpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBpbmRleClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhUGF0aFxuICAgIH0sXG5cbiAgICBmaW5kSXRlbUlkSW5kZXgoc291cmNlU2NoZW1hLCBkYXRhLCBpdGVtSWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICA/IGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+XG4gICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoIHx8PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCB8fD0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgICh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgdGV4dCA9IHRleHQgfHwgJydcbiAgICAgIC8vIElmIG5vIGxhYmVsIHdhcyBmb3VuZCBzbyBmYXIsIHRyeSB0byBwcm9kdWNlIG9uZSBmcm9tIHRoZWluZGV4LlxuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIC8vIEFsd2F5cyB1c2UgZXh0ZW5kZWQgc3R5bGUgd2hlbiBhdXRvLWdlbmVyYXRpbmcgbGFiZWxzIGZyb20gaW5kZXgvaWQ6XG4gICAgICAgIGV4dGVuZGVkID0gdHJ1ZVxuICAgICAgICBpZiAoaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICB0ZXh0ID0gYCR7aW5kZXggKyAxfWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV4dGVuZGVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm1MYWJlbCA9IGdldEZvcm1MYWJlbCgpXG4gICAgICAgIGlmIChmb3JtTGFiZWwpIHtcbiAgICAgICAgICAvLyBJZiBhIGxhYmVsIHdhcyBwcm92aWRlZCwgcHV0IGluIHF1b3RlcyB3aGVuIHByZWZpeGVkIHdpdGggdGhlXG4gICAgICAgICAgLy8gZm9ybSBsYWJlbCBmb3IgdGhlIGV4dGVuZGVkIHN0eWxlOlxuICAgICAgICAgIHRleHQgPSBgJHtmb3JtTGFiZWx9ICR7aGFkTGFiZWwgPyBgJyR7dGV4dH0nYCA6IHRleHR9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXNPYmplY3QgPyB7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gOiB0ZXh0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXNjaGVtYVxuICAuZGl0by1zY2hlbWEtY29udGVudFxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtbWVudS1oZWFkZXInOiBtZW51SGVhZGVyIH1cIlxuICAgIClcbiAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgIClcbiAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAjZWRpdC1idXR0b25zXG4gICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICApXG4gICAgICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gICAgICBkaXRvLXRhYnMoXG4gICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgKVxuICAgICAgZGl0by1jbGlwYm9hcmQoXG4gICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICApXG4gICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICByZWY9XCJ0YWJzXCJcbiAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgIClcbiAgICB0cmFuc2l0aW9uLWhlaWdodChcbiAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS1tYWluKFxuICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgc2xvdChcbiAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgKVxuICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiIWhhc0xhYmVsXCJcbiAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgIClcbiAgdGVtcGxhdGUodi1lbHNlLWlmPVwiaXNQb3B1bGF0ZWRcIilcbiAgICBkaXRvLXBhbmVscyhcbiAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2NoZW1hXG4gICAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbCB8fCBoYXNUYWJzIHx8IGNsaXBib2FyZFwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICAgIClcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgICBAZXhwYW5kPVwib25FeHBhbmRcIlxuICAgICAgICApXG4gICAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgICBkaXRvLXRhYnMoXG4gICAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgICApXG4gICAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICApXG4gICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLXRhYihcbiAgICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgICA6a2V5PVwidGFiXCJcbiAgICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgICAgOnRhYj1cInRhYlwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNNYWluUGFuZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgICApXG4gICAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgICByZWY9XCJjb21wb25lbnRzXCJcbiAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc1RhYnNcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgICAgKVxuICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgICBkaXRvLXBhbmVscyhcbiAgICAgICAgOnBhbmVscz1cInBhbmVsU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNjaGVtYVxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAvLyBUbyBkaXNwbGF5IHNjaGVtYSBuZXh0IHRvIHBhbmVsczpcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgbWluLWhlaWdodDogMTAwJVxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIGZsZXg6IDEgMSAxMDAlXG4gICAgICAvLyBTbyB0aGF0IHNjaGVtYSBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICAgIGRpc3BsYXk6IGdyaWRcbiAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnRcbiAgICAgID4gKjpvbmx5LWNoaWxkXG4gICAgICAgIGdyaWQtcm93LWVuZDogbm9uZVxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZ1xuICAgID4gLmRpdG8tYnV0dG9ucyxcbiAgICA+IC5kaXRvLXBhbmVsc1xuICAgICAgZmxleDogMSAxIDAlXG4gICAgPiAuZGl0by1idXR0b25zXG4gICAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZ1xuICAgID4gLmRpdG8tcGFuZWxzXG4gICAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgJGNvbnRlbnQtcGFkZGluZyAwXG4gICAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgICAuZGl0by1wYW5lLXRhYiArIC5kaXRvLXBhbmUtbWFpblxuICAgICAgJjo6YmVmb3JlXG4gICAgICAgIC8vIFVzZSBhIHBzZXVkbyBlbGVtZW50IHRvIGRpc3BsYXkgYSBydWxlciB3aXRoIHByb3BlciBtYXJnaW5zXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGVcbiAgICAgICAgLy8gQWRkIHJlbW92ZWQgJGZvcm0tc3BhY2luZyBhZ2FpbiB0byB0aGUgcnVsZXJcbiAgICAgICAgbWFyZ2luOiAkY29udGVudC1wYWRkaW5nICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAuZGl0by10YWJzLFxuICAgIC5kaXRvLWNsaXBib2FyZFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmRcbiAgICAuZGl0by1jbGlwYm9hcmRcbiAgICAgICY6b25seS1jaGlsZFxuICAgICAgICBtYXJnaW4tbGVmdDogYXV0b1xuICAgICAgLmRpdG8tYnV0dG9uXG4gICAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luXG4gICAgJi5kaXRvLXNjaGVtYS1tZW51LWhlYWRlclxuICAgICAgLy8gQnJpbmcgdGhlIHRhYnMgdXAgdG8gdGhlIG1lbnUuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIGhlaWdodDogJG1lbnUtaGVpZ2h0XG4gICAgICBwYWRkaW5nOiAwICRtZW51LXBhZGRpbmctaG9yXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICB0b3A6IDBcbiAgICAgIGxlZnQ6IDBcbiAgICAgIHJpZ2h0OiAwXG4gICAgICB6LWluZGV4OiAkbWVudS16LWluZGV4XG4gICAgICAvLyBUdXJuIG9mZiBwb2ludGVyIGV2ZW50cyBzbyB0aGF0IERpdG9UcmFpbCBrZWVwcyByZWNlaXZpbmcgZXZlbnRzLi4uXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgLy8gLi4uYnV0IGFsbG93IGludGVyYWN0aW9uIHdpdGggdGhlIHRhYnMgYW5kIGJ1dHRvbnMgKGUuZy4gY2xpcGJvYXJkKVxuICAgICAgLy8gbGF5ZXJlZCBvbiB0b3Agb2YgRGl0b1RyYWlsLlxuICAgICAgLmRpdG8tdGFicyxcbiAgICAgIC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG9cbiAgICAgICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplXG4gICAgYnV0dG9uLmRpdG8tbGFiZWxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAvLyBDYXRjaCBhbGwgY2xpY2tzLCBldmVuIHdoZW4gaXQgd291bGQgYmUgcGFydGlhbGx5IGNvdmVyZWQgYnkgc2NoZW1hLlxuICAgICAgei1pbmRleDogMVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc1JlZ0V4cCxcbiAgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGgsIGxhYmVsaXplXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBUcmFuc2l0aW9uSGVpZ2h0IH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsIGdldFBhbmVsU2NoZW1hcywgc2V0RGVmYXVsdHMsIHByb2Nlc3NEYXRhXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjaGVtYScsIHtcbiAgY29tcG9uZW50czogeyBUcmFuc2l0aW9uSGVpZ2h0IH0sXG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBpbmplY3Q6IFtcbiAgICAnJHNjaGVtYVBhcmVudENvbXBvbmVudCdcbiAgXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgaW5saW5lZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaGFzT3duRGF0YTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG1lbnVIZWFkZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIHJldHVybiB7XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gcHJvdmlkZSBtb3JlIGRhdGEgdGhyb3VnaCBgc2NoZW1hLmRhdGFgLCB2dWUtc3R5bGU6XG4gICAgICAuLi4oXG4gICAgICAgIGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICAgID8gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICA6IGRhdGFcbiAgICAgICksXG4gICAgICBjb21wb25lbnRzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZXNSZWdpc3RyeToge30sXG4gICAgICBwYW5lbHNSZWdpc3RyeToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyBzY2hlbWFDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHBhcmVudFNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIERvbid0IHJldHVybiB0aGUgYWN0dWFsIHBhcmVudCBzY2hlbWEgaXMgdGhpcyBzY2hlbWEgaGFuZGxlcyBpdHMgb3duXG4gICAgICAvLyBkYXRhLiBUaGlzIHByZXZlbnRzIGRlbGVnYXRpbmcgZXZlbnRzIHRvIHRoZSBwYXJlbnQsIGFuZCByZWdpc3RlcmluZ1xuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIHRoZSBwYXJlbnQgdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBzZXQgaXNEaXJ0eSBmbGFncy5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyBudWxsIDogdGhpcy4kcGFyZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYXMoKSB7XG4gICAgICBjb25zdCBwYW5lbHMgPSBnZXRQYW5lbFNjaGVtYXModGhpcy5zY2hlbWEucGFuZWxzLCAnJylcbiAgICAgIGZvciAoY29uc3QgcGFuZSBvZiB0aGlzLnBhbmVzKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKC4uLnBhbmUucGFuZWxTY2hlbWFzKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHBhbmVsc1xuICAgIH0sXG5cbiAgICB0YWJzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS50YWJzKVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUYWIgPSB0aGlzLiRyb3V0ZS5oYXNoPy5zbGljZSgxKSB8fCBudWxsXG4gICAgICBjb25zdCB0YWIgPSBjdXJyZW50VGFiICYmIHRoaXMuc2hvdWxkUmVuZGVyKHRoaXMudGFic1tjdXJyZW50VGFiXSlcbiAgICAgICAgPyBjdXJyZW50VGFiXG4gICAgICAgIDogdGhpcy5kZWZhdWx0VGFiPy5uYW1lIHx8IG51bGxcbiAgICAgIGlmICh0YWIgIT09IGN1cnJlbnRUYWIpIHtcbiAgICAgICAgLy8gQW55IHRhYiBjaGFuZ2UgbmVlZHMgdG8gYmUgcmVmbGVjdGVkIGluIHRoZSByb3V0ZXIgYWxzby5cbiAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBoYXNoOiB0YWIgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YWJcbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHRoaXMudGFicykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRUYWIgfSA9IHRhYlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpXG4gICAgICAgICAgICA/IGRlZmF1bHRUYWIuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgICA6IGRlZmF1bHRUYWJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0YWJcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSB0YWJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsaXBib2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYT8uY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ3NlcnZlcicsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkRGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICRzY2hlbWE6IHRoaXMuc2NoZW1hLm5hbWUsXG4gICAgICAgIC4uLnRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAgIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHMuXG4gICAgLy8gTk9URTogVGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBhczpcbiAgICAvLyByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGlwYm9hcmREYXRhXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgdGhpcy5jb250ZXh0KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZGF0ZWQpXG4gICAgfSxcblxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmxhYmVsIHx8IHRoaXMuY29sbGFwc2libGVcbiAgICB9LFxuXG4gICAgaGFzVGFicygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pbmxpbmVkICYmICEhdGhpcy50YWJzXG4gICAgfSxcblxuICAgIGhhc01haW5QYW5lKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuICEhY29tcG9uZW50cyAmJiBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIG9wZW5lZDogZ2V0U3RvcmVBY2Nlc3Nvcignb3BlbmVkJywge1xuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbGxhcHNlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50cygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgY29tcG9uZW50c0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICAgIC8vIERlbGVnYXRlIGNoYW5nZSBldmVudHMgdGhyb3VnaCB0byBwYXJlbnQgc2NoZW1hOlxuICAgIHRoaXMuZGVsZWdhdGUoJ2NoYW5nZScsIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50KVxuICAgIHRoaXMuZW1pdEV2ZW50KCdpbml0aWFsaXplJykgLy8gTm90IGAnY3JlYXRlJ2AsIHNpbmNlIHRoYXQncyBmb3IgZGF0YS5cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZW1pdEV2ZW50KCdkZXN0cm95JylcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoXG4gICAgICAgIHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHNCeU5hbWUoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5TmFtZSh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5TmFtZShuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnQoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWwoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIHNvbWVDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5zb21lKGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBldmVyeUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLmV2ZXJ5KGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBvbkV4cGFuZChleHBhbmQpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdleHBhbmQnLCB7XG4gICAgICAgIC8vIFRPRE86IEFjdHVhbGx5IGV4cG9zZSB0aGlzIG9uIERpdG9Db250ZXh0P1xuICAgICAgICBjb250ZXh0OiB7IGV4cGFuZCB9XG4gICAgICB9KVxuICAgICAgLy8gUHJldmVudCBjbG9zaW5nIHRoZSBzY2hlbWEgd2l0aCBpbnZhbGlkIGRhdGEsIHNpbmNlIHRoZSBpbi1jb21wb25lbnRcbiAgICAgIC8vIHZhbGlkYXRpb24gd2lsbCBub3QgYmUgZXhlY3V0ZWQgb25jZSBpdCdzIGNsb3NlZC5cblxuICAgICAgLy8gVE9ETzogTW92ZSB2YWxpZGF0aW9uIG91dCBvZiBjb21wb25lbnRzLCB0byBzY2hlbWEsIGp1c3QgbGlrZVxuICAgICAgLy8gcHJvY2Vzc2luZywgYW5kIHVzZSBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgZm9yIHRoZSByZXN1bHRpbmcgZXJyb3JzLFxuICAgICAgLy8gdGhlbiByZW1vdmUgdGhpcyByZXF1aXJlbWVudCwgc2luY2Ugd2UgY2FuIHZhbGlkYXRlIGNsb3NlZCBmb3JtcyBhbmRcbiAgICAgIC8vIHNjaGVtYXMgdGhlbi5cbiAgICAgIGlmICghdGhpcy5vcGVuZWQgfHwgZXhwYW5kIHx8IHRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICB0aGlzLm9wZW5lZCA9IGV4cGFuZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzQnlEYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgbGV0IGRhdGFQYXRoc1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrID0gaXNGdW5jdGlvbihtYXRjaClcbiAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgOiBpc1JlZ0V4cChtYXRjaClcbiAgICAgICAgICAgID8gZmllbGQgPT4gbWF0Y2gudGVzdChmaWVsZClcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBkYXRhUGF0aHMgPSBjaGVja1xuICAgICAgICAgID8gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpLmZpbHRlcihjaGVjaylcbiAgICAgICAgICA6IGlzQXJyYXkobWF0Y2gpXG4gICAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgICA6IFttYXRjaF1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGRhdGFQYXRocyB8fD0gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpXG4gICAgICBmb3IgKGNvbnN0IGRhdGFQYXRoIG9mIGRhdGFQYXRocykge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmICghY29tcG9uZW50LnZhbGlkYXRlKG5vdGlmeSkpIHtcbiAgICAgICAgICAgIC8vIEZvY3VzIGZpcnN0IGVycm9yIGZpZWxkXG4gICAgICAgICAgICBpZiAobm90aWZ5ICYmIGZpcnN0KSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5mb2N1cygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbChtYXRjaCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGFzeW5jIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgY29uc3QgdW5tYXRjaGVkID0gW11cbiAgICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBlcnJzXSBvZiBPYmplY3QuZW50cmllcyhlcnJvcnMpKSB7XG4gICAgICAgIC8vIElmIHRoZSBzY2hlbWEgaXMgYSBkYXRhLXJvb3QsIHByZWZpeCBpdHMgb3duIGRhdGFQYXRoIHRvIGFsbCBlcnJvcnMsXG4gICAgICAgIC8vIHNpbmNlIHRoZSBkYXRhIHRoYXQgaXQgc2VuZHMgYW5kIHZhbGlkYXRlcyB3aWxsIGJlIHVucHJlZml4ZWQuXG4gICAgICAgIGNvbnN0IGZ1bGxEYXRhUGF0aCA9IHRoaXMuaGFzT3duRGF0YVxuICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgICAgICAgOiBkYXRhUGF0aFxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLCB0aGlzLmRhdGFQYXRoLCB0aGlzLmhhc093bkRhdGEsIGZ1bGxEYXRhUGF0aClcbiAgICAgICAgLy8gQ29udmVydCBmcm9tIEphdmFTY3JpcHQgcHJvcGVydHkgYWNjZXNzIG5vdGF0aW9uLCB0byBvdXIgb3duIGZvcm1cbiAgICAgICAgLy8gb2YgcmVsYXRpdmUgSlNPTiBwb2ludGVycyBhcyBkYXRhLXBhdGhzOlxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChmdWxsRGF0YVBhdGgpXG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKSkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAvLyBDb3VsZG4ndCBmaW5kIGEgY29tcG9uZW50IGluIGFuIGFjdGl2ZSBmb3JtIGZvciB0aGUgZ2l2ZW4gZGF0YVBhdGguXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgY29tcG9uZW50IHNlcnZpbmcgYSBwYXJ0IG9mIHRoZSBkYXRhUGF0aCxcbiAgICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgIGlmIChhd2FpdCBjb21wb25lbnQubmF2aWdhdGVUb0NvbXBvbmVudD8uKFxuICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBzdWJDb21wb25lbnRzID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycnMgPSBlcnJvcnNbY29tcG9uZW50LmRhdGFQYXRoXVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgZXJycyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3VuZCBhIG5lc3RlZCBmb3JtIHRvIGRpc3BsYXkgYXQgbGVhc3QgcGFydHMgZm8gdGhlIGVycm9ycy5cbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzaG93IGFsbCBlcnJvcnMgYXQgb25jZSwgc28gd2UncmUgZG9uZS4gRG9uJ3QgY2FsbFxuICAgICAgICAgICAgICAgIC8vIGBub3RpZnlFcnJvcnMoKWAgeWV0LCBhcyB3ZSBjYW4gb25seSBkaXNwbGF5IGl0IG9uY2VcbiAgICAgICAgICAgICAgICAvLyBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgd2FzIGNhbGxlZCBmcm9tIGBEaXRvRm9ybS5tb3VudGVkKClgXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0aWxsIGhlcmUsIHNvIGtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFdoZW4gdGhlIGVycm9yIGNhbid0IGJlIG1hdGNoZWQsIGFkZCBpdCB0byBhIGxpc3Qgb2YgdW5tYXRjaGVkXG4gICAgICAgICAgLy8gZXJyb3JzIHdpdGggZGVjZW50IG1lc3NhZ2UsIHRvIHJlcG9ydCBhdCB0aGUgZW5kLlxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gbGFiZWxpemUocHJvcGVydHkpXG4gICAgICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJycykge1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gZmllbGRcbiAgICAgICAgICAgICAgPyBgVGhlIGZpZWxkICR7ZmllbGR9YFxuICAgICAgICAgICAgICA6IGBUaGUgJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICAgICB1bm1hdGNoZWQucHVzaChgJHtwcmVmaXh9ICR7ZXJyLm1lc3NhZ2V9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycyh1bm1hdGNoZWQuam9pbignXFxuJykpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG5vdGlmeUVycm9ycyhtZXNzYWdlKSB7XG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnVmFsaWRhdGlvbiBFcnJvcnMnLFxuICAgICAgICB0ZXh0OiBtZXNzYWdlIHx8ICdQbGVhc2UgY29ycmVjdCB0aGUgaGlnaGxpZ2h0ZWQgZXJyb3JzLidcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlc2V0RGF0YSgpIHtcbiAgICAgIC8vIFdlIGNhbid0IHNldCBgdGhpcy5kYXRhID0gLi4uYCBiZWNhdXNlIGl0J3MgYSBwcm9wZXJ0eSwgYnV0IHdlIGNhblxuICAgICAgLy8gc2V0IGFsbCBrbm93biBwcm9wZXJ0aWVzIG9uIGl0IHRvIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnlcbiAgICAgIC8vIGBzZXREZWZhdWx0cygpYCwgYXMgdGhleSBhcmUgYWxsIHJlYWN0aXZlIGFscmVhZHkgZnJvbSB0aGUgc3RhcnRzOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIHNldERlZmF1bHRzKHRoaXMuc2NoZW1hLCB7fSwgdGhpcykpXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgICAgICBpZiAobmFtZSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICB0aGlzLiRzZXQodGhpcy5kYXRhLCBuYW1lLCBkYXRhW25hbWVdKVxuICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKSkge1xuICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2sgYnkgZGF0YSByZXNvdXJjZXNcbiAgICAgIC8vIHRoZW1zZWx2ZXMsIGFzIHRob3NlIGFyZSBhbHJlYWR5IHRha2luZyBjYXJlIG9mIHRocm91Z2ggdGhlaXIgb3duIEFQSVxuICAgICAgLy8gcmVzb3VyY2UgZW5kLXBvaW50cyBhbmQgc2hvdWxkbid0IGJlIHNldC5cbiAgICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcHlbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLCB7XG4gICAgICAgICAgLy8gTmVlZGVkIGZvciBEaXRvQ29udGV4dCBoYW5kbGluZyBpbnNpZGUgYHByb2Nlc3NEYXRhYCBhbmRcbiAgICAgICAgICAvLyBgcHJvY2Vzc1NjaGVtYURhdGEoKWA6XG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHNjaGVtYU9ubHksXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnQoKWAgaXMgb25seSBzZXQgaWYgb25lIG9mIHRoZSBhbmNlc3RvcnMgdXNlc1xuICAgICAgLy8gdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgICB0aGlzLiRzY2hlbWFQYXJlbnRDb21wb25lbnQoKT8uX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5LCBjb21wb25lbnQsIGFkZClcbiAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgd2l0aCB0aGUgcGFyZW50IGlmIHNjaGVtYSBzaGFyZXMgZGF0YSB3aXRoIGl0LlxuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/Ll9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZShwYW5lLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lc1JlZ2lzdHJ5LCBwYW5lLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmVsKHBhbmVsLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lbHNSZWdpc3RyeSwgcGFuZWwsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyRW50cnkocmVnaXN0cnksIGVudHJ5LCBhZGQpIHtcbiAgICAgIGNvbnN0IHVpZCA9IGVudHJ5LiR1aWRcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgdGhpcy4kc2V0KHJlZ2lzdHJ5LCB1aWQsIGVudHJ5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZGVsZXRlKHJlZ2lzdHJ5LCB1aWQpXG4gICAgICB9XG4gICAgfSxcblxuICAgIF9saXN0RW50cmllc0J5RGF0YVBhdGgocmVnaXN0cnkpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlZ2lzdHJ5KS5yZWR1Y2UoKGVudHJpZXNCeURhdGFQYXRoLCBlbnRyeSkgPT4ge1xuICAgICAgICAvLyBNdWx0aXBsZSBlbnRyaWVzIGNhbiBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgZGF0YS1wYXRoLCBlLmcuIHdoZW5cbiAgICAgICAgLy8gdGhlcmUgYXJlIHRhYnMuIExpbmsgZWFjaCBkYXRhLXBhdGggdG8gYW4gYXJyYXkgb2YgZW50cmllcy5cbiAgICAgICAgY29uc3QgeyBkYXRhUGF0aCB9ID0gZW50cnlcbiAgICAgICAgY29uc3QgZW50cmllcyA9IGVudHJpZXNCeURhdGFQYXRoW2RhdGFQYXRoXSB8fD0gW11cbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhcbiAgICAgIH0sIHt9KVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllcyhlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgPyB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgICAgICA6IHRoaXMuX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFtub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgbmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFthcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9maWx0ZXJFbnRyaWVzKGVudHJpZXMsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2ggPyBlbnRyaWVzLmZpbHRlcihtYXRjaCkgOiBlbnRyaWVzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmRpdG8tc2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gIDpzY2hlbWE9XCJzY2hlbWFcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuKVxuICAvLyBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2hlbWFzIHNlcGFyYXRlbHkgZnJvbSBhbGxcbiAgLy8gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGRpdG8tc2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgICA6aW5saW5lZD1cInRydWVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbiAgKVxuICAgIC8vIFJlbmRlciBkaXRvLWVkaXQtYnV0dG9ucyBmb3IgaW5saW5lZCBzaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAgIC8vIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICAgIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNjaGVtYS1pbmxpbmVkXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgICAgIC8vIENoYW5nZSBzcGFjaW5nIHNvIC5kaXRvLWxhYmVsIGNvdmVycyB0aGUgZnVsbCAuZGl0by1zY2hlbWEtaGVhZGVyLlxuICAgICAgICBtYXJnaW46IC0kZm9ybS1zcGFjaW5nXG4gICAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgICAgLy8gQWRkIHJlbW92ZWQgJGZvcm0tc3BhY2luZyBhZ2FpblxuICAgICAgICAgIC0tbGFiZWwtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICAgIC8vIEJlY2F1c2UgdGFibGVzIGhhdmUgYSBmdW5ueSB3YXkgb2YgYWxsb3dpbmcgdG9vIG11Y2ggd2lkdGggZ3Jvd3RoOlxuICAgICAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgICAgJiArLmRpdG8tcGFuZVxuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgdHJhbnNpdGlvbi1oZWlnaHQgaW4gRGl0b1NjaGVtYTpcbiAgICAgICAgICBtaW4taGVpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzQ29tcGFjdCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEtaW5saW5lZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gaXNDb21wYWN0KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBhY3QgJiYgISF0aGlzLmxhYmVsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhbmUoXG4gIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICB2LXNob3c9XCJ2aXNpYmxlXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwibmVzdGVkRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYW5lKFxuICAgIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICAgIHYtc2hvdz1cInZpc2libGVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWZvcj1ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBzdG9yZVxuICAgICAgfSBpbiBjb21wb25lbnRTY2hlbWFzYFxuICAgIClcbiAgICAgIC5kaXRvLWJyZWFrKFxuICAgICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgICApXG4gICAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcGFuZVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwXG4gICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydFxuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZVxuICAgIC8vIFJlbW92ZSBwYWRkaW5nIGFkZGVkIGJ5IGAuZGl0by1jb250YWluZXJgXG4gICAgbWFyZ2luOiAoLSRmb3JtLXNwYWNpbmcpICgtJGZvcm0tc3BhY2luZy1oYWxmKVxuICAgIC8vIEFkZCByZW1vdmVkIGhvcml6b250YWwgbWFyZ2luIGFnYWluIHRvIG1heC13aWR0aDpcbiAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgMiAqICRmb3JtLXNwYWNpbmctaGFsZlxuICAgIC8vIFVzZSBgZmxleDogMCVgIGZvciBhbGwgYC5kaXRvLXBhbmVgIGV4Y2VwdCBgLmRpdG8tcGFuZS1tYWluYCxcbiAgICAvLyBzbyB0aGF0IHRoZSBgLmRpdG8tYnV0dG9ucy1tYWluYCBjYW4gYmUgbW92ZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbS5cbiAgICBmbGV4OiAwJVxuXG4gICAgJi5kaXRvLXBhbmUtbWFpblxuICAgICAgZmxleDogMTAwJVxuXG4gICAgLmRpdG8tc2NoZW1hLWhlYWRlcjpub3QoLmRpdG8tc2NoZW1hLW1lbnUtaGVhZGVyKSArICZcbiAgICAgIC8vIENsZWFyIHRvcC1tYXJnaW4gaWYgdGhlIGNvbXBvbmVudHMgYXJlIHByZWNlZGVkIGJ5IGEgc2NoZW1hIGhlYWRlci5cbiAgICAgIG1hcmdpbi10b3A6IDBcblxuICAgIC5kaXRvLWNvbnRhaW5lci5kaXRvLW9taXQtcGFkZGluZyA+ICZcbiAgICAgIC8vIENsZWFyIG1hcmdpbnMgc2V0IGFib3ZlIGFnYWluIGlmIHBhcmVudCBpcyBvbWl0dGluZyBwYWRkaW5nLlxuICAgICAgbWFyZ2luOiAwXG4gICAgICBtYXgtd2lkdGg6IHVuc2V0XG5cbiAgICAuZGl0by1icmVha1xuICAgICAgZmxleDogMTAwJVxuICAgICAgaGVpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGdldEFsbFBhbmVsU2NoZW1hcywgaXNOZXN0ZWQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB2aXNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFiID8gdGhpcyA6IHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgY29tcG9uZW50cyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5c1xuICAgICAgLy8gYW5kIGFkZHMgdGhlIGtleSBhcyB0aGUgbmFtZSB0byBlYWNoIGNvbXBvbmVudCwgdXNlZCBmb3IgbGFiZWxzLCBldGMuXG4gICAgICAvLyBOT1RFOiBzY2hlbWEgY2FuIGJlIG51bGwgd2hpbGUgbXVsdGktZm9ybSBsaXN0cyBsb2FkIHRoZWlyIGRhdGEsXG4gICAgICAvLyBiZWNhdXNlIG9ubHkgdGhlIGF2YWlsYWJsZSBkYXRhIHdpbGwgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGZvcm0uXG4gICAgICAvLyBXaGVuIGVkaXRpbmcgcHJpbWl0aXZlIHZhbHVlcyB0aHJvdWdoIGEgZm9ybSwgZG8gbm90IGFwcGVuZCAnbmFtZScgdG9cbiAgICAgIC8vIHRoZSBjb21wb25lbnQncyBkYXRhUGF0aCBzbyBpdCBjYW4gYmUgbWFwcGVkIHRvIGZyb20gdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAgICAvLyBOT1RFOiBOb3QgYWxsIHNjaGVtYXMgLyBjb21wb25lbnRzIGhhdmUgYSBzb3VyY2VTY2hlbWEsIGUuZy4gZGlhbG9ncy5cbiAgICAgIGNvbnN0IHdyYXBQcmltaXRpdmVzID0gdGhpcy5zb3VyY2VTY2hlbWE/LndyYXBQcmltaXRpdmVzXG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWE/LmNvbXBvbmVudHMgfHwge30pLm1hcChcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgLy8gQWx3YXlzIGFkZCBuYW1lIHRvIGNvbXBvbmVudCBzY2hlbWEuXG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgICAgLy8gU2hhcmUgZGF0YVBhdGggYW5kIHN0b3JlIHdpdGggcGFyZW50IGlmIG5vdCBuZXN0ZWQ6XG4gICAgICAgICAgY29uc3QgbmVzdGVkID0gaXNOZXN0ZWQoc2NoZW1hKVxuICAgICAgICAgIGNvbnN0IG5lc3RlZERhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgZGF0YVBhdGg6IG5lc3RlZCAmJiAhd3JhcFByaW1pdGl2ZXNcbiAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICA6IHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICAgIHN0b3JlOiBuZXN0ZWQgPyB0aGlzLmdldENoaWxkU3RvcmUobmFtZSkgOiB0aGlzLnN0b3JlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hcygpIHtcbiAgICAgIC8vIEdhdGhlciBhbGwgcGFuZWwgc2NoZW1hcyBmcm9tIGFsbCBjb21wb25lbnQgc2NoZW1hcywgYnkgZmluZGluZyB0aG9zZVxuICAgICAgLy8gdGhhdCB3YW50IHRvIHByb3ZpZGUgYSBwYW5lbC4gU2VlIGBnZXRBbGxQYW5lbFNjaGVtYXMoKWAgZm9yIGRldGFpbHMuXG4gICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTY2hlbWFzLmZsYXRNYXAoXG4gICAgICAgICh7IHNjaGVtYSwgbmVzdGVkRGF0YVBhdGg6IGRhdGFQYXRoIH0pID0+IGdldEFsbFBhbmVsU2NoZW1hcyhcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQsXG4gICAgICAgICAgdGhpcy50YWJDb21wb25lbnRcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpbmdsZSAmJiB0aGlzLmNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID09PSAxXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lKHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy50YWIpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBoYXNoOiB0aGlzLnRhYiB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFjdGlvbih2YWx1ZSkge1xuICBjb25zdCBtYXRjaCA9IChcbiAgICBpc1N0cmluZyh2YWx1ZSkgJiZcbiAgICB2YWx1ZS5tYXRjaCgvXlxccyooWystXT9cXGQrKVxccypcXC9cXHMqKFsrLV0/XFxkKylcXHMqJC8pXG4gIClcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgWywgZGl2aWRlbmQsIGRpdmlzb3JdID0gbWF0Y2hcbiAgICByZXR1cm4gcGFyc2VGbG9hdChkaXZpZGVuZCkgLyBwYXJzZUZsb2F0KGRpdmlzb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gIH1cbn1cbiIsIlxuLmRpdG8tY29udGFpbmVyKFxuICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgOmNsYXNzPVwiY29udGFpbmVyQ2xhc3NcIlxuICA6c3R5bGU9XCJjb250YWluZXJTdHlsZVwiXG4pXG4gIGRpdG8tbGFiZWwoXG4gICAgdi1pZj1cImxhYmVsXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICApXG4gIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRUeXBlQ29tcG9uZW50KHNjaGVtYS50eXBlKVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICApXG4gIGRpdG8tZXJyb3JzKFxuICAgIDplcnJvcnM9XCJlcnJvcnNcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jb250YWluZXIoXG4gICAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gICAgOmNsYXNzPVwiY29udGFpbmVyQ2xhc3NcIlxuICAgIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbiAgKVxuICAgIGRpdG8tbGFiZWwoXG4gICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgKVxuICAgIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICAgIDppcz1cImdldFR5cGVDb21wb25lbnQoc2NoZW1hLnR5cGUpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgICApXG4gICAgZGl0by1lcnJvcnMoXG4gICAgICA6ZXJyb3JzPVwiZXJyb3JzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY29udGFpbmVyXG4gICAgLy8gTmVlZGVkIGZvciBiZXR0ZXIgdmVydGljYWwgYWxpZ25tZW50OlxuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2hcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gcHJldmVudCBsaXN0IHRhYmxlcyBmcm9tIGJsb3dpbmcgb3V0IG9mIHRoZWlyIGZsZXggYm94IGNvbnRhaW5lcnMuXG4gICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgLy8gQ2Fubm90IHVzZSBtYXJnaW4gaGVyZSBhcyBpdCBuZWVkcyB0byBiZSBwYXJ0IG9mIGJveC1zaXppbmcgZm9yXG4gICAgLy8gcGVyY2VudGFnZXMgaW4gZmxleC1iYXNpcyB0byB3b3JrLlxuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgJjplbXB0eVxuICAgICAgcGFkZGluZzogMFxuICAgICYuZGl0by1vbWl0LXBhZGRpbmdcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgJi5kaXRvLXNpbmdsZVxuICAgICAgaGVpZ2h0OiAxMDAlIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgYXQgdGhlIGJvdHRvbVxuICAvLyBOT1RFOiBUaGlzIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGAuZGl0by1jb250YWluZXJgIHNvIHRoYXQgb3RoZXJcbiAgLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbiAgLmRpdG8tY29tcG9uZW50XG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgICAmLmRpdG8tcmFkaW8tYnV0dG9uXG4gICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGxpa2UgY2hhbmdlZCB3aWR0aCBvbiBjaGVja2JveGVzIGFuZCByYWRpb3MsIG92ZXJyaWRlOlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgd2lkdGg6IGF1dG9cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRUeXBlT3B0aW9ucywgc2hvdWxkT21pdFBhZGRpbmcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNvbnRhaW5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB0eXBlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlT3B0aW9ucyh0aGlzLnNjaGVtYSkgfHwge31cbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsYWJlbCAhPT0gZmFsc2UgJiZcbiAgICAgICAgKCEhbGFiZWwgfHwgdGhpcy50eXBlT3B0aW9ucy5nZW5lcmF0ZUxhYmVsICYmIHRoaXMuZ2VuZXJhdGVMYWJlbHMpXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKSA6IG51bGxcbiAgICB9LFxuXG4gICAgbGFiZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFVubmVzdGVkIHR5cGVzIGRvbid0IGhhdmUgYSBkYXRhUGF0aCBmb3IgdGhlbXNlbHZlcywgZG9uJ3QgdXNlIGl0OlxuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy5kYXRhUGF0aCA6IG51bGxcbiAgICB9LFxuXG4gICAgY29tcG9uZW50V2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRXaWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVPcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb250YWluZXJDbGFzcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNvbnRhaW5lckNsYXNzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLW9taXQtcGFkZGluZyc6IHNob3VsZE9taXRQYWRkaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGlzU3RyaW5nKGNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgPyB7IFtjb250YWluZXJDbGFzc106IHRydWUgfVxuICAgICAgICAgICAgOiBjb250YWluZXJDbGFzc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNvbXBvbmVudFdpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgY29uc3QgYmFzaXMgPSAoXG4gICAgICAgIFtudWxsLCAnYXV0bycsICdmaWxsJ10uaW5jbHVkZXMod2lkdGgpID8gJ2F1dG8nXG4gICAgICAgIDogLyUkLy50ZXN0KHdpZHRoKSA/IHBhcnNlRmxvYXQod2lkdGgpIC8vIHBlcmNlbnRhZ2VcbiAgICAgICAgOiAvW2Etel0vLnRlc3Qod2lkdGgpID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgIDogcGFyc2VGcmFjdGlvbih3aWR0aCkgKiAxMDAgLy8gZnJhY3Rpb25cbiAgICAgIClcbiAgICAgIHJldHVybiBpc051bWJlcihiYXNpcykgPyBgJHtiYXNpc30lYCA6IGJhc2lzXG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlKCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc+NTAlJyBhcyAnNTAlLCBmbGV4LWdyb3c6IDFgXG4gICAgICBjb25zdCBncm93ID0gKFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc+JyB8fFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCdcbiAgICAgIClcbiAgICAgIC8vIEludGVycHJldCAnPDUwJScgYXMgJzUwJSwgZmxleC1zaHJpbms6IDFgXG4gICAgICBjb25zdCBzaHJpbmsgPSB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc8J1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmxleDogYCR7Z3JvdyA/IDEgOiAwfSAke3NocmluayA/IDEgOiAwfSAke3RoaXMuY29tcG9uZW50QmFzaXN9YFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzcygpIHtcbiAgICAgIGNvbnN0IGJhc2lzSXNBdXRvID0gdGhpcy5jb21wb25lbnRCYXNpcyA9PT0gJ2F1dG8nXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogIWJhc2lzSXNBdXRvIHx8IHRoaXMuY29tcG9uZW50V2lkdGggPT09ICdmaWxsJyxcbiAgICAgICAgJ2RpdG8td2lkdGgtYXV0byc6IGJhc2lzSXNBdXRvLFxuICAgICAgICAnZGl0by1oYXMtZXJyb3JzJzogISF0aGlzLmVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25FcnJvcnMoZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9yc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by10YWJzXG4gIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcih0YWJTY2hlbWEpXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gIClcbiAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdGFic1xuICAgIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cInsgaGFzaDoga2V5IH1cIlxuICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWwodGFiU2NoZW1hLCBrZXkpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgJHRhYi1jb2xvci1iYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3RcbiAgJHRhYi1jb2xvci1pbmFjdGl2ZTogJGNvbG9yLWxpZ2h0XG4gICR0YWItY29sb3ItYWN0aXZlOiAkY29sb3ItbGlnaHRlc3RcbiAgJHRhYi1jb2xvci1ob3ZlcjogJGNvbG9yLXdoaXRlXG5cbiAgLmRpdG8tdGFic1xuICAgIC8vIFNlZTogaHR0cHM6Ly9jb2RlcGVuLmlvL3Rob2xleC9wZW4vaHZlQngvXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICBhXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWluYWN0aXZlXG4gICAgICBwYWRkaW5nOiAkdGFiLXBhZGRpbmctdmVyICR0YWItcGFkZGluZy1ob3JcbiAgICAgIG1hcmdpbi1sZWZ0OiAkdGFiLW1hcmdpblxuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1c1xuICAgICAgJjpob3ZlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWhvdmVyXG4gICAgICAmOmFjdGl2ZVxuICAgICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWFjdGl2ZVxuICAgICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWJhY2tncm91bmRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdGFicycsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWJzOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNlbGVjdGVkVGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8gT25seSBzaG93IHBhbmVscyBpbiB0YWJzIHdoZW4gdGhlIHRhYnMgYXJlIGFsc28gdmlzaWJsZS5cbmNvbXBvbmVudC5kaXRvLXBhbmVsKFxuICA6aXM9XCJwYW5lbFRhZ1wiXG4gIHYtc2hvdz1cInZpc2libGUgJiYgKCFwYW5lbFRhYkNvbXBvbmVudCB8fCBwYW5lbFRhYkNvbXBvbmVudC52aXNpYmxlKVwiXG4gIEBzdWJtaXQucHJldmVudFxuKVxuICBsYWJlbC5kaXRvLXBhbmVsLXRpdGxlIHt7IGdldExhYmVsKHNjaGVtYSkgfX1cbiAgZGl0by1zY2hlbWEuZGl0by1wYW5lbC1zY2hlbWEoXG4gICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gIClcbiAgICBkaXRvLWJ1dHRvbnMoXG4gICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG4gIGNvbXBvbmVudC5kaXRvLXBhbmVsKFxuICAgIDppcz1cInBhbmVsVGFnXCJcbiAgICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gICAgZGl0by1zY2hlbWEuZGl0by1wYW5lbC1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwicGFuZWxTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmhhc093bkRhdGE9XCJoYXNPd25EYXRhXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcGFuZWxcbiAgICBtYXJnaW4tYm90dG9tOiAkY29udGVudC1wYWRkaW5nXG4gICAgLmRpdG8tcGFuZWwtdGl0bGVcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgYmFja2dyb3VuZDogJGJ1dHRvbi1jb2xvclxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgLmRpdG8tcGFuZWwtc2NoZW1hXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmRcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXRvcDogMFxuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZ1xuICAgICAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgICAtLWJ1dHRvbi1tYXJnaW46ICN7JGZvcm0tc3BhY2luZ31cbiAgICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuICAgICAgLmRpdG8tb2JqZWN0XG4gICAgICAgIGJvcmRlcjogMFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAuZGl0by1sYWJlbFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgbGFiZWxcbiAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAuZGl0by1wYW5lXG4gICAgICAgIG1hcmdpbjogMCAoLSRmb3JtLXNwYWNpbmctaGFsZilcbiAgICAgIC5kaXRvLWNvbnRhaW5lclxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGZcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lbCcsIHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYW5lbFRhYkNvbXBvbmVudDogeyB0eXBlOiBEaXRvQ29tcG9uZW50LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25EYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgdGFyZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnRhcmdldCB8fCB0aGlzLmRhdGFQYXRoXG4gICAgfSxcblxuICAgIGhhc093bkRhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm93bkRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3duRGF0YSB8fCB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWEoKSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25EYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBkYXRhYCBmcm9tIHRoZSBzY2hlbWEsIHNvIHRoYXQgRGl0b1NjaGVtYSBpc24ndCB1c2luZyBpdCB0b1xuICAgICAgICAvLyBwcm9kdWNlIGl0cyBvd24gZGF0YS4gU2VlICRmaWx0ZXJzIHBhbmVsIGZvciBtb3JlIGRldGFpbHMgb24gZGF0YS5cbiAgICAgICAgY29uc3QgeyBkYXRhLCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxUYWcoKSB7XG4gICAgICAvLyBQYW5lbHMgdGhhdCBwcm92aWRlIHRoZWlyIG93biBkYXRhIG5lZWQgdGhlaXIgb3duIGZvcm0uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gJ2Zvcm0nIDogJ2RpdidcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIGRhdGEsIHRoZW4gaXQgbmVlZHMgdG8gcHJlZml4IGFsbFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIGl0cyBkYXRhLXBhdGgsIGJ1dCBpZiBpdCBzaGFyZXMgZGF0YSB3aXRoIHRoZSBzY2hlbWFcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhlbiBpdCBzaG91bGQgc2hhcmUgdGhlIGRhdGEtcGF0aCBuYW1lIHNwYWNlIHRvby5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyB0aGlzLmRhdGFQYXRoIDogdGhpcy5zY2hlbWFDb21wb25lbnQuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIC8vIE5PVEU6IFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIGBzY2hlbWEuZGF0YWAgaGFuZGxpbmcgaW4gRGl0b1NjaGVtYSxcbiAgICAvLyB3aGVyZSB0aGUgZGF0YSBpcyBhZGRlZCB0byB0aGUgYWN0dWFsIGNvbXBvbmVudC5cbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMub3duRGF0YSA9IGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgPyBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICA6IGRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUmVnaXN0ZXIgdGhlIHBhbmVscyBzbyB0aGF0IG90aGVyIGNvbXBvbmVudHMgY2FuIGZpbmQgdGhlbSBieSB0aGVpclxuICAgICAgLy8gZGF0YS1wYXRoLCBlLmcuIGluIFR5cGVMaXN0Lm9uRmlsdGVyRXJyb3JzKClcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmVsKHRoaXMsIGFkZClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tcGFuZWxzKFxuICB2LWlmPVwicGFuZWxzLmxlbmd0aCA+IDBcIlxuKVxuICBkaXRvLXBhbmVsKFxuICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoc2NoZW1hLm5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICA6cGFuZWxUYWJDb21wb25lbnQ9XCJ0YWJDb21wb25lbnRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYW5lbHMoXG4gICAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIGRpdG8tcGFuZWwoXG4gICAgICB2LWZvcj1cInsgc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50IH0gaW4gcGFuZWxzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoc2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCAhPSBudWxsID8gc2NoZW1hLmRpc2FibGVkIDogZGlzYWJsZWRcIlxuICAgICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcGFuZWxzXG4gICAgbWF4LXdpZHRoOiAkY29udGVudC1zaWRlYmFyLXdpZHRoXG4gICAgbWluLXdpZHRoOiBjYWxjKCRjb250ZW50LXNpZGViYXItd2lkdGggLyAyKVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lbHMnLCB7XG4gIHByb3BzOiB7XG4gICAgcGFuZWxzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICAgICAgLy8gQWxsb3cgc2VwYXJhdGUgdGFicyB0byB1c2UgcGFuZWxzIG9mIHRoZSBzYW1lIG5hbWUsIGJ5XG4gICAgICAvLyBwcmVmaXhpbmcgdGhlaXIga2V5IHdpdGggdGhlIHRhYiBuYW1lLlxuICAgICAgcmV0dXJuIHRhYkNvbXBvbmVudCA/IGAke3RhYkNvbXBvbmVudC50YWJ9XyR7ZGF0YVBhdGh9YCA6IGRhdGFQYXRoXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICB2LW9uPVwiJGxpc3RlbmVyc1wiXG4pXG4gIGRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICA6c2NoZW1hPVwiYnV0dG9uU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICApXG4gIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gIC8vIHdyYXBwZWQgaW4gYSBgLmRpdG8tY29udGFpbmVyYCBjbGFzcy5cbiAgLmRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgdi1pZj1cIm5vZGUudGFnXCJcbiAgKVxuICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1idXR0b25zKFxuICAgIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgICAvKiBQYXNzIG9uICRsaXN0ZW5lcnMgc28gdGhhdCBkaXRvLWVkaXQtYnV0dG9ucyBjYW4gcGFzcyBldmVudHMuICovXG4gICAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICApXG4gICAgLy8gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLCBzbyBpdCBjYW4gYmVcbiAgICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCJub2RlIGluICRzbG90cy5kZWZhdWx0XCJcbiAgICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gICAgKVxuICAgICAgZGl0by12bm9kZSg6bm9kZT1cIm5vZGVcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuLmRpdG8tYnV0dG9uc1xuICA+IC5kaXRvLWNvbnRhaW5lclxuICAgIHBhZGRpbmc6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYnV0dG9ucycsIHtcbiAgcHJvdmlkZToge1xuICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgfSxcblxuICBwcm9wczoge1xuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGJ1dHRvbnMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXMuXG4gICAgICBjb25zdCB7IGRhdGFQYXRoLCBidXR0b25zIH0gPSB0aGlzXG4gICAgICByZXR1cm4gYnV0dG9uc1xuICAgICAgICA/IE9iamVjdC52YWx1ZXMoYnV0dG9ucykucmVkdWNlKChzY2hlbWFzLCBidXR0b24pID0+IHtcbiAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgfSwge30pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICBAY2xpY2suc3RvcFxuKVxuICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICBhLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RyYWdnYWJsZVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gIClcbiAgcm91dGVyLWxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICApXG4gIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNDcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICAgIEBjbGljay5zdG9wXG4gIClcbiAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgIGEuZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgKVxuICAgIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgICAgOnRvPVwieyBwYXRoOiBlZGl0UGF0aCB9XCIgYXBwZW5kXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICApXG4gICAgZGl0by1jcmVhdGUtYnV0dG9uKFxuICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1lZGl0LWJ1dHRvbnNcbiAgICAvLyBPdmVycmlkZSBjdXJzb3IgZnJvbSBjb2xsYXBzaWJsZSBkaXRvLWxhYmVsOlxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIGZsZXg6IG5vbmVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lZGl0LWJ1dHRvbnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjcmVhdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjcmVhdGVQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hLmZvcm0pXG4gICAgfSxcblxuICAgIGlzRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkcmFnZ2FibGUnKVxuICAgIH0sXG5cbiAgICBpc0VkaXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdlZGl0YWJsZScpICYmICEhdGhpcy5lZGl0UGF0aFxuICAgIH0sXG5cbiAgICBpc0NyZWF0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignY3JlYXRhYmxlJykgJiYgISF0aGlzLmNyZWF0ZVBhdGhcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RlbGV0YWJsZScpXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHxcbiAgICAgICAgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc09wdGlvbihuYW1lKSB7XG4gICAgICAvLyBUaGUgb3B0aW9ucyBvZiB0aGUgb3V0ZXIgY29tcG9uZW50IGFyZSBwYXNzZWQgdG8gdGhlIGJ1dHRvbnMgY29tcG9uZW50XG4gICAgICAvLyB0aHJvdWdoIHByb3BlcnRpZXMgYHRoaXNbbmFtZV1gLCBidXQgY2FuIGJlIGRpc2FibGVkIG9uIGEgcGVyLWZvcm1cbiAgICAgIC8vIGJhc2lzIGJ5IHNldHRpbmcgYHNjaGVtYVtuYW1lXWAgdG8gYGZhbHNlYC5cbiAgICAgIHJldHVybiAhISh0aGlzW25hbWVdICYmIHRoaXMuc2NoZW1hW25hbWVdICE9PSBmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tY3JlYXRlLWJ1dHRvblxuICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICApXG4gICAgICBsaSh2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiKVxuICAgICAgICBhKFxuICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiYGRpdG8tdHlwZS0ke3R5cGV9YFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtZWxzZVxuICAgIDp0eXBlPVwiaXNJbmxpbmVkID8gJ2J1dHRvbicgOiAnc3VibWl0J1wiXG4gICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICkge3sgdGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY3JlYXRlLWJ1dHRvblxuICAgIHRlbXBsYXRlKHYtaWY9XCJzaG93UHVsbGRvd25cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICAgICkge3sgdGV4dCB9fVxuICAgICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICAgIClcbiAgICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgICBhKFxuICAgICAgICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlKGZvcm0pXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1lbHNlXG4gICAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICAgICkge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgcmlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRGb3JtU2NoZW1hcywgaXNJbmxpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY3JlYXRlLWJ1dHRvbicsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHZlcmI6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRleHQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHNob3dQdWxsZG93bigpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZvcm1zKS5sZW5ndGggPiAxIHx8ICF0aGlzLmZvcm1zLmRlZmF1bHRcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGlzQ3JlYXRhYmxlKGZvcm0pIHtcbiAgICAgIC8vIEZvcm1zIGNhbiBiZSBleGNsdWRlZCBmcm9tIHRoZSBsaXN0IGJ5IHByb3ZpZGluZyBgY3JlYXRhYmxlOiBmYWxzZWBcbiAgICAgIHJldHVybiBmb3JtLmNyZWF0YWJsZSAhPT0gZmFsc2VcbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGFibGUoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfSxcbiAgICAgICAgICAgIGFwcGVuZDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIHYtaWY9XCJjbGlwYm9hcmRcIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY2xpcGJvYXJkJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjbGlwYm9hcmQ6IHsgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3B5RW5hYmxlZDogZmFsc2UsXG4gICAgICBwYXN0ZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZml4Q2xpcGJvYXJkOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xpcGJvYXJkT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh0aGlzLmNsaXBib2FyZCkgPyB0aGlzLmNsaXBib2FyZCA6IHt9XG4gICAgfSxcblxuICAgIGNvcHlEYXRhKCkge1xuICAgICAgY29uc3QgeyBjb3B5IH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBjb3B5XG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBjb3B5LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+IHBhc3RlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY29weTogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGZvY3VzOiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLiR3YXRjaCgnZGF0YScsIHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICh0bywgZnJvbSkgPT4ge1xuICAgICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKHRoaXMuZml4Q2xpcGJvYXJkICYmIGpzb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgbmVlZGVkIG9uIFNhZmFyaSB0byBwcmV2ZW50IGEgc3RyYW5nZSBcIlBhc3RlXCJcbiAgICAgICAgICAvLyBidXR0b24gZnJvbSBhcHBlYXJpbmcgd2hlbiB0aGUgY2xpcGJvYXJkIGlzIGFjY2Vzc2VkICh3aHk/ISkuXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICB0aGlzLmZpeENsaXBib2FyZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBjaGVja0NsaXBib2FyZCgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSAhIXRoaXMuZGF0YVxuICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhKGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkpIC8vIGRvbid0IHJlcG9ydFxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGFjdGl2YXRlIHRoZSBwYXN0ZSBidXR0b24sIGRlcGVuZGRpbmcgb24gYnJvd3NlcnM6XG4gICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uUGFzdGUoKSB7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YSh0cnVlKSAvLyByZXBvcnRcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBkYXRhICYmIHRoaXMucGFzdGVEYXRhKGRhdGEpXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcsIHsgdXBkYXRlUm9vdCA9IGZhbHNlLCB1cGRhdGVWaWV3ID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nIF4gIWlzTG9hZGluZykgeyAvLyBCb29sZWFuIHhvclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgICAgIGlmICh1cGRhdGVSb290KSB7XG4gICAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LnJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZVZpZXcpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0TG9hZGluZyh0aGlzLmlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5pbXBvcnQgeyBzZXREZWZhdWx0cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBMb2FkaW5nTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgIC8vIFBhc3MgbG9jYWwgdmVyYnMgb3ZlcnJpZGVzIG9uIHRvIGNoaWxkcmVuLCBzZWUgdmVyYnMoKSBjb21wdXRlZCBwcm9wLlxuICAgICAgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzLFxuICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0aGlzLmhhc0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9hZGVkRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZSBmb3IgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIHNvdXJjZSBzY2hlbWEuXG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGEgZGF0YS1zb3VyY2UgaWYgaXQgaGFzIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlOlxuICAgICAgcmV0dXJuICEhdGhpcy5yZXNvdXJjZVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIC8vIFJldHVybnMgYGZhbHNlYGhlcmUsIGJ1dCBpcyBvdmVycmlkZGVuIHRvIHJldHVybiBgdHJ1ZWAgaW5cbiAgICAgIC8vIGBTb3VyY2VNaXhpbmAgZm9yIGNvbXBvbmVudCB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWlyIG93biBkYXRhLCBidXRcbiAgICAgIC8vIGVkaXQgdGhlaXIgaXRlbXMgdGhyb3VnaCBhIGxpbmtlZCB2aWV3LiAgSW4gdGhpcyBjYXNlLCByZWFsIGlkcyBuZWVkIHRvXG4gICAgICAvLyBiZSB1c2VkLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBiZWxvbmdzIHRvIGFzIHdlbGwsIHNpbmNlIGl0IG1heSBiZVxuICAgICAgLy8gaW4gY3JlYXRpb24gbW9kZSwgd2hpY2ggbWFrZXMgaXQgdHJhbnNpZW50LlxuICAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBsb29wIGVuZGxlc3NseSBiZWNhdXNlIERpdG9Gb3JtIHJlZGVmaW5lc1xuICAgICAgLy8gYGlzVHJhbnNpZW50KClgIHRvIG9ubHkgcmV0dXJuIGAhdGhpcy5wcm92aWRlc0RhdGFgLlxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNvbXBvbmVudFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICF0aGlzLmxpbmtzVG9WaWV3IHx8XG4gICAgICAgIGZvcm0gJiYgKFxuICAgICAgICAgIGZvcm0uaXNUcmFuc2llbnQgfHxcbiAgICAgICAgICBmb3JtLmlzQ3JlYXRpbmdcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0cmFuc2llbnROb3RlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAnPGI+Tm90ZTwvYj46IHRoZSBwYXJlbnQgc3RpbGwgbmVlZHMgdG8gYmUgc2F2ZWQgJyArXG4gICAgICAgICdpbiBvcmRlciB0byBwZXJzaXN0IHRoaXMgY2hhbmdlLidcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcXVlcnlQYXJhbXMoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucGFnaW5hdGlvblJhbmdlXG4gICAgICBjb25zdCB7IHBhZ2UsIC4uLnF1ZXJ5IH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5xdWVyeSwgLy8gUXVlcnkgbWF5IG92ZXJyaWRlIHNjb3BlLlxuICAgICAgICAuLi4ocmFuZ2UgJiYge1xuICAgICAgICAgIC8vIFBhc3MgcGFnaW5hdGlvbiBhcyByYW5nZSwgc28gdGhhdCB3ZSBhdXRvbWF0aWNhbGx5IGdldCBPYmplY3Rpb24nc1xuICAgICAgICAgIC8vIHJlc3VsdHMgY291bnRpbmc6XG4gICAgICAgICAgcmFuZ2U6IHJhbmdlLmpvaW4oJywnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIFdoZW4gY3JlYXRpbmcgbmVzdGVkIGRhdGEsIHdlIHN0aWxsIG5lZWQgdG8gY2FsbCBzZXR1cERhdGEoKVxuICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSB8fCB0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRhKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFJlc291cmNlKCkge1xuICAgICAgLy8gVGhpcyBpcyBkZWZpbmVkIGFzIGEgbWV0aG9kIHNvIHRoZSBjb21wdXRlZCBgcmVzb3VyY2VgIGdldHRlciBjYW5cbiAgICAgIC8vIGJlIG92ZXJyaWRkZW4gYW5kIGBzdXBlcmAgZnVuY3Rpb25hbGl0eSBjYW4gc3RpbGwgYmUgYWNjZXNzZWQuXG4gICAgICByZXR1cm4gZ2V0UmVzb3VyY2UodGhpcy5zb3VyY2VTY2hlbWE/LnJlc291cmNlLCB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudEZvcm1Db21wb25lbnQ/LnJlc291cmNlID8/IG51bGxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFZlcmJzKCkge1xuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLiR2ZXJicygpXG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IHtcbiAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAvLyBPdmVycmlkZSBkZWZhdWx0IHZlcmJzIHdpdGggdGhlaXIgdHJhbnNpZW50IHZlcnNpb25zOlxuICAgICAgICAgIGNyZWF0ZTogJ2FkZCcsXG4gICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICBzYXZlOiAnYXBwbHknLFxuICAgICAgICAgIHNhdmVkOiAnYXBwbGllZCcsXG4gICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICBkZWxldGVkOiAncmVtb3ZlZCdcbiAgICAgICAgfVxuICAgICAgICA6IHZlcmJzXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIC8vIEFjdHVhbCBjb2RlIGlzIGluIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0J3MgZWFzZXIgdG8gb3ZlcnJpZGVcbiAgICAgIC8vIGBzZXR1cERhdGEoKWAgYW5kIGFuZCBjYWxsIGBlbnN1cmVEYXRhKClgIGZyb20gdGhlIG92ZXJyaWRlcyxcbiAgICAgIC8vIHNlZSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW4uXG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICBlbnN1cmVEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkTG9hZCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVsb2FkRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgfSxcblxuICAgIGxvYWREYXRhKGNsZWFyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckRhdGEoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHNldERlZmF1bHRzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5xdWVyeVBhcmFtc1xuICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZ2V0JywgcGFyYW1zIH0sIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2VcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZGF0YT8udHlwZSA9PT0gJ0ZpbHRlclZhbGlkYXRpb24nICYmXG4gICAgICAgICAgICAgIHRoaXMub25GaWx0ZXJFcnJvcnM/LihkYXRhLmVycm9ycykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdCh7XG4gICAgICBtZXRob2QsXG4gICAgICByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UsXG4gICAgICBkYXRhLFxuICAgICAgcGFyYW1zXG4gICAgfSwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHBhcmFtcyB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdClcbiAgICAgICAgLy8gUGFzcyBib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRvIHRoZSBjYWxsYmFjaywgc28gdGhleSBjYW4gYmVcbiAgICAgICAgLy8gZXhwb3NlZCB0byBmdXJ0aGVyIGNhbGxiYWNrcyB0aHJvdWdoIERpdG9Db250ZXh0LlxuICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgZXJyb3JzIHdlcmUgYWxyZWFkeSBoYW5kbGVkLlxuICAgICAgICBjb25zdCB7IHJlc3BvbnNlIH0gPSBlcnJvclxuICAgICAgICBpZiAoIWNhbGxiYWNrKGVycm9yLCByZXNwb25zZSkpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICBpZiAoZGF0YSAmJiBpc1N0cmluZyhkYXRhLnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiBsYWJlbGl6ZShkYXRhLnR5cGUpLFxuICAgICAgICAgICAgICB0ZXh0OiBkYXRhLm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogZXJyb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgIH0sXG5cbiAgICBnZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZCkge1xuICAgICAgLy8gQ29udmVudGlvbjogb25seSBwb3N0LCBwdXQgYW5kIHBhdGNoIHJlcXVlc3RzIHBhc3MgdGhlIGRhdGEgYXMgcGF5bG9hZC5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmNsdWRlcyhtZXRob2QpICYmIChcbiAgICAgICAgICAvLyBUT0RPOiBVc2UgYGhhbmRsZURhdGFTY2hlbWEoKWAgYXN5bmNocm9ub3VzbHkgaGVyZSBpbnN0ZWFkLCB0b1xuICAgICAgICAgIC8vIG9mZmVyIHRoZSBzYW1lIGFtb3VudCBvZiBwb3NzaWJpbGl0aWVzIGZvciBkYXRhIGxvYWRpbmcuXG4gICAgICAgICAgYnV0dG9uLmdldFNjaGVtYVZhbHVlKFsncmVzb3VyY2UnLCAnZGF0YSddKSB8fFxuICAgICAgICAgIGJ1dHRvbi5wcm9jZXNzZWRJdGVtXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbikge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCB7IG1ldGhvZCB9ID0gcmVzb3VyY2VcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgIHNldERhdGEgPSBmYWxzZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzID0gKCkgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgdGV4dDogJ1JlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBzZW50LidcbiAgICAgIH0pLFxuICAgICAgbm90aWZ5RXJyb3IgPSBlcnJvciA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgIF1cbiAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgZGF0YSwgcmVzb3VyY2UgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIG1lcmdlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzLCBpc09iamVjdFNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWZvcm0nLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW4sIFJlc291cmNlTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZWREYXRhOiBudWxsLFxuICAgICAgY2xvbmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgc291cmNlS2V5OiBudWxsLFxuICAgICAgaXNGb3JtOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBBZGQgc3VibWl0IC8gc3VibWl0dGVkIHRvIHRoZSB2ZXJicyByZXR1cm5lZCBieSBSZXNvdXJjZU1peGluXG4gICAgICAvLyBOT1RFOiBUaGVzZSBnZXQgcGFzc2VkIG9uIHRvIGNoaWxkcmVuIHRocm91Z2g6XG4gICAgICAvLyBgcHJvdmlkZSgpIC4uLiB7ICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyB9YCBpbiBSZXNvdXJjZU1peGluXG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuZ2V0VmVyYnMoKVxuICAgICAgY29uc3QgeyBpc0NyZWF0aW5nLCBwcm92aWRlc0RhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZlcmJzLFxuICAgICAgICBzdWJtaXQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGUgOiB2ZXJicy5zYXZlLFxuICAgICAgICBzdWJtaXR0ZWQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGVkIDogdmVyYnMuc2F2ZWQsXG4gICAgICAgIGNhbmNlbDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsIDogdmVyYnMuY2xvc2UsXG4gICAgICAgIGNhbmNlbGxlZDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsbGVkIDogdmVyYnMuY2xvc2VkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQsIHByb3ZpZGUgYW4gZW1wdHkgb2JqZWN0IHdpdGgganVzdCB0aGUgcmlnaHRcbiAgICAgICAgLy8gdHlwZSBzZXQsIHNvIHRoZSBmb3JtIGNhbiBhbHdheXMgYmUgZGV0ZXJtaW5lZC5cbiAgICAgICAgdGhpcy5kYXRhIHx8IHsgdHlwZTogdGhpcy50eXBlIH0sXG4gICAgICAgIHRoaXMuY29udGV4dFxuICAgICAgKSB8fCB7fSAvLyBBbHdheXMgcmV0dXJuIGEgc2NoZW1hIG9iamVjdCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBpdC5cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKFxuICAgICAgICBtZXJnZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN1Ym1pdDogIXRoaXMuZG9lc011dGF0ZSAmJiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgICAvLyBTdWJtaXQgYnV0dG9ucyBjbG9zZSB0aGUgZm9ybSBieSBkZWZhdWx0OlxuICAgICAgICAgICAgICBjbG9zZUZvcm06IHRydWUsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoeyBjb21wb25lbnQ6IGJ1dHRvbiB9KSA9PiBidXR0b24uc3VibWl0KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5zY2hlbWEuYnV0dG9uc1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMYXN0Um91dGUgfHwgdGhpcy5pc0xhc3RVbm5lc3RlZFJvdXRlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgcmV0dXJuICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0NyZWF0aW5nKCkge1xuICAgICAgLy8gdGhpcy5wYXJhbSBpcyBpbmhlcml0ZWQgZnJvbSBSb3V0ZU1peGluXG4gICAgICByZXR1cm4gdGhpcy5wYXJhbSA9PT0gJ2NyZWF0ZSdcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5kb2VzTXV0YXRlICYmICEhdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5pc0RpcnR5XG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkb2VzTXV0YXRlKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIGFwcGxpY2F0aW9uIHVwb24gc3VibWl0LlxuICAgICAgLy8gU2VlIGBpbmhlcml0ZWREYXRhKClgIGNvbXB1dGVkIHByb3BlcnR5IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICAvLyBUaGUgdHlwZSBvZiBmb3JtIHRvIGNyZWF0ZSwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGVcbiAgICB9LFxuXG4gICAgaXRlbUlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IG51bGxcbiAgICAgICAgOiAodGhpcy5wYXJhbSA/PyBudWxsKVxuICAgIH0sXG5cbiAgICBtZXRob2QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nID8gJ3Bvc3QnIDogJ3BhdGNoJ1xuICAgIH0sXG5cbiAgICByZXNvdXJjZSgpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgICByZXR1cm4gZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy5pdGVtSWQsIHJlc291cmNlKSB8fCByZXNvdXJjZVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuIGNhcGl0YWxpemUodGhpcy5pc0NyZWF0aW5nID8gdGhpcy52ZXJicy5jcmVhdGUgOiB0aGlzLnZlcmJzLmVkaXQpXG4gICAgfSxcblxuICAgIGRhdGEoKSB7XG4gICAgICAvLyBSZXR1cm4gZGlmZmVyZW50IGRhdGEgXCJjb250YWluZXJzXCIgYmFzZWQgb24gZGlmZmVyZW50IHNjZW5hcmlvczpcbiAgICAgIC8vIDEuIGNyZWF0ZWREYXRhLCBpZiB3ZSdyZSBpbiBhIGZvcm0gZm9yIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG4gICAgICAvLyAyLiBsb2FkZWREYXRhLCBpZiB0aGUgZm9ybSBpdHNlbGYgaXMgdGhlIHJvb3Qgb2YgdGhlIGRhdGEgKGUuZy4gd2hlblxuICAgICAgLy8gICAgZGlyZWN0bHkgbG9hZGluZyBhbiBlZGl0aW5nIHJvb3QpLlxuICAgICAgLy8gMy4gVGhlIGRhdGEgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCwgd2hpY2ggaXRzZWxmIG1heSBiZSBlaXRoZXIgYVxuICAgICAgLy8gICAgdmlldyB0aGF0IGxvYWRlZCB0aGUgZGF0YSwgb3IgYSBmb3JtIHRoYXQgZWl0aGVyIGxvYWRlZCB0aGUgZGF0YSwgb3JcbiAgICAgIC8vICAgIGFsc28gaW5oZXJpdGVkIGl0IGZyb20gaXRzIHBhcmVudC4gTm90ZSB0aGF0IHdlIHVzZSBhIGNsb25lIG9mIGl0LFxuICAgICAgLy8gICAgc28sIGRhdGEgY2hhbmdlcyBhcmVuJ3QgYXBwbGllZCB1bnRpbCBzZXRTb3VyY2VEYXRhKCkgaXMgY2FsbGVkLlxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlZERhdGEgfHwgdGhpcy5sb2FkZWREYXRhIHx8IHRoaXMuaW5oZXJpdGVkRGF0YSB8fCBudWxsXG4gICAgfSxcblxuICAgIGRhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMuZGF0YUNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgc291cmNlRGF0YSgpIHtcbiAgICAgIC8vIFBvc3NpYmxlIHBhcmVudHMgYXJlIERpdG9Gb3JtIGZvciBmb3Jtcywgb3IgRGl0b1ZpZXcgZm9yIHJvb3QgbGlzdHMuXG4gICAgICAvLyBCb3RoIGhhdmUgYSBkYXRhIHByb3BlcnR5IHdoaWNoIGFic3RyYWN0cyBhd2F5IGxvYWRpbmcgYW5kIGluaGVyaXRpbmdcbiAgICAgIC8vIG9mIGRhdGEuXG4gICAgICBsZXQgeyBkYXRhIH0gPSB0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICAvLyBIYW5kbGUgbmVzdGVkIGRhdGEgYnkgc3BsaXR0aW5nIHRoZSBkYXRhUGF0aCwgaXRlcmF0ZSB0aHJvdWdoIHRoZVxuICAgICAgICAvLyBhY3R1YWwgZGF0YSBhbmQgbG9vayBuZXN0IGNoaWxkLWRhdGEgdXAuXG4gICAgICAgIGNvbnN0IGRhdGFQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudClcbiAgICAgICAgKVxuICAgICAgICAvLyBDb21wYXJlIGRhdGFQYXJ0cyBhZ2FpbnN0IG1hdGNoZWQgcm91dGVQYXRoIHBhcnRzLCB0byBpZGVudGlmeSB0aG9zZVxuICAgICAgICAvLyBwYXJ0cyB0aGF0IG5lZWQgdG8gYmUgdHJlYXRlZCBsaWtlIGlkcyBhbmQgbWFwcGVkIHRvIGluZGljZXMgaW4gZGF0YS5cbiAgICAgICAgY29uc3QgcGF0aFBhcnRzID0gdGhpcy5yb3V0ZVJlY29yZC5wYXRoLnNwbGl0KCcvJylcbiAgICAgICAgY29uc3Qgcm91dGVQYXJ0cyA9IHBhdGhQYXJ0cy5zbGljZShwYXRoUGFydHMubGVuZ3RoIC0gZGF0YVBhcnRzLmxlbmd0aClcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUtleSA9IGtleVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gZGF0YVtrZXldXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBpbmhlcml0ZWREYXRhKCkge1xuICAgICAgLy8gRGF0YSBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIGFuZCBjbG9uZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlYWN0aXZlXG4gICAgICAvLyBjaGFuZ2VzIHVudGlsIGNoYW5nZXMgYXJlIGFwcGxpZWQgdGhyb3VnaCBzZXRTb3VyY2VEYXRhKCksIHVubGVzc1xuICAgICAgLy8gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIGluIHdoaWNoIGNhc2UgZGF0YSBpcyBtdXRhdGVkIGRpcmVjdGx5LlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHRoaXMuc291cmNlRGF0YSAmJlxuICAgICAgICB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5zb3VyY2VEYXRhW3RoaXMuc291cmNlS2V5XVxuICAgICAgICBpZiAoIXRoaXMuZG9lc011dGF0ZSkge1xuICAgICAgICAgIC8vIFVzZSBhIHRyaWNrIHRvIHN0b3JlIGNsb25lZCBpbmhlcml0ZWQgZGF0YSBpbiBjbG9uZWREYXRhLCB0byBtYWtlXG4gICAgICAgICAgLy8gaXQgcmVhY3RpdmUgYW5kIHByZXZlbnQgaXQgZnJvbSBiZWluZyBjbG9uZWQgbXVsdGlwbGUgdGltZXMuXG4gICAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gZGF0YSA9IGNsb25lKGRhdGEpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEgPT09IG51bGwgJiZcbiAgICAgICAgICAhdGhpcy5pc0NyZWF0aW5nICYmXG4gICAgICAgICAgaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIGRhdGEgb2YgYW4gb2JqZWN0IHNvdXJjZSBpcyBudWxsLCByZWRpcmVjdCB0byBpdHMgY3JlYXRlIHJvdXRlLlxuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogJ2NyZWF0ZScsIGFwcGVuZDogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jbG9uZWREYXRhXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaXRlbUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHsgZXh0ZW5kZWQ6IHRydWUgfSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzb3VyY2VEYXRhOiAnY2xlYXJDbG9uZWREYXRhJyxcbiAgICAvLyBOZWVkZWQgZm9yIHRoZSAnY3JlYXRlJyByZWRpcmVjdCBpbiBgaW5oZXJpdGVkRGF0YSgpYCB0byB3b3JrOlxuICAgIGNyZWF0ZTogJ3NldHVwRGF0YSdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfSxcblxuICAgIGdldERhdGFQYXRoRnJvbShyb3V0ZSkge1xuICAgICAgLy8gR2V0IHRoZSBkYXRhIHBhdGggYnkgZGVub3JtYWxpemVQYXRoIHRoZSByZWxhdGl2ZSByb3V0ZSBwYXRoXG4gICAgICByZXR1cm4gdGhpcy5hcGkuZGVub3JtYWxpemVQYXRoKHRoaXMucGF0aFxuICAgICAgICAvLyBEaXRvVmlld3MgaGF2ZSBuZXN0ZWQgcm91dGVzLCBzbyBkb24ndCByZW1vdmUgdGhlaXIgcGF0aC5cbiAgICAgICAgLnNsaWNlKChyb3V0ZS5pc1ZpZXcgPyAwIDogcm91dGUucGF0aC5sZW5ndGgpICsgMSkpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldHVwRGF0YSgpXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gdGhpcy5jcmVhdGVkRGF0YSB8fFxuICAgICAgICAgIHRoaXMuY3JlYXRlRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy50eXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0U291cmNlRGF0YShkYXRhKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VEYXRhICYmIHRoaXMuc291cmNlS2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWFpblNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgICB0aGlzLiRzZXQoXG4gICAgICAgICAgdGhpcy5zb3VyY2VEYXRhLFxuICAgICAgICAgIHRoaXMuc291cmNlS2V5LFxuICAgICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQuZmlsdGVyRGF0YShkYXRhKVxuICAgICAgICApXG4gICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQub25DaGFuZ2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFkZFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICA/IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgICA6ICEhdGhpcy5zb3VyY2VEYXRhPy5wdXNoKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5zZXREYXRhKG51bGwpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gc2V0RGF0YSgpIGlzIGNhbGxlZCBhZnRlciBzdWJtaXQgd2hlbiBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgLy8gRm9yIGNvbXBvbmVudHMgd2l0aCB0cmFuc2llbnQgZGF0YSwgbW9kaWZ5IHRoaXMuc291cmNlRGF0YS5cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gbnVsbFxuICAgICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyQ2xvbmVkRGF0YShuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgIC8vIE9ubHkgY2xlYXIgaWYgdGhlIHdhdGNoZWQgc291cmNlRGF0YSBpdHNlbGYgY2hhbmdlcyBpbiB0aGUgZm9ybS5cbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LnBhdGgpXG4gICAgfSxcblxuICAgIGdldFN1Ym1pdFZlcmIocHJlc2VudCA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBwcmVzZW50ID8gJ2NyZWF0ZScgOiAnY3JlYXRlZCdcbiAgICAgICAgOiBwcmVzZW50ID8gJ3N1Ym1pdCcgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgY29uc3QgYnV0dHRvblJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXNvdXJjZSA9IGJ1dHR0b25SZXNvdXJjZSB8fCB0aGlzLnJlc291cmNlXG4gICAgICBjb25zdCBtZXRob2QgPSByZXNvdXJjZT8ubWV0aG9kIHx8IHRoaXMubWV0aG9kXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgIGxldCBzdWNjZXNzXG4gICAgICBpZiAoIWJ1dHR0b25SZXNvdXJjZSAmJiB0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zaWVudChidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgPyBgSXRlbSAke2NhcGl0YWxpemUodmVyYil9YFxuICAgICAgICAgICAgICAgIDogYENoYW5nZSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgICAgICAgOiBgQ2hhbmdlcyB0byAke3RoaXMuaXRlbUxhYmVsfSB3ZXJlICR7dmVyYn0uYCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBzZXREYXRhOiB0cnVlLFxuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHRpdGxlOiBgU3VjY2Vzc2Z1bGx5ICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICAgIGlmIChjbG9zZUZvcm0gfHwgYnV0dG9uLmNsb3NlRm9ybSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBmb3JtIGVkaXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbTpcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBwYXRoOiBgLi4vJHtpZH1gLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgX3Jlc291cmNlLCBfbWV0aG9kLCBkYXRhLCB7XG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyxcbiAgICAgIG5vdGlmeUVycm9yXG4gICAgfSkge1xuICAgICAgLy8gSGFuZGxlIHRoZSBkZWZhdWx0IFwic3VibWl0dGluZ1wiIG9mIHRyYW5zaWVudCwgbmVzdGVkIGRhdGE6XG4gICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gdGhpcy5hZGRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdDb3VsZCBub3Qgc3VibWl0IHRyYW5zaWVudCBpdGVtJ1xuICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZm9ybS1uZXN0ZWRcbiAgICAmLFxuICAgIC5kaXRvLXNjcm9sbFxuICAgICAgLy8gTm8gc2Nyb2xsaW5nIGluc2lkZSBuZXN0ZWQgZm9ybXMsIGFuZCBwcmV2ZW50IG9wZW4gLm11bHRpc2VsZWN0IGZyb21cbiAgICAgIC8vIGJlaW5nIGNyb3BwZWQuXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvRm9ybSBmcm9tICcuL0RpdG9Gb3JtLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQgRGl0b0Zvcm0uY29tcG9uZW50KCdkaXRvLWZvcm0tbmVzdGVkJywge30pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZXJyb3JzKFxuICB2LWlmPVwiZXJyb3JzXCJcbilcbiAgdWxcbiAgICBsaSh2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiKVxuICAgICAgfCB7eyBlcnJvciB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZXJyb3JzKFxuICAgIHYtaWY9XCJlcnJvcnNcIlxuICApXG4gICAgdWxcbiAgICAgIGxpKHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCIpXG4gICAgICAgIHwge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1lcnJvcnNcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB6LWluZGV4OiAxXG4gICAgdWxcbiAgICAgIG1hcmdpbi10b3A6IDFweFxuICAgICAgY29sb3I6ICRjb2xvci1lcnJvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zY29wZXNcbiAgcm91dGVyLWxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zY29wZXNcbiAgICByb3V0ZXItbGluayhcbiAgICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2NvcGVzXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1idXR0b25cbiAgICAgICtlbGxpcHNpc1xuICAgICAgYm9yZGVyLXJhZGl1czogMFxuICAgICAgLy8gQSBiaXQgbW9yZSB0aGFuIHRoZSB3aWR0aCBvZiBlbGxpcHNpcywgdG8gcHJldmVudCByZXBsYWNpbmcgc2hvcnQgd29yZHNcbiAgICAgIC8vIHdpdGggZWxsaXBzaXMuXG4gICAgICBtaW4td2lkdGg6IDNlbVxuICAgICAgZmxleDogMCAxIGF1dG9cbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMWVtXG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDFlbVxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDFlbVxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxZW1cbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDFlbVxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxZW1cbiAgICAgICYgKyAuZGl0by1idXR0b25cbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xcHhcbiAgICAgIC8vIERvbid0IGNvdmVyIHRoZSBmb2N1c2VkIGJvcmRlciBvZiBidXR0b25zOlxuICAgICAgJjpmb2N1c1xuICAgICAgICB6LWluZGV4OiAxXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjb3BlcycsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NvcGVzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTY29wZUxpbmsoc2NvcGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyAuLi50aGlzLnF1ZXJ5LCBzY29wZTogc2NvcGUubmFtZSB9XG4gICAgICBpZiAocXVlcnkucGFnZSkge1xuICAgICAgICBxdWVyeS5wYWdlID0gMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHF1ZXJ5KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5wYWdpbmF0aW9uKFxuICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gIDp0b3RhbD1cInRvdGFsXCJcbiAgOnBhZ2Uuc3luYz1cInBhZ2VcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgcGFnaW5hdGlvbihcbiAgICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gICAgOnRvdGFsPVwidG90YWxcIlxuICAgIDpwYWdlLnN5bmM9XCJwYWdlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhZ2luYXRpb24nLCB7XG4gIGNvbXBvbmVudHM6IHsgUGFnaW5hdGlvbiB9LFxuXG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxpbWl0OiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhZ2U6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICgrdGhpcy5xdWVyeS5wYWdlIHx8IDApICsgMVxuICAgICAgfSxcblxuICAgICAgc2V0KHBhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSAhPT0gcGFnZSkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgICBwYWdlOiAocGFnZSAtIDEpXG4gICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uU3RhcnREcmFnKCkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWVcbiAgICB9LFxuXG4gICAgb25FbmREcmFnKHsgb2xkSW5kZXgsIG5ld0luZGV4IH0pIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgaWYgKG9sZEluZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0LCBwYWdpbmF0aW9uUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHsgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICAgIC8vIFJlb3JkZXIgdGhlIGNoYW5nZWQgZW50cmllcyBieSB0aGVpciBvcmRlciBrZXksIHRha2luZyBwYWdpbmF0aW9uXG4gICAgICAgIC8vIG9mZnNldHMgaW50byBhY2NvdW50OlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBwYWdpbmF0aW9uUmFuZ2U/LlswXSB8fCAwXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxpc3RbaV1bb3JkZXJLZXldID0gaSArIG9mZnNldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by10cmVlLWl0ZW0oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tZHJhZ2dpbmcnOiBkcmFnZ2luZyxcbiAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgfWBcbiAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbilcbiAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgLmRpdG8tdHJlZS1icmFuY2goXG4gICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgIClcbiAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiBvcGVuZWQgfVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWluZm8odi1pZj1cImRldGFpbHNcIikge3sgZGV0YWlscyB9fVxuICAgIC5kaXRvLXRyZWUtbGVhZih2LWVsc2UpXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgKVxuICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgdnVlLWRyYWdnYWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgQGVuZD1cIm9uRW5kRHJhZygkZXZlbnQsIGNoaWxkcmVuU2NoZW1hKVwiXG4gIClcbiAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgKVxuICAgIC8vIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyZWUtaXRlbShcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gICAgfWBcbiAgICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuICApXG4gICAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgICAgKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAgIC5kaXRvLXRyZWUtaW5mbyh2LWlmPVwiZGV0YWlsc1wiKSB7eyBkZXRhaWxzIH19XG4gICAgICAuZGl0by10cmVlLWxlYWYodi1lbHNlKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgKVxuICAgIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgICApXG4gICAgICAgIHRkXG4gICAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgICApXG4gICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGNoaWxkcmVuRHJhZ2dhYmxlLCB0cnVlKVwiXG4gICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWcoJGV2ZW50LCBjaGlsZHJlblNjaGVtYSlcIlxuICAgIClcbiAgICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgICApXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10cmVlLWl0ZW1cbiAgICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH1cbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgICAgPiAuZGl0by10cmVlLWxlYWZcbiAgICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by10cmVlLWhlYWRlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgLmRpdG8tdHJlZS1sZWFmXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIG1hcmdpbjogMXB4IDBcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXRyZWUtbGFiZWwsXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbVxuICAgICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAuMilcbiAgICAuZGl0by1idXR0b25zXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgbWFyZ2luLWxlZnQ6IDFlbVxuICAgICAgbWFyZ2luOiAxcHggMCAxcHggMWVtXG4gICAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXJcbiAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlXG4gICAgLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICAgICYuZGl0by1kcmFnZ2luZ1xuICAgICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgPiAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlXG4gICAgICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbFxuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1wcm9wZXJ0aWVzXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudFxuICAgICAgPiB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmVcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGNvbnRlbnQ6ICc6ICdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdHJlZS1pdGVtJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtPcmRlcmVkTWl4aW5dLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0KCkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IG9wZW4gPSBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbnVtQ2hpbGRyZW4gJiYgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgfWBcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGgoXG4gICAgICB2LWZvcj1cIihjb2x1bW4sIGluZGV4KSBpbiBjb2x1bW5zXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICApXG4gICAgICByb3V0ZXItbGluayhcbiAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgIHNwYW5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgIHRyXG4gICAgICB0aChcbiAgICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICByb3V0ZXItbGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAgIC8vIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Fzc1xuICAgICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdGFibGUtaGVhZFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHRyXG4gICAgICB0aFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdFxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZywgc2VlIGJlbG93XG4gICAgICAgICAgcGFkZGluZzogMFxuICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDBcbiAgICAgICAgc3BhblxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZ1xuICAgICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICAgICAgJjplbXB0eTo6YWZ0ZXJcbiAgICAgICAgICAgIC8vIFByZXZlbnQgZW1wdHkgPHRoPiBmcm9tIGNvbGxhcHNpbmdcbiAgICAgICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInIC8vIHplcm8td2lkdGggc3BhY2VcbiAgICAgICAgPiBzcGFuXG4gICAgICAgICAgZGlzcGxheTogYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYmxlLWhlYWQnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbHVtbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGhhc0VkaXRCdXR0b25zOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvcnQoKSB7XG4gICAgICBjb25zdCBvcmRlciA9ICh0aGlzLnF1ZXJ5Lm9yZGVyIHx8ICcnKS5zcGxpdCgvXFxzKy8pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBvcmRlclswXSxcbiAgICAgICAgb3JkZXI6IG9yZGVyWzFdXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb2x1bW5DbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jb2x1bW4tJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0U29ydENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZVxuICAgICAgICA/IGBkaXRvLXNlbGVjdGVkIGRpdG8tb3JkZXItJHt0aGlzLnNvcnQub3JkZXJ9YFxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0U29ydExpbmsoY29sdW1uKSB7XG4gICAgICAvLyBUb2dnbGUgb3JkZXIgaWYgdGhlIHNhbWUgY29sdW1uIGlzIGNsaWNrZWQgYWdhaW4uXG4gICAgICBjb25zdCBvcmRlciA9IHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSAmJiB0aGlzLnNvcnQub3JkZXIgPT09ICdhc2MnXG4gICAgICAgID8gJ2Rlc2MnXG4gICAgICAgIDogJ2FzYydcbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgIG9yZGVyOiBgJHtjb2x1bW4ubmFtZX0gJHtvcmRlcn1gXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50ZChcbiAgOmNsYXNzPVwiY2VsbC5jbGFzc1wiXG4gIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuKVxuICAvLyBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjb21wb25lbnRcIlxuICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4gIHNwYW4oXG4gICAgdi1lbHNlXG4gICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRkKFxuICAgIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICAgIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuICApXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1pZj1cImNvbXBvbmVudFwiXG4gICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlXG4gICAgICB2LWh0bWw9XCJyZW5kZXJDZWxsKGRhdGEpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdGFibGUtY2VsbCcsIHtcbiAgcHJvcHM6IHtcbiAgICBjZWxsOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVHlwZUNvbXBvbmVudCh0aGlzLmNlbGwuY29tcG9uZW50KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyQ2VsbChpdGVtKSB7XG4gICAgICBjb25zdCB7IG5hbWUsIHJlbmRlciB9ID0gdGhpcy5jZWxsXG4gICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bbmFtZV1cbiAgICAgIHJldHVybiByZW5kZXJcbiAgICAgICAgPyByZW5kZXIuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwodmFsdWUpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQSBjb21wb25lbnQgdG8gc2ltcGx5IHBhc3MgdGhyb3VnaCBhbiBleGlzdGluZyB2dWUgdm5vZGUuXG4vLyBTZWU6IGh0dHBzOi8vZm9ydW0udnVlanMub3JnL3QvMjgxNjIvNFxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdm5vZGUnLCB7XG4gIGZ1bmN0aW9uYWw6IHRydWUsXG4gIHJlbmRlcjogKGgsIGNvbnRleHQpID0+IGNvbnRleHQucHJvcHMubm9kZVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gVHlwZUNvbXBvbmVudCBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjb21wb25lbnQgZm9yIGFsbCBvdGhlciB0eXBlIGNvbXBvbmVudHNcbi8vIGluc2lkZSB0aGUgdHlwZXMvIGZvbGRlci4gVGhlcmUncyBhbHNvIGEgc2VwYXJhdGUgY29uY3JldGVcbi8vIGBUeXBlQ29tcG9uZW50LnZ1ZWAgY29tcG9uZW50LCB1c2UgdG8gcmVuZGVyIHRoZSBgdHlwZTogJ2NvbXBvbmVudCdgIHR5cGVzLlxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IHJlZ2lzdGVyVHlwZUNvbXBvbmVudCwgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5jb25zdCBUeXBlQ29tcG9uZW50ID0gRGl0b0NvbXBvbmVudC5leHRlbmQoe1xuICBtaXhpbnM6IFtUeXBlTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiBmYWxzZSxcbiAgdGV4dEZpZWxkOiBmYWxzZSxcbiAgLy8gU2V0IHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIGFsbCBvZiB0aGVzZSB0aGF0IGFyZSB1c2VkIGJ5IG1vc3QgdHlwZVxuICAvLyBjb21wb25lbnRzLiBUaGVzZSBvbmx5IG5lZWQgZGVmaW5pbmcgaW4gc3ViLWNsYXNzZXMgd2hlbiB0aGV5IGRpZmZlci5cbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkZWZhdWx0TmVzdGVkOiB0cnVlLFxuICBkZWZhdWx0VmlzaWJsZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogdHJ1ZSxcbiAgZXhjbHVkZVZhbHVlOiBmYWxzZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBudWxsLFxuICBvbWl0UGFkZGluZzogZmFsc2Vcbn0pXG5cblR5cGVDb21wb25lbnQucmVnaXN0ZXIgPSBmdW5jdGlvbih0eXBlcywgZGVmaW5pdGlvbiA9IHt9KSB7XG4gIHR5cGVzID0gYXNBcnJheSh0eXBlcylcbiAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQoYGRpdG8tdHlwZS0ke3R5cGVzWzBdfWAsIGRlZmluaXRpb24pXG4gIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5UeXBlQ29tcG9uZW50LmdldCA9IGdldFR5cGVDb21wb25lbnRcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudFxuIiwiXG5idXR0b24uZGl0by1idXR0b24oXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp0eXBlPVwidHlwZVwiXG4gIDp0aXRsZT1cInRleHRcIlxuICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pIHt7IHRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnR5cGU9XCJ0eXBlXCJcbiAgICA6dGl0bGU9XCJ0ZXh0XCJcbiAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnYnV0dG9uJywgJ3N1Ym1pdCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcbiAgLy8gVE9ETzogQ29uc2lkZXIgbWFraW5nIHRoaXMgd29yayBuaWNlbHk6XG4gIC8vIG9taXRGbGV4R3JvdzogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmIoKSB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJic1t0aGlzLm5hbWVdIHx8IHRoaXMubmFtZVxuICAgIH0sXG5cbiAgICB0ZXh0OiBnZXRTY2hlbWFBY2Nlc3NvcigndGV4dCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGdldCh0ZXh0KSB7XG4gICAgICAgIHJldHVybiB0ZXh0IHx8IGxhYmVsaXplKHRoaXMudmVyYilcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNsb3NlRm9ybTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Nsb3NlRm9ybScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEBvdmVycmlkZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBjbGljazogdGhpcy5vbkNsaWNrXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZUNvbXBvbmVudD8uc3VibWl0KHRoaXMsIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmVtaXRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgICAvLyBIYXZlIGJ1dHRvbnMgdGhhdCBkZWZpbmUgcmVzb3VyY2VzIGNhbGwgYHRoaXMuc3VibWl0KClgIGJ5IGRlZmF1bHQ6XG4gICAgICBpZiAoXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgaGFzUmVzb3VyY2UodGhpcy5zY2hlbWEpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5pbnB1dC5kaXRvLWNoZWNrYm94KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB0eXBlPVwiY2hlY2tib3hcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jaGVja2JveFxuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3Ncbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBub3JtYWxpemVEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtMb2FkaW5nTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBhc3luY0RhdGFFbnRyaWVzOiB7fVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsIG5hbWUsIHtcbiAgICAgIHJlc29sdmVDb3VudGVyID0gMSxcbiAgICAgIC4uLmxvYWRpbmdPcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgICAgc2NoZW1hID0geyBkYXRhOiBzY2hlbWEgfVxuICAgICAgfVxuICAgICAgbGV0IHsgZGF0YSA9IHVuZGVmaW5lZCwgZGF0YVBhdGggPSBudWxsIH0gPSBzY2hlbWFcbiAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhc3luYyBkYXRhIGxvYWRpbmcgYWxyZWFkeSBpbiBwcm9jZXNzLlxuICAgICAgY29uc3QgYXN5bmNFbnRyeSA9IChcbiAgICAgICAgdGhpcy5hc3luY0RhdGFFbnRyaWVzW25hbWVdIHx8XG4gICAgICAgIHRoaXMuJHNldCh0aGlzLmFzeW5jRGF0YUVudHJpZXMsIG5hbWUsIHtcbiAgICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDAsXG4gICAgICAgICAgcmVzb2x2ZWREYXRhOiBudWxsLFxuICAgICAgICAgIHJlc29sdmluZzogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC8vIElmIHRoZSBkYXRhIGNhbGxiYWNrIHByb3ZpZGVkIGEgZGVwZW5kZW5jeSBmdW5jdGlvbiB3aGVuIGl0IHdhcyBjYWxsZWQsXG4gICAgICAvLyBjYWwgaXQgaW4gZXZlcnkgY2FsbCBvZiBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBmb3JjZSBWdWUgdG8ga2VlcCB0cmFja1xuICAgICAgLy8gb2YgdGhlIGFzeW5jIGRlcGVuZGVuY2llcy5cbiAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uPy5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcblxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPiAwKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSB2YWx1ZSBvbmNlXG4gICAgICAgIC8vIGByZXNvbHZlQ291bnRlcmAgcmVhY2hlcyB6ZXJvLiBDb3VudGluZyBpcyBuZWVkZWQgYmVjYXVzZSBkZXBlbmRpbmdcbiAgICAgICAgLy8gb24gdGhlIHVzZSBvZiBkYXRhIGFuZCByZWFjdGl2aXR5LCBtdWx0aXBsZSBjYWxscyB0byB0aGUgY29tcHV0ZWRcbiAgICAgICAgLy8gZ2V0dGVyIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZGF0YSBpcyBjaGFuZ2luZy4gQ2xlYXJpbmcgdGhlIHJlc29sdmVkXG4gICAgICAgIC8vIGRhdGEgd29ya3MgYmVjYXVzZSBWdWUgY2FjaGVzIHRoZSByZXN1bHQgb2YgY29tcHV0ZWQgZ2V0dGVycyBhbmQgb25seVxuICAgICAgICAvLyByZWV2YWx1YXRlcyBpZiBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VkLiBUaGlzIGlzIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IGEgY2FjaGVkIHZhbHVlIGhlcmUgZG9lc24ndCBibG9jayAvIG92ZXJyaWRlIHJlZXZhbHVhdGlvbjpcbiAgICAgICAgY29uc3QgeyByZXNvbHZlZERhdGEgfSA9IGFzeW5jRW50cnlcbiAgICAgICAgaWYgKC0tYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9PT0gMCkge1xuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZERhdGFcbiAgICAgIH1cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgdGhlIGRhdGEgZnVuY3Rpb24gdHdpY2U6XG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZpbmcpIHtcbiAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBmdW5jdGlvbiBpcyBhbm90aGVyIGZ1bmN0aW9uLCB0aGVuIHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGRhdGEgZnVuY3Rpb24gaXMgdGhlcmUgdG8gdHJhY2sgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmVhbFxuICAgICAgICAgIC8vIGRhdGEgbG9hZGluZyBoYXBwZW5zIGluIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkLiBLZWVwIHRyYWNrXG4gICAgICAgICAgLy8gaXQgaW4gYGRlcGVuZGVuY3lGdW5jdGlvbmAgc28gaXQgY2FuIGJlIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2ZcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgaW50YWN0LCBhbmQgY2FsbFxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkIG9uY2UgdG8gZ2V0IHRoZSBhY3R1YWwgZGF0YTpcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbiA9IGRhdGFcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHQuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9IHJlc29sdmVDb3VudGVyXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IGRhdGFcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi9EYXRhTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgc2V0VGVtcG9yYXJ5SWQsIGlzUmVmZXJlbmNlIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbixcbiAgbm9ybWFsaXplRGF0YVBhdGgsIGxhYmVsaXplLCBkZWJvdW5jZUFzeW5jXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzT3B0aW9uczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmhhc09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgID8gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICAgICAgPyB0aGlzLnZhbHVlLm1hcChjb252ZXJ0VmFsdWUpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICA6IGNvbnZlcnRWYWx1ZSh0aGlzLnZhbHVlKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gV2hlbiByZWxhdGluZyBhbmQgYXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLi4uXG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgdGhpcy5oYXNPcHRpb25zICYmIChcbiAgICAgICAgICAgIC8vIC4uLmlmIHRoZSB2YWx1ZSBpcyBmb3JjZWQgdG8gbnVsbCBiZWNhdXNlIGEgZGlzYXBwZWFyZWQgb3B0aW9uLi4uXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbCAmJiB0aGlzLnZhbHVlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAvLyAuLi5vciBpZiB0aGUgdmFsdWUgaXMgYSByZWZlcmVuY2UsIHJlcGxhY2UgaXQgd2l0aCBpdHMgb3B0aW9uXG4gICAgICAgICAgICAvLyB2YWx1ZSwgc28gdGhhdCBpdCdsbCBob2xkIGFjdHVhbCBkYXRhLCBub3QganVzdCBhIHJlZmVyZW5jZSBpZC5cbiAgICAgICAgICAgIGlzUmVmZXJlbmNlKHRoaXMudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSB2YWx1ZSA9PiB0aGlzLnJlbGF0ZVxuICAgICAgICAgID8gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnQpXG4gICAgICAgICAgOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnLCB7XG4gICAgICAgIHJlc29sdmVDb3VudGVyOiAxXG4gICAgICB9KSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICB0aGlzLmhhc09wdGlvbnMgPSBkYXRhLmxlbmd0aCA+IDBcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcHRpb25zKGRhdGEpXG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gYFR5cGVNdWx0aXNlbGVjdGAgdG8gcmV0dXJuIHRoZSBgc2VhcmNoZWRPcHRpb25zYFxuICAgICAgLy8gd2hlbiBhIHNlYXJjaCBmaWx0ZXIgd2FzIGFwcGxpZWQuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBncm91cEJ5TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ2xhYmVsJyA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ29wdGlvbnMnIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0T3B0aW9uS2V5KGtleSkge1xuICAgICAgY29uc3QgW29wdGlvbl0gPSB0aGlzLmFjdGl2ZU9wdGlvbnNcbiAgICAgIHJldHVybiBpc09iamVjdChvcHRpb24pICYmIGtleSBpbiBvcHRpb24gPyBrZXkgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5yZWxhdGUpIHtcbiAgICAgICAgICAvLyBJZiBpZHMgYXJlIG1pc3NpbmcgYW5kIHdlIHdhbnQgdG8gcmVsYXRlLCBzZXQgdGVtcG9yYXJ5IGlkcy5cbiAgICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgYWN0dWFsIGRhdGEsIG1ha2luZyBhIGNvcHkgd29uJ3Qgd29ya1xuICAgICAgICAgIC8vIGFzIGl0IHdvbid0IHByb3BhZ2F0ZS5cbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGRhdGEgaXMgZnJvbSB0aGUgZ3JhcGggdGhhdFxuICAgICAgICAgIC8vIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nLlxuICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghKCdpZCcgaW4gb3B0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUZW1wb3JhcnlJZChvcHRpb24sICdpZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICBjb25zdCBncm91cGVkID0ge31cbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzdWx0cywgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uW3RoaXMuZ3JvdXBCeV1cbiAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gZ3JvdXBlZFtncm91cF1cbiAgICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gZ3JvdXBlZFtncm91cF0gPSB7XG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5TGFiZWxdOiBncm91cCxcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlPcHRpb25zXTogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVudHJ5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVudHJ5Lm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW11cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfSxcblxuICAgIGhhc09wdGlvbihvcHRpb24pIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgIH0sXG5cbiAgICBnZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3QgZmluZE9wdGlvbiA9IChvcHRpb25zLCB2YWx1ZSwgZ3JvdXBCeSkgPT4ge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBvcHRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIHdob2xlIG9iamVjdC5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb24ob3B0aW9uLm9wdGlvbnMsIHZhbHVlLCBudWxsKVxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZVxuICAgICAgICA/IGZpbmRPcHRpb24odGhpcy5hY3RpdmVPcHRpb25zLCB2YWx1ZSwgdGhpcy5ncm91cEJ5KVxuICAgICAgICA6IHZhbHVlXG4gICAgfSxcblxuICAgIGdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvblZhbHVlKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvblZhbHVlXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBsYWJlbGl6ZShgJHtvcHRpb259YClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiB2YWx1ZSA/IHsgaWQ6IHZhbHVlLmlkIH0gOiB2YWx1ZVxuICAgICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgYm90aCBvYmplY3RzICYgYXJyYXlzLCBlLmcuICdjaGVja2JveGVzJzpcbiAgICAgIHZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc1JlbGF0ZSlcbiAgICAgICAgOiBwcm9jZXNzUmVsYXRlKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiXG51bC5kaXRvLWNoZWNrYm94ZXMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdWwuZGl0by1jaGVja2JveGVzKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4gIClcbiAgICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgICBsYWJlbFxuICAgICAgICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY2hlY2tib3hlc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tY2hlY2tib3hcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IChvcHRpb24gfHwgW10pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNvZGUoXG4gIHJlZj1cImNvZGVcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvZGUoXG4gICAgcmVmPVwiY29kZVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzdHlsZT1cInN0eWxlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNvZGVcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC8vIEZvciBwcm9wcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAgIC8vIGZvciBwcm9wZXIgbGluZS1oZWlnaHQgY2FsY3VsYXRpb24uXG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IGF1dG9cbiAgICAuY29kZWZsYXNrXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAvLyBJZ25vcmUgdGhlcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAgIC8vIHRoZSBkZXNpcmVkIGhlaWdodCB3aXRoIDpzdHlsZT1cInN0eWxlXCIuXG4gICAgICB0b3A6IDBcbiAgICAgIGxlZnQ6IDBcbiAgICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgICAuY29kZWZsYXNrX19wcmVcbiAgICAgIC8vIFVzZSBzYW1lIHBhZGRpbmcgYXMgLmRpdG8tY29kZVxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgICAuY29kZWZsYXNrX19jb2RlLFxuICAgIC5jb2RlZmxhc2tfX2xpbmVzXG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9cbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplKVxuICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KVxuICAgIC5jb2RlZmxhc2tfX2xpbmVzXG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IENvZGVGbGFzayBmcm9tICdjb2RlZmxhc2snXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2RlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAzXG4gICAgfSxcblxuICAgIHN0eWxlKCkge1xuICAgICAgcmV0dXJuIGBoZWlnaHQ6IGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBmbGFzayA9IG5ldyBDb2RlRmxhc2sodGhpcy4kcmVmcy5jb2RlLCB7XG4gICAgICBsYW5ndWFnZTogdGhpcy5zY2hlbWEubGFuZ3VhZ2UgfHwgJ2phdmFzY3JpcHQnLFxuICAgICAgdGFiU2l6ZTogdGhpcy5zY2hlbWEuaW5kZW50U2l6ZSB8fCAyLFxuICAgICAgbGluZU51bWJlcnM6IGZhbHNlXG4gICAgfSlcblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgIGxldCBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICB0aGlzLmRvbU9uKHRoaXMuJHJlZnMuY29kZS5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpLCB7XG4gICAgICBmb2N1czogb25Gb2N1cyxcbiAgICAgIGJsdXI6IG9uQmx1clxuICAgIH0pXG5cbiAgICBjb25zdCBzZXRDb2RlID0gY29kZSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gZmxhc2suY29kZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSB0cnVlXG4gICAgICAgIGZsYXNrLnVwZGF0ZUNvZGUoY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICAgIG9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmbGFzay5vblVwZGF0ZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlVXBkYXRlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldENvZGUodmFsdWUgfHwgJycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldENvZGUodGhpcy52YWx1ZSB8fCAnJylcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50cmlnZ2VyLmRpdG8tY29sb3IoXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuKVxuICAuZGl0by1pbnB1dChcbiAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgKVxuICAgIGlucHV0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB0eXBlPVwiaW5wdXRcIlxuICAgICAgc2l6ZT1cIjhcIlxuICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuICAgIC5kaXRvLWNvbG9yLXByZXZpZXcuZGl0by1pbmhlcml0LWZvY3VzKFxuICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICApXG4gICAgICBkaXYoOnN0eWxlPVwieyBiYWNrZ3JvdW5kOiBgIyR7aGV4VmFsdWUgfHwgJzAwMDAwMDAwJ31gIH1cIilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICBza2V0Y2gtcGlja2VyLmRpdG8tY29sb3ItcGlja2VyKFxuICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgIDpkaXNhYmxlLWFscGhhPVwiIWFscGhhXCJcbiAgICA6ZGlzYWJsZS1maWVsZHM9XCIhaW5wdXRzXCJcbiAgICA6cHJlc2V0LWNvbG9ycz1cInByZXNldHNcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0cmlnZ2VyLmRpdG8tY29sb3IoXG4gICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgKVxuICAgIC5kaXRvLWlucHV0KFxuICAgICAgc2xvdD1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICApXG4gICAgICBpbnB1dChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgICAgc2l6ZT1cIjhcIlxuICAgICAgICB2LW1vZGVsPVwiaGV4VmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gICAgc2tldGNoLXBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZS1hbHBoYT1cIiFhbHBoYVwiXG4gICAgICA6ZGlzYWJsZS1maWVsZHM9XCIhaW5wdXRzXCJcbiAgICAgIDpwcmVzZXQtY29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gICRjb2xvci1zd2F0Y2gtd2lkdGg6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeS1zaXplXG4gICRjb2xvci1zd2F0Y2gtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtICRib3JkZXItd2lkdGhcbiAgLmRpdG8tY29sb3JcbiAgICAuZGl0by1pbnB1dFxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgaW5wdXRcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIG1hcmdpbi1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgIC5kaXRvLWNvbG9yLXBpY2tlclxuICAgICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgLmRpdG8tY29sb3ItcHJldmlld1xuICAgICAgYmFja2dyb3VuZDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5XG4gICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZVxuICAgICAgJixcbiAgICAgIGRpdlxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgd2lkdGg6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAgICAgdG9wOiAwXG4gICAgICAgIHJpZ2h0OiAwXG4gICAgICAgIGJvdHRvbTogMFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXNcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHRpbnljb2xvciBmcm9tICd0aW55Y29sb3IyJ1xuaW1wb3J0IHsgU2tldGNoIGFzIFNrZXRjaFBpY2tlciB9IGZyb20gJ3Z1ZS1jb2xvcidcbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBUcmlnZ2VyIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSB7XG4gICAgICAgICAgLy8gTk9URTogdnVlLWNvbG9yIGNhbGxzIGl0ICdoZXgnLCB3aGlsZSB0aW55Y29sb3IgY2FsbHMgaXQgJ2hleDYnXG4gICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICByZ2I6ICdyZ2JhJ1xuICAgICAgICB9W2Zvcm1hdF0gfHwgZm9ybWF0XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aW55Y29sb3IodmFsdWUpLnRvU3RyaW5nKGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgYWxwaGE6IGdldFNjaGVtYUFjY2Vzc29yKCdhbHBoYScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZm9jdXNlZChmb2N1c2VkKSB7XG4gICAgICBpZiAoIWZvY3VzZWQgJiYgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcihgIyR7dGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZX1gKVxuICAgICAgICBpZiAoY29sb3I/LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBjb2xvci50b1N0cmluZyh0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIC8vIFRPRE86IEVtaXQgJ2lucHV0JyBoZXJlIGluc3RlYWQsIGFuZCAnY2hhbmdlJyBpbiBibHVyLCBsaWtlIG90aGVycy5cbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgOmlzPVwiY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIHYtYmluZD1cIiRwcm9wc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVUeXBlQ29tcG9uZW50KClgLiBUaGlzIGNhblxuLy8gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8gIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4gIC8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG4gIGlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJ2YWx1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInRydWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbidcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJywge1xuICAgICAgICAgICAgLy8gTW9kaWZ5aW5nIGB0aGlzLmRhdGFgIGJlbG93IHRyaWdnZXJzIGFub3RoZXIgY2FsbCBvZiB0aGUgYHZhbHVlYFxuICAgICAgICAgICAgLy8gZ2V0dGVyLCBzbyB1c2UgYSB2YWx1ZSBvZiAyIGZvciBgcmVzb2x2ZUNvdW50ZXJgIHRvIHJldHVybiB0aGVcbiAgICAgICAgICAgIC8vIHJlc29sdmVkIGRhdGEgdHdpY2UuXG4gICAgICAgICAgICByZXNvbHZlQ291bnRlcjogMlxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZGF0ZVxuICAgIGNvbXBvbmVudChcbiAgICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWUnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9LFxuICAvLyBUT0RPOiBUaGlzIGlzIG9ubHkgaGVyZSBzbyB3ZSBnZXQgcGxhY2Vob2xkZXIgYWRkZWQuIENvbWUgdXAgd2l0aCBhIGJldHRlclxuICAvLyB3YXkgdG8gc3VwcG9ydCBhdHRyaWJ1dGVzIHBlciBjb21wb25lbnQgKGEgbGlzdCBvZiBhY3R1YWxseSBzdXBwb3J0ZWRcbiAgLy8gYXR0cmlidXRlcylcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGRhdGVWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRhdGVGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkYXRlRm9ybWF0Jywge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudCh0eXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRlOiAnZGF0ZS1waWNrZXInLFxuICAgICAgICB0aW1lOiAndGltZS1waWNrZXInLFxuICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICB9W3R5cGVdXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRGF0ZSh2YWx1ZSkgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogdmFsdWVcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4vUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuLi9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciwgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYSwgcHJvY2Vzc0Zvcm1zLCBnZXROYW1lZFNjaGVtYXMsIGdldEJ1dHRvblNjaGVtYXMsXG4gIGhhc0Zvcm1TY2hlbWEsIGdldEZvcm1TY2hlbWFzLCBnZXRWaWV3U2NoZW1hLFxuICBoYXNMYWJlbHMsIGlzQ29tcGFjdCwgaXNJbmxpbmVkLFxuICBpc09iamVjdFNvdXJjZSwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc1N0cmluZywgaXNBcnJheSwgaXNOdW1iZXIsIGVxdWFscyxcbiAgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbUmVzb3VyY2VNaXhpbiwgU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgICByZXR1cm4gaXNMaXN0U291cmNlKHNjaGVtYSkgPyBbXSA6IG51bGxcbiAgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyYXBwZWRQcmltaXRpdmVzOiBudWxsLFxuICAgICAgdW53cmFwcGluZ1ByaW1pdGl2ZXM6IGZhbHNlLFxuICAgICAgaWdub3JlUm91dGVDaGFuZ2U6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgaXNPYmplY3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICBpc0xpc3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNMaXN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgaXNSZWFkeSgpIHtcbiAgICAgIC8vIExpc3RzIHRoYXQgaGF2ZSBubyBkYXRhIGFuZCBubyBhc3NvY2lhdGVkIHJlc291cmNlIHNob3VsZCBzdGlsbCByZW5kZXIsXG4gICAgICAvLyBhcyB0aGV5IG1heSBiZSBnZXR0aW5nIHRoZWlyIGRhdGEgZWxzZXdoZXJlLCBlLmcuIGBjb21wdXRlKClgLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzRGF0YSB8fCAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNJblZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdDb21wb25lbnRcbiAgICB9LFxuXG4gICAgd3JhcFByaW1pdGl2ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEud3JhcFByaW1pdGl2ZXNcbiAgICB9LFxuXG4gICAgbGlzdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnZhbHVlXG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgICAgLy8gQ29udmVydCB0byBsaXN0IGFycmF5LlxuICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBbZGF0YV0gOiBbXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGRhdGEgZ2V0cyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIHVud3JhcHBpbmcgaXMgbm90IGhhcHBlbmluZ1xuICAgICAgICAgIC8vIGF0IHRoZSByb290IGluIGBzZXREYXRhKClgLCBidXQgaGVyZSBpbnN0ZWFkLlxuICAgICAgICAgIGRhdGEgPSB0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpIHx8IGRhdGFcbiAgICAgICAgfVxuICAgICAgICBkYXRhID0gZGF0YSB8fCBbXVxuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIGlmICh0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBkb25lIHVud3JhcHBpbmcgb25jZSBgbGlzdERhdGFgIGlzIHJlZXZhbHVhdGVkLCBzbyBzZXRcbiAgICAgICAgICAgIC8vIHRoaXMgdG8gYGZhbHNlYCBhZ2Fpbi4gU2VlIGB3cmFwcGVkUHJpbWl0aXZlc2Agd2F0Y2hlciBhYm92ZS5cbiAgICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEgdG8gYSBsaXN0IG9mIHdyYXBwZWQgcHJpbWl0aXZlcywgYW5kIHJldHVybiBpdC5cbiAgICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhLm1hcCh2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiB2YWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRQcmltaXRpdmVzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAgPyBkYXRhWzBdIDogbnVsbClcbiAgICAgICAgICAgIDogZGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9iamVjdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gQWx3YXlzIGdvIHRocm91Z2ggYGxpc3REYXRhYCBpbnRlcm5hbGx5LCB3aGljaCBkb2VzIGFsbCB0aGVcbiAgICAgICAgLy8gcHJvY2Vzc2luZyBvZiBgd3JhcFByaW1pdGl2ZXNgLCBldGMuXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3REYXRhWzBdIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBkYXRhID8gW2RhdGFdIDogW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgLy8gVGhlIHNvdXJjZVNjaGVtYSBvZiBhIGxpc3QgaXMgdGhlIGxpc3QncyBzY2hlbWEgaXRzZWxmLlxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICAvLyBUaGlzIGlzIHVzZWQgaW4gVHlwZUxpc3QgZm9yIERpdG9Gb3JtQ2hvb3Nlci5cbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aCh0aGlzLnNjaGVtYS5wYXRoKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0UXVlcnkoKSB7XG4gICAgICBjb25zdCB7IGRlZmF1bHRPcmRlcjogb3JkZXIgfSA9IHRoaXNcbiAgICAgIHJldHVybiBvcmRlciA/IHsgb3JkZXIgfSA6IHt9XG4gICAgfSxcblxuICAgIHF1ZXJ5OiBnZXRTdG9yZUFjY2Vzc29yKCdxdWVyeScsIHtcbiAgICAgIGdldChxdWVyeSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdFF1ZXJ5LFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAvLyBBbHdheXMga2VlcCB0aGUgZGlzcGxheWVkIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gc3luYyB3aXRoIHRoZSBzdG9yZWRcbiAgICAgICAgLy8gb25lcy4gVXNlIHNjb3BlIGFuZCBwYWdlIGZyb20gdGhlIGxpc3Qgc2NoZW1hIGFzIGRlZmF1bHRzLCBidXQgYWxsb3dcbiAgICAgICAgLy8gdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gb3ZlcnJpZGUgdGhlbS5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNjb3BlID0gdGhpcy5kZWZhdWx0U2NvcGU/Lm5hbWUsXG4gICAgICAgICAgcGFnZSA9IHRoaXMuc2NoZW1hLnBhZ2VcbiAgICAgICAgfSA9IHRoaXMucXVlcnlcbiAgICAgICAgLy8gUHJlc2VydmUgLyBtZXJnZSBjdXJyZW50bHkgc3RvcmVkIHZhbHVlcy5cbiAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAuLi4oc2NvcGUgIT0gbnVsbCAmJiB7IHNjb3BlIH0pLFxuICAgICAgICAgIC4uLihwYWdlICE9IG51bGwgJiYgeyBwYWdlIH0pLFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlcXVhbHMocXVlcnksIHRoaXMuJHJvdXRlLnF1ZXJ5KSkge1xuICAgICAgICAgIC8vIFRlbGwgdGhlIGAkcm91dGVgIHdhdGNoZXIgdG8gaWdub3JlIHRoZSBjaGFuZ2VkIHRyaWdnZXJlZCBoZXJlOlxuICAgICAgICAgIHRoaXMuaWdub3JlUm91dGVDaGFuZ2UgPSB0cnVlXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBxdWVyeSwgaGFzaDogdGhpcy4kcm91dGUuaGFzaCB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBxdWVyeSAvLyBMZXQgZ2V0U3RvcmVBY2Nlc3NvcigpIGRvIHRoZSBhY3R1YWwgc2V0dGluZ1xuICAgICAgfVxuICAgIH0pLFxuXG4gICAgdG90YWw6IGdldFN0b3JlQWNjZXNzb3IoJ3RvdGFsJyksXG5cbiAgICBjb2x1bW5zKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5jb2x1bW5zKVxuICAgIH0sXG5cbiAgICBzY29wZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnNjb3BlcylcbiAgICB9LFxuXG4gICAgZGVmYXVsdFNjb3BlKCkge1xuICAgICAgaWYgKHRoaXMuc2NvcGVzKSB7XG4gICAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2NvcGVzKSkge1xuICAgICAgICAgIGlmIChzY29wZS5kZWZhdWx0U2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWZhdWx0T3JkZXIoKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFNvcnQgfSA9IGNvbHVtblxuICAgICAgICAgIGlmIChkZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaXNTdHJpbmcoZGVmYXVsdFNvcnQpID8gZGVmYXVsdFNvcnQgOiAnYXNjJ1xuICAgICAgICAgICAgcmV0dXJuIGAke2NvbHVtbi5uYW1lfSAke2RpcmVjdGlvbn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSlcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgbGlua2VkIHZpZXcgc2NoZW1hIGlmIHRoaXMgc291cmNlIGVkaXRzIGl0IGl0cyBpdGVtcyB0aHJvdWdoXG4gICAgLy8gYSBsaW5rZWQgdmlldy5cbiAgICB2aWV3KCkge1xuICAgICAgcmV0dXJuIGdldFZpZXdTY2hlbWEodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGhhc0xhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1zLnNvbWUoaGFzTGFiZWxzKVxuICAgIH0sXG5cbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5ldmVyeShpc0NvbXBhY3QpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHBhZ2luYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncGFnaW5hdGUnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHJlbmRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbmRlcicsIHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICAgICAgPyB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/ICF0aGlzLnZhbHVlXG4gICAgICAgICAgICA6IHRydWVcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiAhdGhpcy5pc0lubGluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2UgJiYgdGhpcy5saXN0RGF0YS5sZW5ndGggPiAxICYmIGRyYWdnYWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsLCAvLyBzbyB0aGF0IGA/P2AgYmVsb3cgY2FuIGRvIGl0cyB0aGluZzpcbiAgICAgIGdldChjb2xsYXBzaWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0lubGluZWQgJiYgISEoY29sbGFwc2libGUgPz8gdGhpcy5jb2xsYXBzZWQgIT09IG51bGwpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIGlmICh0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMuaWdub3JlUm91dGVDaGFuZ2UgPSBmYWxzZVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChmcm9tLnBhdGggPT09IHRvLnBhdGggJiYgZnJvbS5oYXNoID09PSB0by5oYXNoKSB7XG4gICAgICAgIC8vIFBhdGhzIGFuZCBoYXNoZXMgcmVtYWluIHRoZSBzYW1lLCBzbyBvbmx5IHF1ZXJpZXMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgICAvLyBVcGRhdGUgZmlsdGVyIGFuZCByZWxvYWQgZGF0YSB3aXRob3V0IGNsZWFyaW5nLlxuICAgICAgICB0aGlzLnF1ZXJ5ID0gdG8ucXVlcnlcbiAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JhcHBlZFByaW1pdGl2ZXM6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIC8vIFNraXAgdGhlIGluaXRpYWwgc2V0dGluZyBvZiB3cmFwcGVkUHJpbWl0aXZlcyBhcnJheVxuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgb2xkVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciB0aGUgd3JhcHBlZFByaW1pdGl2ZXMgY2hhbmdlLCBtYXAgdGhlaXIgdmFsdWVzIGJhY2sgdG9cbiAgICAgICAgICAvLyB0aGUgYXJyYXkgb2YgcHJpbWl0aXZlcywgaW4gYSBwcmltaXRpdmUgd2F5IDopXG4gICAgICAgICAgLy8gQnV0IHNldCBgdW53cmFwcGluZ1ByaW1pdGl2ZXMgPSB0cnVlYCwgc28gdGhlIGBsaXN0RGF0YWAgY29tcHV0ZWRcbiAgICAgICAgICAvLyBwcm9wZXJ0eSBrbm93cyBhYm91dCBpdCwgd2hpY2ggc2V0cyBpdCB0byBgZmFsc2VgIGFnYWluLlxuICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSB0cnVlXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5jbGVhckRhdGEoKVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMudG90YWwgPSAwXG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXREYXRhKClcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIC8vIFdoZW4gbmV3IGRhdGEgaXMgbG9hZGVkLCB3ZSBjYW4gc3RvcmUgaXQgcmlnaHQgYmFjayBpbiB0aGUgZGF0YSBvZiB0aGVcbiAgICAgIC8vIHZpZXcgb3IgZm9ybSB0aGF0IGNyZWF0ZWQgdGhpcyBsaXN0IGNvbXBvbmVudC5cbiAgICAgIC8vIFN1cHBvcnQgdHdvIGZvcm1hdHMgZm9yIGxpc3QgZGF0YTpcbiAgICAgIC8vIC0gQXJyYXk6IGBbLi4uXWBcbiAgICAgIC8vIC0gT2JqZWN0OiBgeyByZXN1bHRzOiBbLi4uXSwgdG90YWwgfWAsIHNlZSBgdW53cmFwTGlzdERhdGEoKWBcbiAgICAgIGlmIChcbiAgICAgICAgIWRhdGEgfHxcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiYgaXNBcnJheShkYXRhKSB8fFxuICAgICAgICB0aGlzLmlzT2JqZWN0U291cmNlICYmIGlzT2JqZWN0KGRhdGEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSkge1xuICAgICAgICAvLyBUaGUgZm9ybWF0IGRpZG4ndCBtYXRjaCwgc2VlIGlmIHdlIHJlY2VpdmVkIGEgYHsgcmVzdWx0cywgdG90YWwgfWBcbiAgICAgICAgLy8gb2JqZWN0LCBpbiB3aGljaCBjYXNlIGB0aGlzLnZhbHVlYCB3YXMgYWxyZWFkeSBzZXQgYnlcbiAgICAgICAgLy8gYHVud3JhcExpc3REYXRhKClgIGFuZCB3ZSdyZSBkb25lIG5vdy5cbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGF0YSkgJiYgdGhpcy5pc0luVmlldykge1xuICAgICAgICAvLyBUaGUgY29udHJvbGxlciBpcyBzZW5kaW5nIGRhdGEgZm9yIGEgZnVsbCBtdWx0aS1jb21wb25lbnQgdmlldyxcbiAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSBuZXN0ZWQgbGlzdCBkYXRhLlxuICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1bndyYXBMaXN0RGF0YShkYXRhKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmXG4gICAgICAgIGlzT2JqZWN0KGRhdGEpICYmXG4gICAgICAgIGlzTnVtYmVyKGRhdGEudG90YWwpICYmXG4gICAgICAgIGlzQXJyYXkoZGF0YS5yZXN1bHRzKVxuICAgICAgKSB7XG4gICAgICAgIC8vIElmIEBkaXRvanMvc2VydmVyIHNlbmRzIGRhdGEgaW4gdGhlIGZvcm0gb2YgYHsgcmVzdWx0cywgdG90YWwgfWBcbiAgICAgICAgLy8gcmVwbGFjZSB0aGUgdmFsdWUgd2l0aCByZXN1bHQsIGJ1dCByZW1lbWJlciB0aGUgdG90YWwgaW4gdGhlIHN0b3JlLlxuICAgICAgICB0aGlzLnRvdGFsID0gZGF0YS50b3RhbFxuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YS5yZXN1bHRzXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oc2NoZW1hLCB0eXBlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5jcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSlcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IGl0ZW1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEucHVzaChpdGVtKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy5vcGVuU2NoZW1hQ29tcG9uZW50KC0xKSlcbiAgICAgIH1cbiAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgcmV0dXJuIGl0ZW1cbiAgICB9LFxuXG4gICAgcmVtb3ZlSXRlbShpdGVtKSB7XG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpc3REYXRhICYmIGxpc3REYXRhLmluZGV4T2YoaXRlbSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBsaXN0RGF0YS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZXRlSXRlbShpdGVtLCBpbmRleCkge1xuICAgICAgY29uc3QgbGFiZWwgPSBpdGVtICYmIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCBpdGVtLCB7XG4gICAgICAgIGluZGV4LFxuICAgICAgICBleHRlbmRlZDogdHJ1ZVxuICAgICAgfSlcblxuICAgICAgY29uc3Qgbm90aWZ5ID0gKCkgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiB0aGlzLmlzVHJhbnNpZW50ID8gJ2luZm8nIDogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgdGV4dDogW1xuICAgICAgICAgIGAke2xhYmVsfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmAsXG4gICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgIF1cbiAgICAgIH0pXG5cbiAgICAgIGlmIChpdGVtICYmIHdpbmRvdy5jb25maXJtKFxuICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5kZWxldGV9ICR7bGFiZWx9P2ApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICBub3RpZnkoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtKVxuICAgICAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0TWVtYmVyUmVzb3VyY2UoaXRlbUlkLCB0aGlzLnJlc291cmNlKVxuICAgICAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZGVsZXRlJywgcmVzb3VyY2UgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICAgICAgICBub3RpZnkoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHNjaGVtYUNvbXBvbmVudHNcbiAgICAgIHJldHVybiBzY2hlbWFDb21wb25lbnRzWygoaW5kZXggJSBsZW5ndGgpICsgbGVuZ3RoKSAlIGxlbmd0aF1cbiAgICB9LFxuXG4gICAgb3BlblNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpXG4gICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlVG9Db21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVBhdGguc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICAgID8gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gcGFyc2VEYXRhUGF0aChkYXRhUGF0aC5zbGljZSh0aGlzLmRhdGFQYXRoLmxlbmd0aCArIDEpKVswXSA/PyBudWxsXG4gICAgICAgICAgICA6IDBcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIGlzTnVtYmVyKCtpbmRleCkpIHtcbiAgICAgICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudCgraW5kZXgpXG4gICAgICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBvcGVuZWQgfSA9IHNjaGVtYUNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDAgJiYgKG9uQ29tcGxldGU/Lihjb21wb25lbnRzKSA/PyB0cnVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IG9wZW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxPbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCwgd2hpY2ggd2lsbCBiZSB0aGUgY29tcG9uZW50IHRoYXRcbiAgICAgICAgICAvLyB3ZSBqdXN0IG5hdmlnYXRlZCB0bywgYW5kIHBhc3MgaXQgb24gdG8gYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgICAgIGNvbnN0IHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnRzW3JvdXRlQ29tcG9uZW50cy5sZW5ndGggLSAxXVxuICAgICAgICAgIHJlc29sdmUob25Db21wbGV0ZT8uKFtyb3V0ZUNvbXBvbmVudF0pID8/IHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgcm91dGUgdGhhdCBjYW4gc2VydmUgcGFydCBvZiB0aGUgZ2l2ZW4gZGF0YVBhdGgsXG4gICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgoXG4gICAgICAgICAgICB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoUGFydHMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYWN0dWFsbHkgaXMgYSByb3V0ZSBmb3IgdGhpcyBzdWItY29tcG9uZW50OlxuICAgICAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVyLm1hdGNoKHBhdGgpXG4gICAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kcm91dGUucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSB0aGVyZSwgc28ganVzdCBjYWxsIGBvbkNvbXBsZXRlKClgOlxuICAgICAgICAgICAgICBjYWxsT25Db21wbGV0ZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIGNvbXBvbmVudCdzIHBhdGgsIHRoZW4gY2FsbCBgb25Db21wbGV0ZSgpYF86XG4gICAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgICAgICAgIHsgcGF0aCB9LFxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCB0byBiZSBtb3VudGVkIGluIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgLy8gdGljayBiZWZvcmUgY2FsbGluZyBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGNhbGxPbkNvbXBsZXRlKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gS2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgIH0pXG4gICAgfVxuICB9LCAvLyBlbmQgb2YgYG1ldGhvZHNgXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSwgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0xpc3RzIHdpdGggbmVzdGVkIGZvcm1zIGNhbm5vdCBsb2FkIGRhdGEgZnJvbSB0aGVpciBvd24gcmVzb3VyY2VzJ1xuICAgICAgKVxuICAgIH1cbiAgICAvLyBVc2UgZGlmZmVyZW50bHkgbmFtZWQgdXJsIHBhcmFtZXRlcnMgb24gZWFjaCBuZXN0ZWQgbGV2ZWwgZm9yIGlkIGFzXG4gICAgLy8gb3RoZXJ3aXNlIHRoZXkgd291bGQgY2xhc2ggYW5kIG92ZXJyaWRlIGVhY2ggb3RoZXIgaW5zaWRlICRyb3V0ZS5wYXJhbXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgY29uc3QgcGFyYW0gPSBgaWQke2xldmVsICsgMX1gXG4gICAgY29uc3QgbWV0YSA9IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgICBjb25zdCBmb3JtTWV0YSA9IHtcbiAgICAgIC4uLm1ldGEsXG4gICAgICAvLyBXaGVuIGNoaWxkcmVuIGFyZSBmbGF0dGVuZWQgKGUuZy4gdHJlZS1saXN0cyksIGluY2x1ZGUgdGhlIGBmbGF0dGVuYFxuICAgICAgLy8gc2V0dGluZyBhbHNvLCBmb3IgZmxhdHRlbmluZyBiZWxvdy5cbiAgICAgIGZsYXR0ZW4sXG4gICAgICBuZXN0ZWQsXG4gICAgICBwYXJhbVxuICAgIH1cbiAgICBjb25zdCBjaGlsZFJvdXRlcyA9IGF3YWl0IHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3MoY2hpbGRSb3V0ZXMsIGxldmVsICsgMSlcbiAgICB9XG4gICAgLy8gSW5saW5lZCBmb3JtcyBkb24ndCBuZWVkIHRvIGFjdHVhbGx5IGFkZCByb3V0ZXMuXG4gICAgaWYgKGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAhaW5saW5lZCkge1xuICAgICAgY29uc3QgZ2V0UGF0aFdpdGhQYXJhbSA9IChwYXRoLCBwYXJhbSkgPT4gcGFyYW1cbiAgICAgICAgPyBwYXRoXG4gICAgICAgICAgPyBgJHtwYXRofS86JHtwYXJhbX1gXG4gICAgICAgICAgOiBgOiR7cGFyYW19YFxuICAgICAgICA6IHBhdGhcblxuICAgICAgLy8gTGlzdHMgaW4gc2luZ2xlLWNvbXBvbmVudC12aWV3cyAobGV2ZWwgPT09IDApIHVzZSB0aGVpciB2aWV3J3MgcGF0aCxcbiAgICAgIC8vIHdoaWxlIGFsbCBvdGhlcnMgbmVlZCB0aGVpciBwYXRoIHByZWZpeGVkIHdpdGggdGhlIHBhcmVudCdzIHBhdGg6XG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gbGV2ZWwgPT09IDAgPyAnJyA6IHNjaGVtYS5wYXRoXG4gICAgICBjb25zdCBmb3JtUm91dGUgPSB7XG4gICAgICAgIC8vIE9iamVjdCBzb3VyY2VzIGRvbid0IG5lZWQgaWQgcGFyYW1zIGluIHRoZWlyIGZvcm0gcGF0aHMsIGFzIHRoZXlcbiAgICAgICAgLy8gZGlyZWN0bHkgZWRpdCBvbmUgb2JqZWN0LlxuICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIGlzTGlzdFNvdXJjZShzY2hlbWEpICYmIHBhcmFtKSxcbiAgICAgICAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudChcbiAgICAgICAgICBuZXN0ZWQgPyAnZGl0by1mb3JtLW5lc3RlZCcgOiAnZGl0by1mb3JtJ1xuICAgICAgICApLFxuICAgICAgICBtZXRhOiBmb3JtTWV0YVxuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHNjaGVtYSkpIHtcbiAgICAgICAgLy8gQWxzbyBhZGQgYSBwYXJhbSByb3V0ZSwgc2ltcGx5IHRvIGhhbmRsZSAnL2NyZWF0ZScgbGlua3MgdGhlIHNhbWVcbiAgICAgICAgLy8gd2F5IHRoYXQgbGlzdHMgZG8sIHdoZXJlIGl0IG92ZXJsYXBzIHdpdGggOmlkIGZvciBpdGVtIGlkcy5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIC4uLmZvcm1Sb3V0ZSxcbiAgICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIHBhcmFtKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZVBhdGgpIHtcbiAgICAgICAgLy8gSnVzdCByZWRpcmVjdCBiYWNrIHRvIHRoZSBwYXJlbnQgd2hlbiBhIG5lc3RlZCBzb3VyY2Ugcm91dGUgaXMgaGl0LlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgcGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgICByZWRpcmVjdDogJy4nLFxuICAgICAgICAgIG1ldGFcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIFBhcnRpdGlvbiBjaGlsZFJvdXRlcyBpbnRvIHRob3NlIHRoYXQgbmVlZCBmbGF0dGVuaW5nIChlLmcuIHRyZWUtbGlzdHMpXG4gICAgICAvLyBhbmQgdGhvc2UgdGhhdCBkb24ndCwgYW5kIHByb2Nlc3MgZWFjaCBncm91cCBzZXBhcmF0ZWx5IGFmdGVyLlxuICAgICAgY29uc3QgW2ZsYXRSb3V0ZXMsIHN1YlJvdXRlc10gPSBjaGlsZFJvdXRlcy5yZWR1Y2UoXG4gICAgICAgIChyZXMsIHJvdXRlKSA9PiB7XG4gICAgICAgICAgcmVzW3JvdXRlLm1ldGEuZmxhdHRlbiA/IDAgOiAxXS5wdXNoKHJvdXRlKVxuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfSxcbiAgICAgICAgW1tdLCBbXV1cbiAgICAgIClcbiAgICAgIGlmIChzdWJSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvcm1Sb3V0ZS5jaGlsZHJlbiA9IHN1YlJvdXRlc1xuICAgICAgfVxuICAgICAgcm91dGVzLnB1c2goZm9ybVJvdXRlKVxuICAgICAgLy8gQWRkIHRoZSBwcmVmaXhlZCBmb3JtUm91dGVzIHdpdGggdGhlaXIgY2hpbGRyZW4gZm9yIG5lc3RlZCBsaXN0cy5cbiAgICAgIGlmIChmbGF0Um91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgZmxhdFJvdXRlcykge1xuICAgICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLihjaGlsZFJvdXRlLnJlZGlyZWN0ID8gY2hpbGRSb3V0ZSA6IGZvcm1Sb3V0ZSksXG4gICAgICAgICAgICBwYXRoOiBgJHtmb3JtUm91dGUucGF0aH0vJHtjaGlsZFJvdXRlLnBhdGh9YCxcbiAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgLi4uY2hpbGRSb3V0ZS5tZXRhLFxuICAgICAgICAgICAgICBmbGF0dGVuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgZ3JhcGguYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGZpbHRlckNvbXBvbmVudHMgPSB7XG4gIHRleHQoZmlsdGVyKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdjb250YWlucycsXG4gICAgICAgIHZhbHVlOiAnY29udGFpbnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VxdWFscycsXG4gICAgICAgIHZhbHVlOiAnZXF1YWxzJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdzdGFydHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnc3RhcnRzLXdpdGgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VuZHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnZW5kcy13aXRoJ1xuICAgICAgfVxuICAgIF1cbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvcnNcbiAgICAgICAgPyB7XG4gICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgb3B0aW9uczpcbiAgICAgICAgICAgIGlzQXJyYXkoZmlsdGVyLm9wZXJhdG9ycylcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICBvcHRpb24gPT4gZmlsdGVyLm9wZXJhdG9ycy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBvcHRpb25zLFxuICAgICAgICAgIHdpZHRoOiAnNDAlJ1xuICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB3aWR0aDogZmlsdGVyLm9wZXJhdG9ycyA/ICc2MCUnIDogJ2ZpbGwnXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gICdkYXRlLXJhbmdlJygpIHtcbiAgICAvLyBVc2Ugc2hvcnRlciBkYXRlIGZvcm1hdCBpbiBkYXRlLXJhbmdlIGZpbHRlcnM6XG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHtcbiAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbToge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgIGRhdGVGb3JtYXRcbiAgICAgIH0sXG4gICAgICB0bzoge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgIGRhdGVGb3JtYXRcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlcnNQYW5lbChmaWx0ZXJzLCBkYXRhUGF0aCwgcHJveHkpIHtcbiAgY29uc3QgcGFuZWwgPSB7XG4gICAgbGFiZWw6ICdGaWx0ZXJzJyxcbiAgICBuYW1lOiAnJGZpbHRlcnMnLFxuICAgIHRhcmdldDogZGF0YVBhdGgsXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgLy8gTk9URTogT24gcGFuZWxzLCB0aGUgZGF0YSgpIGNhbGxiYWNrIGRvZXMgc29tZXRoaW5nIGVsc2UgdGhhbiBvbiBub3JtYWxcbiAgICAvLyBzY2hlbWE6IEl0IHByb2R1Y2VzIHRoZSBgZGF0YWAgcHJvcGVydHkgdG8gYmUgcGFzc2VkIHRvIHRoZSBwYW5lbCdzXG4gICAgLy8gc2NoZW1hLCBub3QgdGhlIGRhdGEgdG8gYmUgdXNlZCBmb3IgdGhlIHBhbmVsIGNvbXBvbmVudCBkaXJlY3RseS5cbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmlsdGVyc0RhdGEoXG4gICAgICAgIHBhbmVsLFxuICAgICAgICBwcm94eS5xdWVyeVxuICAgICAgKVxuICAgIH0sXG4gICAgY29tcG9uZW50czogZ2V0RmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycyksXG4gICAgYnV0dG9uczoge1xuICAgICAgY2xlYXI6IHtcbiAgICAgICAgdGV4dDogJ0NsZWFyJyxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LnJlc2V0RGF0YSgpXG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGZpbHRlcjoge1xuICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgdGV4dDogJ0ZpbHRlcicsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgYXBwbHlGaWx0ZXJzKCkge1xuICAgICAgICBwcm94eS5xdWVyeSA9IHtcbiAgICAgICAgICAuLi5wcm94eS5xdWVyeSxcbiAgICAgICAgICBmaWx0ZXI6IGZvcm1hdEZpbHRlcnNEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpLFxuICAgICAgICAgIC8vIENsZWFyIHBhZ2luYXRpb24gd2hlbiBhcHBseWluZyBvciBjbGVhcmluZyBmaWx0ZXJzOlxuICAgICAgICAgIHBhZ2U6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbFxufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSB7XG4gIGNvbnN0IGNvbXBzID0ge31cbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgT2JqZWN0LnZhbHVlcyhmaWx0ZXJzIHx8IHt9KSkge1xuICAgIC8vIFN1cHBvcnQgYm90aCBjdXN0b20gZm9ybXMgYW5kIGRlZmF1bHQgZmlsdGVyIGNvbXBvbmVudHMsIHRocm91Z2ggdGhlXG4gICAgLy8gYGZpbHRlckNvbXBvbmVudHNgIHJlZ2lzdHJ5LiBFdmVuIGZvciBkZWZhdWx0IGZpbHRlcnMsIHN0aWxsIHVzZSB0aGVcbiAgICAvLyBwcm9wZXJ0aWVzIGluIGBmaWx0ZXJgIGFzIHRoZSBiYXNlIGZvciBgZm9ybWAsIHNvIHRoaW5ncyBsaWtlIGBsYWJlbGBcbiAgICAvLyBjYW4gYmUgY2hhbmdlZCBvbiB0aGUgcmVzdWx0aW5nIGZvcm0uXG4gICAgY29uc3QgeyBmaWx0ZXI6IHR5cGUsIC4uLmZvcm0gfSA9IGZpbHRlclxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0eXBlXG4gICAgICA/IGZpbHRlckNvbXBvbmVudHNbdHlwZV0/LihmaWx0ZXIpXG4gICAgICA6IGZpbHRlci5jb21wb25lbnRzXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvcm0uY29tcG9uZW50cyA9IHt9XG4gICAgICAvLyBDb252ZXJ0IGxhYmVscyB0byBwbGFjZWhvbGRlcnM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gY29tcG9uZW50LmxhYmVsIHx8IGxhYmVsaXplKGNvbXBvbmVudC5uYW1lIHx8IGtleSlcbiAgICAgICAgICBmb3JtLmNvbXBvbmVudHNba2V5XSA9IHtcbiAgICAgICAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYWJlbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29tcHNbZmlsdGVyLm5hbWVdID0ge1xuICAgICAgICBsYWJlbDogZm9ybS5sYWJlbCxcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlubGluZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBmaWx0ZXIgJyR7ZmlsdGVyLm5hbWV9JzogVW5rbm93biBmaWx0ZXIgdHlwZSAnJHt0eXBlfScuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcHNcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHNbbmFtZV1cbiAgcmV0dXJuIGNvbXBvbmVudD8uZm9ybT8uY29tcG9uZW50c1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGaWx0ZXJzRGF0YShzY2hlbWEsIGRhdGEpIHtcbiAgY29uc3QgZmlsdGVycyA9IFtdXG4gIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZW50cnkgPSBkYXRhW25hbWVdXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICAvLyBNYXAgY29tcG9uZW50cyBzZXF1ZW5jZSB0byBhcmd1bWVudHM6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmtleXMoZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpKS5tYXAoXG4gICAgICAgIGtleSA9PiBlbnRyeVtrZXldID8/IG51bGxcbiAgICAgIClcbiAgICAgIC8vIE9ubHkgYXBwbHkgZmlsdGVyIGlmIHRoZXJlIGFyZSBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZW4ndCBudWxsOlxuICAgICAgaWYgKGFyZ3Muc29tZSh2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKGAke25hbWV9OiR7YXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywnKX1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVycy5sZW5ndGggPyBmaWx0ZXJzIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIHBhcnNlRmlsdGVyc0RhdGEoc2NoZW1hLCBxdWVyeSkge1xuICBjb25zdCBmaWx0ZXJzID0ge31cbiAgLy8gU2FtZSBhcyBAZGl0b2pzL3NlcnZlcidzIFF1ZXJ5UGFyYW1ldGVycy5maWx0ZXI6IFRyYW5zbGF0ZSB0aGUgc3RyaW5nIGRhdGFcbiAgLy8gZnJvbSAkcm91dGUucXVlcnkgYmFjayB0byBwYXJhbSBsaXN0cyBwZXIgZmlsdGVyOlxuICBpZiAocXVlcnkpIHtcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBhc0FycmF5KHF1ZXJ5LmZpbHRlcikpIHtcbiAgICAgIGNvbnN0IFssIG5hbWUsIGpzb25dID0gZmlsdGVyLm1hdGNoKC9eKFxcdyspOiguKikkLylcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbHRlcnNbbmFtZV0gPSBhc0FycmF5KEpTT04ucGFyc2UoYFske2pzb259XWApKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgZmlsdGVyc0RhdGEgPSB7fVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gc2NoZW1hLmNvbXBvbmVudHMpIHtcbiAgICBjb25zdCBkYXRhID0ge31cbiAgICAvLyBJZiB3ZSBoYXZlIHJldHJpZXZlZCBwYXJhbXMgZnJvbSB0aGUgcXVlcnksIGZldGNoIHRoZSBhc3NvY2lhdGVkXG4gICAgLy8gZm9ybSBjb21wb25lbnRzIHNvIHdlIGNhbiBtYXAgdGhlIHZhbHVlcyBiYWNrIHRvIG9iamVjdCBrZXlzOlxuICAgIGNvbnN0IGFyZ3MgPSBmaWx0ZXJzW25hbWVdXG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSlcbiAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29tcG9uZW50cykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IGFyZ3NbaW5kZXgrK11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaWx0ZXJzRGF0YVtuYW1lXSA9IGRhdGFcbiAgfVxuICByZXR1cm4gZmlsdGVyc0RhdGFcbn1cbiIsIlxuLmRpdG8tbGlzdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4pXG4gIC5kaXRvLW5hdmlnYXRpb25cbiAgICBkaXRvLXNjb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cInBhZ2luYXRlXCJcbiAgICApXG4gICAgZGl0by1wYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cInBhZ2luYXRlXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgIClcbiAgdGFibGUuZGl0by10YWJsZShcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICB9YFxuICApXG4gICAgZGl0by10YWJsZS1oZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3REYXRhLCBwYWdpbmF0aW9uUmFuZ2UpXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIml0ZW0sIGluZGV4IGluIGxpc3REYXRhXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoc2NoZW1hLCBpdGVtKVwiXG4gICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKHYtaWY9XCJjb2x1bW5zXCIpXG4gICAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIDpjZWxsPVwiY29sdW1uXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICA6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIlxuICAgICAgICApXG4gICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgKVxuICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICBkaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmIHNpbmdsZVwiXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbGlzdChcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gICAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbiAgKVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpdG8tc2NvcGVzKFxuICAgICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICAgIClcbiAgICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAgIC8vIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgICAuZGl0by1zcGFjZXIoXG4gICAgICAgIHYtZWxzZS1pZj1cInBhZ2luYXRlXCJcbiAgICAgIClcbiAgICAgIGRpdG8tcGFnaW5hdGlvbihcbiAgICAgICAgdi1pZj1cInBhZ2luYXRlXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgICAgKVxuICAgIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgICA6Y2xhc3M9YHtcbiAgICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgICAgfWBcbiAgICApXG4gICAgICBkaXRvLXRhYmxlLWhlYWQoXG4gICAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgICApXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIml0ZW0sIGluZGV4IGluIGxpc3REYXRhXCJcbiAgICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImNvbHVtbnNcIilcbiAgICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgIHRkXG4gICAgICAgICAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgICAgdGZvb3QoXG4gICAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiAhc2luZ2xlXCJcbiAgICAgIClcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICApXG4gICAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICBkaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbGlzdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZlxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAmOmVtcHR5XG4gICAgICAgIGRpc3BsYXk6IG5vbmVcbiAgICAgIC5kaXRvLXNjb3BlcyxcbiAgICAgIC5kaXRvLXBhZ2luYXRpb25cbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgICBmbGV4OiAwIDEgYXV0b1xuICAgICAgICBtaW4td2lkdGg6IDBcbiAgICAmLmRpdG8tc2luZ2xlXG4gICAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICBoZWlnaHQ6IDEwMCVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBnZXRWaWV3RWRpdFBhdGggfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlRHJhZ2dhYmxlIH0sXG4gIG1peGluczogW1NvdXJjZU1peGluLCBPcmRlcmVkTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCBzY2hlbWFDb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAvLyBBdCB0aGUgdGltZSBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHBhbmVsIHNjaGVtYSwgdGhlIHNjaGVtYUNvbXBvbmVudCBpc1xuICAgICAgLy8gbm90IGZpbGxlZCB5ZXQsIHNvIHdlIGNhbid0IGdldCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAoZGF0YVBhdGgpIHJpZ2h0XG4gICAgICAvLyBhd2F5LiBVc2UgYSBwcm94eSBhbmQgYSBnZXR0ZXIgaW5zdGVhZCwgdG8gZ2V0IGFyb3VuZCB0aGlzOlxuICAgICAgY29uc3QgZ2V0TGlzdENvbXBvbmVudCA9ICgpID0+IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgY29tcG9uZW50ID0+IGNvbXBvbmVudC50eXBlID09PSAnbGlzdCdcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGdldEZpbHRlcnNQYW5lbChcbiAgICAgICAgZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgeyAvLyBDcmVhdGUgYSBzaW1wbGUgcHJveHkgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgICAgZ2V0IHF1ZXJ5KCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldExpc3RDb21wb25lbnQoKT8ucXVlcnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldCBxdWVyeShxdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZ2V0TGlzdENvbXBvbmVudCgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIHZhbHVlcyBmb3IgY29tcGFyaW5nIHdpdGggZXF1YWxzKClcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHBpY2tCeShvYmosIHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5xdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzTGlzdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIHRoaXMuYnV0dG9uU2NoZW1hcyB8fFxuICAgICAgICB0aGlzLmNyZWF0YWJsZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiBsaXN0RGF0YS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgdGhpcy5lZGl0YWJsZSB8fFxuICAgICAgICB0aGlzLmRlbGV0YWJsZSB8fFxuICAgICAgICB0aGlzLmRyYWdnYWJsZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDZWxsRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNJbmxpbmVkICYmIHRoaXMuaGFzRWRpdEJ1dHRvbnNcbiAgICB9LFxuXG4gICAgaGFzRXZlbkNvdW50KCkge1xuICAgICAgcmV0dXJuICEodGhpcy5saXN0RGF0YS5sZW5ndGggJSAyKVxuICAgIH0sXG5cbiAgICBudW1Db2x1bW5zKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29sdW1ucyA/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucykubGVuZ3RoIDogMSkgK1xuICAgICAgICAodGhpcy5oYXNDZWxsRWRpdEJ1dHRvbnMgPyAxIDogMClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERhdGFQYXRoKGluZGV4KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgfSxcblxuICAgIGdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpIHx8IHRoaXMucGF0aFxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgcmV0dXJuIGAke3BhdGh9LyR7aWR9YFxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q2VsbENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNlbGwtJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0Q29udGV4dChpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgZGF0YVBhdGg6IHRoaXMuZ2V0RGF0YVBhdGgoaW5kZXgpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZpbHRlckVycm9ycyhlcnJvcnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNEYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsICckZmlsdGVycycpXG4gICAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldFBhbmVsQnlEYXRhUGF0aChmaWx0ZXJzRGF0YVBhdGgpXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWwuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLWxhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KDpsYWJlbD1cInZhbHVlXCIgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGRpdG8tbGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoOmxhYmVsPVwidmFsdWVcIiA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWxhYmVsLWNvbXBvbmVudFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBoZWlnaHQ6IDJlbVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsYWJlbCcsIHtcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tbWFya3VwKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIGVkaXRvci1tZW51LWJhci5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgIClcbiAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiLFxuICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICApXG4gICAgICAgICAgaWNvbig6bmFtZT1cImljb25cIilcbiAgZWRpdG9yLWNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgIHJlZj1cImVkaXRvclwiXG4gICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tYXJrdXAoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICApXG4gICAgZWRpdG9yLW1lbnUtYmFyLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCIsXG4gICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBpY29uKDpuYW1lPVwiaWNvblwiKVxuICAgIGVkaXRvci1jb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICAgIHJlZj1cImVkaXRvclwiXG4gICAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gICAgKVxuICAgIC5kaXRvLXJlc2l6ZShcbiAgICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1tYXJrdXBcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgLmRpdG8tcmVzaXplXG4gICAgICBAZXh0ZW5kICVpY29uLXJlc2l6ZVxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICB0b3A6IHVuc2V0XG4gICAgICBsZWZ0OiB1bnNldFxuICAgICAgcmlnaHQ6IDBcbiAgICAgIGJvdHRvbTogMFxuICAgICAgd2lkdGg6IDFlbVxuICAgICAgaGVpZ2h0OiAxZW1cblxuICAgIC5Qcm9zZU1pcnJvclxuICAgICAgaGVpZ2h0OiAxMDAlXG4gICAgICBvdXRsaW5lOiBub25lXG5cbiAgICAuZGl0by1tYXJrdXAtZWRpdG9yXG4gICAgICBvdmVyZmxvdy15OiBzY3JvbGxcbiAgICAgIC8vIE1vdmUgcGFkZGluZyBcImluc2lkZVwiIGVkaXRvciB0byBjb3JyZWN0bHkgcG9zaXRpb24gc2Nyb2xsYmFyXG4gICAgICBtYXJnaW4tcmlnaHQ6IC0kaW5wdXQtcGFkZGluZy1ob3JcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICRpbnB1dC1wYWRkaW5nLWhvclxuXG4gICAgLmRpdG8tYnV0dG9ucy10b29sYmFyXG4gICAgICBtYXJnaW46ICRpbnB1dC1wYWRkaW5nLXZlciAwXG5cbiAgICBoMSxcbiAgICBoMixcbiAgICBoMyxcbiAgICBwLFxuICAgIHVsLFxuICAgIG9sLFxuICAgIHByZSxcbiAgICBibG9ja3F1b3RlXG4gICAgICBtYXJnaW46IDFyZW0gMFxuICAgICAgJjpmaXJzdC1jaGlsZFxuICAgICAgICBtYXJnaW4tdG9wOiAwXG4gICAgICAmOmxhc3QtY2hpbGRcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMFxuICAgIGgxLFxuICAgIGgyLFxuICAgIGgzXG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgIGgxXG4gICAgICBmb250LXNpemU6IDEuNHJlbVxuICAgIGgyXG4gICAgICBmb250LXNpemU6IDEuMnJlbVxuICAgIHVsXG4gICAgICBsaXN0LXN0eWxlOiBkaXNjXG4gICAgY29kZVxuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vXG4gICAgcHJlXG4gICAgICBwYWRkaW5nOiAwLjdyZW0gMXJlbVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXJcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgIG92ZXJmbG93LXg6IGF1dG9cbiAgICAgIGNvZGVcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICBwIGNvZGVcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgcGFkZGluZzogMCAwLjNyZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlclxuICAgIGFcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lXG4gICAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICAgIGNvbG9yOiBibHVlXG4gICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZVxuICAgIHVsLFxuICAgIG9sXG4gICAgICBwYWRkaW5nLWxlZnQ6IDJyZW1cbiAgICBsaVxuICAgICAgJiA+IHAsXG4gICAgICAmID4gb2wsXG4gICAgICAmID4gdWxcbiAgICAgICAgbWFyZ2luOiAwXG4gICAgYmxvY2txdW90ZVxuICAgICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCAkY29sb3ItbGlnaHRlclxuICAgICAgcGFkZGluZy1sZWZ0OiAxcmVtXG4gICAgICBmb250LXN0eWxlOiBpdGFsaWNcbiAgICAgIHBcbiAgICAgICAgbWFyZ2luOiAwXG5cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBFZGl0b3IsIEVkaXRvckNvbnRlbnQsIEVkaXRvck1lbnVCYXIsIE1hcmsgfSBmcm9tICd0aXB0YXAnXG5pbXBvcnQgeyB0b2dnbGVNYXJrIH0gZnJvbSAndGlwdGFwLWNvbW1hbmRzJ1xuaW1wb3J0IHtcbiAgLy8gTWFya3M6XG4gIEJvbGQsIENvZGUsIEl0YWxpYywgTGluaywgU3RyaWtlLCBVbmRlcmxpbmUsXG4gIC8vIE5vZGVzOlxuICBCbG9ja3F1b3RlLCBDb2RlQmxvY2ssIEhhcmRCcmVhaywgSGVhZGluZywgSG9yaXpvbnRhbFJ1bGUsXG4gIE9yZGVyZWRMaXN0LCBCdWxsZXRMaXN0LCBMaXN0SXRlbSxcbiAgLy8gVE9ETzpcbiAgLy8gLSBJbWFnZSwgTWVudGlvbiwgQ29kZUJsb2NrSGlnaGxpZ2h0XG4gIC8vIC0gVGFibGUsIFRhYmxlQ2VsbCwgVGFibGVIZWFkZXIsIFRhYmxlTm9kZXMsIFRhYmxlUm93LFxuICAvLyAtIFRvZG9JdGVtLCBUb2RvTGlzdFxuICAvLyBUb29sczpcbiAgSGlzdG9yeVxufSBmcm9tICd0aXB0YXAtZXh0ZW5zaW9ucydcbmltcG9ydCB7IEljb24gfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IHtcbiAgaXNBcnJheSwgaXNPYmplY3QsIHVuZGVyc2NvcmUsIGh5cGhlbmF0ZSwgZGVib3VuY2Vcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ21hcmt1cCcsIHtcbiAgY29tcG9uZW50czoge1xuICAgIEVkaXRvckNvbnRlbnQsXG4gICAgRWRpdG9yTWVudUJhcixcbiAgICBJY29uXG4gIH0sXG5cbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVkaXRvcjogbnVsbCxcbiAgICAgIGhlaWdodDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDEwXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgfHwgYGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWFya0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdtYXJrcycsIHtcbiAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgaXRhbGljOiB0cnVlLFxuICAgICAgICB1bmRlcmxpbmU6IHRydWUsXG4gICAgICAgIHN0cmlrZTogdHJ1ZSxcbiAgICAgICAgc21hbGw6IHRydWUsXG4gICAgICAgIGNvZGU6IHRydWUsXG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICBvbkNsaWNrOiBjb21tYW5kID0+IHRoaXMub25DbGlja0xpbmsoY29tbWFuZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYmFzaWNOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBwYXJhZ3JhcGg6IHtcbiAgICAgICAgLy8gRG8gbm90IHNob3cgdGhlIHBhcmFncmFwaCBjb21tYW5kIGFzIGFjdGl2ZSBpZiBhbnkgb2YgdGhlIGJsb2NrXG4gICAgICAgIC8vIGNvbW1hbmRzIGFyZSBhbHNvIGFjdGl2ZTpcbiAgICAgICAgICBpZ25vcmVBY3RpdmU6ICgpID0+XG4gICAgICAgICAgICB0aGlzLm90aGVyTm9kZUJ1dHRvbnMuc29tZShidXR0b24gPT4gYnV0dG9uLmlzQWN0aXZlKVxuICAgICAgICB9LFxuICAgICAgICBoZWFkaW5nOiB7XG4gICAgICAgICAgYXR0cjogJ2xldmVsJyxcbiAgICAgICAgICB2YWx1ZXM6IFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvdGhlck5vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIGJ1bGxldExpc3Q6IHRydWUsXG4gICAgICAgIG9yZGVyZWRMaXN0OiB0cnVlLFxuICAgICAgICBibG9ja3F1b3RlOiB0cnVlLFxuICAgICAgICBjb2RlQmxvY2s6IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHRvb2xCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygndG9vbHMnLCB7XG4gICAgICAgIHVuZG86IHRydWUsXG4gICAgICAgIHJlZG86IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdyb3VwZWRCdXR0b25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrQnV0dG9ucyxcbiAgICAgICAgYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgb3RoZXJOb2RlQnV0dG9ucyxcbiAgICAgICAgdG9vbEJ1dHRvbnNcbiAgICAgIH0gPSB0aGlzXG4gICAgICByZXR1cm4gW1xuICAgICAgICBtYXJrQnV0dG9ucyxcbiAgICAgICAgYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgb3RoZXJOb2RlQnV0dG9ucyxcbiAgICAgICAgdG9vbEJ1dHRvbnNcbiAgICAgIF0uZmlsdGVyKGJ1dHRvbnMgPT4gYnV0dG9ucy5sZW5ndGggPiAwKVxuICAgIH0sXG5cbiAgICBwYXJzZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6IHtcbiAgICAgICAgICAnY29sbGFwc2UnOiBmYWxzZSxcbiAgICAgICAgICAncHJlc2VydmUnOiB0cnVlLFxuICAgICAgICAgICdwcmVzZXJ2ZS1hbGwnOiAnZnVsbCdcbiAgICAgICAgfVt0aGlzLndoaXRlc3BhY2VdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVkaXRvck9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlZGl0YWJsZTogIXRoaXMucmVhZHlvbmx5LFxuICAgICAgICBhdXRvRm9jdXM6IHRoaXMuYXV0b2ZvY3VzLFxuICAgICAgICBkaXNhYmxlSW5wdXRSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMuaW5wdXQsXG4gICAgICAgIGRpc2FibGVQYXN0ZVJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5wYXN0ZSxcbiAgICAgICAgcGFyc2VPcHRpb25zOiB0aGlzLnBhcnNlT3B0aW9uc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHdoaXRlc3BhY2U6IGdldFNjaGVtYUFjY2Vzc29yKCd3aGl0ZXNwYWNlJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2NvbGxhcHNlJ1xuICAgICAgLy8gUG9zc2libGUgdmFsdWVzIGFyZTogJ2NvbGxhcHNlJywgJ3ByZXNlcnZlJywgJ3ByZXNlcnZlLWFsbCdcbiAgICB9KSxcblxuICAgIGVuYWJsZVJ1bGVzOiBnZXRTY2hlbWFBY2Nlc3NvcignZW5hYmxlUnVsZXMnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVuYWJsZVJ1bGVzKSB7XG4gICAgICAgIHJldHVybiBpc09iamVjdChlbmFibGVSdWxlcylcbiAgICAgICAgICA/IGVuYWJsZVJ1bGVzXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICBpbnB1dDogISFlbmFibGVSdWxlcyxcbiAgICAgICAgICAgIHBhc3RlOiAhIWVuYWJsZVJ1bGVzXG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICByZWFkeW9ubHk6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBhdXRvZm9jdXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBlbmFibGVSdWxlczogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWVEZWJvdW5jZWQgPSBkZWJvdW5jZShnZXRWYWx1ZSA9PiB7XG4gICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgIHRoaXMudmFsdWUgPSBnZXRWYWx1ZSgpXG4gICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH0sIDEwMClcblxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHsgZ2V0SFRNTCB9KSA9PiB7XG4gICAgICBzZXRWYWx1ZURlYm91bmNlZChnZXRIVE1MKVxuICAgICAgdGhpcy5vbklucHV0KClcbiAgICB9XG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Q29udGVudCh2YWx1ZSwgZmFsc2UsIHRoaXMucGFyc2VPcHRpb25zKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3Ioe1xuICAgICAgLi4udGhpcy5lZGl0b3JPcHRpb25zLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgZXh0ZW5zaW9uczogdGhpcy5jcmVhdGVFeHRlbnNpb25zKCksXG4gICAgICBjb250ZW50OiB0aGlzLnZhbHVlIHx8ICcnXG4gICAgfSlcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkRyYWdSZXNpemUoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGdldFBvaW50ID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9KSA9PiAoeyB4LCB5IH0pXG5cbiAgICAgIGxldCBwcmV2WSA9IGdldFBvaW50KGV2ZW50KS55XG4gICAgICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMuJHJlZnMuZWRpdG9yLiRlbCkuaGVpZ2h0KVxuXG4gICAgICBjb25zdCBtb3VzZW1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgeSB9ID0gZ2V0UG9pbnQoZXZlbnQpXG4gICAgICAgIGhlaWdodCArPSB5IC0gcHJldllcbiAgICAgICAgcHJldlkgPSB5XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gYCR7TWF0aC5tYXgoaGVpZ2h0LCAwKX1weGBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIG1vdXNlbW92ZSxcblxuICAgICAgICBtb3VzZXVwKGV2ZW50KSB7XG4gICAgICAgICAgbW91c2Vtb3ZlKGV2ZW50KVxuICAgICAgICAgIGhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHVwZGF0ZUVkaXRvck9wdGlvbnMoKSB7XG4gICAgICB0aGlzLmVkaXRvci5zZXRPcHRpb25zKHRoaXMuZWRpdG9yT3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGlja0xpbmsoY29tbWFuZCkge1xuICAgICAgY29uc3QgYXR0cnMgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgaHJlZjoge1xuICAgICAgICAgICAgdHlwZTogJ3VybCcsXG4gICAgICAgICAgICBsYWJlbDogJ0xpbmsnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgbGFiZWw6ICdUaXRsZSdcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGFwcGx5OiB7IHR5cGU6ICdzdWJtaXQnIH0sXG4gICAgICAgICAgcmVtb3ZlOiB7XG4gICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgY2xpY2soeyBkaWFsb2dDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudC5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgIGhyZWY6IG51bGwsXG4gICAgICAgICAgICAgICAgICB0aXRsZTogbnVsbFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IHRoaXMuZWRpdG9yLmdldE1hcmtBdHRycygnbGluaycpXG4gICAgICB9KVxuICAgICAgaWYgKGF0dHJzKSB7XG4gICAgICAgIGxldCB7IGhyZWYsIHRpdGxlIH0gPSBhdHRyc1xuICAgICAgICBpZiAoaHJlZikge1xuICAgICAgICAgIC8vIFNlZSBpZiBgaHJlZmAgY2FuIGJlIHBhcnNlZCBhcyBhIFVSTCwgYW5kIGlmIG5vdCwgcHJlZml4IGl0IHdpdGhcbiAgICAgICAgICAvLyBhIGRlZmF1bHQgcHJvdG9jb2wuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBVUkwoaHJlZilcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGhyZWYgPSBgaHR0cDovLyR7aHJlZn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbW1hbmQoeyBocmVmLCB0aXRsZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVFeHRlbnNpb25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrcyA9IHt9LFxuICAgICAgICBub2RlcyA9IHt9LFxuICAgICAgICB0b29scyA9IHt9XG4gICAgICB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC8vIHNjaGVtYS5tYXJrczpcbiAgICAgICAgbWFya3MuYm9sZCAmJiBuZXcgQm9sZCgpLFxuICAgICAgICBtYXJrcy5pdGFsaWMgJiYgbmV3IEl0YWxpYygpLFxuICAgICAgICBtYXJrcy51bmRlcmxpbmUgJiYgbmV3IFVuZGVybGluZSgpLFxuICAgICAgICBtYXJrcy5zdHJpa2UgJiYgbmV3IFN0cmlrZSgpLFxuICAgICAgICBtYXJrcy5zbWFsbCAmJiBuZXcgU21hbGwoKSxcbiAgICAgICAgbWFya3MuY29kZSAmJiBuZXcgQ29kZSgpLFxuICAgICAgICBtYXJrcy5saW5rICYmIG5ldyBMaW5rV2l0aFRpdGxlKCksXG5cbiAgICAgICAgLy8gc2NoZW1hLm5vZGVzOlxuICAgICAgICBub2Rlcy5ibG9ja3F1b3RlICYmIG5ldyBCbG9ja3F1b3RlKCksXG4gICAgICAgIG5vZGVzLmNvZGVCbG9jayAmJiBuZXcgQ29kZUJsb2NrKCksXG4gICAgICAgIG5ldyBIYXJkQnJlYWsoKSwgLy8gVE9ETzogU2hvdWxkIHRoaXMgYWx3YXlzIG9uP1xuICAgICAgICBub2Rlcy5oZWFkaW5nICYmIG5ldyBIZWFkaW5nKHsgbGV2ZWxzOiBub2Rlcy5oZWFkaW5nIH0pLFxuICAgICAgICBub2Rlcy5ob3Jpem9udGFsUnVsZSAmJiBuZXcgSG9yaXpvbnRhbFJ1bGUoKSxcbiAgICAgICAgKG5vZGVzLm9yZGVyZWRMaXN0IHx8IG5vZGVzLmJ1bGxldExpc3QpICYmIG5ldyBMaXN0SXRlbSgpLFxuICAgICAgICBub2Rlcy5idWxsZXRMaXN0ICYmIG5ldyBCdWxsZXRMaXN0KCksXG4gICAgICAgIG5vZGVzLm9yZGVyZWRMaXN0ICYmIG5ldyBPcmRlcmVkTGlzdCgpLFxuICAgICAgICAvLyBUT0RPOlxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBuZXcgVG9kb0l0ZW0oKSxcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgbmV3IFRvZG9MaXN0KCksXG5cbiAgICAgICAgLy8gc2NoZW1hLnRvb2xzOlxuICAgICAgICB0b29scy5oaXN0b3J5ICYmIG5ldyBIaXN0b3J5KClcbiAgICAgIF0uZmlsdGVyKGV4dGVuc2lvbiA9PiAhIWV4dGVuc2lvbilcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9ucyhzZXR0aW5nc05hbWUsIGRlc2NyaXB0aW9ucykge1xuICAgICAgY29uc3QgbGlzdCA9IFtdXG5cbiAgICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICh7IG5hbWUsIGljb24sIGF0dHJzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSkgPT4ge1xuICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuZWRpdG9yLmlzQWN0aXZlW25hbWVdXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSB0aGlzLmVkaXRvci5jb21tYW5kc1tuYW1lXVxuICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaWNvbixcbiAgICAgICAgICBpc0FjdGl2ZTogKFxuICAgICAgICAgICAgaXNBY3RpdmU/LihhdHRycykgJiZcbiAgICAgICAgICAgIChpZ25vcmVBY3RpdmUgPT0gbnVsbCB8fCAhaWdub3JlQWN0aXZlKCkpXG4gICAgICAgICAgKSxcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBvbkNsaWNrXG4gICAgICAgICAgICA/IG9uQ2xpY2soY29tbWFuZCwgYXR0cnMpXG4gICAgICAgICAgICA6IGNvbW1hbmQoYXR0cnMpXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zY2hlbWFbc2V0dGluZ3NOYW1lXVxuICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZGVzY3JpcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucykpIHtcbiAgICAgICAgICBjb25zdCBzZXR0aW5nTmFtZSA9IFsndW5kbycsICdyZWRvJ10uaW5jbHVkZXMoa2V5KSA/ICdoaXN0b3J5JyA6IGtleVxuICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tzZXR0aW5nTmFtZV1cbiAgICAgICAgICBjb25zdCBuYW1lID0gdW5kZXJzY29yZShrZXkpXG4gICAgICAgICAgY29uc3QgaWNvbiA9IGh5cGhlbmF0ZShrZXkpXG4gICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGF0dHIsIHZhbHVlcywgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0gPSBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICBpZiAoYXR0cikge1xuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlcykgJiYgaXNBcnJheShzZXR0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBoZWFkaW5nIGxldmVsIGF0dHJzOlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRkQnV0dG9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgJHtpY29ufS0ke3ZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBbYXR0cl06IHZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVBY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwuc2Nyb2xsSW50b1ZpZXc/LigpXG4gICAgICB0aGlzLmVkaXRvci5mb2N1cygpXG4gICAgfVxuICB9XG59KVxuXG5jbGFzcyBTbWFsbCBleHRlbmRzIE1hcmsge1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gJ3NtYWxsJ1xuICB9XG5cbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VET006IFtcbiAgICAgICAgeyB0YWc6ICdzbWFsbCcgfVxuICAgICAgXSxcbiAgICAgIHRvRE9NOiAoKSA9PiBbJ3NtYWxsJywgMF1cbiAgICB9XG4gIH1cblxuICBjb21tYW5kcyh7IHR5cGUgfSkge1xuICAgIHJldHVybiAoKSA9PiB0b2dnbGVNYXJrKHR5cGUpXG4gIH1cbn1cbmNsYXNzIExpbmtXaXRoVGl0bGUgZXh0ZW5kcyBMaW5rIHtcbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgaHJlZjoge1xuICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgcGFyc2VET006IFt7XG4gICAgICAgIHRhZzogJ2EnLFxuICAgICAgICBnZXRBdHRyczogZG9tID0+ICh7XG4gICAgICAgICAgaHJlZjogZG9tLmdldEF0dHJpYnV0ZSgnaHJlZicpLFxuICAgICAgICAgIHRpdGxlOiBkb20uZ2V0QXR0cmlidXRlKCd0aXRsZScpXG4gICAgICAgIH0pXG4gICAgICB9XSxcbiAgICAgIHRvRE9NOiBub2RlID0+IFsnYScsIG5vZGUuYXR0cnMsIDBdXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tbXVsdGlzZWxlY3QoXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAnZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZSc6IG11bHRpcGxlXG4gIH1gXG4pXG4gIHZ1ZS1tdWx0aXNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6c2hvdy1sYWJlbHM9XCJmYWxzZVwiXG4gICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgIHRhZy1wbGFjZWhvbGRlcj1cIlByZXNzIGVudGVyIHRvIGFkZCBuZXcgdGFnXCIsXG4gICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICA6Y3VzdG9tLWxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgIDp0cmFjay1ieT1cIm9wdGlvblZhbHVlXCJcbiAgICA6Z3JvdXAtbGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgIDpncm91cC12YWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgIDppbnRlcm5hbC1zZWFyY2g9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICA6cHJlc2VydmUtc2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbGVhci1vbi1zZWxlY3Q9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICA6Y2xvc2Utb24tc2VsZWN0PVwiIXN0YXlPcGVuXCJcbiAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgQG9wZW49XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbXVsdGlzZWxlY3QoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by1tdWx0aXNlbGVjdC1zaW5nbGUnOiAhbXVsdGlwbGUsXG4gICAgICAnZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZSc6IG11bHRpcGxlXG4gICAgfWBcbiAgKVxuICAgIHZ1ZS1tdWx0aXNlbGVjdChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOnNob3ctbGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICAgIDpvcHRpb25zPVwicG9wdWxhdGUgJiYgYWN0aXZlT3B0aW9ucyB8fCBbXVwiXG4gICAgICA6Y3VzdG9tLWxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgICAgOmdyb3VwLWxhYmVsPVwiZ3JvdXBCeUxhYmVsXCJcbiAgICAgIDpncm91cC12YWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICA6dGFnZ2FibGU9XCJ0YWdnYWJsZVwiXG4gICAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOnByZXNlcnZlLXNlYXJjaD1cIiEhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbGVhci1vbi1zZWxlY3Q9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgICAgOmxvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgQG9wZW49XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICAgIEBzZWFyY2gtY2hhbmdlPVwib25TZWFyY2hDaGFuZ2VcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJ3Z1ZS1tdWx0aXNlbGVjdC9kaXN0L3Z1ZS1tdWx0aXNlbGVjdC5taW4uY3NzJ1xuXG4gICRzcGlubmVyLXdpZHRoOiAkc2VsZWN0LWFycm93LXdpZHRoXG4gICR0YWctaWNvbi13aWR0aDogMS44ZW1cbiAgJHRhZy1tYXJnaW46IDJweFxuICAkdGFnLXBhZGRpbmc6IDNweFxuICAkdGFnLWxpbmUtaGVpZ2h0OiAxLjFlbVxuXG4gIC5kaXRvLW11bHRpc2VsZWN0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgICAubXVsdGlzZWxlY3RcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdFxuICAgICAgbWluLWhlaWdodDogaW5oZXJpdFxuICAgICAgY29sb3I6ICRjb2xvci1ibGFja1xuXG4gICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIG92ZXJmbG93OiBhdXRvXG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0XG4gICAgICBwYWRkaW5nOiAwICRzcGlubmVyLXdpZHRoIDAgMFxuICAgICAgLy8gU28gdGFncyBjYW4gZmxvYXQgb24gbXVsdGlwbGUgbGluZXMgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnM6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHRhZy1tYXJnaW5cblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnXG4gICAgICBmbG9hdDogbGVmdFxuICAgICAgbWFyZ2luOiAkdGFnLW1hcmdpbiAwIDAgJHRhZy1tYXJnaW5cbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbVxuICAgICAgcGFkZGluZzogJHRhZy1wYWRkaW5nICR0YWctaWNvbi13aWR0aCAkdGFnLXBhZGRpbmcgMC44ZW1cbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ3Mtd3JhcFxuICAgICAgb3ZlcmZsb3c6IGF1dG9cbiAgICAgIGxpbmUtaGVpZ2h0OiAwXG5cbiAgICAubXVsdGlzZWxlY3RfX3NpbmdsZSxcbiAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyLFxuICAgIC5tdWx0aXNlbGVjdF9faW5wdXRcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdFxuICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIG1pbi1oZWlnaHQ6IDBcbiAgICAgIG1hcmdpbjogMCAwIDFweCAwXG4gICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIHN0eWxlPVwicGFkZGluZzogLi4uO1wiIGluIGFkZGl0aW9uIHRvIHVzaW5nXG4gICAgICAvLyBjbGFzc2VzLCBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcgIWltcG9ydGFudFxuICAgICAgLy8gU28gaW5wdXQgY2FuIGZsb2F0IG5leHQgdG8gdGFncyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2lucyB3aXRoXG4gICAgICAvLyAubXVsdGlzZWxlY3RfX3RhZ3M6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50XG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG5cbiAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyLFxuICAgIC5tdWx0aXNlbGVjdF9faW5wdXQ6OnBsYWNlaG9sZGVyXG4gICAgICBjb2xvcjogJGNvbG9yLXBsYWNlaG9sZGVyXG5cbiAgICAubXVsdGlzZWxlY3QtLWFjdGl2ZVxuICAgICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlclxuICAgICAgICAvLyBEb24ndCB1c2UgYGRpc3BsYXk6IG5vbmVgIHRvIGhpZGUgcGxhY2UtaG9sZGVyLCBhcyB0aGUgbGF5b3V0IHdvdWxkXG4gICAgICAgIC8vIGNvbGxhcHNlLlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG5cbiAgICAubXVsdGlzZWxlY3RfX3NlbGVjdCxcbiAgICAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgIC8vICRib3JkZXItd2lkdGggdG8gcHJldmVudCBtYXNraW5nIGJvcmRlciB3aXRoIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgICAgdG9wOiAkYm9yZGVyLXdpZHRoXG4gICAgICByaWdodDogJGJvcmRlci13aWR0aFxuICAgICAgYm90dG9tOiAkYm9yZGVyLXdpZHRoXG4gICAgICBoZWlnaHQ6IGluaGVyaXRcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG5cbiAgICAubXVsdGlzZWxlY3RfX3NlbGVjdFxuICAgICAgd2lkdGg6IDBcbiAgICAgIG1hcmdpbi1yaWdodDogY2FsYygkc2VsZWN0LWFycm93LXdpZHRoIC8gMilcbiAgICAgICY6OmJlZm9yZVxuICAgICAgICArYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKVxuICAgICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tXG4gICAgICAgIHJpZ2h0OiBjYWxjKC0xICogJHNlbGVjdC1hcnJvdy1zaXplIC8gMilcblxuICAgIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoXG4gICAgICAmOjpiZWZvcmUsXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBDaGFuZ2UgdGhlIHdpZHRoIG9mIHRoZSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAzcHhcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBpbnNldDogMFxuICAgICAgICBtYXJnaW46IGF1dG9cblxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uXG4gICAgICBtaW4taGVpZ2h0OiB1bnNldFxuICAgICAgaGVpZ2h0OiB1bnNldFxuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBJbnN0cnVjdGlvbiB0ZXh0IGZvciBvcHRpb25zXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50XG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0tZGlzYWJsZWRcbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcbiAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnLWljb25cbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbVxuICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXRcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbVxuICAgICAgd2lkdGg6ICR0YWctaWNvbi13aWR0aFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG4gICAgICAgIGZvbnQtc2l6ZTogMS4zZW1cbiAgICAgICY6aG92ZXI6OmFmdGVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dFxuXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLXNlbGVjdGVkXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHRcbiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgICYubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWcsXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ3MsXG4gICAgLm11bHRpc2VsZWN0X19jb250ZW50LXdyYXBwZXJcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcblxuICAgICYuZGl0by1tdWx0aXNlbGVjdC1zaW5nbGVcbiAgICAgIC0taW5wdXQtd2lkdGg6IDEwMCVcbiAgICAmLmRpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGVcbiAgICAgIC0taW5wdXQtd2lkdGg6IGF1dG9cblxuICAgIC5tdWx0aXNlbGVjdC0tYWN0aXZlXG4gICAgICAubXVsdGlzZWxlY3RfX3NpbmdsZSxcbiAgICAgIC5tdWx0aXNlbGVjdF9faW5wdXRcbiAgICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBgc3R5bGU9XCJ3aWR0aFwiYCBpbiBhZGRpdGlvbiB0byB1c2luZyBjbGFzc2VzXG4gICAgICAgIC8vIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICAgIHdpZHRoOiB2YXIoLS1pbnB1dC13aWR0aCkgIWltcG9ydGFudFxuXG4gICAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDBcblxuICAgICAgLm11bHRpc2VsZWN0X19jb250ZW50LXdyYXBwZXJcbiAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGJvcmRlci1jb2xvclxuICAgICAgICBtYXJnaW46IC0xcHggMCAwXG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDBcblxuICAgICAgJi5tdWx0aXNlbGVjdC0tYWJvdmVcbiAgICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDBcbiAgICAgICAgLm11bHRpc2VsZWN0X19jb250ZW50LXdyYXBwZXJcbiAgICAgICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZVxuICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRib3JkZXItY29sb3JcbiAgICAgICAgICBtYXJnaW46IDAgMCAtMXB4XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDBcblxuICAgICYuZGl0by1oYXMtZXJyb3JzXG4gICAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItZXJyb3JcblxuICAgIC5kaXRvLWJ1dHRvbi1jbGVhclxuICAgICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcbmltcG9ydCBWdWVNdWx0aXNlbGVjdCBmcm9tICd2dWUtbXVsdGlzZWxlY3QnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QubWluLmNzcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ211bHRpc2VsZWN0Jywge1xuICBjb21wb25lbnRzOiB7IFZ1ZU11bHRpc2VsZWN0IH0sXG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoZWRPcHRpb25zOiBudWxsLFxuICAgICAgcG9wdWxhdGU6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKVxuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgLy8gSWYgYW4gb3B0aW9uIGNhbm5vdCBiZSBmb3VuZCwgd2UgbWF5IGJlIGluIHRhZ2dhYmxlIG1vZGUgYW5kXG4gICAgICAgICAgICAgIC8vIGNhbiBhZGQgaXQuXG4gICAgICAgICAgICAgIHZhbHVlID0+IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHx8IHRoaXMuYWRkVGFnT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBvcHRpb25zIHRoYXQgd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGRpc3BsYXkgYW4gZXJyb3IgaW5zdGVhZFxuICAgICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRPcHRpb25cbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBvcHRpb25zIG9iamVjdCwgc2luY2UgdnVlLW11bHRpc2VsZWN0IGNhbid0IG1hcCB0aGF0XG4gICAgICAgIC8vIGl0c2VsZiB1bmZvcnR1bmF0ZWx5LiBgdHJhY2stYnlgIGlzIHVzZWQgZm9yIDprZXkgbWFwcGluZyBpdCBzZWVtcy5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKG9wdGlvbiB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hlZE9wdGlvbnMgfHwgdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHNlYXJjaGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2hhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB0YWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdGF5T3BlbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0YXlPcGVuJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcigpIHtcbiAgICAgIGNvbnN0IHsgcGxhY2Vob2xkZXIsIHNlYXJjaGFibGUsIHRhZ2dhYmxlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyIHx8IChcbiAgICAgICAgc2VhcmNoYWJsZSAmJiB0YWdnYWJsZSA/ICdTZWFyY2ggb3IgYWRkIGEgdGFnJ1xuICAgICAgICA6IHNlYXJjaGFibGUgPyAnU2VsZWN0IG9yIHNlYXJjaCBlbnRyeSdcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcbiAgICAgIC8vIHZ1ZS1tdWx0aXNlbGVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGUuIFdlIG5lZWQgdG9cbiAgICAgIC8vIGhhbmRsZSBpdCBoZXJlLlxuICAgICAgdGhpcy5mb2N1cygpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICAvLyBvdmVycmlkZSBgVHlwZU1peGluLmdldExpc3RlbmVycygpYCB0byByZS1yb3V0ZSAnaW5wdXQnIHRvIGBvbkNoYW5nZSgpYFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgYmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIGlucHV0OiB0aGlzLm9uQ2hhbmdlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFkZFRhZ09wdGlvbih0YWcpIHtcbiAgICAgIGlmICh0aGlzLnRhZ2dhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbkxhYmVsICYmIG9wdGlvblZhbHVlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBbb3B0aW9uTGFiZWxdOiB0YWcsXG4gICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgYSBzaW1wbGUgc2NoZW1hIG9wdGlvbiB0byBjb252ZXJ0IHRoZSB0YWcgdmFsdWUgdG9cbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBlbHNlLCBlLmcuIGB0b1RhZzogdGFnID0+IHVuZGVyc2NvcmUodGFnKWBcbiAgICAgICAgICAgIFtvcHRpb25WYWx1ZV06IHRhZ1xuICAgICAgICAgIH1cbiAgICAgICAgICA6IHRhZ1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgb25BZGRUYWcodGFnKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmFkZFRhZ09wdGlvbih0YWcpXG4gICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uU2VhcmNoQ2hhbmdlKHF1ZXJ5KSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hGaWx0ZXIpIHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgLy8gU2V0IGBzZWFyY2hlZE9wdGlvbnNgIHRvIGFuIGVtcHR5IGFycmF5LCBiZWZvcmUgaXQgd2lsbCBiZVxuICAgICAgICAgIC8vIHBvcHVsYXRlZCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBhY3R1YWwgcmVzdWx0cy5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IFtdXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBhd2FpdCB0aGlzLnJlc29sdmVEYXRhKFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5zZWFyY2hGaWx0ZXIobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgcXVlcnkgfSkpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENsZWFyIGBzZWFyY2hlZE9wdGlvbnNgIHdoZW4gdGhlIHF1ZXJ5IGlzIGNsZWFyZWQuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICE9PSBudWxsID8gdGhpcy52YWx1ZSA6ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlICE9PSAnJ1xuICAgICAgICAgID8gdGhpcy5pc0ludGVnZXIgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaXNJbnRlZ2VyKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHN0ZXBWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0ZXAgPT0gbnVsbCAmJiAhdGhpcy5pc0ludGVnZXIgPyAnYW55JyA6IHRoaXMuc3RlcFxuICAgIH0sXG5cbiAgICBkZWNpbWFsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlY2ltYWxzJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBzdGVwOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RlcCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChzdGVwKSB7XG4gICAgICAgIC8vIEZvciBpbnRlZ2Vycywgcm91bmQgdGhlIHN0ZXBzIHRvIHRoZSBuZXh0IGJpZ2dlciBpbnRlZ2VyIHZhbHVlOlxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgc3RlcCAhPSBudWxsID8gTWF0aC5jZWlsKHN0ZXApIDogc3RlcFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWluOiBnZXRTY2hlbWFBY2Nlc3NvcignbWluJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1pbikge1xuICAgICAgICBtaW4gPSBtaW4gPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMF1cbiAgICAgICAgICA6IG1pblxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWluICE9IG51bGwgPyBNYXRoLmZsb29yKG1pbikgOiBtaW5cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heDogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtYXgpIHtcbiAgICAgICAgbWF4ID0gbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzFdXG4gICAgICAgICAgOiBtYXhcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1heCAhPSBudWxsID8gTWF0aC5jZWlsKG1heCkgOiBtYXhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHJhbmdlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmFuZ2UnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gYHRoaXMubWluYCwgYHRoaXMubWF4YCBhbHJlYWR5IHN1cHBvcnQgYHNjaGVtYS5yYW5nZWAsXG4gICAgICAgIC8vIHNvIHJlZGlyZWN0IHRoZXJlLlxuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzXG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiBtYXggIT0gbnVsbCA/IFttaW4sIG1heF0gOiB1bmRlZmluZWRcbiAgICAgIH0sXG5cbiAgICAgIHNldChyYW5nZSkge1xuICAgICAgICAvLyBQcm92aWRlIGEgc2V0dGVyIHRoYXQgZGVsZWdhdGVzIHRvIGBbdGhpcy5taW4sIHRoaXMubWF4XWAsXG4gICAgICAgIC8vIHNpbmNlIHRob3NlIGFscmVhZHkgaGFuZGxlIGBzY2hlbWEucmFuZ2VgLlxuICAgICAgICBpZiAoaXNBcnJheShyYW5nZSkpIHtcbiAgICAgICAgICBbdGhpcy5taW4sIHRoaXMubWF4XSA9IHJhbmdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0ge31cbiAgICAgIGNvbnN0IHsgcmFuZ2UsIG1pbiwgbWF4LCBkZWNpbWFscywgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJhbmdlID0gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1pbiA9IG1pblxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1heCA9IG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbHMgIT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICB9IGVsc2UgaWYgKHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoYCR7c3RlcH1gLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aFxuICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW50ZWdlcikge1xuICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfVxuICB9XG59XG4iLCJcbmlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDptaW49XCJtaW5cIlxuICA6bWF4PVwibWF4XCJcbiAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBPbmx5IHNob3cgc3BpbiBidXR0b25zIGlmIHRoZSBudW1iZXIgY29tcG9uZW50IGRlZmluZXMgYSBzdGVwIHNpemUuXG4gIGlucHV0W3R5cGU9XCJudW1iZXJcIl06bm90KFtzdGVwXSlcbiAgICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICAgICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b25cbiAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZVxuICAgICAgbWFyZ2luOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdudW1iZXInLCAnaW50ZWdlcidcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNJbnRlZ2VyKCkge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2ludGVnZXInXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLW9iamVjdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4pXG4gIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgKVxuICAgIC8vIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgKVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlXG4gICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgKVxuICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6ZGVsZXRhYmxlPVwib2JqZWN0RGF0YSAmJiBkZWxldGFibGVcIlxuICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmVkaXRQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICA6cGF0aD1cInBhdGhcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tb2JqZWN0KFxuICAgIHYtaWY9XCJpc1JlYWR5XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuICApXG4gICAgLmRpdG8tb2JqZWN0LWNvbnRlbnQoXG4gICAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gICAgKVxuICAgICAgLy8gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgKVxuICAgICAgY29tcG9uZW50KFxuICAgICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICApXG4gICAgICBzcGFuKFxuICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgICApXG4gICAgICBzcGFuKFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgICAgKVxuICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwib2JqZWN0RGF0YSAmJiBkZWxldGFibGVcIlxuICAgICAgOmVkaXRhYmxlPVwib2JqZWN0RGF0YSAmJiBlZGl0YWJsZVwiXG4gICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgOmVkaXRQYXRoPVwicGF0aFwiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOnBhdGg9XCJwYXRoXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLW9iamVjdFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIG1hcmdpbjogMFxuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmdcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLmRpdG8tb2JqZWN0LWNvbnRlbnRcbiAgICAgIGZsZXg6IDAgMSAxMDAlXG4gICAgPiAuZGl0by1idXR0b25zXG4gICAgICBmbGV4OiAxIDAgMCVcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdvYmplY3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgZGF0YTogdGhpcy5vYmplY3REYXRhIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3BhbmVsJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdFBhZGRpbmc6IHRydWUsXG5cbiAgZ2V0UGFuZWxTY2hlbWEoc2NoZW1hKSB7XG4gICAgLy8gRm9yIGEgVHlwZVBhbmVsLCB0aGUgY29tcG9uZW50IHNjaGVtYSBpcyBhbHNvIHRoZSBwYW5lbCBzY2hlbWEsIGJ1dFxuICAgIC8vIHJlbW92ZSB0aGUgYWRkZWQgbmFtZSwgc28gaXQgZG9lc24ndCBnZXQgYXBwZW5kZWQgdHdpY2UgdG8gZGF0YS1wYXRoLlxuICAgIGNvbnN0IHsgbmFtZSwgLi4ucGFuZWwgfSA9IHNjaGVtYVxuICAgIHJldHVybiBwYW5lbFxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwcm9ncmVzcycsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wdXRlZDoge1xuICAgIHByb2dyZXNzVmFsdWUoKSB7XG4gICAgICBsZXQgeyB2YWx1ZSwgcmFuZ2UsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICB2YWx1ZSAtPSByYW5nZVswXVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3RlcCkgKiBzdGVwXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gJydcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBwcm9ncmVzc01heCgpIHtcbiAgICAgIGNvbnN0IHsgcmFuZ2UgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICByZXR1cm4gcmFuZ2VbMV0gLSByYW5nZVswXVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG51bC5kaXRvLXJhZGlvLWJ1dHRvbnMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB1bC5kaXRvLXJhZGlvLWJ1dHRvbnMoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbiAgKVxuICAgIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICAgIGxhYmVsXG4gICAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgICApXG4gICAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXJhZGlvLWJ1dHRvbnNcbiAgICBsYWJlbFxuICAgICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuICAgIC5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3JhZGlvJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXNlY3Rpb24oXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCcgOiAhIXNjaGVtYS5sYWJlbCB9XCJcbilcbiAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJpdGVtXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNlY3Rpb24oXG4gICAgOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLWxhYmVsbGVkJyA6ICEhc2NoZW1hLmxhYmVsIH1cIlxuICApXG4gICAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNlY3Rpb25cbiAgICAmLmRpdG8tc2VjdGlvbi1sYWJlbGxlZFxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZ1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRJdGVtRm9ybVNjaGVtYSwgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWN0aW9uJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gIXNjaGVtYS5uZXN0ZWQgJiYgISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcbiAgZGVmYXVsdE5lc3RlZDogZmFsc2UsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0RmxleEdyb3c6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy52YWx1ZSA6IHRoaXMuZGF0YVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWFcbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gICAgLy8gUHJvY2VzcyBzZWN0aW9uIGNvbXBvbmVudHMgc28gdGhlaXIgZm9ybXMgZ2V0IHJlc29sdmVkIHRvby5cbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbClcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLy0gTmVzdGluZyBpcyBuZWVkZWQgdG8gbWFrZSBhbiBhcnJvdyBhcHBlYXIgb3ZlciB0aGUgc2VsZWN0IGl0ZW06XG4uZGl0by1zZWxlY3RcbiAgc2VsZWN0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQGZvY3VzPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInBvcHVsYXRlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gICAgICApXG4gICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgIHYtaWY9XCJncm91cEJ5XCJcbiAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgIClcbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0KSB9fVxuICAgICAgICBvcHRpb24oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1lbHNlLWlmPVwic2VsZWN0ZWRPcHRpb25cIlxuICAgIClcbiAgICAgIG9wdGlvbihcbiAgICAgICAgOnZhbHVlPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLy0gTmVzdGluZyBpcyBuZWVkZWQgdG8gbWFrZSBhbiBhcnJvdyBhcHBlYXIgb3ZlciB0aGUgc2VsZWN0IGl0ZW06XG4gIC5kaXRvLXNlbGVjdFxuICAgIHNlbGVjdChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgICAgQGZvY3VzPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cInBvcHVsYXRlXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBvcHRncm91cChcbiAgICAgICAgICAgIHYtaWY9XCJncm91cEJ5XCJcbiAgICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0KSB9fVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwic2VsZWN0ZWRPcHRpb25cIlxuICAgICAgKVxuICAgICAgICBvcHRpb24oXG4gICAgICAgICAgOnZhbHVlPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24oc2VsZWN0ZWRPcHRpb24pIH19XG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLy8gVE9ETzogTW92ZSB0byBkaXRvLXVpXG4gICRzZWxlY3QtYXJyb3ctcmlnaHQ6IGNhbGMoKCRzZWxlY3QtYXJyb3ctd2lkdGggLSAkc2VsZWN0LWFycm93LXNpemUpIC8gMilcblxuICAuZGl0by1zZWxlY3RcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIHNlbGVjdFxuICAgICAgcGFkZGluZy1yaWdodDogJHNlbGVjdC1hcnJvdy13aWR0aFxuXG4gICAgLy8gSGFuZGxlIC5kaXRvLXdpZHRoLWZpbGwgc2VwYXJhdGVseSBkdWUgdG8gcmVxdWlyZWQgbmVzdGluZyBvZiBzZWxlY3Q6XG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHNlbGVjdFxuICAgICAgICB3aWR0aDogMTAwJVxuXG4gICAgJjo6YWZ0ZXJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgK2Fycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSlcbiAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b21cbiAgICAgIHJpZ2h0OiBjYWxjKCN7JHNlbGVjdC1hcnJvdy1yaWdodH0gKyAjeyRib3JkZXItd2lkdGh9KVxuXG4gICAgJi5kaXRvLWRpc2FibGVkOjphZnRlclxuICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlbGVjdCcsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBEaXNhYmxlIGxhenktcG9wdWxhdGlvbiBmb3Igbm93LlxuICAgICAgLy8gVE9ETzogU2V0IHRvIGBmYWxzZWAgT25jZSBsaW5ldG8gZTJlIHRlc3RzIGFkZHJlc3MgdGhlaXIgaXNzdWVzLlxuICAgICAgcG9wdWxhdGU6IHRydWVcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc2xpZGVyXG4gIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICB2LWlmPVwiaW5wdXRcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNsaWRlclxuICAgIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOm1pbj1cIm1pblwiXG4gICAgICA6bWF4PVwibWF4XCJcbiAgICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgICApXG4gICAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgICB2LWlmPVwiaW5wdXRcIlxuICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOm1pbj1cIm1pblwiXG4gICAgICA6bWF4PVwibWF4XCJcbiAgICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2xpZGVyXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcmFuZ2VcbiAgICAgIGZsZXg6IGF1dG9cbiAgICAgIGhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpXG4gICAgLmRpdG8tbnVtYmVyXG4gICAgICBib3JkZXI6IDBcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWknXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzbGlkZXInLCB7XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5zd2l0Y2gtYnV0dG9uLmRpdG8tc3dpdGNoKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6c3luYz1cInRydWVcIlxuICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgc3dpdGNoLWJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnN5bmM9XCJ0cnVlXCJcbiAgICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc3dpdGNoXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3N3aXRjaCcsIHtcbiAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgY29tcG9uZW50czoge1xuICAgIFN3aXRjaEJ1dHRvblxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGFiZWxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxhYmVsc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5pbnB1dC1maWVsZC5kaXRvLXRleHQoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp0eXBlPVwiaW5wdXRUeXBlXCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpbnB1dC1maWVsZC5kaXRvLXRleHQoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp0eXBlPVwiaW5wdXRUeXBlXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWknXG5cbmNvbnN0IG1hc2tlZFBhc3N3b3JkID0gJyoqKioqKioqKioqKioqKionXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndGV4dCcsICdlbWFpbCcsICd1cmwnLCAnaG9zdG5hbWUnLCAnZG9tYWluJywgJ3RlbCcsICdwYXNzd29yZCcsICdjcmVkaXRjYXJkJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiBzY2hlbWEudHlwZSA9PT0gJ3Bhc3N3b3JkJyxcblxuICBjb21wdXRlZDoge1xuICAgIGlucHV0VHlwZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNyZWRpdGNhcmQ6ICd0ZXh0JyxcbiAgICAgICAgaG9zdG5hbWU6ICd0ZXh0JyxcbiAgICAgICAgZG9tYWluOiAndGV4dCdcbiAgICAgIH1bdGhpcy50eXBlXSB8fCB0aGlzLnR5cGVcbiAgICB9LFxuXG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJyAmJlxuICAgICAgICAgIHRoaXMudmFsdWUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICF0aGlzLmZvY3VzZWRcbiAgICAgICAgKVxuICAgICAgICAgID8gbWFza2VkUGFzc3dvcmRcbiAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAgZW1haWw6ICdlbWFpbCcsXG4gICAgICAgIHVybDogJ3VybCcsXG4gICAgICAgIGhvc3RuYW1lOiAnaG9zdG5hbWUnLFxuICAgICAgICBkb21haW46ICdkb21haW4nLFxuICAgICAgICBwYXNzd29yZDogJ3Bhc3N3b3JkJyxcbiAgICAgICAgY3JlZGl0Y2FyZDogJ2NyZWRpdGNhcmQnXG4gICAgICB9W3RoaXMudHlwZV1cbiAgICAgIHJldHVybiBydWxlID8geyBbcnVsZV06IHRydWUgfSA6IHt9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6cm93cz1cImxpbmVzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOnJvd3M9XCJsaW5lc1wiXG4gICAgOmNsYXNzPVwieyAnZGl0by1yZXNpemFibGUnOiByZXNpemFibGUgfVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10ZXh0YXJlYVxuICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcmVzaXplOiBub25lXG4gICAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjeyAyICogJGlucHV0LXBhZGRpbmctdmVyIH0pXG4gICAgJi5kaXRvLXJlc2l6YWJsZVxuICAgICAgcmVzaXplOiB2ZXJ0aWNhbFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdHJlZS1saXN0XG4gIGRpdG8tc2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgKVxuICAgICAgLy8gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICByb3V0ZXItdmlld1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1saXN0XG4gICAgZGl0by1zY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAuZGl0by10cmVlLXBhbmVsXG4gICAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgICApXG4gICAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgICByb3V0ZXItdmlld1xuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXRyZWUtbGlzdFxuICAgIEBleHRlbmQgJWZpZWxkXG4gICAgLmRpdG8tdHJlZS1wYW5lbFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgICA+IC5kaXRvLXRyZWUtaXRlbVxuICAgICAgICBmbGV4OiAxIDEgMjUlXG4gICAgICA+IC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXJcbiAgICAgICAgZmxleDogMCAxIDc1JVxuICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmRcbiAgICAgICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGVcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMVxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxXG4gICAgICAgIG1hcmdpbjogKC0kaW5wdXQtcGFkZGluZy12ZXIpICgtJGlucHV0LXBhZGRpbmctaG9yKVxuICAgICAgICBtYXJnaW4tbGVmdDogJGlucHV0LXBhZGRpbmctaG9yXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyBoYXNGb3JtU2NoZW1hLCBnZXRGb3JtU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICd0cmVlLWxpc3QnLCAndHJlZS1vYmplY3QnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHsgY29udGFpbmVyOiB0aGlzIH1cbiAgfSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ3RyZWUtb2JqZWN0JyA/ICdvYmplY3QnIDogJ2xpc3QnXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYXRoKCkge1xuICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLnBhdGhgOlxuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8ucGF0aFxuICAgIH0sXG5cbiAgICBlZGl0UGF0aCgpIHtcbiAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5lZGl0UGF0aGA6XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aC5zbGljZSh0aGlzLnBhdGg/Lmxlbmd0aClcbiAgICB9LFxuXG4gICAgdHJlZURhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgPyB7IFt0aGlzLm5hbWVdOiB0aGlzLnZhbHVlIH1cbiAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIHRyZWVEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFJlbW92ZSBgbmFtZWAgZnJvbSBgZGF0YVBhdGhgLCBhcyBpdCBpcyBhZGRlZWRcbiAgICAgIC8vIHRvIGB0cmVlRGF0YWAgYW5kIGB0cmVlU2NoZW1hYFxuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8gdGhpcy5kYXRhUGF0aC5zbGljZSgwLCB0aGlzLmRhdGFQYXRoLmxlbmd0aCAtIHRoaXMubmFtZS5sZW5ndGgpXG4gICAgICAgIDogdGhpcy5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB0cmVlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8ge1xuICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAuLi50aGlzLnNjaGVtYVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIGhhc0VkaXRhYmxlRm9ybXMoKSB7XG4gICAgICBjb25zdCBoYXNFZGl0YWJsZUZvcm1zID0gc2NoZW1hID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgKFxuICAgICAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZWRpdGFibGUnLCB7XG4gICAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgICBzY2hlbWEuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgIGhhc0VkaXRhYmxlRm9ybXMoc2NoZW1hLmNoaWxkcmVuKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGhhc0VkaXRhYmxlRm9ybXModGhpcy5zY2hlbWEpXG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgbmVzdGVkID0gdHJ1ZSwgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHJldHVybiBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgICBuZXN0ZWQsIGZsYXR0ZW4sXG4gICAgICAvLyBQYXNzIHByb2Nlc3MoKSB0byBhZGQgbW9yZSByb3V0ZXMgdG8gY2hpbGRSb3V0ZXM6XG4gICAgICAoY2hpbGRSb3V0ZXMsIGxldmVsKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAvLyBBZGQgYHR5cGVgIHRvIHRoZSBuZXN0ZWQgdHJlZSBsaXN0LlxuICAgICAgICAgIGNoaWxkcmVuLnR5cGUgPSAndHJlZS1saXN0J1xuICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgICBhcGksIGNoaWxkcmVuLCBjaGlsZHJlbi5uYW1lLCBjaGlsZFJvdXRlcywgbGV2ZWwsXG4gICAgICAgICAgICBuZXN0ZWQsIHRydWUsIC8vIFBhc3MgYHRydWVgIGZvciBgZmxhdHRlbmAgaW4gdHJlZSBsaXN0cy5cbiAgICAgICAgICAgIHByb2Nlc3NcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIH0sXG5cbiAgZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nKHNjaGVtYSwgY29udGV4dCkge1xuICAgIC8vIENvbnZlcnQgbmVzdGVkIGNoaWxkcmVuIHNjaGVtYSB0byBzdGFuZC1hbG9uZSBzY2hlbWEgY29tcG9uZW50LFxuICAgIC8vIHByZXNlbnQgaW4gZWFjaCBvZiB0aGUgZm9ybXMsIGFzIHJlcXVpcmVkIGJ5IGBwcm9jZXNzU2NoZW1hRGF0YSgpYFxuICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIGNoaWxkcmVuXG4gICAgICA/IGZvcm0gPT4gKHtcbiAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIC4uLmZvcm0uY29tcG9uZW50cyxcbiAgICAgICAgICBbY2hpbGRyZW4ubmFtZV06IGNoaWxkcmVuXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICA6IG51bGxcbiAgICApXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBmaWxlc2l6ZSBmcm9tICdmaWxlc2l6ZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKHNpemUpIHtcbiAgcmV0dXJuIGZpbGVzaXplKHNpemUsIHsgYmFzZTogMTAgfSlcbn1cbiIsIlxuLmRpdG8tdXBsb2FkXG4gIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gRGl0b1RhYmxlSGVhZFxuICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgdHJcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIE5hbWVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICB0aFxuICAgICAgICAgIHNwYW5cbiAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICA6bGlzdD1cImZpbGVzXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgKVxuICAgICAgICB0ZCh2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiKVxuICAgICAgICB0ZCB7eyBmaWxlLnNpemUgfCBmb3JtYXRGaWxlU2l6ZSB9fVxuICAgICAgICB0ZFxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZFwiKVxuICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCIpXG4gICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIilcbiAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIilcbiAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgIHwgU3RvcmVkXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnNcbiAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICApXG4gICAgdGZvb3RcbiAgICAgIHRyXG4gICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgKSBDYW5jZWwgQWxsXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJpc1VwbG9hZFJlYWR5XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSB0cnVlXCJcbiAgICAgICAgICAgICAgKSBVcGxvYWQgQWxsXG4gICAgICAgICAgICAgIHZ1ZS11cGxvYWQuZGl0by1idXR0b24uZGl0by1idXR0b24tYWRkLXVwbG9hZChcbiAgICAgICAgICAgICAgICA6aW5wdXQtaWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIDpwb3N0LWFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgICAgICAgICAgICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgICAgICAgICAgICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgICAgICAgICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgICAgICAgICAgICAgIEBpbnB1dC1maWx0ZXI9XCJpbnB1dEZpbHRlclwiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbGU9XCJpbnB1dEZpbGVcIlxuICAgICAgICAgICAgICAgIHJlZj1cInVwbG9hZFwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJVcGxvYWQgRmlsZXNcIlxuICAgICAgICAgICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by11cGxvYWRcbiAgICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gRGl0b1RhYmxlSGVhZFxuICAgICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICAgIHRyXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBTdGF0dXNcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhblxuICAgICAgdnVlLWRyYWdnYWJsZShcbiAgICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgICAgOmxpc3Q9XCJmaWxlc1wiXG4gICAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgICApXG4gICAgICAgIHRyKFxuICAgICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgICAgOmtleT1cImZpbGUua2V5XCJcbiAgICAgICAgKVxuICAgICAgICAgIHRkKHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCIpXG4gICAgICAgICAgdGQge3sgZmlsZS5zaXplIHwgZm9ybWF0RmlsZVNpemUgfX1cbiAgICAgICAgICB0ZFxuICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkXCIpXG4gICAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiKVxuICAgICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkaW5nLi4uXG4gICAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIilcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgICAgIHwgU3RvcmVkXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgIHRmb290XG4gICAgICAgIHRyXG4gICAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJpc1VwbG9hZFJlYWR5XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgKSBVcGxvYWQgQWxsXG4gICAgICAgICAgICAgICAgdnVlLXVwbG9hZC5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkKFxuICAgICAgICAgICAgICAgICAgOmlucHV0LWlkPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICA6cG9zdC1hY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgICBAaW5wdXQtZmlsdGVyPVwiaW5wdXRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgQGlucHV0LWZpbGU9XCJpbnB1dEZpbGVcIlxuICAgICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiVXBsb2FkIEZpbGVzXCJcbiAgICAgICAgICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdXBsb2FkXG4gICAgLmRpdG8tdGFibGVcbiAgICAgIHRyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGVcbiAgICAuZGl0by1idXR0b24tYWRkLXVwbG9hZFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAqXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyXG4gICAgICAuZGl0by1wcm9ncmVzc1xuICAgICAgICBmbGV4OiBhdXRvXG4gICAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgcGFyc2VGaWxlU2l6ZSBmcm9tICdmaWxlc2l6ZS1wYXJzZXInXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZm9ybWF0RmlsZVNpemUgfSBmcm9tICcuLi91dGlscy91bml0cy5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZVVwbG9hZCwgVnVlRHJhZ2dhYmxlIH0sXG4gIGZpbHRlcnM6IHsgZm9ybWF0RmlsZVNpemUgfSxcbiAgbWl4aW5zOiBbT3JkZXJlZE1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHVwbG9hZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLnVwbG9hZFxuICAgIH0sXG5cbiAgICBmaWxlcygpIHtcbiAgICAgIHJldHVybiBhc0ZpbGVzKHRoaXMudmFsdWUpXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBObyBjYWxsYmFjayBhcyBpdCdzIHVzZWQgaW4gYHByb2Nlc3NWYWx1ZSgpYFxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBleHRlbnNpb25zOiBnZXRTY2hlbWFBY2Nlc3NvcignZXh0ZW5zaW9ucycsIHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBSZWdFeHBdXG4gICAgfSksXG5cbiAgICBhY2NlcHQ6IGdldFNjaGVtYUFjY2Vzc29yKCdhY2NlcHQnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldChhY2NlcHQpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkoYWNjZXB0KSA/IGFjY2VwdC5qb2luKCcsJykgOiBhY2NlcHRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhTaXplJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGdldChtYXhTaXplKSB7XG4gICAgICAgIHJldHVybiBtYXhTaXplID8gcGFyc2VGaWxlU2l6ZShtYXhTaXplKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gZHJhZ2dhYmxlICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBpc1VwbG9hZFJlYWR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiZcbiAgICAgICAgISh0aGlzLnVwbG9hZC5hY3RpdmUgfHwgdGhpcy51cGxvYWQudXBsb2FkZWQpXG4gICAgfSxcblxuICAgIGlzVXBsb2FkQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgZmlsZS5wcm9ncmVzcywgMCkgL1xuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoXG4gICAgICApXG4gICAgfSxcblxuICAgIHVwbG9hZFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybCh7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyByZW5kZXIgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgdmFsdWU6IGZpbGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmZpbGVzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwoZmlsZS5uYW1lKVxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKGZpbGUgJiYgd2luZG93LmNvbmZpcm0oXG4gICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZS51cGxvYWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5yZW1vdmUoZmlsZS51cGxvYWQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogYCR7bmFtZX0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZpbGVJbmRleChmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlXG4gICAgICAgID8gdGhpcy52YWx1ZS5maW5kSW5kZXgoaXQgPT4gaXQuaWQgPT09IGZpbGUuaWQpXG4gICAgICAgIDogLTFcbiAgICB9LFxuXG4gICAgYWRkRmlsZShmaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbZmlsZV1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwbGFjZUZpbGUoZmlsZSwgbmV3RmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZpbGVJbmRleChmaWxlKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGlmIChuZXdGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLiRzZXQodGhpcy52YWx1ZSwgaW5kZXgsIG5ld0ZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIGlucHV0RmlsZShuZXdGaWxlLCBvbGRGaWxlKSB7XG4gICAgICBpZiAobmV3RmlsZSAmJiAhb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IGlkLCBuYW1lLCBzaXplIH0gPSBuZXdGaWxlXG4gICAgICAgIHRoaXMuYWRkRmlsZSh7IGlkLCBuYW1lLCBzaXplLCB1cGxvYWQ6IG5ld0ZpbGUgfSlcbiAgICAgIH1cbiAgICAgIGlmIChuZXdGaWxlICYmIG9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gbmV3RmlsZVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlLnJlc3BvbnNlWzBdXG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUudXBsb2FkID0gbmV3RmlsZVxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXBsb2FkIGZpbGUgb2JqZWN0IHdpdGggdGhlIGZpbGUgb2JqZWN0IHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSB1cGxvYWQgcmVzcG9uc2UuXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VGaWxlKG5ld0ZpbGUsIGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSB7XG4gICAgICAgICAgICBhYm9ydDogJ1VwbG9hZCBhYm9ydGVkJyxcbiAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBgVW5zdXBwb3J0ZWQgZmlsZS10eXBlOiAke25ld0ZpbGUubmFtZX1gLFxuICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmsgZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzaXplOiBgRmlsZSBpcyB0b28gbGFyZ2U6ICR7Zm9ybWF0RmlsZVNpemUobmV3RmlsZS5zaXplKX1gLFxuICAgICAgICAgICAgdGltZW91dDogJ1RpbWVvdXQgb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCdcblxuICAgICAgICAgIH1bZXJyb3JdIHx8IGBVbmtub3duIEZpbGUgVXBsb2FkIEVycm9yOiAnJHtlcnJvcn0nYFxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0ZpbGUgVXBsb2FkIEVycm9yJyxcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGlucHV0RmlsdGVyKG5ld0ZpbGUvKiwgb2xkRmlsZSwgcHJldmVudCAqLykge1xuICAgICAgY29uc3QgeGhyID0gbmV3RmlsZT8ueGhyXG4gICAgICBpZiAodGhpcy5hcGkuY29ycz8uY3JlZGVudGlhbHMgJiYgeGhyICYmICF4aHIud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoXG4gICAgICAgICh7IHVwbG9hZCwgLi4uZmlsZSB9KSA9PiAhdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlKVxuICAgIHJldHVybiBzY2hlbWEubXVsdGlwbGUgPyBmaWxlcyA6IGZpbGVzWzBdIHx8IG51bGxcbiAgfVxufSlcblxuZnVuY3Rpb24gYXNGaWxlcyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBhc0FycmF5KHZhbHVlKSA6IFtdXG59XG5cbjwvc2NyaXB0PlxuIiwiZXhwb3J0IGRlZmF1bHQgW1xuICAnY3JlYXRlJywgJ2NyZWF0ZWQnLFxuICAnc2F2ZScsICdzYXZlZCcsXG4gICdzdWJtaXQnLCAnc3VibWl0dGVkJyxcbiAgJ2RlbGV0ZScsICdkZWxldGVkJyxcbiAgJ2VkaXQnLCAnZWRpdGVkJyxcbiAgJ2Nsb3NlJywgJ2Nsb3NlZCcsXG4gICdjYW5jZWwnLCAnY2FuY2VsbGVkJyxcbiAgJ2RyYWcnLCAnZHJhZ2dlZCdcbl0ucmVkdWNlKCh2ZXJicywgdmVyYikgPT4ge1xuICB2ZXJic1t2ZXJiXSA9IHZlcmJcbiAgcmV0dXJuIHZlcmJzXG59LCB7fSlcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFZ1ZU1vZGFsIGZyb20gJ3Z1ZS1qcy1tb2RhbCdcbmltcG9ydCBWdWVSb3V0ZXIgZnJvbSAndnVlLXJvdXRlcidcbmltcG9ydCBWdWVOb3RpZmljYXRpb25zIGZyb20gJ3Z1ZS1ub3RpZmljYXRpb24nXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbXBvcnQge1xuICBpc1N0cmluZywgaXNBYnNvbHV0ZVVybCwgbWVyZ2UsIGh5cGhlbmF0ZSwgY2FtZWxpemUsIGRlZmF1bHRGb3JtYXRzXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyBjb21wb25lbnRzIGZyb20gJy4vY29tcG9uZW50cy9pbmRleC5qcydcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vdHlwZXMvaW5kZXguanMnXG5pbXBvcnQgRGl0b1Jvb3QgZnJvbSAnLi9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSdcbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB2ZXJicyBmcm9tICcuL3ZlcmJzLmpzJ1xuXG5WdWUuY29uZmlnLnByb2R1Y3Rpb25UaXAgPSBmYWxzZVxuXG4vLyBBbGwgZ2xvYmFsIHBsdWdpbnMgdGhhdCBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgb24gYFZ1ZWA6XG5WdWUudXNlKFZ1ZVJvdXRlcilcblZ1ZS51c2UoVnVlTW9kYWwsIHsgZHluYW1pYzogdHJ1ZSB9KVxuVnVlLnVzZShWdWVOb3RpZmljYXRpb25zKVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQWRtaW4ge1xuICBjb25zdHJ1Y3RvcihlbCwge1xuICAgIC8vIGBkaXRvYCBjb250YWlucyB0aGUgYmFzZSBhbmQgYXBpIHNldHRpbmdzIHBhc3NlZCBmcm9tIGBBZG1pbkNvbnRyb2xsZXJgXG4gICAgZGl0byA9IHt9LFxuICAgIGFwaSxcbiAgICB2aWV3cyA9IHt9LFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5lbCA9IGVsXG4gICAgLy8gTWVyZ2UgaW4gYGFwaWAgc2V0dGluZ3MgYXMgcGFzc2VkIGZyb20gYGNvbmZpZy5hZG1pbmAgYW5kIHRocm91Z2ggdGhlXG4gICAgLy8gYEFkbWluQ29udHJvbGxlcmAgd2l0aCBgYXBpYCB2YWx1ZXMgZnJvbSBmcm9tICdhZG1pbi9pbmRleC5qcydcbiAgICAvLyBOT1RFOiBgQWRtaW5Db250cm9sbGVyYCBwcm92aWRlcyBgZGl0by5hcGkuYmFzZWBcbiAgICB0aGlzLmFwaSA9IGFwaSA9IG1lcmdlKHsgYmFzZTogJy8nIH0sIGRpdG8uYXBpLCBhcGkpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuXG4gICAgLy8gU2V0dXAgZGVmYXVsdCBhcGkgc2V0dHRpbmdzOlxuICAgIGFwaS5sb2NhbGUgfHw9ICdlbi1VUydcblxuICAgIGFwaS5mb3JtYXRzID0gbWVyZ2Uoe30sIGRlZmF1bHRGb3JtYXRzLCBhcGkuZm9ybWF0cylcblxuICAgIGFwaS5yZXF1ZXN0IHx8PSBvcHRpb25zID0+IHRoaXMucmVxdWVzdChvcHRpb25zKVxuXG4gICAgLy8gU2V0dGluZyBgYXBpLm5vcm1hbGl6ZVBhdGhzID0gdHJ1ZSAocGx1cmFsKSBzZXRzIGJvdGg6XG4gICAgLy8gYGFwaS5ub3JtYWxpemVQYXRoID0gaHlwaGVuYXRlYCBhbmQgYGFwaS5kZW5vcm1hbGl6ZVBhdGggPSBjYW1lbGl6ZWBcbiAgICBhcGkubm9ybWFsaXplUGF0aCA9IChcbiAgICAgIGFwaS5ub3JtYWxpemVQYXRoIHx8XG4gICAgICBhcGkubm9ybWFsaXplUGF0aHNcbiAgICAgICAgPyBoeXBoZW5hdGVcbiAgICAgICAgOiB2YWwgPT4gdmFsXG4gICAgKVxuICAgIGFwaS5kZW5vcm1hbGl6ZVBhdGggPSAoXG4gICAgICBhcGkuZGVub3JtYWxpemVQYXRoIHx8XG4gICAgICBhcGkubm9ybWFsaXplUGF0aHNcbiAgICAgICAgPyBjYW1lbGl6ZVxuICAgICAgICA6IHZhbCA9PiB2YWxcbiAgICApXG5cbiAgICAvLyBBbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbGwgYXV0aCByZXNvdXJjZXMsIGxpa2Ugc286XG4gICAgLy8gYXBpLnVzZXJzID0ge1xuICAgIC8vICAgcGF0aDogJy9hZG1pbnMnLFxuICAgIC8vICAgLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0czpcbiAgICAvLyAgIGxvZ2luOiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dpbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgbG9nb3V0OiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dvdXQnLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIHNlc3Npb246IHtcbiAgICAvLyAgICAgcGF0aDogJ3Nlc3Npb24nLFxuICAgIC8vICAgICBtZXRob2Q6ICdnZXQnXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIGNvbnN0IHVzZXJzID0gYXBpLnVzZXJzID0gZ2V0UmVzb3VyY2UoYXBpLnVzZXJzLCB7XG4gICAgICB0eXBlOiAnY29sbGVjdGlvbidcbiAgICB9KSB8fCB7fVxuICAgIHVzZXJzLmxvZ2luID0gZ2V0UmVzb3VyY2UodXNlcnMubG9naW4gfHwgJ2xvZ2luJywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5sb2dvdXQgPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dvdXQgfHwgJ2xvZ291dCcsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMuc2Vzc2lvbiA9IGdldFJlc291cmNlKHVzZXJzLnNlc3Npb24gfHwgJ3Nlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIG9mIHJlc291cmNlIHBhdGggaGFuZGxlcnM6XG4gICAgLy8gYXBpLnJlc291cmNlcyA9IHtcbiAgICAvLyAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc291cmNlLnBhcmVudFxuICAgIC8vICAgICAgID8gYCR7cmVzb3VyY2UucGF0aH0/JHtyZXNvdXJjZS5wYXJlbnQucGF0aH1faWQ9JHtcbiAgICAvLyAgICAgICAgICByZXNvdXJjZS5wYXJlbnQuaWR9YFxuICAgIC8vICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgICBhbnkocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXNbcmVzb3VyY2U/LnR5cGVdIHx8IHRoaXMuZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVzb3VyY2UgJiYgaGFuZGxlci5jYWxsKHRoaXMsIHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5hbnkocmVzb3VyY2UucGFyZW50KVxuICAgICAgICByZXR1cm4gcGFyZW50UGF0aFxuICAgICAgICAgID8gYCR7cGFyZW50UGF0aH0vJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChyZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcihyZXNvdXJjZSkge1xuICAgICAgICAvLyBOT1RFOiBXZSBhc3N1bWUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIHJvb3QtbGV2ZWwgY29sbGVjdGlvbiByb3V0ZXMsXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBuZXN0aW5nIG9mIChzdWItKWNvbGxlY3Rpb24gcm91dGVzLlxuICAgICAgICByZXR1cm4gYCR7cmVzb3VyY2UucGF0aH0vJHtyZXNvdXJjZS5pZH1gXG4gICAgICB9LFxuXG4gICAgICB1cGxvYWQocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gRGl0byBTZXJ2ZXIgaGFuZGxlcyB1cGxvYWQgcm91dGVzIG9uIHRoZSBjb2xsZWN0aW9uIHJlc291cmNlOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2xsZWN0aW9uKHJlc291cmNlLnBhcmVudCl9L3VwbG9hZC8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgfSxcblxuICAgICAgLi4uYXBpLnJlc291cmNlc1xuICAgIH1cblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgLyBleHRlbmRpbmcgb2YgaGVhZGVyczpcbiAgICAvLyBhcGkuaGVhZGVycyA9IHtcbiAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAvLyB9XG4gICAgYXBpLmhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uYXBpLmhlYWRlcnNcbiAgICB9XG5cbiAgICBhcGkuaXNBcGlSZXF1ZXN0ID0gYXBpLmlzQXBpUmVxdWVzdCB8fCBmdW5jdGlvbih1cmwpIHtcbiAgICAgIHJldHVybiAhaXNBYnNvbHV0ZVVybCh1cmwpIHx8IHVybC5zdGFydHNXaXRoKGFwaS51cmwpXG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGVsKSkge1xuICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKVxuICAgIH1cblxuICAgIHRoaXMucm9vdCA9IG5ldyBWdWUoe1xuICAgICAgZWwsXG4gICAgICByb3V0ZXI6IG5ldyBWdWVSb3V0ZXIoe1xuICAgICAgICBtb2RlOiAnaGlzdG9yeScsXG4gICAgICAgIGJhc2U6IGRpdG8uYmFzZSxcbiAgICAgICAgbGlua0FjdGl2ZUNsYXNzOiAnJyxcbiAgICAgICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICcnXG4gICAgICB9KSxcbiAgICAgIGNvbXBvbmVudHM6IHsgRGl0b1Jvb3QgfSxcbiAgICAgIC8vIE1vc3QgaW5qZWN0cyBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlIHJlYWN0aXZlbmVzcyBhY3Jvc3NcbiAgICAgIC8vIHByb3ZpZGUvaW5qZWN0LCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICAgIHByb3ZpZGU6IHtcbiAgICAgICAgYXBpLFxuICAgICAgICAvLyBBIGRlZmF1bHQgbGlzdCBvZiB2ZXJicyBhcmUgcHJvdmlkZWQgYnkgJHZlcmJzKCkgYW5kIGNhbiBiZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGF0IGFueSBwb2ludCBpbiB0aGUgY29tcG9uZW50IGhpZXJhcmNoeS5cbiAgICAgICAgJHZlcmJzOiAoKSA9PiB2ZXJicyxcbiAgICAgICAgLy8gUHJvdmlkZSBkZWZhdWx0cyBzbyBEaXRvTWl4aW4gY2FuIGluamVjdCB0aGVtIGZvciBhbGwgY29tcG9uZW50czpcbiAgICAgICAgLy8gICBpbmplY3Q6IFsgICckaXNQb3B1bGF0ZWQnLCAnJHNjaGVtYUNvbXBvbmVudCcsICckcm91dGVDb21wb25lbnQnIF1cbiAgICAgICAgJHZpZXdzOiAoKSA9PiB7fSxcbiAgICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0cnVlLFxuICAgICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkYXRhQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICAgICAgfSxcblxuICAgICAgcmVuZGVyOiBjcmVhdGVFbGVtZW50ID0+IGNyZWF0ZUVsZW1lbnQoRGl0b1Jvb3QsIHtcbiAgICAgICAgLy8gUHJlc2VydmUgdGhlIHJvb3QgY29udGFpbmVyJ3MgaWQsIGFzIHJlcXVpcmVkIGJ5IGhvdC1yZWxvYWRpbmc6XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgaWQ6IGVsLmlkXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgdW5yZXNvbHZlZFZpZXdzOiB2aWV3cyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFRoaXMgbWF5IG9ubHkgYmUgbmVlZGVkIHRvIGF2b2lkIHRyZWUtc2hhY2tpbmcgb2YgdGhlc2UgY29tcG9uZW50cyxcbiAgICAgICAgLy8gc2luY2UgdGhleSBhY3R1YWxseSBoYW5kbGUgcmVnaXN0cnkgaW50ZXJuYWxseSBhbHJlYWR5LlxuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgLi4uY29tcG9uZW50cyxcbiAgICAgICAgICAuLi50eXBlc1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICByZWdpc3Rlcih0eXBlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFR5cGVDb21wb25lbnQucmVnaXN0ZXIodHlwZSwgb3B0aW9ucylcbiAgfVxuXG4gIHJlcXVlc3Qoe1xuICAgIHVybCxcbiAgICBtZXRob2QgPSAnZ2V0JyxcbiAgICBkYXRhID0gbnVsbCxcbiAgICBwYXJhbXMgPSBudWxsLFxuICAgIGhlYWRlcnMgPSBudWxsXG4gIH0pIHtcbiAgICBjb25zdCBpc0FwaVJlcXVlc3QgPSB0aGlzLmFwaS5pc0FwaVJlcXVlc3QodXJsKVxuICAgIHJldHVybiBheGlvcy5yZXF1ZXN0KHtcbiAgICAgIHVybCxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIC4uLihkYXRhICYmIHsgZGF0YSB9KSxcbiAgICAgIGJhc2VVUkw6IGlzQXBpUmVxdWVzdCA/IHRoaXMuYXBpLnVybCA6IG51bGwsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIC4uLihpc0FwaVJlcXVlc3QgJiYgdGhpcy5hcGkuaGVhZGVycyksXG4gICAgICAgIC4uLmhlYWRlcnNcbiAgICAgIH0sXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGlzQXBpUmVxdWVzdCAmJiAhIXRoaXMuYXBpLmNvcnM/LmNyZWRlbnRpYWxzXG4gICAgfSlcbiAgfVxufVxuIl0sIm5hbWVzIjpbInVpZCIsImNvbXBvbmVudHMiLCJyZW5kZXIiLCJzdGF0aWNSZW5kZXJGbnMiLCJfX3Z1ZTJfc2NyaXB0IiwiVHlwZUNvbXBvbmVudCIsIlNrZXRjaFBpY2tlciJdLCJtYXBwaW5ncyI6Iit2RUFBQSxH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QU0sQ0FBQyxRQUFVLEVBQUksUUFBUSxRQUFRLFVBQVksRUFBSSxTQUFTLENBQUMsRUFBRSxDQUFFLEVBQUksS0FBTSxFQUFHLGNBQWMsRUFBRyxFQUFJLFdBQVksRUFBRyxJQUFJLENBQUMsWUFBWSxhQUFhLEdBQUcsQ0FBQyxNQUFRLFNBQVMsRUFBTyxDQUFDLE1BQU8sR0FBSSxjQUFjLE1BQUssQ0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUcsT0FBTyxDQUFDLEVBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUUsQ0FBRSxFQUFFLENBQUMsRUFBRSxFQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUNscEJDLEdBQWtCLENBQUEsUUNtRHRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLFlBQUEsQ0FDQSxPQUFBLENBQUEsRUFBQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxJQUFBLEtBQUEsYUFDQSxDQUNBLEVBRUEsTUFBQSxDQUNBLGdCQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsU0FBQSxPQUFBLEVBQUEsU0FBQSxFQUFBLEVBQ0EsUUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFBQSxFQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLGNBQUEsQ0FBQSxFQUNBLFdBQUEsR0FDQSxhQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxlQUFBLENBQ0EsTUFBQSxNQUFBLE1BQUEsYUFDQSxFQUVBLFdBQUEsQ0FDQSxNQUFBLE1BQUEsYUFBQSxDQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxTQUFBLE1BQUEsU0FBQSxPQUFBLGdCQUdBLEtBQUEsU0FBQSxnQkFBQSxDQUFBLENBQ0EsT0FFQSxVQUFBLENBR0EsS0FBQSxNQUFBLFNBQUEsQ0FDQSxNQUFBLEdBQUEsQ0FDQSxBQUFBLEVBQUEsT0FBQSxRQUFBLGFBQUEsR0FDQSxNQUFBLFNBQUEsWUFBQSxLQUVBLEVBRUEsTUFBQSxHQUFBLENBQ0EsQUFBQSxFQUFBLE9BQUEsT0FDQSxNQUFBLFNBQUEsWUFBQSxLQUVBLENBQ0EsQ0FBQSxFQUNBLEdBQUEsQ0FDQSxLQUFBLFdBQUEsR0FDQSxBQUFBLEtBQUEsTUFBQSxZQUNBLEtBQUEsTUFBQSxhQUFBLEVBRUEsS0FBQSxNQUFBLE1BQUEsQ0FFQSxPQUFBLEVBQUEsQ0FDQSxRQUFBLE1BQUEsQ0FBQSxDQUNBLENBQ0EsS0FBQSxXQUFBLEVBQ0EsRUFFQSxRQUFBLENBQ0EsT0FBQSxDQUFBLE9BQUEsT0FBQSxRQUFBLFFBQUEsR0FBQSxDQUNBLE1BQUEsQ0FDQSxRQUFBLFVBQ0EsTUFBQSxRQUNBLEtBQUEsY0FDQSxRQUFBLFNBQ0EsRUFBQSxJQUFBLGdCQUNBLEVBQUEsTUFDQSxFQUFBLENBQUEsRUFBQSxLQUFBLFVBQUEsUUFDQSxRQUFBLGNBQUEsTUFBQSxFQUNBLEtBQUEsR0FBQSxDQUNBLFFBQUEsT0FDQSxNQUFBLFFBQ0EsS0FBQSxNQUNBLFFBQUEsS0FDQSxFQUFBLElBQUEsUUFFQSxRQUFBLEdBQUEsR0FBQSxDQUFBLENBQUEsRUFDQSxLQUFBLENBQUEsZ0JBQUEsSUFBQSxLQUFBLElBQ0EsR0FBQSxFQUFBLENBS0EsS0FBQSxDQUFBLGlCQUFBLElBQUEsRUFDQSxFQUFBLElBQUEsRUFBQSxPQUFBLEVBQUEsUUFBQSxFQUNBLEtBQUEsUUFBQSxDQUFBLE9BQUEsUUFBQSxPQUFBLFdBQUEsQ0FDQSxDQUNBLEVBRUEsb0JBQUEsQ0FDQSxLQUFBLGNBQUEsV0FBQSxDQUNBLEVBRUEsZ0JBQUEsRUFBQSxDQUNBLEtBQUEsY0FBQSxFQUFBLEVBQUEsRUFDQSxPQUVBLFFBQUEsU0FDQSxLQUFBLFdBQUEsR0FDQSxLQUFBLENBQ0EsdUJBQ0Esc0JBQ0EsS0FBQSxRQUFBLE9BQUEsQ0FBQSxFQUNBLEVBQUEsS0FBQSxNQUFBLFdBQUEsQ0FDQSxXQUFBLEdBQ0EsU0FBQSxDQUNBLEtBQUEsT0FDQSxVQUFBLEVBQ0EsRUFDQSxTQUFBLENBQ0EsS0FBQSxVQUNBLEdBQ0EsR0FFQSxRQUFBLENBQ0EsT0FBQSxDQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsUUFBQSxDQUNBLENBQ0EsQ0FBQSxFQUNBLEdBQUEsRUFDQSxHQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsTUFBQSxZQUFBLENBQ0EsU0FBQSxLQUFBLElBQUEsTUFBQSxNQUNBLEtBQUEsRUFDQSxTQUFBLEVBQ0EsQ0FBQSxFQUNBLEFBQUEsRUFDQSxTQUFBLFFBQUEsQ0FBQSxFQUVBLE1BQUEsUUFBQSxFQUFBLEtBQUEsSUFBQSxFQUNBLEtBQUEsTUFBQSxhQUFBLEVBRUEsT0FBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLFFBQUEsV0FBQSxjQUFBLE9BQUEsY0FBQSxNQUNBLEtBQUEsT0FBQSxDQUNBLEtBQUEsUUFDQSxNQUFBLHVCQUNBLEtBQUEsR0FBQSxDQUNBLENBQUEsRUFDQSxHQUNBLFFBQUEsTUFBQSxFQUFBLEVBQUEsUUFBQSxFQUVBLEtBQUEsTUFBQSxDQUNBLENBRUEsRUFFQSxjQUFBLENBQ0EsTUFBQSxNQUFBLFNBQUEsR0FBQSxDQUNBLE9BRUEsU0FBQSxDQUNBLEdBQUEsQ0FLQSxBQUFBLEFBSkEsTUFBQSxNQUFBLFlBQUEsQ0FDQSxTQUFBLEtBQUEsSUFBQSxNQUFBLE9BQ0EsU0FBQSxFQUNBLENBQUEsR0FDQSxLQUFBLFNBQ0EsTUFBQSxRQUFBLElBQUEsRUFDQSxLQUFBLGFBQUEsRUFFQSxPQUFBLEVBQUEsQ0FDQSxRQUFBLE1BQUEsQ0FBQSxDQUNBLENBQ0EsT0FFQSxZQUFBLENBQ0EsR0FBQSxHQUFBLEtBQ0EsR0FBQSxDQUtBLEVBQUEsQUFKQSxNQUFBLE1BQUEsWUFBQSxDQUNBLFNBQUEsS0FBQSxJQUFBLE1BQUEsUUFDQSxTQUFBLEVBQ0EsQ0FBQSxHQUNBLEtBQUEsTUFBQSxJQUNBLE9BQUEsRUFBQSxDQUNBLEtBQUEsT0FBQSxDQUNBLEtBQUEsUUFDQSxNQUFBLHVCQUNBLEtBQUEsQ0FDQSxDQUFBLENBQ0EsQ0FDQSxZQUFBLFFBQUEsQ0FBQSxFQUNBLENBQ0EsRUFFQSxRQUFBLEVBQUEsQ0FDQSxLQUFBLFNBQUEsS0FDQSxHQUNBLE9BQUEsZUFBQSxFQUFBLEdBQUEsU0FBQSxFQUdBLEdBQ0EsTUFBQSxjQUFBLENBQUEsRUFDQSxLQUFBLGFBQUEsRUFFQSxPQUVBLGFBQUEsQ0FDQSxBQUFBLEtBQUEsTUFBQSxVQUFBLEdBQ0EsS0FBQSxNQUFBLE1BQUEsQ0FFQSxPQUVBLGVBQUEsQ0FDQSxHQUFBLENBQ0EsS0FBQSxjQUFBLEtBQUEsSUFBQSxLQUFBLGVBQUEsQ0FDQSxPQUFBLEVBQUEsQ0FDQSxNQUFBLEdBQUEsU0FDQSxRQUFBLE1BQUEsQ0FBQSxFQUVBLEtBQUEsTUFBQSxDQUNBLENBRUEsS0FBQSxHQUFBLENBQUEsRUFDQSxFQUFBLENBQUEsRUFDQSxTQUFBLENBQUEsRUFBQSxJQUFBLFFBQUEsUUFBQSxLQUFBLGFBQUEsRUFDQSxFQUFBLEtBQUEsR0FBQSxHQUFBLEtBQUEsSUFBQSxFQUFBLEVBQUEsQ0FBQSxDQUFBLEVBRUEsS0FBQSxTQUFBLElBQUEsQ0FBQSxFQUNBLFNBQUEsS0FBQSxHQUNBLEtBQUEsUUFBQSxTQUFBLENBQUEsQ0FFQSxDQUNBLENBQ0EsQ0FBQSxvSUM5UklGLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLE1BQU0sQ0FBQyxZQUFZLDhCQUE4QixFQUFFLENBQUMsRUFBRyxLQUFLLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUcsS0FBSyxDQUFDLFlBQVksYUFBYSxFQUFFLEVBQUksR0FBSSxFQUFJLE1BQU8sU0FBUyxFQUFLLENBQUMsTUFBTyxHQUFHLEtBQUssQ0FBRSxFQUFJLGFBQWEsQ0FBSSxFQUFHLEVBQUcsY0FBYyxDQUFDLFlBQVksWUFBWSxNQUFNLENBQUMsR0FBTSxJQUFPLEVBQUssS0FBTyxlQUFlLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLFNBQVMsQ0FBSSxDQUFDLENB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S0FBQSxJQUFBLEVBQ0EsU0FBQSxLQUFBLE1BQUEsV0FDQSxBQUFBLElBQUEsSUFDQSxHQUFBLEdBQUEsTUFHQSxNQUFBLENBQ0EsYUFBQSxLQUNBLFlBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxpQkFBQSxDQUNBLE1BQUEsS0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLE1BQUEsUUFBQSxJQUNBLEVBRUEsUUFBQSxDQUNBLE1BQUEsQ0FDQSxXQUFBLEtBQUEsVUFDQSxDQUNBLEVBRUEsZUFBQSxDQUNBLE1BQUEsUUFBQSxRQUFBLEdBQUEsS0FBQSxPQUFBLENBQUEsRUFBQSxPQUdBLENBQUEsRUFBQSxDQUFBLEVBQUEsS0FBQSxDQUNBLEtBQUEsQ0FBQSxPQUFBLFVBQUEsRUFDQSxHQUFBLENBQUEsRUFBQSxDQUNBLEtBQUEsR0FBQSxJQUFBLFNBQUEsSUFBQSxLQUFBLE9BQUEsRUFDQSxJQUFBLFNBQUEsSUFBQSxLQUFBLE9BQUEsRUFDQSxLQUNBLEFBQUEsR0FDQSxHQUFBLE9BQ0EsR0FEQSxDQUVBLE9BQUEsQ0FBQSxPQUFBLENBQ0EsR0FFQSxDQUNBLFNBQUEsR0FBQSxFQUNBLENBQ0EsRUFDQSxDQUFBLENBQ0EsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxNQUFBLFFBQUEsS0FBQSxLQUFBLGFBQUEsRUFBQSxTQUFBLFFBQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsYUFBQSxHQUFBLE9BQUEsQ0FDQSxNQUFBLElBQUEsQ0FDQSxBQUFBLE1BQUEsVUFBQSxJQUNBLEtBQUEsT0FBQSxDQUVBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsV0FBQSxDQUNBLEtBQUEsYUFBQSxPQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsTUFBQSxDQUNBLEtBQUEsT0FBQSxLQUFBLEtBQUEsSUFBQSxDQUNBLEVBRUEsUUFBQSxFQUFBLENBQ0EsS0FBQSxRQUFBLFFBQUEsQ0FBQSxFQUNBLEtBQUEsS0FBQSxDQUNBLEVBRUEsT0FBQSxFQUFBLENBQ0EsS0FBQSxRQUFBLE9BQUEsQ0FBQSxFQUNBLEtBQUEsS0FBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLEtBQUEsUUFBQSxLQUFBLFVBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxBQUFBLEtBQUEsV0FDQSxLQUFBLFFBQUEsSUFBQSxDQUVBLENBQ0EsQ0FDQSxDQUFBLG9JQ3hJSUYsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFRLEdBQUksUUFBUyxFQUFHLEVBQUksUUFBUSxLQUFPLEVBQUksSUFBSSxDQUFDLElBQUksWUFBWSxNQUFNLEVBQUksUUFBUSxNQUFPLEVBQUksTUFBTyxFQUFFLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUksSUFBSSxFQUMzT0MsR0FBa0IsQ0FBQSxFQ2F0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxlQUFBLENBQ0EsTUFBQSxDQUNBLElBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxNQUFBLEVBQ0EsUUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLE1BQUEsQ0FBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLFNBQUEsQ0FDQSxLQUFBLENBQUEsV0FBQSxLQUNBLE1BQUEsR0FBQSxDQUFBLEVBQUEsRUFBQSxDQUFBLEtBQUEsQ0FBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsUUFDQSxLQUFBLE9BQUEsT0FDQSxHQUFBLEtBQUEsUUFBQSxLQUFBLEVBRUEsRUFFQSxRQUFBLENBQ0EsTUFBQSxRQUNBLEtBQUEsT0FBQSxPQUNBLEdBQUEsS0FBQSxRQUFBLEtBQUEsRUFFQSxDQUNBLENBQ0EsQ0FBQSxFQUVBLFlBQUEsRUFBQSxDQUNBLE1BQUEsR0FBQSxDQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsSUFDQSxDQUFBLEVBQUEsQ0FBQSxFQUNBLEVBQUEsR0FBQSxHQUNBLEVBQUEsQ0FBQSxHQUNBLE9BQUEsT0FBQSxFQUFBLENBQUEsRUFFQSxHQUNBLEVBQUEsQ0FDQSx5SUNuRElGLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBUSxHQUFJLE1BQVEsRUFBSSxZQUFhLEVBQUcsRUFBSSxJQUFJLEVBQUksR0FBRyxDQUFDLElBQUksWUFBWSxZQUFZLGFBQWEsTUFBTSxDQUFFLGNBQWUsRUFBSSxRQUFRLENBQUUsRUFBRSxFQUFJLFNBQVMsRUFBRSxDQUFFLEVBQUksWUFBYSxFQUFHLE1BQU0sQ0FBQyxZQUFZLGVBQWUsTUFBTSxDQUFFLGNBQWUsQ0FBQyxFQUFJLFNBQVMsQ0FBRSxDQUFDLEVBQUUsRUFBSSxHQUFJLEVBQUMsRUFBSSxHQUFJLEVBQUksU0FBVSxTQUFTLEVBQU8sRUFBTSxDQUFDLE1BQU8sR0FBRyxlQUFlLENBQUMsSUFBSyxVQUFZLEVBQU8sWUFBWSxvQkFBb0IsTUFBTSxDQUFDLElBQU0sT0FBTyxRQUFVLENBQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFNLEVBQUksUUFBUSxFQUFFLFNBQVMsQ0FBQyxVQUFZLEVBQUksR0FBRyxFQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUksRUFBSSxTQUFVLFNBQVMsRUFBTyxFQUFNLENBQUMsTUFBTyxHQUFHLGVBQWUsQ0FBQyxJQUFLLFVBQVksRUFBTyxZQUFZLG9CQUFvQixNQUFNLENBQUMsSUFBTSxPQUFPLFFBQVUsQ0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFHLGNBQWMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFJLEdBQUUsQ0FBRSxFQUM3eEJDLEdBQWtCLENBQUEsUUNzR3RCLEtBQUFDLElBQUEsRUFBQSxVQUFBLGFBQUEsQ0FDQSxNQUFBLENBQ0EsTUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLE1BQUEsRUFBQSxRQUFBLElBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsWUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLENBQ0EsTUFBQSxNQUFBLFlBQUEsSUFBQSxLQUNBLEVBRUEsTUFBQSxDQUNBLEtBQUEsQ0FBQSxTQUFBLEtBQ0EsTUFBQSxHQUFBLENBQUEsRUFBQSxpQkFBQSxLQUFBLENBQ0EsRUFFQSxVQUFBLE9BQ0EsTUFBQSxHQUFBLFFBQUEsUUFBQSxjQUFBLE1BQUEsQ0FDQSxFQUVBLFVBQUEsT0FDQSxNQUFBLEdBQUEsUUFBQSxRQUFBLGNBQUEsTUFBQSxDQUNBLEVBRUEsV0FBQSxDQUNBLE1BQUEsTUFDQSxLQUFBLGFBQUEsQ0FDQSxNQUFBLEtBQUEsT0FDQSxFQUVBLEVBRUEsVUFBQSxDQUNBLE1BQUEsTUFBQSxTQUFBLGNBQUEsSUFDQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFNBQUEsQ0FDQSxLQUFBLFNBQUEsWUFBQSxLQUNBLEtBQUEsTUFBQSxTQUFBLEtBQUEsU0FBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQzVJZSxHQUFBLENBQ2IsUUFBUyxDQUNQLHFCQUVBLGNBRUEsVUFBVSxFQUFjLEVBQU0sRUFBUSxLQUFNLENBQzFDLE1BQU8sTUFBSyxhQUFlLElBQVUsS0FDakMsT0FBTyxDQUFLLEVBQ1osR0FBVSxFQUFjLENBQUksQ0FDakMsRUFFRCxnQkFBZ0IsRUFBYyxFQUFPLENBQ25DLEdBQUksQ0FBRSxZQUFhLEtBQ25CLE1BQUksS0FBaUIsS0FBSyxRQUN4QixHQUFXLEVBQWUsRUFBVSxFQUFhLElBQUksR0FFbkQsR0FBUyxNQUNYLEdBQVcsRUFBZSxFQUFVLENBQUssR0FFcEMsQ0FDUixFQUVELGdCQUFnQixFQUFjLEVBQU0sRUFBUSxDQUMxQyxLQUFNLEdBQVEsS0FBSyxZQUVmLEVBQ0EsaUJBQU0sVUFDTixDQUFDLEVBQU0sSUFDTCxLQUFLLFVBQVUsRUFBYyxFQUFNLENBQUssSUFBTSxHQUVwRCxNQUFPLEtBQVUsR0FBSyxFQUFRLElBQy9CLEVBRUQsYUFBYSxFQUFjLEVBQU0sQ0FDL0IsUUFBUSxLQUNSLFdBQVcsR0FDWCxXQUFXLElBQ1QsR0FBSSxDQUNOLEtBQU0sQ0FBRSxhQUFjLEVBQ3RCLEdBQUksQ0FBQyxHQUFRLENBQUMsR0FBWSxJQUFjLEdBQ3RDLE1BQU8sTUFHVCxHQUFJLEdBQ0osS0FBTSxHQUFjLElBQ2pCLE1BQWEsS0FBSyxnQkFBZ0IsRUFBYyxDQUFLLEdBRXhELEdBQUksR0FDSixLQUFNLEdBQWUsSUFDbEIsTUFBYyxLQUFLLFNBQ2xCLEdBQWtCLEVBQWMsRUFBTSxLQUFLLE9BQU8sQ0FDNUQsR0FFTSxHQUFJLEdBQ0EsRUFDQSxFQUNKLEdBQUksRUFBVyxDQUFTLEVBQUcsQ0FDekIsS0FBTSxHQUFRLEVBQVUsS0FDdEIsS0FDQSxHQUFJLEdBQVksS0FBTSxDQUNwQixPQUFRLEdBQ1IsS0FBTSxFQUNOLE1BQU8sRUFDUCxXQUVJLFdBQVcsQ0FDYixNQUFPLEdBQWEsQ0FDckIsS0FFRyxZQUFZLENBQ2QsTUFBTyxHQUFjLENBQ3RCLENBQ2IsQ0FBVyxDQUNGLEVBQ0QsQUFBSSxFQUFTLENBQUssRUFDZixDQUFFLE9BQU0sU0FBUSxRQUFNLEVBQUssRUFFNUIsRUFBTyxFQUdULEVBQVcsRUFDbkIsS0FBYSxDQUtMLEtBQU0sQ0FBRSxXQUFZLEVBQ2QsRUFDSixFQUFTLENBQVMsR0FBSyxHQUN2QixFQUFhLENBQVksR0FBSyxHQUFXLE9BQU8sS0FBSyxDQUFPLEVBQUUsSUFDOUQsT0FFRixFQUFPLEVBQUssRUFDYixDQUNELEtBQU0sR0FBVyxDQUFDLENBQUMsRUFVbkIsR0FUQSxFQUFPLEdBQVEsR0FFVixHQUVILEdBQVcsR0FDUCxFQUFhLENBQVksR0FBSyxJQUFVLE1BQzFDLEdBQU8sR0FBRyxFQUFRLE1BR2xCLEVBQVUsQ0FDWixLQUFNLEdBQVksRUFBYyxFQUNoQyxBQUFJLEdBR0YsR0FBTyxHQUFHLEtBQWEsRUFBVyxJQUFJLEtBQVUsSUFFbkQsQ0FDRCxNQUFPLEdBQVcsQ0FBRSxPQUFNLFNBQVEsUUFBUSxFQUFHLENBQzlDLENBQ0YsQ0FDSCxFQzVISUYsR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksYUFBYSxFQUFFLENBQUMsRUFBRyxNQUFNLENBQUMsWUFBWSxxQkFBcUIsRUFBRSxDQUFFLEVBQUksVUFBWSxFQUFJLFNBQVcsRUFBSSxVQUFXLEVBQUcsTUFBTSxDQUFDLFlBQVkscUJBQXFCLE1BQU0sQ0FBRSwwQkFBMkIsRUFBSSxVQUFVLENBQUUsRUFBRSxDQUFFLEVBQUksU0FBVSxFQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBUSxFQUFJLE1BQU0sU0FBVyxFQUFJLFNBQVMsWUFBYyxFQUFJLFlBQVksVUFBWSxDQUFDLEVBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxPQUFTLEVBQUksUUFBUSxFQUFFLFlBQVksRUFBSSxHQUFHLENBQUUsRUFBSSxRQUFTLENBQUMsSUFBSSxlQUFlLEdBQUcsVUFBVSxDQUFDLE1BQU8sQ0FBQyxFQUFJLEdBQUcsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBSSxFQUFFLEVBQUksS0FBTSxFQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBTyxFQUFJLEtBQUssWUFBYyxFQUFJLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFFLEVBQUcsRUFBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsVUFBWSxFQUFJLFVBQVUsU0FBVyxFQUFJLFNBQVMsS0FBTyxFQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBSSxLQUFLLEVBQUksR0FBSSxFQUFJLEtBQU0sU0FBUyxFQUFPLEVBQUksQ0FBQyxNQUFRLEdBQUksUUFBUyxFQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUksSUFBSSxPQUFPLFNBQVMsR0FBSyxZQUFZLGdCQUFnQixNQUFNLENBQUMsUUFBVSxFQUFJLGNBQWdCLEVBQUksSUFBTSxFQUFJLE9BQVMsRUFBTyxTQUFXLEVBQUksU0FBUyxLQUFPLEVBQUksS0FBSyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksTUFBTSxPQUFTLENBQUMsRUFBSSxTQUFXLENBQUMsRUFBSSxZQUFZLFNBQVcsRUFBSSxTQUFTLGVBQWlCLEVBQUksY0FBYyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUksQ0FBQSxDQUFDLEVBQUUsRUFBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsUUFBVSxFQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUUsRUFBSSxhQUFlLEVBQUksT0FBUSxFQUFHLFlBQVksQ0FBQyxJQUFJLGFBQWEsWUFBWSxpQkFBaUIsTUFBTSxDQUFDLE9BQVMsRUFBSSxPQUFPLFNBQVcsRUFBSSxTQUFTLEtBQU8sRUFBSSxLQUFLLEtBQU8sRUFBSSxLQUFLLE1BQVEsRUFBSSxNQUFNLE9BQVMsQ0FBQyxFQUFJLFNBQVcsQ0FBQyxFQUFJLFFBQVEsU0FBVyxFQUFJLFNBQVMsZUFBaUIsRUFBSSxjQUFjLENBQUMsQ0FBQyxFQUFFLEVBQUksSUFBSSxFQUFFLENBQUMsRUFBRyxDQUFDLEVBQUksU0FBVyxFQUFJLFlBQWEsRUFBSSxHQUFHLFNBQVMsRUFBRSxFQUFJLEdBQUUsQ0FBRSxFQUFFLENBQUMsRUFBRyxFQUFJLFFBQVMsQ0FBRSxBQUFDLEVBQUksU0FBaUMsRUFBSSxHQUFFLEVBQTdCLEVBQUksR0FBRyxjQUFjLENBQVUsRUFBRyxFQUFJLFlBQWEsQ0FBQyxFQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBUyxFQUFJLGFBQWEsS0FBTyxFQUFJLEtBQUssS0FBTyxFQUFJLEtBQUssTUFBUSxFQUFJLE1BQU0sU0FBVyxFQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUksQ0FBQSxFQUFFLENBQUMsQ0FBQyxFQUNsMURDLEdBQWtCLENBQUEsUUNvS3RCLEtBQUFDLElBQUEsRUFBQSxVQUFBLGNBQUEsQ0FDQSxXQUFBLENBQUEsbUJBQUEsRUFDQSxPQUFBLENBQUEsRUFBQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLENBQ0EsaUJBQUEsSUFBQSxJQUNBLENBQ0EsRUFFQSxPQUFBLENBQ0Esd0JBQ0EsRUFFQSxNQUFBLENBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLE1BQUEsRUFBQSxRQUFBLElBQUEsRUFDQSxRQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsVUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxZQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLGVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsV0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxXQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLEtBQUEsQ0FBQSxRQUFBLEtBQUEsT0FDQSxNQUFBLFFBR0EsR0FBQSxFQUFBLENBQUEsRUFDQSxFQUFBLEtBQUEsS0FBQSxLQUFBLE9BQUEsRUFDQSxHQUxBLENBT0EsbUJBQUEsQ0FBQSxFQUNBLGNBQUEsQ0FBQSxFQUNBLGVBQUEsQ0FBQSxDQUNBLEVBQ0EsRUFFQSxTQUFBLENBQ0EsaUJBQUEsQ0FFQSxNQUFBLEtBQ0EsRUFFQSx1QkFBQSxDQUlBLE1BQUEsTUFBQSxXQUFBLEtBQUEsS0FBQSxRQUFBLGVBQ0EsRUFFQSxjQUFBLENBQ0EsS0FBQSxHQUFBLEdBQUEsS0FBQSxPQUFBLE9BQUEsRUFBQSxFQUNBLFNBQUEsS0FBQSxNQUFBLE1BQ0EsRUFBQSxLQUFBLEdBQUEsRUFBQSxZQUFBLEVBRUEsTUFBQSxFQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUEsR0FBQSxLQUFBLE9BQUEsSUFBQSxDQUNBLEVBRUEsYUFBQSxTQUNBLEtBQUEsR0FBQSxTQUFBLE9BQUEsT0FBQSxjQUFBLE1BQUEsS0FBQSxLQUNBLEVBQUEsR0FBQSxLQUFBLGFBQUEsS0FBQSxLQUFBLEVBQUEsRUFDQSxFQUNBLFNBQUEsYUFBQSxjQUFBLE9BQUEsS0FDQSxNQUFBLEtBQUEsR0FFQSxLQUFBLFFBQUEsUUFBQSxDQUFBLEtBQUEsQ0FBQSxDQUFBLEVBRUEsQ0FDQSxFQUVBLFlBQUEsQ0FDQSxHQUFBLEtBQUEsS0FBQSxDQUNBLEdBQUEsR0FBQSxLQUNBLFNBQUEsS0FBQSxRQUFBLE9BQUEsS0FBQSxJQUFBLEVBQUEsQ0FDQSxLQUFBLENBQUEsY0FBQSxFQUNBLEdBQUEsRUFBQSxDQUFBLEVBQ0EsRUFBQSxLQUFBLEtBQUEsS0FBQSxPQUFBLEVBQ0EsRUFFQSxNQUFBLEdBRUEsQUFBQSxHQUNBLEdBQUEsRUFFQSxDQUNBLE1BQUEsRUFDQSxDQUNBLEVBRUEsV0FBQSxPQUNBLE1BQUEsUUFBQSxTQUFBLGNBQUEsU0FDQSxFQUVBLGVBQUEsQ0FDQSxNQUFBLE1BQUEsWUFBQSxDQUFBLE9BQUEsU0FBQSxXQUFBLEdBQUEsQ0FDQSxFQUVBLGVBQUEsQ0FDQSxNQUFBLElBQ0EsUUFBQSxLQUFBLE9BQUEsTUFDQSxLQUFBLFlBQUEsQ0FBQSxPQUFBLFlBQUEsV0FBQSxHQUFBLEVBRUEsRUFRQSxNQUFBLENBQ0EsTUFBQSxNQUFBLElBQ0EsRUFFQSxVQUFBLENBQ0EsTUFBQSxNQUFBLFFBQ0EsRUFFQSxlQUFBLENBQ0EsTUFBQSxNQUFBLGFBQ0EsRUFFQSxlQUFBLENBQ0EsTUFBQSxNQUFBLGFBQ0EsRUFFQSxZQUFBLENBQ0EsTUFBQSxJQUFBLEtBQUEsU0FBQSxLQUFBLFNBQUEsRUFBQSxDQUNBLEVBRUEsV0FBQSxDQUNBLE1BQUEsTUFBQSxTQUNBLEtBQUEsa0JBQUEsS0FBQSxhQUFBLEtBQUEsS0FBQSxLQUFBLE9BQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsTUFBQSxjQUFBLEdBQUEsRUFBQSxPQUFBLENBQ0EsRUFFQSxXQUFBLENBQ0EsTUFBQSxNQUFBLGNBQUEsR0FBQSxFQUFBLFNBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLE1BQUEsZUFBQSxHQUFBLEVBQUEsT0FBQSxDQUNBLEVBRUEsYUFBQSxDQUNBLE1BQUEsTUFBQSxlQUFBLEdBQUEsRUFBQSxXQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsTUFBQSxDQUFBLENBQUEsS0FBQSxJQUNBLEVBRUEsVUFBQSxDQUNBLE1BQUEsQ0FBQSxDQUFBLEtBQUEsT0FBQSxLQUFBLFdBQ0EsRUFFQSxTQUFBLENBQ0EsTUFBQSxDQUFBLEtBQUEsU0FBQSxDQUFBLENBQUEsS0FBQSxJQUNBLEVBRUEsYUFBQSxDQUNBLEtBQUEsQ0FBQSxjQUFBLEtBQUEsT0FDQSxNQUFBLENBQUEsQ0FBQSxHQUFBLE9BQUEsS0FBQSxDQUFBLEVBQUEsT0FBQSxDQUNBLEVBRUEsT0FBQSxHQUFBLFNBQUEsQ0FDQSxTQUFBLENBQ0EsTUFBQSxDQUFBLEtBQUEsU0FDQSxDQUNBLENBQUEsRUFFQSxZQUFBLENBQ0EsTUFBQSxRQUFBLE9BQUEsS0FBQSxrQkFBQSxDQUNBLEVBRUEsT0FBQSxDQUNBLE1BQUEsUUFBQSxPQUFBLEtBQUEsYUFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLE1BQUEsUUFBQSxPQUFBLEtBQUEsY0FBQSxDQUNBLEVBRUEsc0JBQUEsQ0FDQSxNQUFBLE1BQUEsdUJBQUEsS0FBQSxrQkFBQSxDQUNBLEVBRUEsaUJBQUEsQ0FDQSxNQUFBLE1BQUEsdUJBQUEsS0FBQSxhQUFBLENBQ0EsRUFFQSxrQkFBQSxDQUNBLE1BQUEsTUFBQSx1QkFBQSxLQUFBLGNBQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsVUFBQSxFQUFBLEVBQ0EsS0FBQSxrQkFBQSxFQUVBLEtBQUEsU0FBQSxTQUFBLEtBQUEscUJBQUEsRUFDQSxLQUFBLFVBQUEsWUFBQSxDQUNBLEVBRUEsZUFBQSxDQUNBLEtBQUEsVUFBQSxTQUFBLEVBQ0EsS0FBQSxVQUFBLEVBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSx3QkFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsc0JBQ0EsS0FBQSxxQkFBQSxFQUFBLENBQ0EsQ0FDQSxFQUVBLHVCQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSx3QkFBQSxFQUFBLENBQUEsRUFBQSxJQUFBLElBQ0EsRUFFQSxvQkFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsa0JBQUEsS0FBQSxxQkFBQSxFQUFBLENBQUEsQ0FDQSxFQUVBLG1CQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxvQkFBQSxFQUFBLENBQUEsRUFBQSxJQUFBLElBQ0EsRUFFQSxjQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxZQUFBLEtBQUEscUJBQUEsRUFBQSxDQUFBLENBQ0EsRUFFQSxhQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxjQUFBLEVBQUEsQ0FBQSxFQUFBLElBQUEsSUFDQSxFQUVBLG9CQUFBLEVBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxzQkFBQSxLQUFBLGlCQUFBLEVBQUEsQ0FBQSxDQUNBLEVBRUEsbUJBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLG9CQUFBLEVBQUEsQ0FBQSxFQUFBLElBQUEsSUFDQSxFQUVBLFVBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLFlBQUEsS0FBQSxpQkFBQSxFQUFBLENBQUEsQ0FDQSxFQUVBLFNBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLFVBQUEsRUFBQSxDQUFBLEVBQUEsSUFBQSxJQUNBLEVBRUEsY0FBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLGFBQUEsS0FBQSxXQUFBLEtBQUEsQ0FBQSxDQUNBLEVBRUEsZUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLGFBQUEsS0FBQSxXQUFBLE1BQUEsQ0FBQSxDQUNBLEVBRUEsU0FBQSxFQUFBLENBQ0EsS0FBQSxVQUFBLFNBQUEsQ0FFQSxRQUFBLENBQUEsUUFBQSxDQUNBLENBQUEsRUFRQSxFQUFBLEtBQUEsUUFBQSxHQUFBLEtBQUEsWUFBQSxJQUNBLE1BQUEsT0FBQSxFQUVBLEVBRUEsVUFBQSxDQUNBLEtBQUEsVUFBQSxRQUFBLENBQ0EsRUFFQSxpQkFBQSxDQUNBLFNBQUEsS0FBQSxNQUFBLFdBQ0EsRUFBQSxnQkFBQSxDQUVBLEVBRUEsYUFBQSxDQUNBLFNBQUEsS0FBQSxNQUFBLFdBQ0EsRUFBQSxZQUFBLENBRUEsRUFFQSxPQUFBLE9BQ0EsUUFBQSx3QkFBQSxRQUFBLFFBQ0EsS0FBQSxPQUFBLEVBQ0EsRUFFQSxZQUFBLEVBQUEsRUFBQSxHQUFBLENBQ0EsS0FBQSxDQUFBLHdCQUFBLEtBQ0EsR0FBQSxHQUNBLEdBQUEsRUFBQSxDQUNBLEtBQUEsR0FBQSxFQUFBLENBQUEsRUFDQSxFQUNBLEdBQUEsQ0FBQSxFQUNBLEdBQUEsRUFBQSxLQUFBLENBQUEsRUFDQSxLQUNBLEVBQUEsRUFDQSxPQUFBLEtBQUEsQ0FBQSxFQUFBLE9BQUEsQ0FBQSxFQUNBLEVBQUEsQ0FBQSxFQUNBLEVBQ0EsQ0FBQSxDQUFBLENBQ0EsQ0FDQSxBQUFBLEdBQ0EsS0FBQSxZQUFBLEVBRUEsR0FBQSxHQUFBLEdBQ0EsRUFBQSxHQUNBLE1BQUEsT0FBQSxLQUFBLENBQUEsR0FDQSxTQUFBLEtBQUEsR0FBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLHdCQUFBLENBQUEsRUFDQSxTQUFBLEtBQUEsR0FDQSxBQUFBLEVBQUEsU0FBQSxDQUFBLEdBRUEsSUFBQSxHQUNBLEVBQUEsTUFBQSxFQUVBLEVBQUEsR0FDQSxFQUFBLEdBR0EsQ0FDQSxNQUFBLElBQUEsQ0FBQSxHQUNBLEtBQUEsYUFBQSxFQUVBLENBQ0EsRUFFQSxVQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsWUFBQSxFQUFBLEVBQUEsQ0FDQSxPQUVBLHNCQUFBLEVBQUEsRUFBQSxPQUNBLEtBQUEsWUFBQSxFQUNBLEdBQUEsR0FBQSxHQUNBLEtBQUEsR0FBQSxDQUFBLEVBQ0EsU0FBQSxDQUFBLEVBQUEsSUFBQSxRQUFBLFFBQUEsQ0FBQSxFQUFBLENBR0EsS0FBQSxHQUFBLEtBQUEsV0FDQSxFQUFBLEtBQUEsU0FBQSxDQUFBLEVBQ0EsRUFJQSxFQUFBLEVBQUEsQ0FBQSxFQUNBLEdBQUEsR0FBQSxHQUNBLEtBQUEsR0FBQSxLQUFBLHdCQUFBLENBQUEsRUFDQSxTQUFBLEtBQUEsR0FDQSxBQUFBLEVBQUEscUJBQUEsRUFBQSxHQUFBLENBQUEsR0FDQSxHQUFBLEdBQ0EsRUFBQSxJQUdBLEdBQUEsQ0FBQSxFQUFBLENBSUEsS0FBQSxHQUFBLEVBQUEsSUFBQSxFQUNBLEtBQUEsRUFBQSxPQUFBLEdBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSx3QkFBQSxDQUFBLEVBQ0EsU0FBQSxLQUFBLEdBQ0EsR0FBQSxLQUFBLE1BQUEsc0JBQUEscUJBQ0EsRUFDQSxHQUFBLENBQ0EsR0FBQSxHQUFBLEdBQ0EsU0FBQSxLQUFBLEdBQUEsQ0FDQSxLQUFBLEdBQUEsRUFBQSxFQUFBLFVBQ0EsQUFDQSxHQUNBLEVBQUEscUJBQUEsRUFBQSxHQUFBLENBQUEsR0FFQSxHQUFBLEdBQ0EsRUFBQSxHQUVBLENBQ0EsTUFBQSxFQUNBLElBTUEsT0FJQSxFQUFBLElBQUEsQ0FDQSxDQUdBLEtBQUEsR0FBQSxFQUFBLENBQUEsRUFDQSxTQUFBLEtBQUEsR0FBQSxDQUNBLEtBQUEsR0FBQSxFQUNBLGFBQUEsSUFDQSxPQUFBLEtBQUEsWUFDQSxFQUFBLEtBQUEsR0FBQSxLQUFBLEVBQUEsU0FBQSxDQUNBLENBQ0EsQ0FDQSxFQUFBLEVBQ0EsQ0FDQSxBQUFBLEdBQ0EsS0FBQSxhQUFBLEVBQUEsS0FBQTtBQUFBLENBQUEsQ0FBQSxDQUVBLEVBRUEsYUFBQSxFQUFBLENBQ0EsS0FBQSxPQUFBLENBQ0EsS0FBQSxRQUNBLE1BQUEsb0JBQ0EsS0FBQSxHQUFBLHdDQUNBLENBQUEsQ0FDQSxFQUVBLFdBQUEsQ0FJQSxPQUFBLE9BQUEsS0FBQSxLQUFBLEdBQUEsS0FBQSxPQUFBLEdBQUEsSUFBQSxDQUFBLEVBQ0EsS0FBQSxZQUFBLENBQ0EsRUFFQSxRQUFBLEVBQUEsQ0FDQSxTQUFBLEtBQUEsR0FDQSxHQUFBLElBQUEsTUFBQSxLQUFBLENBQ0EsS0FBQSxLQUFBLEtBQUEsS0FBQSxFQUFBLEVBQUEsRUFBQSxFQUNBLFNBQUEsS0FBQSxNQUFBLG9CQUFBLENBQUEsRUFDQSxFQUFBLFVBQUEsQ0FFQSxDQUVBLEVBRUEsV0FBQSxFQUFBLENBSUEsS0FBQSxHQUFBLENBQUEsRUFDQSxTQUFBLENBQUEsRUFBQSxJQUFBLFFBQUEsUUFBQSxDQUFBLEVBQ0EsQUFBQSxHQUFBLENBQUEsR0FBQSxFQUFBLENBQUEsSUFFQSxBQURBLEtBQUEsb0JBQUEsQ0FBQSxFQUNBLEtBQUEsR0FBQSxFQUFBLFlBQUEsR0FJQSxHQUFBLEdBQUEsR0FFQSxNQUFBLEVBQ0EsRUFFQSxZQUFBLENBQUEsU0FBQSxZQUFBLGFBQUEsSUFBQSxHQUFBLENBQ0EsTUFBQSxJQUNBLEtBQUEsT0FDQSxLQUFBLGFBQ0EsS0FBQSxLQUNBLEtBQUEsU0FBQSxDQUdBLFVBQUEsS0FDQSxhQUNBLFFBQ0EsQ0FDQSxDQUNBLEVBRUEsVUFBQSxFQUFBLE9BR0EsUUFBQSx1QkFBQSxJQUFBLFFBQUEseUJBQUEsS0FBQSxFQUNBLEVBRUEsbUJBQUEsRUFBQSxFQUFBLE9BQ0EsS0FBQSxlQUFBLEtBQUEsbUJBQUEsRUFBQSxDQUFBLEVBRUEsUUFBQSx3QkFBQSxRQUFBLG1CQUFBLEVBQUEsRUFDQSxFQUVBLGNBQUEsRUFBQSxFQUFBLENBQ0EsS0FBQSxlQUFBLEtBQUEsY0FBQSxFQUFBLENBQUEsQ0FDQSxFQUVBLGVBQUEsRUFBQSxFQUFBLENBQ0EsS0FBQSxlQUFBLEtBQUEsZUFBQSxFQUFBLENBQUEsQ0FDQSxFQUVBLGVBQUEsRUFBQSxFQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsRUFBQSxLQUNBLEFBQUEsRUFDQSxLQUFBLEtBQUEsRUFBQSxFQUFBLENBQUEsRUFFQSxLQUFBLFFBQUEsRUFBQSxDQUFBLENBRUEsRUFFQSx1QkFBQSxFQUFBLENBQ0EsTUFBQSxRQUFBLE9BQUEsQ0FBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLElBQUEsQ0FHQSxLQUFBLENBQUEsWUFBQSxFQUVBLE1BREEsYUFBQSxDQUFBLElBQ0EsS0FBQSxDQUFBLEVBQ0EsQ0FDQSxFQUFBLEVBQUEsQ0FDQSxFQUVBLFlBQUEsRUFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLEdBQUEsQ0FBQSxFQUFBLFdBQUEsS0FBQSxRQUFBLEVBQ0EsS0FBQSxzQkFBQSxFQUFBLEVBQUEsQ0FBQSxFQUNBLEtBQUEsa0JBQUEsRUFBQSxFQUFBLENBQUEsQ0FDQSxFQUVBLHNCQUFBLEVBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLGVBQ0EsRUFBQSxFQUFBLENBQUEsSUFBQSxDQUFBLEVBQ0EsQ0FDQSxDQUNBLEVBRUEsa0JBQUEsRUFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsZUFDQSxFQUFBLEVBQUEsS0FBQSxTQUFBLENBQUEsSUFBQSxDQUFBLEVBQ0EsQ0FDQSxDQUNBLEVBRUEsZUFBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLEdBQUEsRUFBQSxPQUFBLENBQUEsRUFBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQ2h0QklGLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLGNBQWMsQ0FBQyxZQUFZLHNCQUFzQixNQUFNLENBQUUsc0JBQXVCLEVBQUksU0FBUyxFQUFHLE1BQU0sQ0FBQyxPQUFTLEVBQUksT0FBTyxTQUFXLEVBQUksU0FBUyxLQUFPLEVBQUksS0FBSyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksTUFBTSxNQUFRLEVBQUksVUFBWSxLQUFPLEVBQUksTUFBTSxRQUFVLEdBQUssU0FBVyxFQUFJLFNBQVMsVUFBWSxFQUFJLFVBQVUsWUFBYyxFQUFJLFdBQVcsRUFBRSxZQUFZLEVBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxlQUFlLEdBQUcsVUFBVSxDQUFDLE1BQU8sQ0FBRSxFQUFJLFdBQWEsRUFBSSxXQUFhLEVBQUksU0FBVSxFQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxVQUFZLEVBQUksVUFBVSxVQUFZLEVBQUksVUFBVSxTQUFXLEVBQUksU0FBUyxTQUFXLEVBQUksU0FBUyxPQUFTLEVBQUksT0FBTyxTQUFXLEVBQUksU0FBUyxLQUFPLEVBQUksS0FBSyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksS0FBSyxFQUFFLEdBQUcsQ0FBQyxPQUFTLFNBQVMsRUFBTyxDQUFDLE1BQU8sR0FBSSxNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBSSxDQUFBLENBQUMsRUFBRSxNQUFNLEVBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3IxQkMsR0FBa0IsQ0FBQSxRQ3VEdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsc0JBQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxNQUFBLEVBQUEsUUFBQSxJQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxTQUFBLEVBQUEsRUFDQSxVQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFlBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsVUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxXQUFBLENBQ0EsTUFBQSxJQUFBLEtBQUEsTUFBQSxDQUNBLEVBRUEsVUFBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLFdBQUEsQ0FBQSxDQUFBLEtBQUEsS0FDQSxDQUNBLENBQ0EsQ0FBQSxvSUNsRklGLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBUSxHQUFJLGFBQWUsRUFBSSxpQkFBaUIsT0FBUyxFQUFHLEVBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssT0FBTyxRQUFRLFNBQVMsTUFBTyxFQUFJLFFBQVMsV0FBVyxTQUFTLENBQUMsRUFBRSxZQUFZLFdBQVcsRUFBRSxDQUFDLEVBQUksR0FBSSxFQUFJLGlCQUFrQixTQUFTLEVBQUksQ0FDclQsR0FBSSxHQUFTLEVBQUksT0FDYixFQUFXLEVBQUksU0FDZixFQUFpQixFQUFJLGVBQ3JCLEVBQVMsRUFBSSxPQUNiLEVBQVEsRUFBSSxNQUNwQixNQUFPLENBQUUsRUFBTyxRQUFVLFNBQVUsRUFBRyxNQUFNLENBQUMsWUFBWSxZQUFZLENBQUMsRUFBRSxFQUFJLEdBQUUsRUFBSSxFQUFJLGFBQWEsQ0FBTSxFQUFHLEVBQUcsaUJBQWlCLENBQUMsSUFBSSxFQUFlLE1BQU0sQ0FBQyxPQUFTLEVBQU8sU0FBVyxFQUFTLEtBQU8sRUFBSSxLQUFLLEtBQU8sRUFBSSxLQUFLLE1BQVEsRUFBTSxPQUFTLEVBQUksa0JBQWtCLE9BQVMsRUFBTyxTQUFXLEVBQUksU0FBUyxlQUFpQixFQUFJLGNBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFFLEVBQUksRUFBTyxRQUFVLFFBQVMsRUFBRyxNQUFNLENBQUMsWUFBWSxZQUFZLENBQUMsRUFBRSxFQUFJLEdBQUksQ0FBQSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFJLElBQUksRUFDemJDLEdBQWtCLENBQUEsUUNrRXRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLFlBQUEsQ0FDQSxTQUFBLENBQ0EsTUFBQSxDQUNBLGNBQUEsSUFBQSxLQUFBLFlBQ0EsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxPQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsSUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFDQSxPQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFFBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxlQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLGNBQUEsQ0FDQSxNQUFBLE1BQUEsSUFBQSxLQUFBLEtBQUEsY0FBQSxDQUNBLEVBRUEsa0JBQUEsU0FRQSxLQUFBLEdBQUEsUUFBQSxlQUFBLGNBQUEsZUFDQSxNQUFBLFFBQUEsUUFBQSxTQUFBLFNBQUEsY0FBQSxhQUFBLENBQUEsQ0FBQSxFQUFBLElBQ0EsQ0FBQSxDQUFBLEVBQUEsS0FBQSxDQUVBLEVBQUEsS0FBQSxFQUVBLEtBQUEsR0FBQSxHQUFBLENBQUEsRUFDQSxFQUFBLEVBQUEsS0FBQSxTQUFBLENBQUEsRUFDQSxNQUFBLENBQ0EsU0FDQSxTQUFBLEdBQUEsQ0FBQSxFQUNBLEVBQ0EsS0FBQSxTQUNBLGlCQUNBLFNBQ0EsTUFBQSxFQUFBLEtBQUEsY0FBQSxDQUFBLEVBQUEsS0FBQSxLQUNBLENBQ0EsQ0FDQSxDQUNBLEVBRUEsY0FBQSxDQUdBLE1BQUEsTUFBQSxpQkFBQSxRQUNBLENBQUEsQ0FBQSxTQUFBLGVBQUEsS0FBQSxHQUNBLEVBQ0EsRUFDQSxLQUFBLGdCQUNBLEtBQUEsWUFDQSxDQUNBLENBQ0EsRUFFQSxtQkFBQSxDQUNBLE1BQUEsTUFBQSxRQUFBLEtBQUEsaUJBQUEsU0FBQSxDQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxVQUFBLEVBQUEsQ0FDQSxFQUVBLGVBQUEsQ0FDQSxLQUFBLFVBQUEsRUFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFVBQUEsRUFBQSxDQUNBLEtBQUEsZ0JBQUEsY0FBQSxLQUFBLENBQUEsQ0FDQSxFQUVBLE9BQUEsQ0FDQSxBQUFBLEtBQUEsS0FDQSxLQUFBLFFBQUEsS0FBQSxDQUFBLEtBQUEsS0FBQSxJQUFBLENBRUEsQ0FDQSxDQUNBLENBQUEsb0lDbEtPLFlBQXVCLEVBQU8sQ0FDbkMsS0FBTSxHQUNKLEVBQVMsQ0FBSyxHQUNkLEVBQU0sTUFBTSxzQ0FBc0MsRUFFcEQsR0FBSSxFQUFPLENBQ1QsS0FBTSxDQUFHLENBQUEsRUFBVSxHQUFXLEVBQzlCLE1BQU8sWUFBVyxDQUFRLEVBQUksV0FBVyxDQUFPLENBQ3BELEtBQ0ksT0FBTyxZQUFXLENBQUssQ0FFM0IsQ0NiQSxHQUFJRixJQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxPQUFPLFFBQVEsU0FBUyxNQUFPLEVBQUksaUJBQWtCLFdBQVcsa0JBQWtCLENBQUMsRUFBRSxZQUFZLGlCQUFpQixNQUFNLEVBQUksZUFBZSxNQUFPLEVBQUksY0FBZSxFQUFFLENBQUUsRUFBSSxNQUFPLEVBQUcsYUFBYSxDQUFDLE1BQU0sRUFBSSxlQUFlLE1BQU0sQ0FBQyxNQUFRLEVBQUksTUFBTSxTQUFXLEVBQUksYUFBYSxDQUFDLENBQUMsRUFBRSxFQUFJLEtBQUssRUFBRyxFQUFJLGlCQUFpQixFQUFJLE9BQU8sSUFBSSxFQUFFLENBQUMsSUFBSSxZQUFZLFlBQVksaUJBQWlCLE1BQU0sRUFBSSxlQUFlLE1BQU0sQ0FBQyxPQUFTLEVBQUksT0FBTyxTQUFXLEVBQUksU0FBUyxLQUFPLEVBQUksS0FBSyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksTUFBTSxPQUFTLEVBQUksT0FBTyxPQUFTLEVBQUksT0FBTyxTQUFXLEVBQUksaUJBQWlCLEVBQUUsR0FBRyxDQUFDLE9BQVMsRUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFTLEVBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUN2d0JDLEdBQWtCLENBQUEsUUNvRXRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLGlCQUFBLENBQ0EsTUFBQSxDQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsS0FBQSxFQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxPQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLE9BQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxTQUFBLEVBQUEsRUFDQSxlQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxPQUFBLElBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxTQUFBLENBQ0EsTUFBQSxJQUFBLEdBQUEsS0FBQSxDQUFBLE9BQUEsS0FBQSxPQUFBLENBQ0EsRUFFQSxhQUFBLENBQ0EsTUFBQSxHQUFBLEtBQUEsTUFBQSxHQUFBLENBQUEsQ0FDQSxFQUVBLFVBQUEsQ0FDQSxLQUFBLENBQUEsVUFBQSxLQUNBLENBQUEsU0FBQSxFQUNBLE1BQ0EsS0FBQSxJQUNBLEVBQUEsQ0FBQSxHQUFBLEtBQUEsWUFBQSxlQUFBLEtBQUEsZUFFQSxFQUVBLE9BQUEsQ0FDQSxNQUFBLE1BQUEsU0FBQSxLQUFBLFNBQUEsS0FBQSxNQUFBLEVBQUEsSUFDQSxFQUVBLGVBQUEsQ0FFQSxNQUFBLE1BQUEsT0FBQSxLQUFBLFNBQUEsSUFDQSxFQUVBLGVBQUEsRUFBQSxRQUFBLENBQ0EsS0FBQSxDQUFBLE9BQUEsTUFBQSxFQUNBLFNBQUEsQ0FDQSxNQUFBLE1BQUEsWUFBQSxZQUNBLEVBQ0EsSUFBQSxFQUFBLENBRUEsTUFBQSxLQUFBLE9BQ0EsRUFDQSxFQUFBLENBQUEsRUFDQSxFQUFBLE1BQUEsbUJBQUEsRUFBQSxHQUNBLENBQ0EsQ0FDQSxDQUFBLEVBRUEsdUJBQUEsRUFBQSxRQUFBLENBQ0EsS0FBQSxPQUNBLElBQUEsRUFBQSxDQUNBLE1BQUEsR0FBQSxDQUFBLEdBQ0EsRUFBQSxNQUFBLGFBQUEsRUFBQSxJQUFBLElBRUEsQ0FDQSxDQUFBLEVBRUEsaUJBQUEsRUFBQSxVQUFBLENBQ0EsS0FBQSxRQUNBLFNBQUEsQ0FDQSxNQUFBLE1BQUEsWUFBQSxjQUNBLENBQ0EsQ0FBQSxFQUVBLGtCQUFBLEVBQUEsV0FBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEdBQ0EsSUFBQSxFQUFBLENBQ0EsTUFBQSxJQUFBLEtBQUEsUUFDQSxDQUNBLENBQUEsRUFFQSxnQkFBQSxDQUNBLEtBQUEsQ0FBQSxNQUFBLEdBQUEsS0FBQSxPQUNBLE1BQUEsSUFDQSxjQUFBLEtBQUEsT0FDQSxvQkFBQSxHQUFBLEtBQUEsTUFBQSxHQUVBLEVBQUEsQ0FBQSxFQUNBLEVBQUEsR0FBQSxFQUFBLEVBQ0EsRUFHQSxFQUVBLGdCQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsZUFFQSxFQUNBLENBQUEsS0FBQSxPQUFBLE1BQUEsRUFBQSxTQUFBLENBQUEsRUFBQSxPQUNBLEtBQUEsS0FBQSxDQUFBLEVBQUEsV0FBQSxDQUFBLEVBQ0EsUUFBQSxLQUFBLENBQUEsRUFBQSxFQUNBLEdBQUEsQ0FBQSxFQUFBLElBRUEsTUFBQSxJQUFBLENBQUEsRUFBQSxHQUFBLEtBQUEsQ0FDQSxFQUVBLGdCQUFBLENBRUEsS0FBQSxHQUNBLEtBQUEseUJBQUEsS0FDQSxLQUFBLGlCQUFBLE9BR0EsRUFBQSxLQUFBLHlCQUFBLElBQ0EsTUFBQSxDQUNBLEtBQUEsR0FBQSxF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LFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxTQUFBLEVBQUEsRUFDQSxrQkFBQSxDQUFBLEtBQUEsRUFBQSxRQUFBLElBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsUUFBQSxJQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsZ0JBQUEsQ0FDQSxNQUFBLEtBQ0EsRUFFQSxjQUFBLENBQ0EsTUFBQSxNQUFBLGlCQUNBLEVBRUEsZUFBQSxDQUNBLE1BQUEsSUFBQSxLQUFBLE9BQUEsT0FBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLE1BQUEsTUFBQSxPQUFBLFFBQUEsS0FBQSxRQUNBLEVBRUEsWUFBQSxDQUNBLE1BQUEsQ0FBQSxDQUFBLEtBQUEsT0FDQSxFQUVBLFdBQUEsQ0FDQSxNQUFBLE1BQUEsU0FBQSxLQUFBLElBQ0EsRUFFQSxhQUFBLENBQ0EsR0FBQSxLQUFBLFdBQ0EsTUFBQSxNQUFBLE9BQ0EsQ0FHQSxLQUFBLFFBQUEsT0FBQSxTQUFBLEVBQ0EsTUFEQSxHQUFBLEVBQUEsQ0FBQSxRQUVBLENBQ0EsRUFFQSxVQUFBLENBRUEsTUFBQSxNQUFBLFdBQUEsT0FBQSxLQUNBLEVBRUEsZUFBQSxDQUlBLE1BQUEsTUFBQSxXQUFBLEtBQUEsU0FBQSxLQUFBLGdCQUFBLFFBQ0EsRUFFQSxRQUFBLEVBQUEsVUFBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEVBQ0EsQ0FBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsVUFBQSxFQUFBLEVBR0EsS0FBQSxDQUFBLFFBQUEsS0FBQSxPQUNBLEFBQUEsR0FDQSxNQUFBLFFBQUEsRUFBQSxDQUFBLEVBQ0EsRUFBQSxLQUFBLEtBQUEsS0FBQSxPQUFBLEVBQ0EsRUFFQSxFQUVBLGVBQUEsQ0FDQSxLQUFBLFVBQUEsRUFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFVBQUEsRUFBQSxDQUdBLEtBQUEsZ0JBQUEsZUFBQSxLQUFBLENBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxvSUMvS0lGLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBUSxHQUFJLE9BQU8sT0FBUyxFQUFHLEVBQUcsTUFBTSxDQUFDLFlBQVksYUFBYSxFQUFFLEVBQUksR0FBSSxFQUFJLE9BQVEsU0FBUyxFQUFJLENBQzlMLEdBQUksR0FBUyxFQUFJLE9BQ2IsRUFBVyxFQUFJLFNBQ2YsRUFBZSxFQUFJLGFBQ3ZCLE1BQVEsR0FBSSxhQUFhLENBQU0sRUFBRyxFQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUksWUFBWSxFQUFVLENBQVksRUFBRSxNQUFNLENBQUMsT0FBUyxFQUFPLFNBQVcsRUFBUyxLQUFPLEVBQUksS0FBSyxLQUFPLEVBQUksS0FBSyxNQUFRLEVBQUksY0FBYyxFQUFPLElBQUksRUFBRSxTQUFXLEVBQU8sVUFBWSxLQUFPLEVBQU8sU0FBVyxFQUFJLFNBQVMsa0JBQW9CLENBQVksQ0FBQyxDQUFDLEVBQUUsRUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBSSxHQUFFLENBQUUsRUFDM1VDLEdBQWtCLENBQUEsUUN1QnRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLGNBQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxDQUFBLEtBQUEsTUFBQSxRQUFBLElBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFNBQUEsRUFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFlBQUEsRUFBQSxFQUFBLENBR0EsTUFBQSxHQUFBLEdBQUEsRUFBQSxPQUFBLElBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxvSUM1Q0lGLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBUSxHQUFJLGVBQWlCLEVBQUksT0FBTyxRQUFTLEVBQUcsTUFBTSxFQUFJLEdBQUcsQ0FBQyxZQUFZLGNBQWMsRUFBRSxFQUFJLFVBQVUsRUFBRSxDQUFDLEVBQUksR0FBSSxFQUFJLGNBQWUsU0FBUyxFQUFhLEVBQWUsQ0FBQyxNQUFRLEdBQUksYUFBYSxDQUFZLEVBQUcsRUFBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQWUsTUFBTSxDQUFDLE9BQVMsRUFBYSxTQUFXLEVBQWUsS0FBTyxFQUFJLEtBQUssS0FBTyxFQUFJLEtBQUssTUFBUSxFQUFJLGNBQWMsRUFBYSxJQUFJLEVBQUUsU0FBVyxFQUFJLFNBQVMsZUFBaUIsRUFBSyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUUsQ0FBRSxDQUFDLEVBQUUsRUFBSSxHQUFJLEVBQUksT0FBTyxRQUFTLFNBQVMsRUFBSyxDQUFDLE1BQVEsR0FBSyxJQUFLLEVBQUcsTUFBTSxDQUFDLFlBQVksZ0JBQWdCLEVBQUUsQ0FBQyxFQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBTyxDQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBSSxHQUFFLENBQUUsRUFDOXJCQyxHQUFrQixDQUFBLFFDcUN0QixLQUFBQyxJQUFBLEVBQUEsVUFBQSxlQUFBLENBQ0EsUUFBQSxDQUNBLGNBQUEsSUFBQSxJQUNBLEVBRUEsTUFBQSxDQUNBLFFBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsS0FBQSxFQUFBLFFBQUEsSUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsZUFB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SSxHQUFHLEVBQUksR0FBRyxFQUFJLFNBQVMsQ0FBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFFLENBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFHLFNBQVMsQ0FBQyxZQUFZLGNBQWMsTUFBTyxlQUFpQixFQUFJLEtBQU0sTUFBTSxDQUFDLEtBQU8sRUFBSSxVQUFZLFNBQVcsU0FBUyxNQUFRLEVBQUksU0FBUyxFQUFJLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFRLFNBQVMsRUFBTyxDQUFDLE1BQU8sR0FBSSxXQUFXLEVBQUksTUFBTSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFJLEdBQUcsRUFBSSxHQUFHLEVBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3BqQ0MsR0FBa0IsQ0FBQSxRQ3dDdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEscUJBQUEsQ0FDQSxPQUFBLENBQUEsRUFBQSxFQUVBLE1BQUEsQ0FDQSxPQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE9BQUEsQ0FDQSxNQUFBLEdBQUEsS0FBQSxPQUFBLEtBQUEsT0FBQSxDQUNBLEVBRUEsV0FBQSxDQUNBLE1BQUEsSUFBQSxLQUFBLE1BQUEsQ0FDQSxFQUVBLGNBQUEsQ0FDQSxNQUFBLFFBQUEsS0FBQSxLQUFBLEtBQUEsRUFBQSxPQUFBLEdBQUEsQ0FBQSxLQUFBLE1BQUEsT0FDQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFlBQUEsRUFBQSxDQUVBLE1BQUEsR0FBQSxZQUFBLEVBQ0EsRUFFQSxXQUFBLEVBQUEsRUFBQSxLQUFBLENBQ0EsR0FBQSxLQUFBLFlBQUEsQ0FBQSxFQUNBLEFBQUEsS0FBQSxVQUNBLEtBQUEsZ0JBQUEsV0FBQSxFQUFBLENBQUEsRUFFQSxLQUFBLFFBQUEsS0FBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLGNBQ0EsTUFBQSxDQUFBLE1BQUEsRUFDQSxPQUFBLEVBQ0EsQ0FBQSxNQUdBLE1BQUEsSUFBQSxPQUFBLDJDQUFBLENBRUEsRUFFQSxpQkFBQSxFQUFBLENBQ0EsS0FBQSxXQUFBLEtBQUEsTUFBQSxHQUFBLENBQUEsRUFDQSxLQUFBLGdCQUFBLEVBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxvSUM1RklGLEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBUSxHQUFJLFVBQVcsRUFBRyxNQUFNLENBQUMsWUFBWSxnREFBZ0QsRUFBRSxDQUFDLEVBQUcsU0FBUyxDQUFDLElBQUksV0FBVyxZQUFZLCtCQUErQixNQUFNLENBQUMsS0FBTyxTQUFTLE1BQVEsWUFBWSxTQUFXLENBQUMsRUFBSSxXQUFXLEVBQUUsR0FBRyxDQUFDLE1BQVEsRUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUcsU0FBUyxDQUFDLFlBQVksZ0NBQWdDLE1BQU0sQ0FBQyxLQUFPLFNBQVMsTUFBUSxhQUFhLFNBQVcsQ0FBQyxFQUFJLFlBQVksRUFBRSxHQUFHLENBQUMsTUFBUSxFQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUksSUFBSSxFQUN0Z0JDLEdBQWtCLENBQUEsRUN5QnRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLGlCQUFBLENBQ0EsT0FBQSxDQUFBLEVBQUEsRUFFQSxNQUFBLENBQ0EsVUFBQSxDQUFBLEtBQUEsQ0FBQSxRQUFBLE1BQUEsRUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxLQUFBLEVBQUEsUUFBQSxJQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLFlBQUEsR0FDQSxhQUFBLEdBQ0EsYUFBQSxFQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0Esa0JBQUEsQ0FDQSxNQUFBLEdBQUEsS0FBQSxTQUFBLEVBQUEsS0FBQSxVQUFBLENBQUEsQ0FDQSxFQUVBLFVBQUEsQ0FDQSxLQUFBLENBQUEsUUFBQSxLQUFBLGlCQUNBLE1BQUEsR0FDQSxHQUFBLEVBQUEsS0FBQSxLQUFBLEdBQUEsR0FBQSxLQUFBLENBQ0EsZUFDQSxDQUFBLENBQUEsRUFDQSxHQUFBLEdBQUEsQ0FBQSxDQUNBLEVBRUEsV0FBQSxDQUNBLEtBQUEsQ0FBQSxTQUFBLEtBQUEsaUJBQ0EsTUFBQSxHQUNBLEdBQUEsRUFBQSxLQUFBLEtBQUEsR0FBQSxHQUFBLEtBQUEsQ0FDQSxlQUNBLENBQUEsQ0FBQSxFQUNBLEdBQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUdBLEtBQUEsTUFBQSxTQUFBLENBQ0EsS0FBQSxLQUFBLGNBQ0EsQ0FBQSxFQUNBLEtBQUEsTUFBQSxPQUFBLENBQ0EsTUFBQSxLQUFBLGNBQ0EsQ0FBQSxFQUNBLEtBQUEsT0FBQSxPQUFBLENBRUEsVUFBQSxHQUNBLFFBQUEsQ0FBQSxFQUFBLElBQUEsQ0FDQSxBQUFBLElBQUEsR0FDQSxLQUFBLGVBQUEsQ0FFQSxDQUNBLENBQUEsQ0FDQSxFQUVBLFFBQUEsTUFDQSxrQkFBQSxFQUFBLGVBRUEsR0FBQSxDQUFBLGlCQUFBLEtBQUEsU0FDQSxHQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsaUJBQUEsWUFBQSxjQUFBLFdBQUEsdUJBQ0EsQUFBQSxLQUFBLGNBQUEsR0FHQSxNQUFBLGlCQUFBLFlBQUEsY0FBQSxZQUFBLHFCQUFBLElBQ0EsS0FBQSxhQUFBLElBRUEsR0FDQSxHQUFBLEtBQUEsTUFBQSxDQUFBLEVBRUEsT0FBQSxFQUFBLENBQ0EsQUFBQSxHQUNBLFNBQUEsTUFBQSxFQUFBLEVBQUEsS0FBQSxFQUFBLE9BQUEsRUFDQSxFQUFBLE9BQUEsZUFDQSxNQUFBO0FBQUE7QUFBQSxnQkFFQSxFQUFBO0FBQUEsYUFDQSxFQUdBLENBQ0EsS0FBQSxNQUFBLENB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RUFBSSxTQUFTLEtBQU8sRUFBSSxLQUFLLEtBQU8sRUFBSSxLQUFLLE1BQVEsRUFBSSxNQUFNLFNBQVcsRUFBSSxVQUFVLFdBQWEsRUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFHLGVBQWUsQ0FBQyxZQUFZLDBEQUEwRCxNQUFNLENBQUMsS0FBTyxVQUFVLFFBQVUsRUFBSSxjQUFjLFNBQVcsRUFBSSxTQUFTLEtBQU8sRUFBSSxLQUFLLEtBQU8sRUFBSSxLQUFLLE1BQVEsRUFBSSxNQUFNLFNBQVcsRUFBSSxTQUFTLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUMzcENDLEdBQWtCLENBQUEsRUN1RHRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLFlBQUEsQ0FDQSxPQUFBLENBQUEsR0FBQSxFQUFBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxZQUFBLEtBQ0EsV0FBQSxPQUNBLFVBQUEsS0FDQSxPQUFBLEVBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxPQUFBLENBSUEsS0FBQSxHQUFBLEtBQUEsU0FBQSxFQUNBLENBQUEsYUFBQSxnQkFBQSxLQUNBLE1BQUEsUUFDQSxHQURBLENBRUEsT0FBQSxFQUFBLEVBQUEsT0FBQSxFQUFBLEtBQ0EsVUFBQSxFQUFBLEVBQUEsUUFBQSxFQUFBLE1BQ0EsT0FBQSxFQUFBLEVBQUEsT0FBQSxFQUFBLE1BQ0EsVUFBQSxFQUFBLEVBQUEsVUFBQSxFQUFBLE1BQ0EsRUFDQSxFQUVBLFFBQUEsQ0FDQSxNQUFBLE1BQUEsa0JBQ0EsS0FBQSxhQUdBLEtBQUEsTUFBQSxDQUFBLEtBQUEsS0FBQSxJQUFBLEVBQ0EsS0FBQSxPQUNBLEdBQUEsQ0FBQSxDQUNBLEVBRUEsZUFBQSxDQUNBLE1BQUEsSUFDQSxHQUNBLENBQ0EsT0FBQSxDQUNBLEtBQUEsU0FDQSxPQUFBLENBQ0EsTUFBQSxJQUFBLEtBQUEsT0FBQSxDQUNBLENBQ0EsRUFFQSxPQUFBLENBQUEsS0FBQSxZQUFBLENBQ0EsS0FBQSxTQUVBLFVBQUEsR0FDQSxPQUFBLENBQ0EsTUFBQSxDQUFBLENBQUEsVUFBQSxLQUFBLEVBQUEsT0FBQSxDQUNBLENBQ0EsQ0FDQSxFQUNBLEtBQUEsT0FBQSxPQUNBLENBQ0EsQ0FDQSxFQUVBLFVBQUEsQ0FDQSxNQUFBLE1BQUEsYUFBQSxLQUFBLG1CQUNBLEVBRUEsYUFBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLFlBQ0EsRUFFQSxZQUFBLENBRUEsTUFBQSxNQUFBLFFBQUEsUUFDQSxFQUVBLFNBQUEsT0FDQSxNQUFBLENBQUEsS0FBQSxZQUFBLENBQUEsQ0FBQSxTQUFBLHNCQUFBLFFBQUEsUUFDQSxFQUVBLGFBQUEsT0FDQSxNQUFBLFNBQUEsc0JBQUEsY0FBQSxjQUFBLElBQ0EsRUFFQSxZQUFBLENBSUEsTUFBQSxNQUFBLGFBQUEsTUFDQSxFQUVBLE1BQUEsQ0FFQSxNQUFBLE1BQUEsT0FBQSxNQUFBLElBQ0EsRUFFQSxRQUFBLE9BQ0EsTUFBQSxNQUFBLFdBQ0EsS0FDQSxRQUFBLFFBQUEsT0FBQSxJQUNBLEVBRUEsUUFBQSxDQUNBLE1BQUEsTUFBQSxXQUFBLE9BQUEsT0FDQSxFQUVBLFVBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxZQUFBLEVBQ0EsTUFBQSxJQUFBLEtBQUEsT0FBQSxDQUFBLEdBQUEsQ0FDQSxFQUVBLGtCQUFBLENBQ0EsTUFBQSxHQUFBLEtBQUEsV0FBQSxLQUFBLE1BQUEsT0FBQSxLQUFBLE1BQUEsSUFBQSxDQUNBLEVBRUEsTUFBQSxDQVNBLE1BQUEsTUFBQSxhQUFBLEtBQUEsWUFBQSxLQUFBLGVBQUEsSUFDQSxFQUVBLFVBQUEsQ0FDQSxNQUFBLE1BQUEsZ0JBQUEsS0FBQSxhQUFBLENBQ0EsRUFFQSxZQUFBLENBSUEsR0FBQSxDQUFBLFFBQUEsS0FBQSxxQkFDQSxHQUFBLEVBQUEsQ0FHQSxLQUFBLEdBQUEsRUFDQSxLQUFBLGdCQUFBLEtBQUEsb0JBQUEsQ0FDQSxFQUdBLEVBQUEsS0FBQSxZQUFBLEtBQUEsTUFBQSxHQUFBLEVBQ0EsRUFBQSxFQUFBLE1BQUEsRUFBQSxPQUFBLEVBQUEsTUFBQSxFQUNBLEtBQUEsVUFBQSxLQUNBLEtBQUEsR0FBQSxFQUFBLEVBQUEsT0FBQSxHQUNBLEFBQUEsRUFBQSxLQUFBLFlBQUEsR0FBQSxJQUFBLFVBSUEsRUFBQSxTQUVBLE9BQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxPQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsQ0FDQSxLQUFBLEdBQUEsRUFBQSxHQUVBLEVBQUEsT0FBQSxLQUFBLEVBQUEsRUFBQSxFQUNBLElBQUEsU0FDQSxLQUNBLEtBQUEsZ0JBQUEsS0FBQSxhQUFBLEVBQUEsQ0FBQSxFQUNBLEVBR0EsQUFBQSxJQUFBLEVBQUEsRUFDQSxLQUFBLFVBQUEsRUFFQSxFQUFBLEVBQUEsRUFFQSxDQUNBLENBQ0EsTUFBQSxFQUNBLEVBRUEsZUFBQSxDQUlBLEdBQ0EsS0FBQSxhQUNBLEtBQUEsYUFBQSxRQUNBLEtBQUEsWUFDQSxLQUFBLFlBQUEsS0FDQSxDQUNBLEdBQUEsR0FBQSxLQUFBLFdBQUEsS0FBQSxXQUNBLE1BQUEsTUFBQSxZQUdBLE1BQUEsV0FBQSxFQUFBLEdBQUEsQ0FBQSxHQUdBLElBQUEsTUFDQSxDQUFBLEtBQUEsWUFDQSxFQUFBLEtBQUEsWUFBQSxHQUdBLEtBQUEsUUFBQSxLQUFBLENBQUEsS0FBQSxTQUFBLE9BQUEsR0FBQSxFQUVBLENBQ0EsQ0FDQSxNQUFBLE1BQUEsVUFDQSxFQUdBLFNBQUEsQ0FDQSxNQUFBLENBQUEsQ0FBQSxLQUFBLElBQ0EsRUFFQSxXQUFBLENBQ0EsTUFBQSxNQUFBLGFBQUEsS0FBQSxhQUFBLEtBQUEsS0FBQSxDQUFBLFNBQUEsR0FBQSxDQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsV0FBQSxrQkFFQSxPQUFBLFdBQ0EsRUFFQSxRQUFBLENBQ0EsZ0JBQUEsRUFBQSxFQUFBLENBQ0EsTUFBQSxNQUFBLG9CQUFBLFVBQUEsRUFBQSxDQUFBLENBQ0EsRUFFQSxnQkFBQSxFQUFBLENBRUEsTUFBQSxNQUFBLElBQUEsZ0JBQUEsS0FBQSxLQUVBLE1BQUEsR0FBQSxPQUFBLEVBQUEsRUFBQSxLQUFBLFFBQUEsQ0FBQSxDQUFBLENBQ0EsRUFHQSxXQUFBLENBQ0EsQUFBQSxLQUFBLFdBQ0EsS0FBQSxZQUFBLEtBQUEsYUFDQSxLQUFBLFdBQUEsS0FBQSxPQUFBLEtBQUEsSUFBQSxFQUVBLEtBQUEsV0FBQSxDQUVBLEVBRUEsY0FBQSxFQUFBLENBQ0EsR0FBQSxLQUFBLFlBQUEsS0FBQSxZQUFBLEtBQUEsQ0FDQSxLQUFBLENBQUEsdUJBQUEsS0FDQSxZQUFBLEtBQ0EsS0FBQSxXQUNBLEtBQUEsVUFDQSxFQUFBLFdBQUEsQ0FBQSxDQUNBLEVBQ0EsRUFBQSxTQUFBLEVBQ0EsRUFDQSxDQUNBLE1BQUEsRUFDQSxFQUVBLGNBQUEsRUFBQSxPQUNBLE1BQUEsR0FBQSxLQUFBLFlBQUEsRUFDQSxLQUFBLGNBQUEsQ0FBQSxFQUNBLENBQUEsQ0FBQSxTQUFBLGFBQUEsUUFBQSxLQUFBLEdBQ0EsRUFHQSxXQUFBLENBQ0EsS0FBQSxRQUFBLElBQUEsQ0FDQSxFQUdBLFFBQUEsRUFBQSxDQUVBLEFBQUEsS0FBQSxZQUVBLEtBQUEsY0FBQSxDQUFBLEVBRUEsTUFBQSxZQUFBLEtBQ0EsS0FBQSxXQUFBLEVBRUEsRUFFQSxnQkFBQSxFQUFBLEVBQUEsQ0FFQSxBQUFBLElBQUEsR0FDQSxNQUFBLFdBQUEsT0FFQSxPQUVBLFNBQUEsQ0FDQSxNQUFBLE1BQUEsTUFBQSxDQUNBLE9BRUEsUUFBQSxDQUNBLE1BQUEsTUFBQSxTQUFBLEtBQUEscUJBQUEsSUFBQSxDQUNBLEVBRUEsY0FBQSxFQUFBLEdBQUEsQ0FDQSxNQUFBLE1BQUEsV0FDQSxFQUFBLFNBQUEsVUFDQSxFQUFBLFNBQUEsV0FDQSxPQUVBLFFBQUEsRUFBQSxDQUFBLFdBQUEsR0FBQSxZQUFBLElBQUEsR0FBQSxDQUNBLEdBQUEsR0FBQSxDQUFBLEtBQUEsY0FDQSxNQUFBLEdBR0EsS0FBQSxHQUFBLEdBQUEsS0FBQSxNQUFBLEtBQUEsY0FBQSxDQUFBLEdBR0EsRUFBQSxFQUFBLEVBQUEsT0FBQSxTQUFBLENBQ0EsT0FBQSxLQUFBLFFBQ0EsQ0FBQSxFQUNBLEVBQUEsR0FBQSxLQUFBLFNBQ0EsRUFBQSxrQkFBQSxTQUFBLEtBQUEsT0FDQSxFQUFBLEtBQUEsZUFBQSxFQUFBLENBQUEsRUFDQSxHQUFBLEdBMkRBLEdBMURBLEFBQUEsQ0FBQSxHQUFBLEtBQUEsWUFDQSxFQUFBLEtBQUEsTUFBQSxnQkFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLENBQ0EsVUFBQSxJQUFBLEtBQUEsZ0JBQUEsS0FBQSxjQUFBLENBQUEsRUFDQSxRQUFBLEdBQUEsS0FBQSxnQkFBQSxRQUFBLENBQ0EsUUFBQSxDQUFBLE9BQUEsQ0FDQSxDQUFBLEVBQ0EsY0FBQSxJQUFBLENBQ0EsS0FBQSxHQUFBLEVBQUEsRUFBQSxFQUNBLEtBQUEsT0FBQSxDQUNBLEtBQUEsT0FDQSxNQUFBLEtBQUEsV0FDQSxRQUFBLEVBQUEsQ0FBQSxJQUNBLFVBQUEsRUFBQSxDQUFBLElBQ0EsS0FBQSxDQUNBLEtBQUEsV0FDQSxHQUFBLEtBQUEsaUJBQUEsS0FDQSxjQUFBLEtBQUEsa0JBQUEsS0FDQSxLQUFBLGFBQ0EsQ0FDQSxDQUFBLENBQ0EsRUFDQSxZQUFBLElBQUEsQ0FDQSxLQUFBLEdBQUEsRUFBQSxFQUFBLEVBQ0EsS0FBQSxPQUFBLENBQ0EsS0FBQSxRQUNBLE1BQUEsZ0JBQ0EsS0FBQSxhQUFBLEtBQUEsS0FBQSxZQUNBLENBQUEsQ0FDQSxDQUNBLENBQUEsRUFFQSxFQUFBLEtBQUEsTUFBQSxlQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsQ0FDQSxRQUFBLEdBQ0EsVUFBQSxJQUFBLEtBQUEsZ0JBQUEsS0FBQSxjQUFBLENBQUEsRUFDQSxRQUFBLEdBQUEsS0FBQSxnQkFBQSxRQUFBLENBQ0EsUUFBQSxDQUFBLE9BQUEsQ0FDQSxDQUFBLEVBQ0EsY0FBQSxJQUFBLENBQ0EsS0FBQSxHQUFBLEVBQUEsRUFBQSxFQUNBLEtBQUEsT0FBQSxDQUNBLEtBQUEsVUFDQSxNQUFBLGdCQUFBLEVBQUEsQ0FBQSxJQUNBLEtBQUEsR0FBQSxLQUFBLGlCQUFBLElBQ0EsQ0FBQSxDQUNB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QUFLLE9BQU8sVUFBWSxFQUFJLGtCQUFrQixNQUFRLEVBQUksYUFBYSxFQUFJLGVBQWdCLEVBQUssS0FBTSxDQUFFLE1BQU8sQ0FBSyxDQUFFLEVBQUUsTUFBUSxFQUFJLE1BQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUMza0ZDLEdBQWtCLENBQUEsUUMySnRCLEtBQUFDLElBQUEsRUFBQSxVQUFBLGlCQUFBLENBQ0EsV0FBQSxDQUFBLGVBQUEsRUFDQSxPQUFBLENBQUEsRUFBQSxFQUNBLE9BQUEsQ0FBQSxXQUFBLEVBRUEsTUFBQSxDQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxDQUFBLE1BQUEsTUFBQSxFQUFBLFFBQUEsSUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxPQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsQ0FBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxPQUFBLEtBQUEsTUFBQSxLQUFBLE9BQUEsSUFDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FDQSxNQUFBLE1BQUEsVUFBQSxJQUNBLEVBRUEsT0FBQSxDQUNBLE1BQUEsTUFBQSxVQUFBLEtBQ0EsRUFFQSxVQUFBLENBQ0EsTUFBQSxNQUFBLFVBQUEsUUFDQSxFQUVBLFlBQUEsQ0FDQSxNQUFBLFFBQ0EsS0FBQSxNQURBLENBRUEsT0FBQSxLQUFBLE1BQ0EsRUFDQSxFQUVBLFlBQUEsQ0FDQSxNQUFBLEdBQUEsS0FBQSxPQUFBLFVBQUEsQ0FDQSxFQUdBLGdCQUFBLENBQ0EsTUFBQSxNQUFBLE9BQUEsUUFDQSxFQUVBLGNBQUEsT0FDQSxLQUFBLEdBQUEsUUFBQSxpQkFBQSxjQUFBLEtBQ0EsTUFBQSxJQUFBLEtBQUEsS0FBQSxFQUNBLEVBRUEsbUJBQUEsT0FDQSxNQUNBLFNBQUEsZUFBQSxjQUFBLFFBQUEsR0FDQSxLQUFBLGVBQUEsWUFBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEdBQ0EsT0FBQSxLQUFBLGNBQ0EsQ0FBQSxDQUVBLEVBRUEsYUFBQSxPQUNBLE1BQUEsU0FBQSxlQUFBLGNBQUEsU0FBQSxDQUNBLEVBRUEsZUFBQSxPQUNBLE1BQUEsU0FBQSxhQUFBLGNBQUEsU0FBQSxDQUNBLEVBRUEsWUFBQSxDQUNBLE1BQUEsTUFBQSxjQUFBLEtBQUEsV0FDQSxFQUVBLGVBQUEsT0FDQSxLQUFBLENBQUEsa0JBQUEsS0FDQSxHQUFBLEVBQUEsQ0FDQSxLQUFBLENBQUEsWUFBQSxLQUFBLFVBQ0EsRUFBQSxDQUFBLEtBQUEsTUFBQSxFQUFBLEtBRUEsTUFBQSxTQUFBLGVBQUEsY0FBQSxJQUFBLENBQUEsRUFBQSxJQUFBLENBQ0EsS0FBQSxHQUNBLEVBQUEsTUFDQSxHQUFBLEtBQUEsUUFBQSxFQUFBLFFBQUEsSUFFQSxFQUFBLEdBRUEsRUFBQSxXQUFBLENBQUEsR0FBQSxFQUFBLE9BQUEsRUFBQSxPQUVBLE1BQUEsQ0FDQSxPQUNBLE9BQ0EsT0FDQSxPQUxBLElBQUEsQ0FNQSxDQUNBLEtBQUEsQ0FBQSxDQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxDQUFBLGVBQUEsS0FDQSxNQUFBLElBQUEsR0FBQSxLQUNBLElBQUEsRUFBQSxPQUFBLFNBRUEsRUFFQSxnQkFBQSxDQUNBLE1BQUEsTUFBQSxXQUFBLEtBQUEsVUFBQSxLQUFBLFNBQ0EsRUFNQSxVQUFBLEVBQUEsWUFBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEdBQ0EsSUFBQSxFQUFBLENBQ0EsTUFBQSxJQUFBLEVBQUEsS0FBQSxNQUFBLENBQ0EsQ0FDQSxDQUFBLEVBRUEsU0FBQSxFQUFBLFdBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxHQUNBLElBQUEsRUFBQSxDQUNBLE1BQUEsSUFBQSxFQUFBLEtBQUEsTUFBQSxDQUNBLENBQ0EsQ0FBQSxFQUVBLFVBQUEsRUFBQSxZQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsRUFDQSxDQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0Esb0JBQUEsRUFBQSxDQUNBLE1BQUEsR0FBQSxLQUFBLFNBQUEsRUFBQSxJQUFBLENBQ0EsRUFFQSxRQUFBLENBR0EsS0FBQSxRQUFBLEtBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxVQUFBLE9BQUEsS0FBQSxPQUVBLE1BQUEsS0FBQSxPQUFBLEtBQ0EsQ0FBQSxDQUNBLEVBRUEsVUFBQSxDQUVBLEVBRUEsVUFBQSxDQUNBLEtBQUEsVUFBQSxTQUFBLENBQ0EsQ0FDQSxDQUNBLENBQUEsb0lDcFVJRixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxRQUFRLENBQUMsWUFBWSxpQkFBaUIsRUFBRSxDQUFDLEVBQUcsS0FBSyxDQUFDLEVBQUksR0FBSSxFQUFJLFFBQVMsU0FBUyxFQUFPLEVBQU0sQ0FBQyxNQUFRLEdBQUksYUFBYSxDQUFNLEVBQUcsRUFBRyxLQUFLLENBQUMsTUFBTSxFQUFJLGVBQWUsQ0FBTSxDQUFDLEVBQUUsQ0FBRSxFQUFPLFNBQVUsRUFBRyxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUssRUFBSSxZQUFZLENBQU0sRUFBRSxPQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxVQUFVLEdBQUcsU0FBUyxFQUFJLENBQ3ZaLEdBQUksR0FBVyxFQUFJLFNBQ25CLE1BQU8sQ0FBQyxFQUFHLFNBQVMsQ0FBQyxZQUFZLGNBQWMsTUFBTSxFQUFJLGFBQWEsQ0FBTSxFQUFFLE1BQU0sQ0FBQyxLQUFPLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBUSxDQUFRLENBQUMsRUFBRSxDQUFDLEVBQUcsTUFBTSxDQUFDLFlBQVksbUJBQW1CLENBQUMsRUFBRSxFQUFHLE9BQU8sQ0FBQyxFQUFJLEdBQUcsRUFBSSxHQUFHLEVBQUksU0FBUyxDQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRyxPQUFPLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLFNBQVMsQ0FBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBSSxHQUFFLENBQUUsQ0FBQyxFQUFHLEVBQUksZUFBZ0IsRUFBRyxLQUFLLENBQUMsRUFBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBRSxDQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNyV0MsR0FBa0IsQ0FBQSxRQ3dEdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsa0JBQUEsQ0FDQSxNQUFBLENBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxRQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLGVBQUEsQ0FBQSxLQUFBLFFBQUEsU0FBQSxFQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsTUFBQSxDQUNBLEtBQUEsR0FBQSxNQUFBLE1BQUEsT0FBQSxJQUFBLE1BQUEsS0FBQSxFQUNBLE1BQUEsQ0FDQSxLQUFBLEVBQUEsR0FDQSxNQUFBLEVBQUEsRUFDQSxDQUNBLENBQ0EsRUFFQSxRQUFBLENBQ0EsZUFBQSxFQUFBLENBQ0EsTUFBQSxlQUFBLEVBQUEsRUFBQSxJQUFBLEdBQ0EsRUFFQSxhQUFBLEVBQUEsQ0FDQSxNQUFBLE1BQUEsS0FBQSxPQUFBLEVBQUEsS0FDQSw0QkFBQSxLQUFBLEtBQUEsUUFDQSxJQUNBLEVBRUEsWUFBQSxFQUFBLENBRUEsS0FBQSxHQUFBLEtBQUEsS0FBQSxPQUFBLEVBQUEsTUFBQSxLQUFBLEtBQUEsUUFBQSxNQUNBLE9BQ0EsTUFDQSxNQUFBLE1BQUEsYUFBQSxPQUNBLEtBQUEsT0FEQSxDQUVBLE1BQUEsR0FBQSxFQUFBLFFBQUEsR0FDQSxFQUFBLENBQ0EsQ0FDQSxDQUNBLENBQUEsb0lDbEdJRixHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFJLEtBQUssTUFBTSxNQUFPLEVBQUksS0FBSyxLQUFNLEVBQUUsQ0FBRSxFQUFJLFVBQVcsRUFBRyxFQUFJLFVBQVUsQ0FBQyxJQUFJLFlBQVksTUFBTSxDQUFDLE9BQVMsRUFBSSxPQUFPLFNBQVcsRUFBSSxTQUFTLEtBQU8sRUFBSSxLQUFLLEtBQU8sRUFBSSxLQUFLLE1BQVEsRUFBSSxNQUFNLE9BQVMsRUFBSSxPQUFPLFNBQVcsRUFBSSxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFZLEVBQUksR0FBRyxFQUFJLFdBQVcsRUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUNqYUMsR0FBa0IsQ0FBQSxFQzZCdEIsS0FBQUMsSUFBQSxFQUFBLFVBQUEsa0JBQUEsQ0FDQSxNQUFBLENBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxPQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLFdBQUEsQ0FDQSxNQUFBLE1BQUEscUJBQUEsS0FBQSxLQUFBLFNBQUEsQ0FD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RUFFQSxTQUFBLENBQ0EsS0FBQSxHQUFBLEdBQUEsSUFBQSxLQUFBLE1BQUEsS0FBQSxDQUNBLFNBQUEsS0FBQSxPQUFBLFVBQUEsYUFDQSxRQUFBLEtBQUEsT0FBQSxZQUFBLEVBQ0EsWUFBQSxFQUNBLENBQUEsRUFFQSxHQUFBLEdBQUEsR0FDQSxFQUFBLEdBQ0EsRUFBQSxHQUVBLEtBQUEsR0FBQSxJQUFBLENBQ0EsQUFBQSxDQUFBLEtBQUEsU0FBQSxHQUNBLEdBQUEsR0FDQSxLQUFBLFNBQUEsRUFFQSxFQUVBLEVBQUEsSUFBQSxLQUFBLFFBQUEsRUFFQSxFQUFBLElBQUEsQ0FDQSxLQUFBLE9BQUEsRUFDQSxFQUFBLENBQ0EsRUFFQSxLQUFBLE1BQUEsS0FBQSxNQUFBLEtBQUEsY0FBQSxVQUFBLEVBQUEsQ0FDQSxNQUFBLEVBQ0EsS0FBQSxDQUNBLENBQUEsRUFFQSxLQUFBLEdBQUEsR0FBQSxDQUNBLEFBQUEsSUFBQSxFQUFBLE1BQ0EsR0FBQSxHQUNBLEVBQUEsV0FBQSxDQUFBLEVBRUEsRUFFQSxFQUFBLEdBQUEsQ0FDQSxBQUFBLElBQUEsS0FBQSxPQUNBLEdBQUEsR0FDQSxLQUFBLE1BQUEsRUFDQSxFQUFBLEdBQ0EsRUFBQSxFQUVBLEVBRUEsRUFBQSxTQUFBLEdBQUEsQ0FDQSxBQUFBLEVBQ0EsRUFBQSxHQUVBLEVBQUEsQ0FBQSxDQUVBLENBQUEsRUFFQSxLQUFBLE9BQUEsUUFBQSxHQUFBLENBQ0EsQUFBQSxFQUNBLEVBQUEsR0FFQSxFQUFBLEdBQUEsRUFBQSxDQUVBLENBQUEsRUFFQSxFQUFBLEtBQUEsT0FBQSxFQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsY0FBQSxPQUNBLFFBQUEsSUFBQSxjQUFBLFVBQUEsSUFBQSxRQUFBLE9BQ0EsQ0FDQSxDQUNBLENBQUEsb0lDOUhJSCxHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxVQUFVLENBQUMsWUFBWSxhQUFhLE1BQU0sQ0FBQyxRQUFVLFFBQVEsS0FBTyxFQUFJLFNBQVMsRUFBRSxHQUFHLENBQUMsY0FBYyxTQUFTLEVBQU8sQ0FBQyxFQUFJLFVBQVUsQ0FBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUcsTUFBTSxDQUFDLFlBQVksYUFBYSxNQUFNLENBQUUsYUFBYyxFQUFJLFNBQVcsRUFBQyxNQUFNLENBQUMsS0FBTyxTQUFTLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQyxFQUFHLFFBQVEsRUFBSSxHQUFHLEVBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssUUFBUSxRQUFRLFVBQVUsTUFBTyxFQUFJLFNBQVUsV0FBVyxVQUFVLENBQUMsRUFBRSxJQUFJLFVBQVUsTUFBTSxDQUFDLEdBQUssRUFBSSxTQUFTLEtBQU8sUUFBUSxLQUFPLEdBQUcsRUFBRSxTQUFTLENBQUMsTUFBUyxFQUFJLFFBQVMsRUFBRSxHQUFHLENBQUMsTUFBUSxTQUFTLEVBQU8sQ0FBQyxBQUFHLEVBQU8sT0FBTyxXQUFxQixHQUFJLFNBQVMsRUFBTyxPQUFPLE1BQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFJLFdBQVcsRUFBSyxFQUFFLEVBQUksU0FBUyxDQUFDLEVBQUcsRUFBSSxNQUFPLEVBQUcsTUFBTSxDQUFDLFlBQVksdUNBQXVDLEVBQUUsQ0FBQyxFQUFHLE1BQU0sQ0FBQyxNQUFPLENBQUUsV0FBYSxJQUFPLEdBQUksVUFBWSxXQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUUsRUFBSSxFQUFJLGdCQUFpQixFQUFHLFNBQVMsQ0FBQyxZQUFZLHdDQUF3QyxNQUFNLENBQUMsU0FBVyxFQUFJLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBUSxTQUFTLEVBQU8sQ0FBQyxTQUFPLGdCQUFpQixFQUFRLEVBQUksTUFBTSxNQUFNLEtBQU0sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFFLENBQUUsQ0FBQyxFQUFFLEVBQUcsZ0JBQWdCLENBQUMsWUFBWSxvQkFBb0IsTUFBTSxDQUFDLEtBQU8sUUFBUSxnQkFBZ0IsQ0FBQyxFQUFJLE1BQU0saUJBQWlCLENBQUMsRUFBSSxPQUFPLGdCQUFnQixFQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsTUFBTSxDQUFDLE1BQU8sRUFBSSxXQUFZLFNBQVMsU0FBVSxFQUFLLENBQUMsRUFBSSxXQUFXLENBQUcsRUFBRSxXQUFXLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDdDJDQyxHQUFrQixDQUFBLFFDNEV0QixLQUFBQyxJQUFBQyxFQUFBLFNBQUEsUUFBQSxDQUNBLFdBQUEsQ0FBQSxXQUFBLGFBQUFDLEVBQUEsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLFVBQUEsR0FDQSxrQkFBQSxJQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsV0FBQSxDQUNBLEtBQUEsQ0FDQSxNQUFBLE1BQUEsT0FBQSxDQUFBLENBQ0EsRUFFQSxJQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxZQUNBLEVBQUEsQ0FFQSxJQUFBLGtCQUFBLEdBQUEsRUFBQSxPQUFBLE1BQ0EsSUFBQSxNQUNBLEVBQUEsSUFBQSxFQUNBLEFBQUEsRUFDQSxLQUFBLE1BQUEsRUFBQSxHQUVBLEtBQUEsTUFBQSxHQUFBLENBQUEsRUFBQSxTQUFBLENBQUEsRUFFQSxLQUFBLFNBQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsQ0FDQSxHQUFBLEtBQUEsT0FBQSxLQUNBLEtBQUEsa0JBQUEsYUFDQSxDQUFBLEtBQUEsUUFBQSxDQUNBLEtBQUEsR0FBQSxHQUFBLEtBQUEsS0FBQSxFQUNBLEFBQUEsRUFBQSxXQUNBLE1BQUEsa0JBQUEsRUFDQSxTQUFBLEVBQUEsU0FBQSxFQUFBLEVBQUEsT0FBQSxNQUFBLEVBQ0EsTUFBQSxDQUFBLEVBQ0EsWUFBQSxFQUVBLENBQ0EsTUFBQSxNQUFBLGlCQUNBLEVBRUEsSUFBQSxFQUFBLENBQ0EsS0FBQSxrQkFBQSxDQUNBLENBQ0EsRUFJQSxZQUFBLEVBQUEsU0FBQSxDQUNBLEtBQUEsT0FDQSxRQUFBLEtBQ0EsQ0FBQSxFQUVBLE1BQUEsRUFBQSxRQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsRUFDQSxDQUFBLEVBRUEsT0FBQSxFQUFBLFNBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxFQUNBLENBQUEsRUFFQSxRQUFBLEVBQUEsVUFBQSxDQUNBLEtBQUEsTUFDQSxRQUFBLENBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUVBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsV0FDQSxDQUNBLENBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxRQUFBLEVBQUEsQ0FDQSxHQUFBLENBQUEsR0FBQSxLQUFBLGtCQUFBLENBQ0EsS0FBQSxHQUFBLEdBQUEsSUFBQSxLQUFBLG1CQUFBLEVBQ0EsQUFBQSxXQUFBLFdBQ0EsTUFBQSxNQUFBLEVBQUEsU0FBQSxLQUFBLFdBQUEsRUFFQSxLQUFBLFNBQUEsRUFFQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLG9JQ3ZMSUosR0FBUyxVQUFZLENBQUMsR0FBSSxHQUFJLEtBQVMsRUFBRyxFQUFJLGVBQW1CLEVBQUcsRUFBSSxNQUFNLElBQUksRUFBRyxNQUFPLEdBQUcsRUFBSSxVQUFVLEVBQUksR0FBRyxDQUFDLElBQUksV0FBVyxFQUFFLFlBQVksRUFBSSxPQUFPLEVBQUssQ0FBQyxDQUFDLEVBQ3BLQyxHQUFrQixDQUFBLEVDa0J0QixLQUFBQyxJQUFBQyxFQUFBLFNBQUEsWUFBQSxDQUdBLGFBQUEsSUFBQSxHQUNBLG1CQUFBLEdBQUEsQ0FBQSxZQUFBLEdBQ0EsQ0FBQSxvSUN4QklILEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLFVBQVUsWUFBWSx1QkFBdUIsTUFBTSxDQUFDLEdBQUssRUFBSSxTQUFTLEtBQU8sRUFBSSxLQUFLLEtBQU8sT0FBTyxTQUFXLEVBQUksU0FBUyxTQUFXLEVBQUksRUFBRSxTQUFTLENBQUMsTUFBUSxFQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDdlJDLEdBQWtCLENBQUEsRUNrQnRCLEtBQUFDLElBQUFDLEVBQUEsU0FBQSxDQUNBLFdBQUEsT0FBQSxRQUNBLEVBRUEsQ0FDQSxPQUFBLENBQUEsRUFBQSxFQUVBLGFBQUEsSUFBQSxHQUNBLGVBQUEsR0FFQSxTQUFBLENBQ0EsTUFBQSxDQUNBLEtBQUEsQ0FDQSxLQUFBLENBQUEsVUFBQSxLQUNBLEdBQUEsRUFBQSxNQUFBLEVBQUEsU0FBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLGlCQUFBLEVBQUEsU0FBQSxDQUlBLGVBQUEsQ0FDQSxDQUFBLEVBQ0EsS0FBQSxLQUFBLEtBQUEsS0FBQSxLQUFBLEtBQUEsQ0FBQSxDQUNBLENBQ0EsTUFBQSxJQUFBLFNBQUEsTUFBQSxJQUFBLEtBQUEsSUFBQSxDQUNBLEVBRUEsSUFBQSxFQUFBLENBQ0EsR0FBQSxTQUFBLE1BQUEsSUFBQSxLQUFBLEtBQUEsQ0FBQSxDQUNBLENBQ0EsQ0FDQSxDQUNBLENBQUEsb0lDbERJSCxHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxNQUFNLENBQUMsWUFBWSxXQUFXLEVBQUUsQ0FBQyxFQUFHLEVBQUksYUFBYSxFQUFJLElBQUksRUFBRSxFQUFJLEdBQUcsRUFBSSxHQUFHLENBQUMsSUFBSSxVQUFVLElBQUksWUFBWSxNQUFNLENBQUMsR0FBSyxFQUFJLFNBQVMsT0FBUyxFQUFJLE9BQU8sV0FBYSxPQUFPLE9BQU8sQ0FBQSxFQUFJLEVBQUksSUFBSSxRQUFRLEtBQU0sRUFBSSxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTyxFQUFJLFVBQVcsU0FBUyxTQUFVLEVBQUssQ0FBQyxFQUFJLFVBQVUsQ0FBRyxFQUFFLFdBQVcsV0FBVyxDQUFDLEVBQUUsWUFBWSxFQUFJLFdBQVcsRUFBSyxFQUFFLEVBQUksU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDcmRDLEdBQWtCLENB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RUFBSSxZQUFZLElBQU0sRUFBSSxTQUFTLENBQUMsRUFBRSxnQkFBZ0IsRUFBSSxlQUFlLEVBQUksU0FBUyxFQUFFLEVBQUssRUFBRSxFQUFJLEdBQUksRUFBSSxTQUFVLFNBQVMsRUFBSyxFQUFNLENBQUMsTUFBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUksV0FBVyxFQUFJLE9BQVEsQ0FBSSxFQUFFLE1BQU0sQ0FBQyxHQUFLLEVBQUksWUFBWSxDQUFLLENBQUMsQ0FBQyxFQUFFLENBQUUsRUFBSSxRQUFTLEVBQUksR0FBSSxFQUFJLFFBQVMsU0FBUyxFQUFPLENBQUMsTUFBUSxHQUFJLGFBQWEsQ0FBTSxFQUFHLEVBQUcsa0JBQWtCLENBQUMsSUFBSSxFQUFPLEtBQUssTUFBTSxFQUFJLGFBQWEsQ0FBTSxFQUFFLE1BQU0sQ0FBQyxLQUFPLEVBQU8sT0FBUyxFQUFJLE9BQU8sU0FBVyxFQUFJLFlBQVksQ0FBSyxFQUFFLEtBQU8sRUFBSyxLQUFPLEVBQUksV0FBVyxNQUFRLEVBQUksTUFBTSxPQUFTLEdBQU0sU0FBVyxFQUFJLFVBQVksRUFBSSxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFHLEtBQUssQ0FBRSxFQUFJLFVBQVcsRUFBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsTUFBUSxFQUFJLGFBQWEsRUFBSSxPQUFRLEVBQU0sQ0FBRSxNQUFPLEVBQU8sU0FBVSxFQUFNLENBQUEsRUFBRSxPQUFTLEVBQUksa0JBQWtCLEVBQUksT0FBUSxFQUFNLEVBQUksT0FBTyxFQUFFLFNBQVcsRUFBSSxZQUFZLENBQUssRUFBRSxLQUFPLEVBQUssS0FBTyxFQUFJLFdBQVcsTUFBUSxFQUFJLGNBQWMsQ0FBSyxFQUFFLFNBQVcsRUFBSSxVQUFZLEVBQUksVUFBVSxVQUFZLEVBQUksVUFBVSxZQUFjLEVBQUksWUFBWSxVQUFZLEVBQUksVUFBVSxVQUFZLEVBQUksVUFBVSxTQUFXLEVBQUksU0FBUyxTQUFXLEVBQUksWUFBWSxFQUFNLENBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFTLFNBQVMsRUFBTyxDQUFDLE1BQU8sR0FBSSxXQUFXLEVBQU0sQ0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUcsRUFBSSxVQUFXLEVBQUcsRUFBSSxVQUFVLENBQUMsSUFBSSxZQUFZLE1BQU0sQ0FBQyxTQUFXLEVBQUksWUFBWSxDQUFLLEVBQUUsS0FBTyxFQUFLLE9BQVMsRUFBSyxDQUFDLENBQUMsRUFBRyxFQUFJLE9BQVEsRUFBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVksRUFBSSxHQUFHLEVBQUksT0FBTyxFQUFJLFdBQVcsRUFBTSxDQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFZLEVBQUksR0FBRyxFQUFJLGFBQWEsRUFBSSxPQUFRLEVBQU0sQ0FBRSxNQUFPLENBQUssQ0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRyxFQUFJLG1CQUFvQixFQUFHLEtBQUssQ0FBQyxZQUFZLHdCQUF3QixFQUFFLENBQUMsRUFBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsVUFBWSxFQUFJLFVBQVUsVUFBWSxFQUFJLFVBQVUsU0FBVyxFQUFJLFNBQVMsU0FBVyxFQUFJLFlBQVksRUFBTSxDQUFLLEVBQUUsT0FBUyxFQUFJLGtCQUFrQixFQUFJLE9BQVEsRUFBTSxFQUFJLE9BQU8sRUFBRSxTQUFXLEVBQUksWUFBWSxDQUFLLEVBQUUsS0FBTyxFQUFLLEtBQU8sRUFBSSxXQUFXLE1BQVEsRUFBSSxjQUFjLENBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFTLFNBQVMsRUFBTyxDQUFDLE1BQU8sR0FBSSxXQUFXLEVBQU0sQ0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBSSxHQUFFLENBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRyxFQUFJLGdCQUFrQixDQUFDLEVBQUksT0FBUSxFQUFHLFFBQVEsQ0FBQyxFQUFHLEtBQUssQ0FBQyxFQUFHLEtBQUssQ0FBQyxZQUFZLHlCQUF5QixNQUFNLENBQUMsUUFBVSxFQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsVUFBWSxFQUFJLFVBQVUsV0FBYSxFQUFJLEtBQUssUUFBVSxFQUFJLGNBQWMsT0FBUyxFQUFJLE9BQU8sU0FBVyxFQUFJLFNBQVMsS0FBTyxFQUFJLFNBQVMsS0FBTyxFQUFJLEtBQUssTUFBUSxFQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUksQ0FBQSxFQUFFLENBQUMsRUFBRyxFQUFJLGdCQUFrQixFQUFJLE9BQVEsRUFBRyxvQkFBb0IsQ0FBQyxZQUFZLHVDQUF1QyxNQUFNLENBQUMsVUFBWSxFQUFJLFVBQVUsV0FBYSxFQUFJLEtBQUssUUFBVSxFQUFJLGNBQWMsT0FBUyxFQUFJLE9BQU8sU0FBVyxFQUFJLFNBQVMsS0FBTyxFQUFJLFNBQVMsS0FBTyxFQUFJLEtBQUssTUFBUSxFQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBSSxHQUFFLENBQUUsRUFBRSxDQUFDLEVBQUUsRUFBSSxHQUFFLENBQUUsRUFDaDJGQyxHQUFrQixDQUFBLFFDOEt0QixLQUFBQyxJQUFBQyxFQUFBLFNBQUEsT0FBQSxDQUNBLFdBQUEsQ0FBQSxlQUFBLEVBQ0EsT0FBQSxDQUFBLEdBQUEsRUFBQSxFQUVBLGNBQUEsRUFBQSxDQUVBLE1BQUEsRUFDQSxFQUVBLGVBQUEsRUFBQSxFQUFBLEVBQUEsQ0FDQSxLQUFBLENBQUEsV0FBQSxFQUdBLEdBQUEsRUFBQSxDQUlBLEtBQUEsR0FBQSxJQUFBLEVBQUEsdUJBQ0EsRUFDQSxHQUFBLEVBQUEsT0FBQSxNQUNBLEVBRUEsTUFBQSxJQUNBLEVBQUEsQ0FBQSxFQUNBLEVBQ0EsSUFDQSxRQUFBLE9BQ0EsTUFBQSxLQUFBLElBQUEsY0FBQSxLQUNBLEtBQ0EsT0FBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLEVBQUEsRUFDQSxHQUFBLEVBQUEsQ0FFQSxLQUFBLEdBQUEsR0FBQSxHQUFBLEVBQUEsR0FBQSxJQUFBLE1BQUEsRUFDQSxBQUFBLEdBQUEsRUFBQSxDQUFBLEVBQUEsRUFBQSxFQUFBLEtBQUEsQ0FBQSxHQUNBLEdBQUEsTUFBQSxFQUNBLEVBQUEsU0FBQSxFQUFBLEVBRUEsQ0FDQSxDQUNBLENBQ0EsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLGdCQUFBLENBQ0EsTUFBQSxDQUFBLENBQ0EsTUFBQSxlQUNBLEtBQUEsVUFFQSxFQUVBLGdCQUFBLENBQ0EsS0FBQSxDQUFBLFlBQUEsS0FDQSxNQUFBLEdBQUEsT0FBQSxHQUNBLE1BQUEsVUFDQSxLQUFBLFdBQ0EsS0FBQSxVQUVBLEVBRUEsb0JBQUEsQ0FDQSxNQUFBLENBQUEsS0FBQSxXQUFBLEtBQUEsY0FDQSxFQUVBLGNBQUEsQ0FDQSxNQUFBLENBQUEsTUFBQSxTQUFBLE9BQUEsRUFDQSxFQUVBLFlBQUEsQ0FDQSxNQUNBLE1BQUEsUUFBQSxPQUFBLEtBQUEsS0FBQSxPQUFBLEVBQUEsT0FBQSxHQUNBLE1BQUEsbUJBQUEsRUFBQSxFQUVBLENBQ0EsRUFFQSxRQUFBLENBQ0EsWUFBQSxFQUFBLENBQ0EsTUFBQSxHQUFBLEtBQUEsU0FBQSxDQUFBLENBQ0EsRUFFQSxZQUFBLEVBQUEsRUFBQSxDQUNBLEdBQUEsS0FBQSxTQUFBLENBQ0EsS0FBQSxHQUFBLEdBQUEsS0FBQSxPQUFBLEtBQUEsT0FBQSxHQUFBLEtBQUEsS0FDQSxFQUFBLEtBQUEsVUFBQSxLQUFBLE9BQUEsRUFBQSxDQUFBLEVBQ0EsTUFBQSxHQUFBLEtBQUEsR0FDQSxDQUNBLE1BQUEsS0FDQSxFQUVBLGFBQUEsRUFBQSxDQUNBLE1BQUEsYUFBQSxFQUFBLEVBQUEsSUFBQSxHQUNBLEVBRUEsV0FBQSxFQUFBLEVBQUEsQ0FDQSxNQUFBLElBQUEsR0FBQSxLQUFBLENBQ0EsS0FBQSxFQUNBLE1BQUEsRUFDQSxRQUNBLFNBQUEsS0FBQSxZQUFBLENBQUEsQ0FDQSxDQUFBLENBQ0EsRUFFQSxlQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsRUFBQSxLQUFBLFNBQUEsVUFBQSxFQUNBLEVBQUEsS0FBQSxnQkFBQSxtQkFBQSxDQUFBLEVBQ0EsR0FBQSxFQUNBLFNBQUEscUJBQUEsRUFBQSxFQUFBLEVBQ0EsRUFFQSxDQUNBLENBQ0EsQ0FBQSxvSUN0U0lILEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLGFBQWEsQ0FBQyxZQUFZLHVCQUF1QixNQUFNLENBQUMsTUFBUSxFQUFJLE1BQU0sU0FBVyxFQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFDbk1DLEdBQWtCLENBQUEsUUNhdEIsS0FBQUMsSUFBQUMsRUFBQSxTQUFBLFFBQUEsQ0FDQSxjQUFBLEVBQ0EsQ0FBQSxvSUNoQklILEdBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLE1BQU0sQ0FBQyxZQUFZLGNBQWMsTUFBTSxDQUFDLEdBQUssRUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUcsa0JBQWtCLENBQUMsWUFBWSxzQkFBc0IsTUFBTSxDQUFDLE9BQVMsRUFBSSxNQUFNLENBQUMsRUFBRSxDQUFFLEVBQUksZUFBZSxPQUFTLEVBQUcsRUFBRyxNQUFNLENBQUMsWUFBWSxtQ0FBbUMsRUFBRSxFQUFJLEdBQUksRUFBSSxlQUFnQixTQUFTLEVBQVEsQ0FBQyxNQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksbUJBQW1CLEVBQUUsRUFBSSxHQUFJLEVBQVMsU0FBUyxFQUFJLENBQ3BjLEVBQUksS0FDZixHQUFJLEdBQU8sRUFBSSxLQUNYLEVBQVcsRUFBSSxTQUNmLEVBQVUsRUFBSSxRQUNsQixNQUFPLEdBQUcsU0FBUyxDQUFDLFlBQVksY0FBYyxNQUFNLENBQUUsY0FBZSxDQUFVLEVBQUMsR0FBRyxDQUFDLE1BQVEsQ0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBTyxDQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFJLEdBQUksQ0FBQSxDQUFDLEVBQUUsRUFBRyxpQkFBaUIsQ0FBQyxJQUFJLFNBQVMsWUFBWSxxQkFBcUIsTUFBTyxFQUFJLE9BQVEsTUFBTSxDQUFDLE9BQVMsRUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFHLEVBQUksVUFBVyxFQUFHLE1BQU0sQ0FBQyxZQUFZLGNBQWMsR0FBRyxDQUFDLFVBQVksU0FBUyxFQUFPLENBQUMsU0FBTyxrQkFBa0IsRUFBTyxpQkFBd0IsRUFBSSxhQUFhLE1BQU0sS0FBTSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFJLEdBQUksQ0FBQSxFQUFFLENBQUMsQ0FBQyxFQUN0ZEMsR0FBa0IsQ0FBQSxRQ3VJdEIsS0FBQUMsSUFBQUMsRUFBQSxTQUFBLFNBQUEsQ0FDQSxXQUFBLENBQ0EsaUJBQ0EsaUJBQ0EsT0FDQSxFQUVBLE9BQUEsQ0FBQSxFQUFBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxPQUFBLEtBQ0EsT0FBQSxJQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsT0FBQSxDQUNBLE1BQUEsTUFBQSxPQUFBLE9BQUEsRUFDQSxFQUVBLFFBQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxLQUFBLFFBQUEsUUFBQSxLQUFBLCtCQUNBLENBQ0EsRUFFQSxhQUFBLENBQ0EsTUFBQSxNQUFBLFdBQUEsUUFBQSxDQUNBLEtBQUEsR0FDQSxPQUFBLEdBQ0EsVUFBQSxHQUNBLE9BQUEsR0FDQSxNQUFBLEdBQ0EsS0FBQSxHQUNBLEtBQUEsQ0FDQSxRQUFBLEdBQUEsS0FBQSxZQUFBLENBQUEsQ0FDQSxDQUNBLENBQUEsQ0FDQSxFQUVBLGtCQUFBLENBQ0EsTUFBQSxNQUFBLFdBQUEsUUFBQSxDQUNBLFVBQUEsQ0FHQSxhQUFBLElBQ0EsS0FBQSxpQkFBQSxLQUFBLEdBQUEsRUFBQSxRQUFBLENBQ0EsRUFDQSxRQUFBLENBQ0EsS0FBQSxRQUNBLE9BQUEsQ0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsQ0FBQSxDQUNBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsa0JBQUEsQ0FDQSxNQUFBLE1BQUEsV0FBQSxRQUFBLENBQ0EsV0FBQSxHQUNBLFlBQUEsR0FDQSxXQUFBLEdBQ0EsVUFBQSxFQUNBLENBQUEsQ0FDQSxFQUVBLGFBQUEsQ0FDQSxNQUFBLE1BQUEsV0FBQSxRQUFBLENBQ0EsS0FBQSxHQUNBLEtBQUEsRUFDQSxDQUFBLENBQ0EsRUFFQSxnQkFBQSxDQUNBLEtBQUEsQ0FDQSxjQUNBLG1CQUNBLG1CQUNBLGVBQ0EsS0FDQSxNQUFBLENBQ0EsRUFDQSxFQUNBLEVBQ0EsQ0FDQSxFQUFBLE9BQUEsR0FBQSxFQUFBLE9BQUEsQ0FBQSxDQUNBLEVBRUEsY0FBQSxDQUNBLE1BQUEsQ0FDQSxtQkFBQSxDQUNBLFNBQUEsR0FDQSxTQUFBLEdBQ0EsZUFBQSxNQUNBLEVBQUEsS0FBQSxXQUNBLENBQ0EsRUFFQSxlQUFBLENBQ0EsTUFBQSxDQUNBLFNBQUEsQ0FBQSxLQUFBLFVBQ0EsVUFBQSxLQUFBLFVBQ0Esa0JBQUEsQ0FBQSxLQUFBLFlBQUEsTUFDQSxrQkFBQSxDQUFBLEtBQUEsWUFBQSxNQUNBLGFBQUEsS0FBQSxZQUNBLENBQ0EsRUFFQSxVQUFBLEVBQUEsWUFBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEVBQ0EsQ0FBQSxFQUVBLFdBQUEsRUFBQSxhQUFBLENBQ0EsS0FBQSxPQUNBLFFBQUEsVUFFQSxDQUFBLEVBRUEsWUFBQSxFQUFBLGNBQUEsQ0FDQSxLQUFBLENBQUEsT0FBQSxPQUFBLEVBQ0EsUUFBQSxHQUNBLElBQUEsRUFBQSxDQUNBLE1BQUEsR0FBQSxDQUFBLEVBQ0EsRUFDQSxDQUNBLE1BQUEsQ0FBQSxDQUFBLEVBQ0EsTUFBQSxDQUFBLENBQUEsQ0FDQSxDQUNBLENBQ0EsQ0FBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLFVBQUEsc0JBQ0EsVUFBQSxzQkFDQSxZQUFBLHFCQUNBLEVBRUEsU0FBQSxDQUNBLEdBQUEsR0FBQSxHQUNBLEVBQUEsR0FFQSxLQUFBLEdBQUEsSUFBQSxDQUNBLEFBQUEsQ0FBQSxLQUFBLFNBQUEsR0FDQSxHQUFBLEdBQ0EsS0FBQSxTQUFBLEVBRUEsRUFFQSxFQUFBLElBQUEsS0FBQSxRQUFBLEVBRUEsRUFBQSxJQUFBLENBQ0EsS0FBQSxPQUFBLEVBQ0EsRUFBQSxDQUNBLEVBRUEsRUFBQSxHQUFBLEdBQUEsQ0FDQSxFQUFBLEdBQ0EsS0FBQSxNQUFBLEVBQUEsRUFDQSxFQUFBLEdBQ0EsRUFBQSxDQUNBLEVBQUEsR0FBQSxFQUVBLEVBQUEsQ0FBQSxDQUFBLGFBQUEsQ0FDQSxFQUFBLENBQUEsRUFDQSxLQUFBLFFBQUEsQ0FDQSxFQUVBLEtBQUEsT0FBQSxRQUFBLEdBQUEsQ0FDQSxBQUFBLEVBQ0EsRUFBQSxHQUVBLEtBQUEsT0FBQSxXQUFBLEVBQUEsR0FBQSxLQUFBLFlBQUEsQ0FFQSxDQUFBLEVBRUEsS0FBQSxPQUFBLEdBQUEsSUFBQSxPQUNBLEtBQUEsZUFEQSxDQUVBLFVBQ0EsU0FDQSxXQUNBLFdBQUEsS0FBQSxpQkFBQSxFQUNBLFFBQUEsS0FBQSxPQUFBLEVBQ0EsRUFBQSxDQUNBLEVBRUEsZUFBQSxDQUNBLEtBQUEsT0FBQSxRQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsYUFBQSxFQUFBLENBQ0EsS0FBQSxHQUFBLENBQUEsQ0FBQSxRQUFBLEVBQUEsUUFBQSxLQUFBLEVBQUEsSUFBQSxNQUVBLEdBQUEsR0FBQSxFQUFBLENBQUEsRUFBQSxFQUNBLEVBQUEsV0FBQSxpQkFBQSxLQUFBLE1BQUEsT0FBQSxHQUFBLEVBQUEsTUFBQSxFQUVBLEtBQUEsR0FBQSxHQUFBLENBQ0EsS0FBQSxDQUFBLEtBQUEsRUFBQSxDQUFBLEVBQ0EsR0FBQSxFQUFBLEVBQ0EsRUFBQSxFQUNBLEtBQUEsT0FBQSxHQUFBLEtBQUEsSUFBQSxFQUFBLENBQUEsS0FDQSxFQUVBLEVBQUEsS0FBQSxNQUFBLFNBQUEsQ0FDQSxZQUVBLFFBQUEsRUFBQSxDQUNBLEVBQUEsQ0FBQSxFQUNBLEVBQUEsT0FBQSxDQUNBLENBQ0EsQ0FBQSxDQUNBLEVBRUEscUJBQUEsQ0FDQSxLQUFBLE9BQUEsV0FBQSxLQUFBLGFBQUEsQ0FDQSxPQUVBLGFBQUEsRUFBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLE1BQUEsV0FBQSxDQUNBLFdBQUEsQ0FDQSxLQUFBLENBQ0EsS0FBQSxNQUNBLE1BQUEsT0FDQSxVQUFBLEVBQ0EsRUFDQSxNQUFBLENBQ0EsS0FBQSxPQUNBLE1BQUEsT0FDQSxDQUNBLEVBQ0EsUUFBQSxDQUNBLE9BQUEsQ0FBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLFFBQUEsRUFDQSxPQUFBLENBQ0EsT0FBQSxDQUNBLE1BQUEsQ0FBQSxtQkFBQSxDQUNBLEVBQUEsUUFBQSxDQUNBLEtBQUEsS0FDQSxNQUFBLElBQ0EsQ0FBQSxDQUNBLENBQ0EsQ0FDQSxDQUNBLEVBQ0EsS0FBQSxLQUFBLE9BQUEsYUFBQSxNQUFBLENBQ0EsQ0FBQSxFQUNBLEdBQUEsRUFBQSxDQUNBLEdBQUEsQ0FBQSxPQUFBLFNBQUEsRUFDQSxHQUFBLEVBR0EsR0FBQSxDQUNBLEdBQUEsS0FBQSxDQUFBLENBQ0EsTUFBQSxDQUNBLEVBQUEsVUFBQSxHQUNBLENBRUEsRUFBQSxDQUFBLE9BQUEsUUFBQSxDQUNBLENBQ0EsRUFFQSxrQkFBQSxDQUNBLEtBQUEsQ0FDQSxRQUFBLENBQUEsRUFDQSxRQUFBLENBQUEsRUFDQSxRQUFBLENBQUEsR0FDQSxLQUFBLE9BQ0EsTUFBQSxDQUVBLEVBQUEsTUFBQSxHQUFBLElBQ0EsRUFBQSxRQUFBLEdBQUEsSUFDQSxFQUFBLFdBQUEsR0FBQSxJQUNBLEVBQUEsUUFBQSxHQUFBLElBQ0EsRUFBQSxPQUFBLEdBQUEsSUFDQSxFQUFBLE1BQUEsR0FBQSxJQUNBLEVBQUEsTUFBQSxHQUFBLElBR0EsRUFBQSxZQUFBLEdBQUEsSUFDQSxFQUFBLFdBQUEsR0FBQSxJQUNBLEdBQUEsSUFDQSxFQUFBLFNBQUEsR0FBQSxJQUFBLENBQUEsT0FBQSxFQUFBLFFBQUEsRUFDQSxFQUFBLGdCQUFBLEdBQUEsSUFDQSxHQUFBLGFBQUEsRUFBQSxhQUFBLEdBQUEsSUFDQSxFQUFBLFlBQUEsR0FBQSxJQUNBLEVBQUEsYUFBQSxHQUFBLElBTUEsRUFBQSxTQUFBLEdBQUEsR0FDQSxFQUFBLE9BQUEsR0FBQSxDQUFBLENBQUEsQ0FBQSxDQUNBLEVBRUEsV0FBQSxFQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsQ0FBQSxFQUVBLEVBQUEsQ0FBQSxDQUFBLE9BQUEsT0FBQSxRQUFBLGVBQUEsYUFBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLE9BQUEsU0FBQSxHQUNBLEVBQUEsS0FBQSxPQUFBLFNBQUEsR0FDQSxFQUFBLEtBQUEsQ0FDQSxPQUNBLE9BQ0EsU0FDQSxrQkFBQSxLQUNBLElBQUEsTUFBQSxDQUFBLEtBRUEsUUFBQSxJQUFBLEVBQ0EsRUFBQSxFQUFBLENBQUEsRUFDQSxFQUFBLENBQUEsQ0FDQSxDQUFBLENBQ0EsRUFFQSxFQUFBLEtBQUEsT0FBQSxHQUNBLEdBQUEsRUFDQSxTQUFBLENBQUEsRUFBQSxJQUFBLFFBQUEsUUFBQSxDQUFBLEVBQUEsQ0FDQSxLQUFBLEdBQUEsQ0FBQSxPQUFBLE1BQUEsRUFBQSxTQUFBLENBQUEsRUFBQSxVQUFBLEVBQ0EsRUFBQSxFQUFBLEdBQ0EsRUFBQSxHQUFBLENBQUEsRUFDQSxFQUFBLEVBQUEsQ0FBQSxFQUNBLEdBQUEsR0FDQSxHQUFBLElBQUEsR0FDQSxFQUFBLENBQUEsT0FBQSxPQUFBLFVBQ0EsRUFBQSxDQUFBLEVBQUEsQ0FDQSxLQUFBLENBQUEsT0FBQSxTQUFBLGVBQUEsV0FBQSxFQUNBLEdBQUEsR0FDQSxHQUFBLEVBQUEsQ0FBQSxHQUFBLEVBQUEsQ0FBQSxFQUVBLFNBQUEsS0FBQSxHQUNBLEFBQUEsRUFBQSxTQUFBLENBQUEsR0FDQSxFQUFBLENBQ0EsT0FDQSxLQUFBLEdBQUEsS0FBQSxJQUNBLE1BQUEsRUFBQSxHQUFBLENBQUEsRUFDQSxlQUNBLFNBQ0EsQ0FBQSxNQUtBLEdBQUEsQ0FBQSxPQUFBLE9BQUEsZUFBQSxTQUFBLENB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QSxjQUFBLEtBQUEsU0FDQSxJQUFBLENBQUEsR0FBQSxJQUFBLEdBQUEsS0FBQSxrQkFBQSxDQUFBLENBQUEsRUFDQSxLQUFBLGtCQUFBLENBQUEsQ0FDQSxDQUNBLEVBRUEsZUFBQSxDQUNBLE1BQUEsTUFBQSxpQkFBQSxLQUFBLE9BQ0EsRUFFQSxTQUFBLEVBQUEsV0FBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEVBQ0EsQ0FBQSxFQUVBLFdBQUEsRUFBQSxhQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsRUFDQSxDQUFBLEVBRUEsU0FBQSxFQUFBLFdBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxFQUNBLENBQUEsRUFFQSxTQUFBLEVBQUEsV0FBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEVBQ0EsQ0FBQSxFQUVBLGFBQUEsQ0FDQSxLQUFBLENBQUEsY0FBQSxhQUFBLFlBQUEsS0FBQSxPQUNBLE1BQUEsSUFDQSxJQUFBLEVBQUEsc0JBQ0EsRUFBQSx5QkFDQSxPQUVBLENBQ0EsRUFFQSxTQUFBLENBQ0EsQUFBQSxLQUFBLFdBR0EsS0FBQSxNQUFBLENBRUEsRUFFQSxRQUFBLENBRUEsY0FBQSxDQUVBLE1BQUEsQ0FDQSxNQUFBLEtBQUEsUUFDQSxLQUFBLEtBQUEsT0FDQSxNQUFBLEtBQUEsUUFDQSxDQUNBLEVBRUEsYUFBQSxFQUFBLENBQ0EsR0FBQSxLQUFBLFNBQUEsQ0FDQSxLQUFBLENBQUEsY0FBQSxlQUFBLEtBQ0EsRUFBQSxHQUFBLEVBQ0EsRUFDQSxHQUFBLEdBR0EsR0FBQSxDQUNBLEVBQ0EsRUFDQSxZQUFBLFFBQUEsS0FBQSxDQUFBLEVBQ0EsQ0FDQSxDQUNBLEVBRUEsY0FBQSxDQUNBLEtBQUEsTUFBQSxRQUFBLFNBQUEsQ0FDQSxFQUVBLFNBQUEsRUFBQSxDQUNBLEtBQUEsR0FBQSxLQUFBLGFBQUEsQ0FBQSxFQUNBLEFBQUEsR0FDQSxLQUFBLE1BQUEsS0FBQSxLQUFBLGtCQUFBLENBQUEsQ0FBQSxDQUVBLE9BRUEsZ0JBQUEsRUFBQSxDQUNBLEFBQUEsS0FBQSxjQUNBLENBQUEsRUFHQSxN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LENBQ0EsV0FBQSxDQUNBLE1BQUEsQ0FDQSxXQUFBLE9BQ0EsU0FBQSxPQUNBLE9BQUEsTUFDQSxFQUFBLEtBQUEsT0FBQSxLQUFBLElBQ0EsRUFFQSxXQUFBLENBQ0EsS0FBQSxDQUNBLE1BQ0EsTUFBQSxPQUFBLFlBQ0EsS0FBQSxRQUFBLFFBQ0EsQ0FBQSxLQUFBLFFBRUEsR0FDQSxLQUFBLEtBQ0EsRUFFQSxJQUFBLEVBQUEsQ0FDQSxLQUFBLE1BQUEsQ0FDQSxDQUNBLENBQ0EsRUFFQSxRQUFBLENBQ0EsZ0JBQUEsQ0FDQSxLQUFBLEdBQUEsQ0FDQSxNQUFBLFFBQ0EsSUFBQSxNQUNBLFNBQUEsV0FDQSxPQUFBLFNBQ0EsU0FBQSxXQUNBLFdBQUEsWUFDQSxFQUFBLEtBQUEsTUFDQSxNQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsRUFBQSxDQUFBLENBQ0EsQ0FDQSxDQUNBLENBQUEsb0lDbEVJSCxHQUFTLFVBQVksQ0FBQyxHQUFJLEdBQUksS0FBUyxFQUFHLEVBQUksZUFBbUIsRUFBRyxFQUFJLE1BQU0sSUFBSSxFQUFHLE1BQU8sR0FBRyxXQUFXLEVBQUksR0FBRyxFQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLFFBQVEsUUFBUSxVQUFVLE1BQU8sRUFBSSxNQUFPLFdBQVcsT0FBTyxDQUFDLEVBQUUsSUFBSSxVQUFVLFlBQVksMkJBQTJCLE1BQU0sQ0FBRSxpQkFBa0IsRUFBSSxTQUFTLEVBQUcsTUFBTSxDQUFDLEdBQUssRUFBSSxTQUFTLEtBQU8sRUFBSSxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQVMsRUFBSSxLQUFNLEVBQUUsR0FBRyxDQUFDLE1BQVEsU0FBUyxFQUFPLENBQUMsQUFBRyxFQUFPLE9BQU8sV0FBcUIsR0FBSSxNQUFNLEVBQU8sT0FBTyxNQUFLLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBSSxXQUFXLEVBQUssRUFBRSxFQUFJLFNBQVMsQ0FBQyxDQUFDLEVBQ3pnQkMsR0FBa0IsQ0FBQSxRQ3lCdEIsS0FBQUMsSUFBQUMsRUFBQSxTQUFBLFdBQUEsQ0FDQSxZ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QUFJLElBQVMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLE1BQU0sQ0FBQyxZQUFZLGFBQWEsRUFBRSxDQUFDLEVBQUcsUUFBUSxDQUFDLFlBQVksd0RBQXdELEVBQUUsQ0FBQyxFQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUcsZ0JBQWdCLEVBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFNLFFBQVEsS0FBTyxFQUFJLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBUSxFQUFJLFlBQVksSUFBTSxFQUFJLFNBQVMsQ0FBQyxFQUFFLGdCQUFnQixFQUFJLGVBQWUsRUFBSSxTQUFTLEVBQUUsRUFBSyxFQUFFLEVBQUksR0FBSSxFQUFJLE1BQU8sU0FBUyxFQUFLLEVBQU0sQ0FBQyxNQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBSyxHQUFHLEVBQUUsQ0FBQyxFQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBWSxFQUFJLEdBQUcsRUFBSSxXQUFXLEVBQU0sQ0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRyxLQUFLLENBQUMsRUFBSSxHQUFHLEVBQUksR0FBRyxFQUFJLEdBQUcsZ0JBQWdCLEVBQUUsRUFBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFHLEtBQUssQ0FBRSxFQUFLLE9BQVEsQ0FBRSxFQUFLLE9BQU8sTUFBTyxDQUFDLEVBQUksR0FBRyxVQUFVLEVBQUksR0FBRyxFQUFLLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRyxFQUFLLE9BQU8sT0FBUSxDQUFDLEVBQUksR0FBRyxjQUFjLENBQUMsRUFBRyxFQUFLLE9BQU8sUUFBUyxDQUFDLEVBQUksR0FBRyxVQUFVLENBQUMsRUFBRSxFQUFJLElBQUksRUFBRSxDQUFDLEVBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFHLEtBQUssQ0FBQyxZQUFZLHdCQUF3QixFQUFFLENBQUMsRUFBRyxNQUFNLENBQUMsWUFBWSxpQ0FBaUMsRUFBRSxDQUFFLEVBQUksVUFBVyxFQUFHLElBQUksRUFBSSxHQUFHLENBQUMsWUFBWSxhQUFhLEVBQUUsSUFBSSxFQUFJLG9CQUFvQixFQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUssQ0FBQyxFQUFFLEVBQUksR0FBRSxFQUFJLEVBQUksVUFBVyxFQUFHLFNBQVMsRUFBSSxHQUFHLENBQUMsWUFBWSxjQUFjLE1BQU0sQ0FBQyxLQUFPLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBUSxTQUFTLEVBQU8sQ0FBQyxNQUFPLEdBQUksV0FBVyxFQUFNLENBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUksb0JBQW9CLEVBQUksTUFBTSxNQUFNLEVBQUUsRUFBSyxDQUFDLEVBQUUsRUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRyxRQUFRLENBQUMsRUFBRyxLQUFLLENBQUMsRUFBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFHLE1BQU0sQ0FBQyxZQUFZLG9CQUFvQixFQUFFLENBQUUsRUFBSSxlQUFnQixFQUFHLFdBQVcsQ0FBQyxZQUFZLGdCQUFnQixNQUFNLENBQUMsSUFBTSxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQVEsRUFBSSxjQUFjLENBQUMsQ0FBQyxFQUFFLEVBQUksR0FBRSxFQUFHLEVBQUcsTUFBTSxDQUFDLFlBQVksaUNBQWlDLEVBQUUsQ0FBRSxFQUFJLGVBQWdCLEVBQUcsU0FBUyxDQUFDLFlBQVksY0FBYyxNQUFNLENBQUMsS0FBTyxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQVEsU0FBUyxFQUFPLENBQUMsRUFBTyxlQUFnQixFQUFDLEVBQUksT0FBTyxPQUFTLEVBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFJLEdBQUcsWUFBWSxDQUFDLENBQUMsRUFBRyxFQUFJLGNBQWUsRUFBRyxTQUFTLENBQUMsWUFBWSxjQUFjLE1BQU0sQ0FBQyxLQUFPLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBUSxTQUFTLEVBQU8sQ0FBQyxFQUFPLGVBQWdCLEVBQUMsRUFBSSxPQUFPLE9BQVMsRUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUksR0FBRyxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUksS0FBSyxFQUFHLGFBQWEsQ0FBQyxJQUFJLFNBQVMsWUFBWSxxQ0FBcUMsTUFBTSxDQUFDLFdBQVcsRUFBSSxTQUFTLEtBQU8sRUFBSSxTQUFTLFNBQVcsRUFBSSxTQUFTLGNBQWMsRUFBSSxXQUFXLFdBQWEsRUFBSSxXQUFXLE9BQVMsRUFBSSxPQUFPLFNBQVcsRUFBSSxTQUFTLEtBQU8sRUFBSSxRQUFRLE1BQVEsY0FBYyxFQUFFLEdBQUcsQ0FBQyxlQUFlLEVBQUksWUFBWSxhQUFhLEVBQUksU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFPLEVBQUksUUFBUyxTQUFTLFNBQVUsRUFBSyxDQUFDLEVBQUksUUFBUSxDQUFHLEVBQUUsV0FBVyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDLzJFLEdBQWtCLENBQUMsVUFBWSxDQUFDLEdBQUksR0FBSSxLQUFTLEVBQUcsRUFBSSxlQUFtQixFQUFHLEVBQUksTUFBTSxJQUFJLEVBQUcsTUFBTyxHQUFHLFFBQVEsQ0FBQyxZQUFZLGlCQUFpQixFQUFFLENBQUMsRUFBRyxLQUFLLENBQUMsRUFBRyxLQUFLLENBQUMsRUFBRyxPQUFPLENBQUMsRUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUcsS0FBSyxDQUFDLEVBQUcsT0FBTyxDQUFDLEVBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFHLEtBQUssQ0FBQyxFQUFHLE9BQU8sQ0FBQyxFQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRyxLQUFLLENBQUMsRUFBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQ3NIaFQsS0FBQSxJQUFBQSxFQUFBLFNBQUEsU0FBQSxDQUNBLFdBQUEsQ0FBQSxhQUFBLGVBQUEsRUFDQSxRQUFBLENBQUEsaUJBQUEsRUFDQSxPQUFBLENBQUEsRUFBQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsUUFBQSxDQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxRQUFBLENBQ0EsTUFBQSxNQUFBLE1BQUEsTUFDQSxFQUVBLE9BQUEsQ0FDQSxNQUFBLElBQUEsS0FBQSxLQUFBLENBQ0EsRUFFQSxTQUFBLEVBQUEsV0FBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEdBRUEsU0FBQSxFQUNBLENBQUEsRUFFQSxXQUFBLEVBQUEsYUFBQSxDQUNBLEtBQUEsQ0FBQSxNQUFBLE9BQUEsTUFBQSxDQUNBLENBQUEsRUFFQSxPQUFBLEVBQUEsU0FBQSxDQUNBLEtBQUEsTUFDQSxJQUFBLEVBQUEsQ0FDQSxNQUFBLEdBQUEsQ0FBQSxFQUFBLEVBQUEsS0FBQSxHQUFBLEVBQUEsQ0FDQSxDQUNBLENBQUEsRUFFQSxRQUFBLEVBQUEsVUFBQSxDQUNBLEtBQUEsQ0FBQSxPQUFBLE1BQUEsRUFDQSxJQUFBLEVBQUEsQ0FDQSxNQUFBLEdBQUEsR0FBQSxDQUFBLEVBQUEsTUFDQSxDQUNBLENBQUEsRUFFQSxVQUFBLEVBQUEsWUFBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEdBQ0EsSUFBQSxFQUFBLENBQ0EsTUFBQSxJQUFBLEtBQUEsTUFBQSxPQUFBLENBQ0EsQ0FDQSxDQUFBLEVBRUEsVUFBQSxFQUFBLFlBQUEsQ0FDQSxLQUFBLFFBQ0EsUUFBQSxFQUNBLENBQUEsRUFFQSxlQUFBLENBQ0EsTUFBQSxNQUFBLFFBQUEsUUFDQSxDQUFBLE1BQUEsT0FBQSxRQUFBLEtBQUEsT0FBQSxTQUNBLEVBRUEsZ0JBQUEsQ0FDQSxNQUFBLE1BQUEsUUFBQSxRQUFBLEtBQUEsT0FBQSxNQUNBLEVBRUEsZ0JBQUEsQ0FDQSxNQUNBLE1BQUEsUUFBQSxPQUFBLENBQUEsRUFBQSxJQUFBLEVBQUEsRUFBQSxTQUFBLENBQUEsRUFDQSxLQUFBLFFBQUEsTUFFQSxFQUVBLFlBQUEsQ0FDQSxNQUFBLE1BQUEsZUFBQSxDQUNBLEtBQUEsU0FDQSxLQUFBLEtBQUEsSUFBQSxjQUFBLEtBQUEsUUFBQSxDQUNBLENBQUEsQ0FDQSxDQUNBLEVBRUEsUUFBQSxDQUNBLFdBQUEsRUFBQSxFQUFBLENBQ0EsS0FBQSxDQUFBLFVBQUEsS0FBQSxPQUNBLE1BQUEsR0FDQSxFQUFBLEtBQ0EsS0FDQSxHQUFBLEdBQUEsS0FBQSxDQUNBLE1BQUEsRUFDQSxLQUFBLEtBQUEsTUFDQSxRQUNBLFNBQUEsRUFBQSxLQUFBLFNBQUEsQ0FBQSxDQUNBLENBQUEsQ0FDQSxFQUNBLEdBQUEsRUFBQSxJQUFBLENBQ0EsRUFFQSxXQUFBLEVBQUEsRUFBQSxDQUNBLEtBQUEsQ0FBQSxRQUFBLEVBRUEsQUFBQSxHQUFBLE9BQUEsUUFDQSx5QkFBQSxLQUFBLE1BQUEsVUFBQSxJQUFBLEdBRUEsQ0FBQSxLQUFBLFNBQ0EsS0FBQSxNQUFBLE9BQUEsRUFBQSxDQUFBLEVBRUEsS0FBQSxNQUFBLEtBRUEsRUFBQSxRQUNBLEtBQUEsT0FBQSxPQUFBLEVBQUEsTUFBQSxFQUVBLEtBQUEsU0FBQSxFQUNBLEtBQUEsT0FBQSxDQUNBLEtBQUEsT0FDQSxNQUFBLHVCQUNBLEtBQUEsR0FBQSxTQUFBLEtBQUEsTUFBQSxVQUNBLENBQUEsRUFFQSxFQUVBLGFBQUEsRUFBQSxDQUNBLE1BQUEsTUFBQSxVQUFBLEtBQUEsTUFDQSxLQUFBLE1BQUEsVUFBQSxHQUFBLEVBQUEsS0FBQSxFQUFBLEVBQUEsRUFDQSxFQUNBLEVBRUEsUUFBQSxFQUFBLENBQ0EsQUFBQSxLQUFBLFNBQ0EsQUFBQSxLQUFBLE1BQ0EsS0FBQSxNQUFBLEtBQUEsQ0FBQSxFQUVBLEtBQUEsTUFBQSxDQUFBLENBQUEsRUFHQSxLQUFBLE1BQUEsQ0FFQSxFQUVBLFlBQUEsRUFBQSxFQUFBLENBQ0EsR0FBQSxLQUFBLFNBQUEsQ0FDQSxLQUFBLEdBQUEsS0FBQSxhQUFBLENBQUEsRUFDQSxBQUFBLEdBQUEsR0FDQSxDQUFBLEVBQ0EsS0FBQSxLQUFBLEtBQUEsTUFBQSxFQUFBLENBQUEsRUFFQSxLQUFBLE1BQUEsT0FBQSxFQUFBLENBQUEsRUFHQSxLQUNBLE1BQUEsTUFBQSxDQUVBLEVBRUEsV0FBQSxFQUFBLENBQ0EsS0FBQSxZQUFBLEVBQUEsSUFBQSxDQUNBLEVBRUEsVUFBQSxFQUFBLEVBQUEsQ0FDQSxHQUFBLEdBQUEsQ0FBQSxFQUFBLENBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLEVBQ0EsS0FBQSxRQUFBLENBQUEsS0FBQSxPQUFBLE9BQUEsT0FBQSxFQUFBLENBQ0EsQ0FDQSxHQUFBLEdBQUEsRUFBQSxDQUNBLEtBQUEsQ0FBQSxVQUFBLFNBQUEsRUFDQSxHQUFBLEVBQUEsQ0FDQSxLQUFBLFNBQUEsRUFDQSxLQUFBLEdBQUEsRUFBQSxTQUFBLEdBQ0EsQUFBQSxFQUNBLEdBQUEsT0FBQSxFQUdBLEtBQUEsWUFBQSxFQUFBLENBQUEsR0FFQSxLQUFBLFdBQUEsQ0FBQSxDQUVBLFNBQUEsRUFBQSxDQUNBLEtBQUEsR0FBQSxDQUNBLE1BQUEsaUJBQ0EsT0FBQSxnQkFDQSxVQUFBLDBCQUFBLEVBQUEsT0FDQSxRQUFBLDBDQUNBLE9BQUEsc0NBQ0EsS0FBQSxzQkFBQSxHQUFBLEVBQUEsSUFBQSxJQUNBLFFBQUEsZ0NBRUEsRUFBQSxJQUFBLCtCQUFBLEtBQ0EsS0FBQSxPQUFBLENBQ0EsS0FBQSxRQUNBLE1BQUEsb0JBQ0EsTUFDQSxDQUFBLEVBQ0EsS0FBQSxXQUFBLENBQUEsQ0FDQSxDQUNBLENBQ0EsRUFFQSxZQUFBLEVBQUEsT0FDQSxLQUFBLEdBQUEsaUJBQUEsSUFDQSxBQUFBLFNBQUEsSUFBQSxPQUFBLGNBQUEsY0FBQSxHQUFBLENBQUEsRUFBQSxpQkFDQSxHQUFBLGdCQUFBLEdBRUEsQ0FDQSxFQUVBLGFBQUEsRUFBQSxFQUFBLENBRUEsS0FBQSxHQUFBLEdBQUEsQ0FBQSxFQUNBLElBQ0EsQUFBQSxH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