@ditojs/admin 1.12.0 → 1.13.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
- (function(v,E){typeof exports=="object"&&typeof module<"u"?module.exports=E(require("vue"),require("vue-js-modal"),require("vue-router"),require("vue-notification"),require("@ditojs/utils"),require("nanoid"),require("@ditojs/ui"),require("vuedraggable"),require("codeflask"),require("tinycolor2"),require("vue-color"),require("tiptap"),require("tiptap-commands"),require("tiptap-extensions"),require("vue-multiselect"),require("vue-upload-component"),require("filesize-parser"),require("filesize")):typeof define=="function"&&define.amd?define(["vue","vue-js-modal","vue-router","vue-notification","@ditojs/utils","nanoid","@ditojs/ui","vuedraggable","codeflask","tinycolor2","vue-color","tiptap","tiptap-commands","tiptap-extensions","vue-multiselect","vue-upload-component","filesize-parser","filesize"],E):(v=typeof globalThis<"u"?globalThis:v||self,v["dito-admin"]=E(v.vue,v["vue-js-modal"],v["vue-router"],v["vue-notification"],v["@ditojs/utils"],v.nanoid,v["@ditojs/ui"],v.vuedraggable,v.codeflask,v.tinycolor2,v["vue-color"],v.tiptap,v["tiptap-commands"],v["tiptap-extensions"],v["vue-multiselect"],v["vue-upload-component"],v["filesize-parser"],v.filesize))})(this,function(v,E,A,gs,o,vs,k,bs,ys,$s,Cs,W,Ps,F,Ds,ws,Ss,xs){"use strict";var Pu=Object.defineProperty;var Du=(v,E,A)=>E in v?Pu(v,E,{enumerable:!0,configurable:!0,writable:!0,value:A}):v[E]=A;var St=(v,E,A)=>(Du(v,typeof E!="symbol"?E+"":E,A),A);const L=t=>t&&typeof t=="object"&&"default"in t?t:{default:t},q=L(v),Os=L(E),xt=L(A),js=L(gs),et=L(bs),Fs=L(ys),st=L($s),Vs=L(Ds),Es=L(ws),ks=L(Ss),Ot={title:"",routeComponents:[],user:null,loadCache:{},activeLabel:null,clipboardData:null};function V(t,e){return t?`${t}/${e}`:e}function Ls(t){const e=o.parseDataPath(t);return e==null||e.pop(),e}function nt(t,e=!1){return e?Ls(t):o.parseDataPath(t)}function Bs(t,e=!1){return o.normalizeDataPath(nt(t,e))}function jt(t,e=!1){const s=nt(t,e);if(s){let n;do n=s.pop();while(n!=null&&o.isInteger(+n));if(n!=null)return s}return null}function Rs(t,e=!1){return o.normalizeDataPath(jt(t,e))}function at(t,e,s=!1){const n=nt(e,s);return n?o.getValueAtDataPath(t,n):null}function rt(t,e,s=!1){const n=jt(e,s);return n?o.getValueAtDataPath(t,n):null}function Ft(t){const e=o.parseDataPath(t);return e[e.length-1]}function Ts(t){const e=Ft(t);return e==null||o.isInteger(+e)?null:e}function it(t){const e=Ft(t),s=e==null?null:+e;return o.isInteger(s)?s:null}let qs=0;function Is(t,e="id"){t[e]=`@${++qs}`}function J(t){return/^@/.test(t)}function Ms(t,e="id"){return(t==null?void 0:t[e])!=null&&Object.keys(t).length===1}const ot=new WeakMap;function C(t,e,s){const n=ot.get(t),a=n[e];return a!==void 0||n.hasOwnProperty(e)?a:o.isFunction(s)?s():s}function As(t,e,s){ot.get(t)[e]=s}class w{constructor(e,s){var a;s=s?o.isFunction(s)?s():{...s}:{},(a=s.nested)!=null||(s.nested=!0),s.component=e;const n=Object.setPrototypeOf(s,e);ot.set(this,n)}static get(e,s){return s instanceof w?s:new w(e,s)}get nested(){return C(this,"nested",!0)}get value(){return C(this,"value",void 0)}get dataPath(){return C(this,"dataPath","")}get name(){return C(this,"name",()=>Ts(this.dataPath))}get index(){return C(this,"index",()=>it(this.dataPath))}get itemDataPath(){return Bs(this.dataPath,this.nested)}get parentItemDataPath(){return Rs(this.dataPath,this.nested)}get itemIndex(){return it(this.itemDataPath)}get parentItemIndex(){return it(this.parentItemDataPath)}get item(){return C(this,"data",()=>at(this.rootItem,this.dataPath,this.nested))}get parentItem(){const e=rt(this.rootItem,this.dataPath,this.nested)||null;return e!==this.item?e:null}get rootItem(){return C(this,"rootData",null)}get processedItem(){return C(this,"processedData",null)}get clipboardItem(){return C(this,"clipboardData",null)}get user(){return C(this,"user",null)}get api(){return C(this,"api",null)}get views(){return C(this,"views",null)}get itemLabel(){return C(this,"itemLabel",null)}get formLabel(){return C(this,"formLabel",null)}get component(){return C(this,"component",null)}get schemaComponent(){return C(this,"schemaComponent",null)}get formComponent(){return C(this,"formComponent",null)}get viewComponent(){return C(this,"viewComponent",null)}get dialogComponent(){return C(this,"dialogComponent",null)}get panelComponent(){return C(this,"panelComponent",null)}get resourceComponent(){return C(this,"resourceComponent",null)}get sourceComponent(){return C(this,"sourceComponent",null)}get option(){return C(this,"option",void 0)}get options(){return C(this,"options",void 0)}get query(){return C(this,"query",void 0)}get error(){return C(this,"error",void 0)}get wasNotified(){return C(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),As(this,"wasNotified",!0)}}}const Ns={data(){return{$events:null}},methods:{on(t,e){if(o.isArray(t))for(const s of t)this.on(s,e);else if(o.isPlainObject(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(o.isArray(t))for(const n of t)this.off(n,e);else if(o.isPlainObject(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 l=async()=>{const u=a.shift();if(u){let c;for(const d of r)try{const f=await d.apply(this,u.args);f!==void 0&&(c=f)}catch(f){console.error(`Error during event handler for '${t}':`,f)}u.resolve(c),l()}};a.push({args:e,resolve:i}),a.length===1&&l()})}},hasListeners(t){var e;if(o.isArray(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(o.isArray(t))for(const s of t)this.delegate(s,e);else this.on(t,(...s)=>e.emit(t,...s));return this}}},lt={Boolean:o.isBoolean,Number:o.isNumber,String:o.isString,Date:o.isDate,Array:o.isArray,Object:o.isObject,RegExp:o.isRegExp,Function:o.isFunction},zs={Boolean:t=>!!t,Number:t=>+t,String:t=>String(t),Date:t=>o.isDate(t)?t:new Date(t),Array:t=>o.isArray(t)?t:o.isString(t)?t.split(","):o.asArray(t),Object:t=>o.isObject(t)?t:t===!0?{}:null,RegExp:t=>o.isRegExp(t)?t:new RegExp(t)};function ut(t,e){var s;if(t&&e!=null){for(const n of t)if((s=lt[n.name])!=null&&s.call(lt,e))return!0}return!1}function Us(t,e){const s=t&&zs[t.name||t];return s?s(e):e}function Vt(t){return!!B(t.resource)}function B(t,e={}){var a;const{parent:s,...n}=e;return t=o.isObject(t)?{...n,...t}:o.isString(t)?{...n,path:t}:null,t&&s!==void 0&&t.parent===void 0&&!((a=t.path)!=null&&a.startsWith("/"))&&(t.parent=s,t.path||(t.path=".")),t}function ct(t,e){return t!=null&&(e==null?void 0:e.type)==="collection"?{type:"member",...o.pickBy(e,(s,n)=>["method","path","parent"].includes(n)),id:`${t}`}:null}const dt={mixins:[Ns],inject:["api","$verbs","$views","$isPopulated","$schemaComponent","$routeComponent","$dataComponent","$sourceComponent","$resourceComponent","$dialogComponent","$panelComponent","$tabComponent"],provide(){return this.providesData?{$dataComponent:()=>this}:{}},data(){return{appState:Ot,overrides:null}},computed:{sourceSchema(){var t;return(t=this.meta)==null?void 0:t.schema},user(){return Ot.user},verbs(){return this.$verbs()},views(){return this.$views()},isPopulated(){return this.$isPopulated()},locale(){return this.api.locale},context(){return new w(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=++Hs},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&&o.asArray(e);let i=n?o.isArray(t)?o.getValueAtDataPath(n,t,()=>{}):n[t]:void 0;if(i===void 0&&s!==void 0)return a&&o.isFunction(s)&&!ut(r,s)&&(s=s.call(this,this.context)),s;if(ut(r,i))return i;if(a&&o.isFunction(i)&&(i=i.call(this,this.context)),r&&i!=null&&!ut(r,i))for(const l of r){const u=Us(l,i);if(u!==i)return u}return i},getLabel(t,e){return t?this.getSchemaValue("label",{type:String,schema:t})||o.labelize(e||t.name):o.labelize(e)||""},labelize:o.labelize,getButtonAttributes(t,e){const s=this.verbs[t]||t;return{class:`dito-button-${s}`,title:(e==null?void 0:e.text)||o.labelize(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(g.component("dito-dialog"),{components:t,buttons:e,data:s,promise:{resolve:a,reject:r}},n)})},getResourcePath(t){var e;return t=B(t),t.parent===void 0&&(t.parent=(e=this.dataComponent)==null?void 0:e.resource),this.api.resources.any(B(t))},getResourceUrl(t){const e=this.getResourcePath(t);if(!e)return null;const s=this.api.getApiUrl(e),{query:n}=t,a=n&&new URLSearchParams(n).toString();return a?`${s}?${a}`:s},async sendRequest({method:t,url:e,resource:s,query:n,data: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 l=await this.api.request({method:t,url:e,data:a,query:n});return i&&t==="patch"&&o.equals(s,ct(this.user.id,this.api.users))&&await this.rootComponent.fetchUser(),l},request({cache:t,...e}){const s=t&&{global:this.appState,local:this.dataComponent}[t],n=s==null?void 0:s.loadCache,a=n&&`${e.method||"get"} ${e.url} ${JSON.stringify(e.query||e.params||"")} ${JSON.stringify(e.data||"")}`;if(n&&a in n)return n[a];const r=this.sendRequest(e).then(i=>i.data).catch(i=>{var u;const l=(u=i.response)==null?void 0:u.data;throw l?Object.assign(new Error(l.message),l):i});return n&&(n[a]=r),r},format(t,{locale:e=this.api.locale,defaults:s=this.api.formats,...n}={}){return o.format(t,{locale:e,defaults:s,...n})},async navigate(t){return new Promise(e=>{this.$router.push(t,()=>e(!0),()=>e(!1))})},download(t={}){o.isString(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||{}))o.isFunction(e)?this[t]=e:console.error(`Invalid method definition: ${t}: ${e}`)},setupComputed(){for(const[t,e]of Object.entries(this.schema.computed||{})){const s=o.isFunction(e)?{get:e}:o.isObject(e)&&o.isFunction(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=o.isFunction(t)?t.call(this):t;o.isObject(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)=>{o.isFunction(r)?this.on(o.hyphenate(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=w.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 Hs=0;const Ks=Object.freeze(Object.defineProperty({__proto__:null,creditcard:{validate:t=>o.isCreditCard(t),message:"is invalid"},decimals:{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`},email:{validate:t=>o.isEmail(t),message:"must be a valid email"},hostname:{validate:t=>o.isHostname(t),message:"is not a host name"},domain:{validate:t=>o.isDomain(t),message:"is not a domain"},integer:{validate:t=>o.isInteger(t),message:"must be whole number"},max:{validate:(t,e)=>t<=e,message(t,e){return`must be ${e} or less`}},min:{validate:(t,e)=>t>=e,message(t,e){return`must be ${e} or more`}},password:{validate:()=>!0},range:{validate:(t,[e,s])=>t>=e&&t<=s,message(t,[e,s]){return`must be between ${e} and ${s}`}},required:{validate:(t,e,{password:s})=>t!=null&&t!==""||s&&t===void 0,message:"is required",nullish:!0},url:{validate:t=>o.isUrl(t),message:"is not a valid URL"}},Symbol.toStringTag,{value:"Module"})),Ws={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=Ks[n];if(r&&(r.nullish||s!=null)){const{validate:i,message:l}=r;if(!i(s,a,this.validations)&&(e=!1,t)){const u=o.isFunction(l)?l(s,a,this):l;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}={}){o.isString(t)&&t.includes(".")&&(t=o.parseDataPath(t));const i=o.normalizeDataPath(t);return{get(){const l=!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,l):l},set(l){a?a.call(this,l):(this.overrides||(this.overrides={}),this.$set(this.overrides,i,l))}}}function ht(t,{default:e,get:s,set:n}={}){return{get(){let a=this.getStore(t);return a===void 0&&e!==void 0&&(a=o.isFunction(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 Et=new WeakMap;let Js=0;function Qs(t,e){let s=Et.get(t);return s||(s=e||`@${++Js}`,Et.set(t,s)),s}class Gs{constructor(){St(this,"graph",{});St(this,"references",{})}set(e,s,n){var r;e=o.parseDataPath(e);let a=this.graph;for(const i of e){const l=o.isInteger(+i)?"*":i;a=(r=a[l])!=null?r:a[l]={}}a.$settings={...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]=vs.nanoid(6):null}flatten(){const e=s=>{const n=[];for(const[a,{$settings:r,...i}]of Object.entries(s)){r&&n.push([a,r]);for(const[l,u]of e(i))n.push([`${a}/${l}`,u])}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:l,schema:u,internal:c,related:d,reference:f}=i,_=l==="source",$=l==="relation";if(_||$&&c){const m=o.getValueAtDataPath(s,r,()=>null),P=a&&_&&!d,x=a&&($&&c||_&&d);for(const D of o.asArray(m).flat()){const b=_&&u.idKey||$&&u.relateBy||"id";let S=D==null?void 0:D[b];if(S!=null&&(P&&delete D[b],x||J(S))){J(S)&&(S=S.slice(1));const j=a?b:_?"#id":"#ref",O=a?`@${S}`:f?`${f}-${S}`:S;D[j]=O,j!==b&&delete D[b]}}}}return s}}const kt={},Lt={};function Xs(t,e){kt[t]=e}function pt(t,e=!1){const s=kt[t]||null;if(!s&&!e&&!Lt[t])throw Lt[t]=!0,new Error(`Unknown Dito component type: '${t}'`);return s}function Bt(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 Rt(t,e){return Bt(t,s=>{for(const[n,a]of Object.entries(s.components||{})){const r=e(a,n);if(r!==void 0)return r}})}function Ys(t,e){return Rt(t,(s,n)=>e(s,n)?!0:void 0)===!0}async function mt(t,e=!1){if(o.isFunction(t)&&(t=t()),o.isPromise(t)&&(t=await t),o.isModule(t)&&(t={...t},!t.name&&(e||t.default))){const s=Object.keys(t);if(s.length===1){const n=s[0];t=t[n],n!=="default"&&(t.name=n)}}return t}async function ft(t,e=mt){let s=o.isFunction(t)?t():t;return s=await mt(s,!1),o.isArray(s)?s=Object.fromEntries(await Promise.all(s.map(async n=>{const a=await e(n,!0);return[a.name,a]}))):o.isObject(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 Tt(t){const{panels:e}=t;t.panels&&(t.panels=await ft(e))}async function Zs(t,e,s,n,a){const r=[];It(e,s,n),await Tt(s),At(s)?await qt(e,s,n,r,0):await _t(e,s,r,1),a.push({path:`/${s.path}`,children:r,component:t,meta:{api:e,schema:s}})}function qt(t,e,s,n,a){var r,i;return e.level=a,(i=(r=R(e))==null?void 0:r.processSchema)==null?void 0:i.call(r,t,e,s,n,a)}function It(t,e,s){e.name=s,e.path=e.path||t.normalizePath(s)}async function _t(t,e,s,n){const a=[];Rt(e,(r,i)=>{a.push(qt(t,r,i,s,n))}),await Promise.all(a)}async function tn(t,e,s){let{form:n,forms:a,components:r}=e;a?a=e.forms=await ft(a,Mt):n?n=e.form=await Mt(n):r&&o.isObject(r)&&(n={components:r}),a||(a={default:n});const i=[];for(const l of Object.values(a))await _t(t,l,i,s+1);return i}async function Mt(t){return t=await mt(t,!0),t&&await Tt(t),t}function At(t){return!!t.type}function M(t){return o.isObject(t)&&!!(t.form||t.forms||t.components)}function en(t){return Object.keys((t==null?void 0:t.forms)||{}).length>1}function gt(t,e){const{view:s}=t,n=s&&e.views[s];return n?M(n)?n:Bt(n,a=>{var i;const r=(i=a.components)==null?void 0:i[s];if(M(r))return r}):null}function sn(t,e){const s=gt(t,e);return s?s.level===0?`/${s.path}`:`/${s.path}/${s.path}`:null}function z(t,e,s){const n=gt(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:l}=t;if(!a&&!r)if(i)a={components:i,compact:l};else return{};return r||(r={default:a}),Object.fromEntries(Object.entries(r).map(([u,c])=>{var d;return o.isFunction(c.components)&&(c={...c,components:c.components(e)}),[u,(d=s==null?void 0:s(c))!=null?d:c]}))}function Nt(t,e){return t[e==null?void 0:e.type]||t.default||null}function vt(t,e,s){return Nt(z(t,s),e)}function nn(t){return t.label!==!1}function zt(t){return!!t.compact}function bt(t){return!!(t.inlined||t.components)}function Ut(t){var e;return!!(t.nested||((e=R(t))==null?void 0:e.defaultNested)===!0)}function an(t){var e;return!!((e=R(t))!=null&&e.omitPadding)}function Ht(t){var n;const e=t.default,s=e!==void 0?e:(n=R(t))==null?void 0:n.defaultValue;return o.isFunction(s)?s(t):o.clone(s)}function Kt(t){var s;const e=R(t);return!!((e==null?void 0:e.excludeValue)||((s=e==null?void 0:e.ignoreMissingValue)==null?void 0:s.call(e,t)))}function rn(t){const e=s=>Object.values(s||{}).some(nn);return e(t.components)||Object.values(t.tabs||{}).some(e)}function Wt(t,e={},s){return Q(t,e,null,null,(r,i,l)=>{!(l in i)&&!Kt(r)&&(i[l]=Ht(r))},null,{component:s,rootData:e})}function Jt(t,e,s,n,{component:a=null,rootData:r=a==null?void 0:a.rootData}={}){const{compute:i}=t;if(i){const l=i(w.get(a,{value:e[s],name:s,data:e,dataPath:n,rootData:r}));l!==void 0&&q.default.set(e,s,l)}return!(s in e)&&!Kt(t)&&q.default.set(e,s,Ht(t)),e[s]}function Qt(t,e,s){if(s.schemaOnly){const n={},{idKey:a="id",orderKey:r}=t,i=e[a];return i!==void 0&&(n[a]=i),en(t)&&(n.type=e.type),r&&(n[r]=e[r]),n}else return{...e}}function on(t,e,s,n,{component:a,schemaOnly:r,target:i}={}){const l={component:a,schemaOnly:r,target:i,rootData:s},u=Qt(e,s,l),c=new Gs;return Q(t,s,n,u,(_,$,m,P,x)=>{let D=Jt(_,$,m,P,l);if(o.isArray(D)){const{wrapPrimitives:b,orderKey:S,idKey:j="id"}=_;b?D=D.map(O=>({[b]:O})):D=[...D],S&&i==="clipboard"&&D.sort((O,I)=>{const T=O==null?void 0:O[j],wt=I==null?void 0:I[j];return T==null||J(T)?1:wt==null||J(wt)?-1:T-wt})}x[m]=D},(_,$,m,P,x)=>{const{wrapPrimitives:D,exclude:b,process:S}=_;let j=x[m];const O=R(_),I=()=>w.get(a,{value:j,name:m,data:$,dataPath:P,rootData:l.rootData,processedData:x});if(D&&o.isArray(j)&&(j=j.map(T=>T[D])),S&&(j=S(I())),(O==null?void 0:O.excludeValue)||b===!0||o.isFunction(b)&&b(I()))delete x[m];else{const T=O==null?void 0:O.processValue;T&&(j=T(_,j,P,c)),x[m]=j}},l),c.process(e,u,l)}function Q(t,e,s,n,a,r,i){const l=u=>{const c=(d,f)=>d!=null?V(d,f):null;if(u)for(const[d,f]of Object.entries(u))if(!Ut(f))Q(f,e,s,n,a,r,i);else{const _=c(s,d),$=(P,x=null)=>{var I;const D=x!==null?c(_,x):_,b=w.get(i.component,{data:e,value:P,dataPath:D,index:x,rootData:i.rootData}),j=(((I=R(f))==null?void 0:I.getFormSchemasForProcessing)||z)(f,b),O=Nt(j,P);if(O){const T=n?Qt(f,P,i):null;return Q(O,P,D,T,a,r,i)}else return{...P}};a==null||a(f,e,d,_,n);let m=n?n[d]:e[d];m!=null&&M(f)&&(o.isArray(m)?m=n?m.map($):m.forEach($):m=$(m),n&&(n[d]=m)),r==null||r(f,e,d,_,n)}};if(l(t.components),t.tabs)for(const u of Object.values(t.tabs))l(u.components);for(const u of te(t,s))l(u.schema.components);return n||e}function N(t,e){const s=(n,a)=>n.length>0?n.reduce((r,i)=>{const l=a(i);return l&&(r[l.name]=l&&e?{...e,...l}:l),r},{}):null;return o.isArray(t)?s(t,n=>o.isObject(n)?n:{name:o.camelize(n,!1)}):o.isObject(t)?s(Object.entries(t),([n,a])=>o.isObject(a)?{name:n,...a}:o.isString(a)?{name:n,label:a}:null):null}function G(t){return N(t,{type:"button"})}function Gt(t){return o.isObject(t)?t.type:t}function R(t){var e,s;return(s=(e=pt(Gt(t),!0))==null?void 0:e.options)!=null?s:null}function Xt(t){var e,s,n;return(n=(s=(e=R(t))==null?void 0:e.getSourceType)==null?void 0:s.call(e,Gt(t)))!=null?n:null}function Yt(t,e,s){return t?{schema:t,dataPath:t.name?V(e,t.name):e,tabComponent:s}:null}function Zt(t,e,s,n=[]){if(t)for(const[a,r]of Object.entries(t)){const i=Yt(r,V(e,a),s);i&&n.push(i)}return n}function te(t,e,s=null,n=null){var i,l;const a=(l=(i=R(t))==null?void 0:i.getPanelSchema)==null?void 0:l.call(i,t,e,s),r=a?[Yt(a,e,n)]:[];return Zt(t.panels,e,n,r),r}function U(t){return Xt(t)==="object"}function H(t){return Xt(t)==="list"}function ee(t,e){const s=e[t.idKey||"id"];return s!=null?String(s):void 0}function ln(t,e){return Qs(e,ee(t,e))}const X={mixins:[Ws],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 w(this,{nested:this.nested})},value:{get(){const t=Jt(this.schema,this.data,this.name,this.dataPath,{component:this}),{format:e}=this.schema;return e?e.call(this,new w(this,{value:t})):t},set(t){const{parse:e}=this.schema;this.parsedValue=e?e.call(this,new w(this,{value:t})):t,this.$set(this.data,this.name,this.parsedValue)}},item(){return at(this.rootItem,this.dataPath,this.nested)},parentItem(){return rt(this.rootItem,this.dataPath,this.nested)},rootItem(){return this.rootData},processedItem(){const{schemaComponent:t}=this;return at(t.processedItem,this.dataPath.slice(t.dataPath.length),this.nested)},label:h("label",{type:[String,Boolean],get(t){return o.isString(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={...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]=o.asArray(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})}}},Y={},g=q.default.extend({components:Y,mixins:[dt],methods:{getTypeComponent:pt,resolveComponent(t,e=[]){return t&&(async()=>{let s=o.isFunction(t)?await t():o.isPromise(t)?await t:t;return s=(s==null?void 0:s.default)||s,s.mixins=e,s.components=Y,s})},resolveDitoComponent(t){return this.resolveComponent(t,[dt])},resolveTypeComponent(t){return this.resolveComponent(t,[dt,X])}}});g.component=function(t,e){if(e){e={name:t,...e};const s=this.extend(e);return Y[t]=s,s}else return Y[t]||q.default.component(t)};class un{hasRole(...e){if(this.roles){for(const s of e)if(this.roles.includes(s))return!0}return!1}}const 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)}}},ne={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))}}},ae={mixins:[ne],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!o.getCommonPrefix(t.path,e.path).startsWith(s)}}};var cn=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})},dn=[];function p(t,e,s,n,a,r,i,l){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 c;if(i?(c=function(_){_=_||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,!_&&typeof __VUE_SSR_CONTEXT__<"u"&&(_=__VUE_SSR_CONTEXT__),a&&a.call(this,_),_&&_._registeredComponents&&_._registeredComponents.add(i)},u._ssrRegister=c):a&&(c=l?function(){a.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:a),c)if(u.functional){u._injectStyles=c;var d=u.render;u.render=function($,m){return c.call(m),d($,m)}}else{var f=u.beforeCreate;u.beforeCreate=f?[].concat(f,c):[c]}return{exports:t,options:u}}const hn=g.component("dito-view",{mixins:[ae],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 At(this.schema)},mainComponent(){return this.mainSchemaComponent.getComponentByDataPath(this.name)},viewSchema(){const{schema:t}=this;return this.isSingleComponentView?{name:t.name,components:{[t.name]:{...t,label:!1}}}:t},providesData(){return Ys(this.viewSchema,t=>Vt(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}}}),re={};var pn=p(hn,cn,dn,!1,mn,null,null,null);function mn(t){for(let e in re)this[e]=re[e]}const ie=function(){return pn.exports}(),K={data(){return{domHandlers:[]}},beforeDestroy(){for(const{remove:t}of this.domHandlers)t();this.domHandlers=[]},methods:{domOn(t,e,s){const n=k.addEvents(t,o.isObject(e)?e:{[e]:s});return this.domHandlers.push(n),n}}};var fn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-root"},[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)},_n=[];const Uu="",gn=g.component("dito-root",{mixins:[K],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>${o.asArray(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](o.stripTags(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:{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,un.prototype),t||(this.resolvedViews={},this.navigateHome())},async ensureUser(){await this.fetchUser()||await this.login()},async resolveViews(){try{this.resolvedViews=await ft(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(Zs(ie,this.api,n,s,t));await Promise.all(e);for(const s of t)this.$router.addRoute(s)}}}),oe={};var vn=p(gn,fn,_n,!1,bn,null,null,null);function bn(t){for(let e in oe)this[e]=oe[e]}const yt=function(){return vn.exports}();var yn=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)])},$n=[];const Hu="",Cn=g.component("dito-menu",{}),le={};var Pn=p(Cn,yn,$n,!1,Dn,null,null,null);function Dn(t){for(let e in le)this[e]=le[e]}const wn=function(){return Pn.exports}();var Sn=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]})])},xn=[];const Ku="",On={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"}}}},ue={};var jn=p(On,Sn,xn,!1,Fn,null,null,null);function Fn(t){for(let e in ue)this[e]=ue[e]}const Vn=function(){return jn.exports}();var En=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)},kn=[];const Wu="",ce=g.component("spinner",Vn),Ln=g.component("dito-header",{components:{Spinner:ce},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}=ce.options;s.size.default=t,s.color.default=e},methods:{getBreadcrumbClass(t){return{"dito-dirty":t.isDirty}}}}),de={};var Bn=p(Ln,En,kn,!1,Rn,null,null,null);function Rn(t){for(let e in de)this[e]=de[e]}const Tn=function(){return Bn.exports}(),he={mixins:[K],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))}}};var qn=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)])},In=[];const Ju="",Mn=g.component("dito-account",{mixins:[he],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}}}}),pe={};var An=p(Mn,qn,In,!1,Nn,null,null,null);function Nn(t){for(let e in pe)this[e]=pe[e]}const zn=function(){return An.exports}();var Un=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("form",{staticClass:"dito-dialog",on:{submit:function(n){return n.preventDefault(),t.submit.apply(null,arguments)}}},[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)},Hn=[];const Qu="",Kn=g.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=o.clone(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.fromEntries(Object.entries(G(this.buttons)).map(([t,e])=>(t==="cancel"&&!e.events&&(e={...e,events:{click:()=>this.cancel()}}),[t,e])))},hasCancel(){return!!this.buttonSchemas.cancel}},mounted(){this.windowEvents=k.addEvents(window,{keyup:()=>{this.hasCancel&&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()},submit(){this.resolve(this.dialogData)},cancel(){this.resolve(null)}}}),me={};var Wn=p(Kn,Un,Hn,!1,Jn,null,null,null);function Jn(t){for(let e in me)this[e]=me[e]}const Qn=function(){return Wn.exports}();var Gn=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()},Xn=[];const Yn=g.component("dito-element",{props:{tag:{type:String,default:"span"},content:{type:[String,Object]}},computed:{options(){const{content:t}=this;return o.isObject(t)?t:{text:t}},classes(){return{...this.$attrs.class,...fe(this.options.class)}},styles(){return{...this.$attrs.style,...fe(this.options.style)}}}});function fe(t){return o.asArray(t).reduce((e,s)=>(o.isString(s)?e[s]=!0:o.isObject(s)&&Object.assign(e,s),e),{})}const _e={};var Zn=p(Yn,Gn,Xn,!1,ta,null,null,null);function ta(t){for(let e in _e)this[e]=_e[e]}const ea=function(){return Zn.exports}();var sa=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()},na=[];const Gu="",aa=g.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 o.isObject(t)?t==null?void 0:t.text:t},prefixes(){var t;return o.asArray((t=this.label)==null?void 0:t.prefix)},suffixes(){var t;return o.asArray((t=this.label)==null?void 0:t.suffix)},listeners(){return{...this.collapsible&&{click:this.onClick}}},isActive(){return this.appState.activeLabel===this}},methods:{onClick(){this.appState.activeLabel=this,this.$emit("expand",this.collapsed)}}}),ge={};var ra=p(aa,sa,na,!1,ia,null,null,null);function ia(t){for(let e in ge)this[e]=ge[e]}const oa=function(){return ra.exports}(),$t={methods:{getItemFormSchema:vt,getItemUid:ln,getItemId(t,e,s=null){return this.isTransient&&s!==null?String(s):ee(t,e)},getItemDataPath(t,e){let{dataPath:s}=this;return t!==this.schema&&(s=V(s,t.name)),e!=null&&(s=V(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 l=()=>i||(i=this.getItemDataPath(t,s));let u;const c=()=>u||(u=this.getLabel(vt(t,e,this.context)));let d,f,_;if(o.isFunction(r)){const m=r.call(this,new w(this,{nested:!1,data:e,value:e,index:s,get dataPath(){return l()},get formLabel(){return c()}}));o.isObject(m)?{text:d,prefix:f,suffix:_}=m:d=m,n=!1}else{const{columns:m}=t,P=o.isString(r)&&r||H(t)&&m&&Object.keys(m)[0]||"name";d=e[P]}const $=!!d;if(d||(d=""),d||(n=!0,H(t)&&s!==null&&(d=`${s+1}`)),n){const m=c();m&&(d=`${m} ${$?`'${d}'`:d}`)}return a?{text:d,prefix:f,suffix:_}:d}}};var la=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)},ua=[];const Xu="",ca=g.component("dito-schema",{components:{TransitionHeight:k.TransitionHeight},mixins:[$t],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{...t&&o.isFunction(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=Zt(this.schema.panels,"");for(const e of this.panes)t.push(...e.panelSchemas);return t},tabs(){return N(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(o.isFunction(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{$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 rt(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:ht("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=o.isFunction(t)?t:o.isRegExp(t)?l=>t.test(l):null;n=i?Object.keys(s).filter(i):o.isArray(t)?t:[t]}e&&this.clearErrors();let a=!0,r=!0;n||(n=Object.keys(s));for(const i of n){const l=this.getComponentsByDataPath(i);for(const u of l)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 l=this.hasOwnData?V(this.dataPath,r):r,u=o.parseDataPath(l);let c=!1;const d=this.getComponentsByDataPath(u);for(const f of d)f.showValidationErrors(i,s&&e)&&(c=!0,s=!1);if(!c){const f=u.pop();for(;u.length>0;){const $=this.getComponentsByDataPath(u);for(const m of $)if(await((a=m.navigateToComponent)==null?void 0:a.call(m,l,P=>{let x=!1;for(const D of P){const b=t[D.dataPath];b&&D.showValidationErrors(b,s&&e)&&(x=!0,s=!1)}return x})))return;u.pop()}const _=o.labelize(f);for(const $ of i){const m=_?`The field ${_}`:`The ${this.formLabel}`;n.push(`${m} ${$.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,Wt(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))(o.isArray(n)||o.isObject(n))&&this.getComponentsByName(s).some(r=>r.providesData)||(e[s]=n);return e},processData({target:t="clipboard",schemaOnly:e=!0}={}){return on(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 o.normalizeDataPath(e).startsWith(this.dataPath)?this._getEntriesByDataPath(t,e,s):this._getEntriesByName(t,e,s)},_getEntriesByDataPath(t,e,s){return this._filterEntries(t[o.normalizeDataPath(e)]||[],s)},_getEntriesByName(t,e,s){return this._filterEntries(t[V(this.dataPath,e)]||[],s)},_filterEntries(t,e){return e?t.filter(e):t}}}),ve={};var da=p(ca,la,ua,!1,ha,null,null,null);function ha(t){for(let e in ve)this[e]=ve[e]}const pa=function(){return da.exports}();var ma=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}])})},fa=[];const Yu="",_a=g.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 zt(this.schema)},hasLabel(){return!this.isCompact&&!!this.label}}}),be={};var ga=p(_a,ma,fa,!1,va,null,null,null);function va(t){for(let e in be)this[e]=be[e]}const ba=function(){return ga.exports}();var ya=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,l=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:l,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e(),a.break==="after"?s("div",{staticClass:"dito-break"}):t._e()]})],2):t._e()},$a=[];const Zu="",Ca=g.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=Ut(a),i=V(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})=>te(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})}}}),ye={};var Pa=p(Ca,ya,$a,!1,Da,null,null,null);function Da(t){for(let e in ye)this[e]=ye[e]}const wa=function(){return Pa.exports}();function Sa(t){const e=o.isString(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 xa=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)},Oa=[];const tc="",ja=g.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 w(this,{nested:this.nested})},typeOptions(){return R(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:o.isString(t)?t.match(/^\s*[<>]?\s*(.*)$/)[1]:t}}),componentWidthOperator:h("width",{type:String,get(t){return o.isString(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{"dito-single":this.single,"dito-omit-padding":an(this.schema),...o.isString(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:Sa(t)*100;return o.isNumber(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}}}),$e={};var Fa=p(ja,xa,Oa,!1,Va,null,null,null);function Va(t){for(let e in $e)this[e]=$e[e]}const Ea=function(){return Fa.exports}();var ka=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)},La=[];const ec="",Ba=g.component("dito-tabs",{props:{tabs:{type:Object,default:null},selectedTab:{type:String,default:null}}}),Ce={};var Ra=p(Ba,ka,La,!1,Ta,null,null,null);function Ta(t){for(let e in Ce)this[e]=Ce[e]}const qa=function(){return Ra.exports}();var Ia=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)},Ma=[];const sc="",Aa=g.component("dito-panel",{mixins:[ne],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:g,default:null}},data(){return{ownData:null}},computed:{panelComponent(){return this},tabComponent(){return this.panelTabComponent},buttonSchemas(){return G(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{data:t,...e}=this.schema;return e}},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=o.isFunction(t)?t.call(this,this.context):t)},beforeDestroy(){this._register(!1)},methods:{_register(t){this.schemaComponent._registerPanel(this,t)}}}),Pe={};var Na=p(Aa,Ia,Ma,!1,za,null,null,null);function za(t){for(let e in Pe)this[e]=Pe[e]}const Ua=function(){return Na.exports}();var Ha=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()},Ka=[];const nc="",Wa=g.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}}}),De={};var Ja=p(Wa,Ha,Ka,!1,Qa,null,null,null);function Qa(t){for(let e in De)this[e]=De[e]}const Ga=function(){return Ja.exports}();var Xa=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()},Ya=[];const ac="",Za=g.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[V(t,n.name)]=n,s),{}):null}}}),we={};var tr=p(Za,Xa,Ya,!1,er,null,null,null);function er(t){for(let e in we)this[e]=we[e]}const sr=function(){return tr.exports}();var nr=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)},ar=[];const rc="",rr=g.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&&`${o.capitalize(this.verbs.create)} ${this.formLabel}`||null}},methods:{hasOption(t){return!!(this[t]&&this.schema[t]!==!1)}}}),Se={};var ir=p(rr,nr,ar,!1,or,null,null,null);function or(t){for(let e in Se)this[e]=Se[e]}const lr=function(){return ir.exports}();var ur=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)},cr=[];const ic="",dr=g.component("dito-create-button",{mixins:[he],props:{schema:{type:Object,required:!0},path:{type:String,required:!0},verb:{type:String,required:!0},text:{type:String,default:null}},computed:{forms(){return z(this.schema,this.context)},isInlined(){return bt(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)}}}),xe={};var hr=p(dr,ur,cr,!1,pr,null,null,null);function pr(t){for(let e in xe)this[e]=xe[e]}const mr=function(){return hr.exports}();var fr=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()},_r=[];const gr=g.component("dito-clipboard",{mixins:[K],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 o.isObject(this.clipboard)?this.clipboard:{}},copyData(){const{copy:t}=this.clipboardOptions;return t?e=>t.call(this,new w(this,{clipboardData:e})):e=>o.clone(e)},pasteData(){const{paste:t}=this.clipboardOptions;return t?e=>t.call(this,new w(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,l,u;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((l=(i=navigator.clipboard)==null?void 0:i.writeText)==null?void 0:l.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(o.deindent`
1
+ (function(v,E){typeof exports=="object"&&typeof module<"u"?module.exports=E(require("vue"),require("vue-js-modal"),require("vue-router"),require("vue-notification"),require("@ditojs/utils"),require("nanoid"),require("@ditojs/ui"),require("vuedraggable"),require("codeflask"),require("tinycolor2"),require("vue-color"),require("tiptap"),require("tiptap-commands"),require("tiptap-extensions"),require("vue-multiselect"),require("vue-upload-component"),require("filesize-parser"),require("filesize")):typeof define=="function"&&define.amd?define(["vue","vue-js-modal","vue-router","vue-notification","@ditojs/utils","nanoid","@ditojs/ui","vuedraggable","codeflask","tinycolor2","vue-color","tiptap","tiptap-commands","tiptap-extensions","vue-multiselect","vue-upload-component","filesize-parser","filesize"],E):(v=typeof globalThis<"u"?globalThis:v||self,v["dito-admin"]=E(v.vue,v["vue-js-modal"],v["vue-router"],v["vue-notification"],v["@ditojs/utils"],v.nanoid,v["@ditojs/ui"],v.vuedraggable,v.codeflask,v.tinycolor2,v["vue-color"],v.tiptap,v["tiptap-commands"],v["tiptap-extensions"],v["vue-multiselect"],v["vue-upload-component"],v["filesize-parser"],v.filesize))})(this,function(v,E,A,gs,o,vs,k,bs,ys,$s,Cs,W,Ps,F,Ds,ws,Ss,xs){"use strict";var wu=Object.defineProperty;var Su=(v,E,A)=>E in v?wu(v,E,{enumerable:!0,configurable:!0,writable:!0,value:A}):v[E]=A;var St=(v,E,A)=>(Su(v,typeof E!="symbol"?E+"":E,A),A);const L=t=>t&&typeof t=="object"&&"default"in t?t:{default:t},q=L(v),Os=L(E),xt=L(A),js=L(gs),et=L(bs),Fs=L(ys),st=L($s),Vs=L(Ds),Es=L(ws),ks=L(Ss),Ot={title:"",routeComponents:[],user:null,loadCache:{},activeLabel:null,clipboardData:null};function V(t,e){return t?`${t}/${e}`:e}function Ls(t){const e=o.parseDataPath(t);return e==null||e.pop(),e}function nt(t,e=!1){return e?Ls(t):o.parseDataPath(t)}function Bs(t,e=!1){return o.normalizeDataPath(nt(t,e))}function jt(t,e=!1){const s=nt(t,e);if(s){let n;do n=s.pop();while(n!=null&&o.isInteger(+n));if(n!=null)return s}return null}function Rs(t,e=!1){return o.normalizeDataPath(jt(t,e))}function at(t,e,s=!1){const n=nt(e,s);return n?o.getValueAtDataPath(t,n):null}function rt(t,e,s=!1){const n=jt(e,s);return n?o.getValueAtDataPath(t,n):null}function Ft(t){const e=o.parseDataPath(t);return e[e.length-1]}function Ts(t){const e=Ft(t);return e==null||o.isInteger(+e)?null:e}function it(t){const e=Ft(t),s=e==null?null:+e;return o.isInteger(s)?s:null}let qs=0;function Is(t,e="id"){t[e]=`@${++qs}`}function J(t){return/^@/.test(t)}function Ms(t,e="id"){return(t==null?void 0:t[e])!=null&&Object.keys(t).length===1}const ot=new WeakMap;function C(t,e,s){const n=ot.get(t),a=n[e];return a!==void 0||n.hasOwnProperty(e)?a:o.isFunction(s)?s():s}function As(t,e,s){ot.get(t)[e]=s}class w{constructor(e,s){var a;s=s?o.isFunction(s)?s():{...s}:{},(a=s.nested)!=null||(s.nested=!0),s.component=e;const n=Object.setPrototypeOf(s,e);ot.set(this,n)}static get(e,s){return s instanceof w?s:new w(e,s)}get nested(){return C(this,"nested",!0)}get value(){return C(this,"value",void 0)}get dataPath(){return C(this,"dataPath","")}get name(){return C(this,"name",()=>Ts(this.dataPath))}get index(){return C(this,"index",()=>it(this.dataPath))}get itemDataPath(){return Bs(this.dataPath,this.nested)}get parentItemDataPath(){return Rs(this.dataPath,this.nested)}get itemIndex(){return it(this.itemDataPath)}get parentItemIndex(){return it(this.parentItemDataPath)}get item(){return C(this,"data",()=>at(this.rootItem,this.dataPath,this.nested))}get parentItem(){const e=rt(this.rootItem,this.dataPath,this.nested)||null;return e!==this.item?e:null}get rootItem(){return C(this,"rootData",null)}get processedItem(){return C(this,"processedData",null)}get clipboardItem(){return C(this,"clipboardData",null)}get user(){return C(this,"user",null)}get api(){return C(this,"api",null)}get views(){return C(this,"views",null)}get itemLabel(){return C(this,"itemLabel",null)}get formLabel(){return C(this,"formLabel",null)}get component(){return C(this,"component",null)}get schemaComponent(){return C(this,"schemaComponent",null)}get formComponent(){return C(this,"formComponent",null)}get viewComponent(){return C(this,"viewComponent",null)}get dialogComponent(){return C(this,"dialogComponent",null)}get panelComponent(){return C(this,"panelComponent",null)}get resourceComponent(){return C(this,"resourceComponent",null)}get sourceComponent(){return C(this,"sourceComponent",null)}get option(){return C(this,"option",void 0)}get options(){return C(this,"options",void 0)}get query(){return C(this,"query",void 0)}get error(){return C(this,"error",void 0)}get wasNotified(){return C(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),As(this,"wasNotified",!0)}}}const Ns={data(){return{$events:null}},methods:{on(t,e){if(o.isArray(t))for(const s of t)this.on(s,e);else if(o.isPlainObject(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(o.isArray(t))for(const n of t)this.off(n,e);else if(o.isPlainObject(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 l=async()=>{const u=a.shift();if(u){let c;for(const d of r)try{const _=await d.apply(this,u.args);_!==void 0&&(c=_)}catch(_){console.error(`Error during event handler for '${t}':`,_)}u.resolve(c),l()}};a.push({args:e,resolve:i}),a.length===1&&l()})}},hasListeners(t){var e;if(o.isArray(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(o.isArray(t))for(const s of t)this.delegate(s,e);else this.on(t,(...s)=>e.emit(t,...s));return this}}},lt={Boolean:o.isBoolean,Number:o.isNumber,String:o.isString,Date:o.isDate,Array:o.isArray,Object:o.isObject,RegExp:o.isRegExp,Function:o.isFunction},zs={Boolean:t=>!!t,Number:t=>+t,String:t=>String(t),Date:t=>o.isDate(t)?t:new Date(t),Array:t=>o.isArray(t)?t:o.isString(t)?t.split(","):o.asArray(t),Object:t=>o.isObject(t)?t:t===!0?{}:null,RegExp:t=>o.isRegExp(t)?t:new RegExp(t)};function ut(t,e){var s;if(t&&e!=null){for(const n of t)if((s=lt[n.name])!=null&&s.call(lt,e))return!0}return!1}function Us(t,e){const s=t&&zs[t.name||t];return s?s(e):e}function Vt(t){return!!B(t.resource)}function B(t,e={}){var a;const{parent:s,...n}=e;return t=o.isObject(t)?{...n,...t}:o.isString(t)?{...n,path:t}:null,t&&s!==void 0&&t.parent===void 0&&!((a=t.path)!=null&&a.startsWith("/"))&&(t.parent=s,t.path||(t.path=".")),t}function ct(t,e){return t!=null&&(e==null?void 0:e.type)==="collection"?{type:"member",...o.pickBy(e,(s,n)=>["method","path","parent"].includes(n)),id:`${t}`}:null}const dt={mixins:[Ns],inject:["api","$verbs","$views","$isPopulated","$schemaComponent","$routeComponent","$dataComponent","$sourceComponent","$resourceComponent","$dialogComponent","$panelComponent","$tabComponent"],provide(){return this.providesData?{$dataComponent:()=>this}:{}},data(){return{appState:Ot,overrides:null}},computed:{sourceSchema(){var t;return(t=this.meta)==null?void 0:t.schema},user(){return Ot.user},verbs(){return this.$verbs()},views(){return this.$views()},isPopulated(){return this.$isPopulated()},locale(){return this.api.locale},context(){return new w(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=++Hs},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&&o.asArray(e);let i=n?o.isArray(t)?o.getValueAtDataPath(n,t,()=>{}):n[t]:void 0;if(i===void 0&&s!==void 0)return a&&o.isFunction(s)&&!ut(r,s)&&(s=s.call(this,this.context)),s;if(ut(r,i))return i;if(a&&o.isFunction(i)&&(i=i.call(this,this.context)),r&&i!=null&&!ut(r,i))for(const l of r){const u=Us(l,i);if(u!==i)return u}return i},getLabel(t,e){return t?this.getSchemaValue("label",{type:String,schema:t})||o.labelize(e||t.name):o.labelize(e)||""},labelize:o.labelize,getButtonAttributes(t,e){const s=this.verbs[t]||t;return{class:`dito-button-${s}`,title:(e==null?void 0:e.text)||o.labelize(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(g.component("dito-dialog"),{components:t,buttons:e,data:s,promise:{resolve:a,reject:r}},n)})},getResourcePath(t){var e;return t=B(t),t.parent===void 0&&(t.parent=(e=this.dataComponent)==null?void 0:e.resource),this.api.resources.any(B(t))},getResourceUrl(t){const e=this.getResourcePath(t);return e?this.api.getApiUrl({url:e,query:t.query}):null},async sendRequest({method:t,url:e,resource:s,query:n,data:a,internal:r}){e||(e=this.getResourcePath(s)),t||(t=s==null?void 0:s.method);const i=!r&&this.api.isApiUrl(e);i&&await this.rootComponent.ensureUser();const l=await this.api.request({method:t,url:e,data:a,query:n});return i&&t==="patch"&&o.equals(s,ct(this.user.id,this.api.users))&&await this.rootComponent.fetchUser(),l},request({cache:t,...e}){const s=t&&{global:this.appState,local:this.dataComponent}[t],n=s==null?void 0:s.loadCache,a=n&&`${e.method||"get"} ${e.url} ${JSON.stringify(e.query||e.params||"")} ${JSON.stringify(e.data||"")}`;if(n&&a in n)return n[a];const r=this.sendRequest(e).then(i=>i.data).catch(i=>{var u;const l=(u=i.response)==null?void 0:u.data;throw l?Object.assign(new Error(l.message),l):i});return n&&(n[a]=r),r},format(t,{locale:e=this.api.locale,defaults:s=this.api.formats,...n}={}){return o.format(t,{locale:e,defaults:s,...n})},async navigate(t){return new Promise(e=>{this.$router.push(t,()=>e(!0),()=>e(!1))})},download(t={}){var n;o.isString(t)&&(t={url:t});const e=document.createElement("a");e.href=this.api.getApiUrl(t),e.download=(n=t.filename)!=null?n:null;const{body:s}=document;s.appendChild(e),e.click(),s.removeChild(e)},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||{}))o.isFunction(e)?this[t]=e:console.error(`Invalid method definition: ${t}: ${e}`)},setupComputed(){for(const[t,e]of Object.entries(this.schema.computed||{})){const s=o.isFunction(e)?{get:e}:o.isObject(e)&&o.isFunction(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=o.isFunction(t)?t.call(this):t;o.isObject(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)=>{o.isFunction(r)?this.on(o.hyphenate(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=w.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 Hs=0;const Ks=Object.freeze(Object.defineProperty({__proto__:null,creditcard:{validate:t=>o.isCreditCard(t),message:"is invalid"},decimals:{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`},email:{validate:t=>o.isEmail(t),message:"must be a valid email"},hostname:{validate:t=>o.isHostname(t),message:"is not a host name"},domain:{validate:t=>o.isDomain(t),message:"is not a domain"},integer:{validate:t=>o.isInteger(t),message:"must be whole number"},max:{validate:(t,e)=>t<=e,message(t,e){return`must be ${e} or less`}},min:{validate:(t,e)=>t>=e,message(t,e){return`must be ${e} or more`}},password:{validate:()=>!0},range:{validate:(t,[e,s])=>t>=e&&t<=s,message(t,[e,s]){return`must be between ${e} and ${s}`}},required:{validate:(t,e,{password:s})=>t!=null&&t!==""||s&&t===void 0,message:"is required",nullish:!0},url:{validate:t=>o.isUrl(t),message:"is not a valid URL"}},Symbol.toStringTag,{value:"Module"})),Ws={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=Ks[n];if(r&&(r.nullish||s!=null)){const{validate:i,message:l}=r;if(!i(s,a,this.validations)&&(e=!1,t)){const u=o.isFunction(l)?l(s,a,this):l;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}={}){o.isString(t)&&t.includes(".")&&(t=o.parseDataPath(t));const i=o.normalizeDataPath(t);return{get(){const l=!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,l):l},set(l){a?a.call(this,l):(this.overrides||(this.overrides={}),this.$set(this.overrides,i,l))}}}function ht(t,{default:e,get:s,set:n}={}){return{get(){let a=this.getStore(t);return a===void 0&&e!==void 0&&(a=o.isFunction(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 Et=new WeakMap;let Js=0;function Qs(t,e){let s=Et.get(t);return s||(s=e||`@${++Js}`,Et.set(t,s)),s}class Gs{constructor(){St(this,"graph",{});St(this,"references",{})}set(e,s,n){var r;e=o.parseDataPath(e);let a=this.graph;for(const i of e){const l=o.isInteger(+i)?"*":i;a=(r=a[l])!=null?r:a[l]={}}a.$settings={...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]=vs.nanoid(6):null}flatten(){const e=s=>{const n=[];for(const[a,{$settings:r,...i}]of Object.entries(s)){r&&n.push([a,r]);for(const[l,u]of e(i))n.push([`${a}/${l}`,u])}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:l,schema:u,internal:c,related:d,reference:_}=i,f=l==="source",$=l==="relation";if(f||$&&c){const m=o.getValueAtDataPath(s,r,()=>null),P=a&&f&&!d,x=a&&($&&c||f&&d);for(const D of o.asArray(m).flat()){const b=f&&u.idKey||$&&u.relateBy||"id";let S=D==null?void 0:D[b];if(S!=null&&(P&&delete D[b],x||J(S))){J(S)&&(S=S.slice(1));const j=a?b:f?"#id":"#ref",O=a?`@${S}`:_?`${_}-${S}`:S;D[j]=O,j!==b&&delete D[b]}}}}return s}}const kt={},Lt={};function Xs(t,e){kt[t]=e}function pt(t,e=!1){const s=kt[t]||null;if(!s&&!e&&!Lt[t])throw Lt[t]=!0,new Error(`Unknown Dito component type: '${t}'`);return s}function Bt(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 Rt(t,e){return Bt(t,s=>{for(const[n,a]of Object.entries(s.components||{})){const r=e(a,n);if(r!==void 0)return r}})}function Ys(t,e){return Rt(t,(s,n)=>e(s,n)?!0:void 0)===!0}async function mt(t,e=!1){if(o.isFunction(t)&&(t=t()),o.isPromise(t)&&(t=await t),o.isModule(t)&&(t={...t},!t.name&&(e||t.default))){const s=Object.keys(t);if(s.length===1){const n=s[0];t=t[n],n!=="default"&&(t.name=n)}}return t}async function ft(t,e=mt){let s=o.isFunction(t)?t():t;return s=await mt(s,!1),o.isArray(s)?s=Object.fromEntries(await Promise.all(s.map(async n=>{const a=await e(n,!0);return[a.name,a]}))):o.isObject(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 Tt(t){const{panels:e}=t;t.panels&&(t.panels=await ft(e))}async function Zs(t,e,s,n,a){const r=[];It(e,s,n),await Tt(s),At(s)?await qt(e,s,n,r,0):await _t(e,s,r,1),a.push({path:`/${s.path}`,children:r,component:t,meta:{api:e,schema:s}})}function qt(t,e,s,n,a){var r,i;return e.level=a,(i=(r=R(e))==null?void 0:r.processSchema)==null?void 0:i.call(r,t,e,s,n,a)}function It(t,e,s){e.name=s,e.path=e.path||t.normalizePath(s)}async function _t(t,e,s,n){const a=[];Rt(e,(r,i)=>{a.push(qt(t,r,i,s,n))}),await Promise.all(a)}async function tn(t,e,s){let{form:n,forms:a,components:r}=e;a?a=e.forms=await ft(a,Mt):n?n=e.form=await Mt(n):r&&o.isObject(r)&&(n={components:r}),a||(a={default:n});const i=[];for(const l of Object.values(a))await _t(t,l,i,s+1);return i}async function Mt(t){return t=await mt(t,!0),t&&await Tt(t),t}function At(t){return!!t.type}function M(t){return o.isObject(t)&&!!(t.form||t.forms||t.components)}function en(t){return Object.keys((t==null?void 0:t.forms)||{}).length>1}function gt(t,e){const{view:s}=t,n=s&&e.views[s];return n?M(n)?n:Bt(n,a=>{var i;const r=(i=a.components)==null?void 0:i[s];if(M(r))return r}):null}function sn(t,e){const s=gt(t,e);return s?s.level===0?`/${s.path}`:`/${s.path}/${s.path}`:null}function z(t,e,s){const n=gt(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:l}=t;if(!a&&!r)if(i)a={components:i,compact:l};else return{};return r||(r={default:a}),Object.fromEntries(Object.entries(r).map(([u,c])=>{var d;return o.isFunction(c.components)&&(c={...c,components:c.components(e)}),[u,(d=s==null?void 0:s(c))!=null?d:c]}))}function Nt(t,e){return t[e==null?void 0:e.type]||t.default||null}function vt(t,e,s){return Nt(z(t,s),e)}function nn(t){return t.label!==!1}function zt(t){return!!t.compact}function bt(t){return!!(t.inlined||t.components)}function Ut(t){var e;return!!(t.nested||((e=R(t))==null?void 0:e.defaultNested)===!0)}function an(t){var e;return!!((e=R(t))!=null&&e.omitPadding)}function Ht(t){var n;const e=t.default,s=e!==void 0?e:(n=R(t))==null?void 0:n.defaultValue;return o.isFunction(s)?s(t):o.clone(s)}function Kt(t){var s;const e=R(t);return!!((e==null?void 0:e.excludeValue)||((s=e==null?void 0:e.ignoreMissingValue)==null?void 0:s.call(e,t)))}function rn(t){const e=s=>Object.values(s||{}).some(nn);return e(t.components)||Object.values(t.tabs||{}).some(e)}function Wt(t,e={},s){return Q(t,e,null,null,(r,i,l)=>{!(l in i)&&!Kt(r)&&(i[l]=Ht(r))},null,{component:s,rootData:e})}function Jt(t,e,s,n,{component:a=null,rootData:r=a==null?void 0:a.rootData}={}){const{compute:i}=t;if(i){const l=i(w.get(a,{value:e[s],name:s,data:e,dataPath:n,rootData:r}));l!==void 0&&q.default.set(e,s,l)}return!(s in e)&&!Kt(t)&&q.default.set(e,s,Ht(t)),e[s]}function Qt(t,e,s){if(s.schemaOnly){const n={},{idKey:a="id",orderKey:r}=t,i=e[a];return i!==void 0&&(n[a]=i),en(t)&&(n.type=e.type),r&&(n[r]=e[r]),n}else return{...e}}function on(t,e,s,n,{component:a,schemaOnly:r,target:i}={}){const l={component:a,schemaOnly:r,target:i,rootData:s},u=Qt(e,s,l),c=new Gs;return Q(t,s,n,u,(f,$,m,P,x)=>{let D=Jt(f,$,m,P,l);if(o.isArray(D)){const{wrapPrimitives:b,orderKey:S,idKey:j="id"}=f;b?D=D.map(O=>({[b]:O})):D=[...D],S&&i==="clipboard"&&D.sort((O,I)=>{const T=O==null?void 0:O[j],wt=I==null?void 0:I[j];return T==null||J(T)?1:wt==null||J(wt)?-1:T-wt})}x[m]=D},(f,$,m,P,x)=>{const{wrapPrimitives:D,exclude:b,process:S}=f;let j=x[m];const O=R(f),I=()=>w.get(a,{value:j,name:m,data:$,dataPath:P,rootData:l.rootData,processedData:x});if(D&&o.isArray(j)&&(j=j.map(T=>T[D])),S&&(j=S(I())),(O==null?void 0:O.excludeValue)||b===!0||o.isFunction(b)&&b(I()))delete x[m];else{const T=O==null?void 0:O.processValue;T&&(j=T(f,j,P,c)),x[m]=j}},l),c.process(e,u,l)}function Q(t,e,s,n,a,r,i){const l=u=>{const c=(d,_)=>d!=null?V(d,_):null;if(u)for(const[d,_]of Object.entries(u))if(!Ut(_))Q(_,e,s,n,a,r,i);else{const f=c(s,d),$=(P,x=null)=>{var I;const D=x!==null?c(f,x):f,b=w.get(i.component,{data:e,value:P,dataPath:D,index:x,rootData:i.rootData}),j=(((I=R(_))==null?void 0:I.getFormSchemasForProcessing)||z)(_,b),O=Nt(j,P);if(O){const T=n?Qt(_,P,i):null;return Q(O,P,D,T,a,r,i)}else return{...P}};a==null||a(_,e,d,f,n);let m=n?n[d]:e[d];m!=null&&M(_)&&(o.isArray(m)?m=n?m.map($):m.forEach($):m=$(m),n&&(n[d]=m)),r==null||r(_,e,d,f,n)}};if(l(t.components),t.tabs)for(const u of Object.values(t.tabs))l(u.components);for(const u of te(t,s))l(u.schema.components);return n||e}function N(t,e){const s=(n,a)=>n.length>0?n.reduce((r,i)=>{const l=a(i);return l&&(r[l.name]=l&&e?{...e,...l}:l),r},{}):null;return o.isArray(t)?s(t,n=>o.isObject(n)?n:{name:o.camelize(n,!1)}):o.isObject(t)?s(Object.entries(t),([n,a])=>o.isObject(a)?{name:n,...a}:o.isString(a)?{name:n,label:a}:null):null}function G(t){return N(t,{type:"button"})}function Gt(t){return o.isObject(t)?t.type:t}function R(t){var e,s;return(s=(e=pt(Gt(t),!0))==null?void 0:e.options)!=null?s:null}function Xt(t){var e,s,n;return(n=(s=(e=R(t))==null?void 0:e.getSourceType)==null?void 0:s.call(e,Gt(t)))!=null?n:null}function Yt(t,e,s){return t?{schema:t,dataPath:t.name?V(e,t.name):e,tabComponent:s}:null}function Zt(t,e,s,n=[]){if(t)for(const[a,r]of Object.entries(t)){const i=Yt(r,V(e,a),s);i&&n.push(i)}return n}function te(t,e,s=null,n=null){var i,l;const a=(l=(i=R(t))==null?void 0:i.getPanelSchema)==null?void 0:l.call(i,t,e,s),r=a?[Yt(a,e,n)]:[];return Zt(t.panels,e,n,r),r}function U(t){return Xt(t)==="object"}function H(t){return Xt(t)==="list"}function ee(t,e){const s=e[t.idKey||"id"];return s!=null?String(s):void 0}function ln(t,e){return Qs(e,ee(t,e))}const X={mixins:[Ws],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 w(this,{nested:this.nested})},value:{get(){const t=Jt(this.schema,this.data,this.name,this.dataPath,{component:this}),{format:e}=this.schema;return e?e.call(this,new w(this,{value:t})):t},set(t){const{parse:e}=this.schema;this.parsedValue=e?e.call(this,new w(this,{value:t})):t,this.$set(this.data,this.name,this.parsedValue)}},item(){return at(this.rootItem,this.dataPath,this.nested)},parentItem(){return rt(this.rootItem,this.dataPath,this.nested)},rootItem(){return this.rootData},processedItem(){const{schemaComponent:t}=this;return at(t.processedItem,this.dataPath.slice(t.dataPath.length),this.nested)},label:h("label",{type:[String,Boolean],get(t){return o.isString(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={...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]=o.asArray(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})}}},Y={},g=q.default.extend({components:Y,mixins:[dt],methods:{getTypeComponent:pt,resolveComponent(t,e=[]){return t&&(async()=>{let s=o.isFunction(t)?await t():o.isPromise(t)?await t:t;return s=(s==null?void 0:s.default)||s,s.mixins=e,s.components=Y,s})},resolveDitoComponent(t){return this.resolveComponent(t,[dt])},resolveTypeComponent(t){return this.resolveComponent(t,[dt,X])}}});g.component=function(t,e){if(e){e={name:t,...e};const s=this.extend(e);return Y[t]=s,s}else return Y[t]||q.default.component(t)};class un{hasRole(...e){if(this.roles){for(const s of e)if(this.roles.includes(s))return!0}return!1}}const 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)}}},ne={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))}}},ae={mixins:[ne],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!o.getCommonPrefix(t.path,e.path).startsWith(s)}}};var cn=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})},dn=[];function p(t,e,s,n,a,r,i,l){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 c;if(i?(c=function(f){f=f||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,!f&&typeof __VUE_SSR_CONTEXT__<"u"&&(f=__VUE_SSR_CONTEXT__),a&&a.call(this,f),f&&f._registeredComponents&&f._registeredComponents.add(i)},u._ssrRegister=c):a&&(c=l?function(){a.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:a),c)if(u.functional){u._injectStyles=c;var d=u.render;u.render=function($,m){return c.call(m),d($,m)}}else{var _=u.beforeCreate;u.beforeCreate=_?[].concat(_,c):[c]}return{exports:t,options:u}}const hn=g.component("dito-view",{mixins:[ae],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 At(this.schema)},mainComponent(){return this.mainSchemaComponent.getComponentByDataPath(this.name)},viewSchema(){const{schema:t}=this;return this.isSingleComponentView?{name:t.name,components:{[t.name]:{...t,label:!1}}}:t},providesData(){return Ys(this.viewSchema,t=>Vt(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}}}),re={};var pn=p(hn,cn,dn,!1,mn,null,null,null);function mn(t){for(let e in re)this[e]=re[e]}const ie=function(){return pn.exports}(),K={data(){return{domHandlers:[]}},beforeDestroy(){for(const{remove:t}of this.domHandlers)t();this.domHandlers=[]},methods:{domOn(t,e,s){const n=k.addEvents(t,o.isObject(e)?e:{[e]:s});return this.domHandlers.push(n),n}}};var fn=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"dito-root"},[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)},_n=[];const Ku="",gn=g.component("dito-root",{mixins:[K],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>${o.asArray(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](o.stripTags(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:{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,un.prototype),t||(this.resolvedViews={},this.navigateHome())},async ensureUser(){await this.fetchUser()||await this.login()},async resolveViews(){try{this.resolvedViews=await ft(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(Zs(ie,this.api,n,s,t));await Promise.all(e);for(const s of t)this.$router.addRoute(s)}}}),oe={};var vn=p(gn,fn,_n,!1,bn,null,null,null);function bn(t){for(let e in oe)this[e]=oe[e]}const yt=function(){return vn.exports}();var yn=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)])},$n=[];const Wu="",Cn=g.component("dito-menu",{}),le={};var Pn=p(Cn,yn,$n,!1,Dn,null,null,null);function Dn(t){for(let e in le)this[e]=le[e]}const wn=function(){return Pn.exports}();var Sn=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]})])},xn=[];const Ju="",On={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"}}}},ue={};var jn=p(On,Sn,xn,!1,Fn,null,null,null);function Fn(t){for(let e in ue)this[e]=ue[e]}const Vn=function(){return jn.exports}();var En=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)},kn=[];const Qu="",ce=g.component("spinner",Vn),Ln=g.component("dito-header",{components:{Spinner:ce},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}=ce.options;s.size.default=t,s.color.default=e},methods:{getBreadcrumbClass(t){return{"dito-dirty":t.isDirty}}}}),de={};var Bn=p(Ln,En,kn,!1,Rn,null,null,null);function Rn(t){for(let e in de)this[e]=de[e]}const Tn=function(){return Bn.exports}(),he={mixins:[K],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))}}};var qn=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)])},In=[];const Gu="",Mn=g.component("dito-account",{mixins:[he],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}}}}),pe={};var An=p(Mn,qn,In,!1,Nn,null,null,null);function Nn(t){for(let e in pe)this[e]=pe[e]}const zn=function(){return An.exports}();var Un=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("form",{staticClass:"dito-dialog",on:{submit:function(n){return n.preventDefault(),t.submit.apply(null,arguments)}}},[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)},Hn=[];const Xu="",Kn=g.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=o.clone(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.fromEntries(Object.entries(G(this.buttons)).map(([t,e])=>(t==="cancel"&&!e.events&&(e={...e,events:{click:()=>this.cancel()}}),[t,e])))},hasCancel(){return!!this.buttonSchemas.cancel}},mounted(){this.windowEvents=k.addEvents(window,{keyup:()=>{this.hasCancel&&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()},submit(){this.resolve(this.dialogData)},cancel(){this.resolve(null)}}}),me={};var Wn=p(Kn,Un,Hn,!1,Jn,null,null,null);function Jn(t){for(let e in me)this[e]=me[e]}const Qn=function(){return Wn.exports}();var Gn=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()},Xn=[];const Yn=g.component("dito-element",{props:{tag:{type:String,default:"span"},content:{type:[String,Object]}},computed:{options(){const{content:t}=this;return o.isObject(t)?t:{text:t}},classes(){return{...this.$attrs.class,...fe(this.options.class)}},styles(){return{...this.$attrs.style,...fe(this.options.style)}}}});function fe(t){return o.asArray(t).reduce((e,s)=>(o.isString(s)?e[s]=!0:o.isObject(s)&&Object.assign(e,s),e),{})}const _e={};var Zn=p(Yn,Gn,Xn,!1,ta,null,null,null);function ta(t){for(let e in _e)this[e]=_e[e]}const ea=function(){return Zn.exports}();var sa=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()},na=[];const Yu="",aa=g.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 o.isObject(t)?t==null?void 0:t.text:t},prefixes(){var t;return o.asArray((t=this.label)==null?void 0:t.prefix)},suffixes(){var t;return o.asArray((t=this.label)==null?void 0:t.suffix)},listeners(){return{...this.collapsible&&{click:this.onClick}}},isActive(){return this.appState.activeLabel===this}},methods:{onClick(){this.appState.activeLabel=this,this.$emit("expand",this.collapsed)}}}),ge={};var ra=p(aa,sa,na,!1,ia,null,null,null);function ia(t){for(let e in ge)this[e]=ge[e]}const oa=function(){return ra.exports}(),$t={methods:{getItemFormSchema:vt,getItemUid:ln,getItemId(t,e,s=null){return this.isTransient&&s!==null?String(s):ee(t,e)},getItemDataPath(t,e){let{dataPath:s}=this;return t!==this.schema&&(s=V(s,t.name)),e!=null&&(s=V(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 l=()=>i||(i=this.getItemDataPath(t,s));let u;const c=()=>u||(u=this.getLabel(vt(t,e,this.context)));let d,_,f;if(o.isFunction(r)){const m=r.call(this,new w(this,{nested:!1,data:e,value:e,index:s,get dataPath(){return l()},get formLabel(){return c()}}));o.isObject(m)?{text:d,prefix:_,suffix:f}=m:d=m,n=!1}else{const{columns:m}=t,P=o.isString(r)&&r||H(t)&&m&&Object.keys(m)[0]||"name";d=e[P]}const $=!!d;if(d||(d=""),d||(n=!0,H(t)&&s!==null&&(d=`${s+1}`)),n){const m=c();m&&(d=`${m} ${$?`'${d}'`:d}`)}return a?{text:d,prefix:_,suffix:f}:d}}};var la=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)},ua=[];const Zu="",ca=g.component("dito-schema",{components:{TransitionHeight:k.TransitionHeight},mixins:[$t],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{...t&&o.isFunction(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=Zt(this.schema.panels,"");for(const e of this.panes)t.push(...e.panelSchemas);return t},tabs(){return N(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(o.isFunction(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{$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 rt(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:ht("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=o.isFunction(t)?t:o.isRegExp(t)?l=>t.test(l):null;n=i?Object.keys(s).filter(i):o.isArray(t)?t:[t]}e&&this.clearErrors();let a=!0,r=!0;n||(n=Object.keys(s));for(const i of n){const l=this.getComponentsByDataPath(i);for(const u of l)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 l=this.hasOwnData?V(this.dataPath,r):r,u=o.parseDataPath(l);let c=!1;const d=this.getComponentsByDataPath(u);for(const _ of d)_.showValidationErrors(i,s&&e)&&(c=!0,s=!1);if(!c){const _=u.pop();for(;u.length>0;){const $=this.getComponentsByDataPath(u);for(const m of $)if(await((a=m.navigateToComponent)==null?void 0:a.call(m,l,P=>{let x=!1;for(const D of P){const b=t[D.dataPath];b&&D.showValidationErrors(b,s&&e)&&(x=!0,s=!1)}return x})))return;u.pop()}const f=o.labelize(_);for(const $ of i){const m=f?`The field ${f}`:`The ${this.formLabel}`;n.push(`${m} ${$.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,Wt(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))(o.isArray(n)||o.isObject(n))&&this.getComponentsByName(s).some(r=>r.providesData)||(e[s]=n);return e},processData({target:t="clipboard",schemaOnly:e=!0}={}){return on(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 o.normalizeDataPath(e).startsWith(this.dataPath)?this._getEntriesByDataPath(t,e,s):this._getEntriesByName(t,e,s)},_getEntriesByDataPath(t,e,s){return this._filterEntries(t[o.normalizeDataPath(e)]||[],s)},_getEntriesByName(t,e,s){return this._filterEntries(t[V(this.dataPath,e)]||[],s)},_filterEntries(t,e){return e?t.filter(e):t}}}),ve={};var da=p(ca,la,ua,!1,ha,null,null,null);function ha(t){for(let e in ve)this[e]=ve[e]}const pa=function(){return da.exports}();var ma=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}])})},fa=[];const tc="",_a=g.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 zt(this.schema)},hasLabel(){return!this.isCompact&&!!this.label}}}),be={};var ga=p(_a,ma,fa,!1,va,null,null,null);function va(t){for(let e in be)this[e]=be[e]}const ba=function(){return ga.exports}();var ya=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,l=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:l,disabled:t.disabled,generateLabels:t.generateLabels}}):t._e(),a.break==="after"?s("div",{staticClass:"dito-break"}):t._e()]})],2):t._e()},$a=[];const ec="",Ca=g.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=Ut(a),i=V(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})=>te(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})}}}),ye={};var Pa=p(Ca,ya,$a,!1,Da,null,null,null);function Da(t){for(let e in ye)this[e]=ye[e]}const wa=function(){return Pa.exports}();function Sa(t){const e=o.isString(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 xa=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)},Oa=[];const sc="",ja=g.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 w(this,{nested:this.nested})},typeOptions(){return R(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:o.isString(t)?t.match(/^\s*[<>]?\s*(.*)$/)[1]:t}}),componentWidthOperator:h("width",{type:String,get(t){return o.isString(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{"dito-single":this.single,"dito-omit-padding":an(this.schema),...o.isString(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:Sa(t)*100;return o.isNumber(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}}}),$e={};var Fa=p(ja,xa,Oa,!1,Va,null,null,null);function Va(t){for(let e in $e)this[e]=$e[e]}const Ea=function(){return Fa.exports}();var ka=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)},La=[];const nc="",Ba=g.component("dito-tabs",{props:{tabs:{type:Object,default:null},selectedTab:{type:String,default:null}}}),Ce={};var Ra=p(Ba,ka,La,!1,Ta,null,null,null);function Ta(t){for(let e in Ce)this[e]=Ce[e]}const qa=function(){return Ra.exports}();var Ia=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)},Ma=[];const ac="",Aa=g.component("dito-panel",{mixins:[ne],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:g,default:null}},data(){return{ownData:null}},computed:{panelComponent(){return this},tabComponent(){return this.panelTabComponent},buttonSchemas(){return G(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{data:t,...e}=this.schema;return e}},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=o.isFunction(t)?t.call(this,this.context):t)},beforeDestroy(){this._register(!1)},methods:{_register(t){this.schemaComponent._registerPanel(this,t)}}}),Pe={};var Na=p(Aa,Ia,Ma,!1,za,null,null,null);function za(t){for(let e in Pe)this[e]=Pe[e]}const Ua=function(){return Na.exports}();var Ha=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()},Ka=[];const rc="",Wa=g.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}}}),De={};var Ja=p(Wa,Ha,Ka,!1,Qa,null,null,null);function Qa(t){for(let e in De)this[e]=De[e]}const Ga=function(){return Ja.exports}();var Xa=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()},Ya=[];const ic="",Za=g.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[V(t,n.name)]=n,s),{}):null}}}),we={};var tr=p(Za,Xa,Ya,!1,er,null,null,null);function er(t){for(let e in we)this[e]=we[e]}const sr=function(){return tr.exports}();var nr=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)},ar=[];const oc="",rr=g.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&&`${o.capitalize(this.verbs.create)} ${this.formLabel}`||null}},methods:{hasOption(t){return!!(this[t]&&this.schema[t]!==!1)}}}),Se={};var ir=p(rr,nr,ar,!1,or,null,null,null);function or(t){for(let e in Se)this[e]=Se[e]}const lr=function(){return ir.exports}();var ur=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)},cr=[];const lc="",dr=g.component("dito-create-button",{mixins:[he],props:{schema:{type:Object,required:!0},path:{type:String,required:!0},verb:{type:String,required:!0},text:{type:String,default:null}},computed:{forms(){return z(this.schema,this.context)},isInlined(){return bt(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)}}}),xe={};var hr=p(dr,ur,cr,!1,pr,null,null,null);function pr(t){for(let e in xe)this[e]=xe[e]}const mr=function(){return hr.exports}();var fr=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()},_r=[];const gr=g.component("dito-clipboard",{mixins:[K],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 o.isObject(this.clipboard)?this.clipboard:{}},copyData(){const{copy:t}=this.clipboardOptions;return t?e=>t.call(this,new w(this,{clipboardData:e})):e=>o.clone(e)},pasteData(){const{paste:t}=this.clipboardOptions;return t?e=>t.call(this,new w(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,l,u;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((l=(i=navigator.clipboard)==null?void 0:i.writeText)==null?void 0:l.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(o.deindent`
3
3
  The data in the clipboard appears to be malformed:
4
4
  ${c.message}
5
- `))}const{$schema:s,...n}=e||{};return s===((u=this.schemaComponent)==null?void 0:u.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)}}}}),Oe={};var vr=p(gr,fr,_r,!1,br,null,null,null);function br(t){for(let e in Oe)this[e]=Oe[e]}const yr=function(){return vr.exports}(),je={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))}}},Fe={mixins:[$t,je],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,{page:e,...s}=this.query||{};return{...s,...t&&{range:t.join(",")}}}},created(){(this.providesData||this.isCreating)&&this.setupData()},methods:{getResource(){var t,e,s;return B((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?{...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 Wt(t,e?{type:e}:{},this)},requestData(){const t=this.queryParams;this.handleRequest({method:"get",query: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,query:s,data:n},a){const r={updateRoot:!0,updateView:this.isInView};this.setLoading(!0,r);const i={method:t,resource:e,data:n,query:s};try{const l=await this.sendRequest(i);a(null,l)}catch(l){const{response:u}=l;if(!a(l,u)){const c=u==null?void 0:u.data;c&&o.isString(c.type)?this.notify({type:"error",title:o.labelize(c.type),text:c.message||l}):this.notify({type:"error",title:"Request Error",text:l})}}this.setLoading(!1,r)},getPayloadData(t,e){return["post","put","patch"].includes(e)&&(t.getSchemaValue(["resource","data"])||t.processedItem)},async submit(t){const e=B(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:l=()=>this.notify({type:"success",title:"Request Successful",text:"Request was successfully sent."}),notifyError:u=c=>this.notify({type:"error",title:"Request Error",text:[`Unable to send request${c?":":""}`,(c==null?void 0:c.message)||c]})}={}){return new Promise(c=>{this.handleRequest({method:s,resource:e,data:n},async(d,f)=>{const _=f==null?void 0:f.data;if(d){const $=this.isValidationError(f)&&_.errors;if($)await this.showValidationErrors($,!0);else{const m=o.isObject(_)?_:d;i==null||i(m),await this.emitButtonEvent(t,"error",{notify:u,error:m})}c(!1)}else a&&_&&this.setData(_),r==null||r(),await this.emitButtonEvent(t,"success",{notify:l}),c(!0)})})},async emitButtonEvent(t,e,{notify:s,error:n}){const a=new w(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}}};var $r=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)},Cr=[];const Pr=g.component("dito-form",{mixins:[ae,Fe],data(){return{createdData:null,clonedData:void 0,sourceKey:null,isForm:!0}},computed:{verbs(){const t=this.getVerbs(),{isCreating:e,providesData:s}=this;return{...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 G(o.merge({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 ct(this.itemId,t)||t},breadcrumbPrefix(){return o.capitalize(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=o.parseDataPath(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];U(this.sourceSchema)&&a==="create"&&e.length--;for(let r=0,i=e.length;r<i&&t;r++){const l=e[r],u=/^:id/.test(n[r])?l==="create"?null:this.findItemIdIndex(this.sourceSchema,t,l):l;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=o.clone(t)),t===null&&!this.isCreating&&U(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 U(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=c=>this.verbs[this.getSubmitVerb(c)],a=B(t.schema.resource,{parent:this.resource}),r=a||this.resource,i=(r==null?void 0:r.method)||this.method,l=this.getPayloadData(t,i);let u;if(!a&&this.isTransient?u=await this.submitTransient(t,r,i,l,{onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:c=>this.emitSchemaEvent("error",{context:{error:c}}),notifySuccess:()=>{const c=n(!1);this.notify({type:"info",title:this.isCreating?`Item ${o.capitalize(c)}`:`Change ${o.capitalize(c)}`,text:[this.isCreating?`${this.itemLabel} was ${c}.`:`Changes to ${this.itemLabel} were ${c}.`,this.transientNote]})},notifyError:()=>{const c=n(!0);this.notify({type:"error",title:"Request Error",text:`Unable to ${c} ${this.itemLabel}.`})}}):u=await this.submitResource(t,r,i,l,{setData:!0,onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:c=>this.emitSchemaEvent("error",{context:{error:c}}),notifySuccess:()=>{const c=n(!1);this.notify({type:"success",title:`Successfully ${o.capitalize(c)}`,text:`${this.itemLabel} was ${c}.`})},notifyError:c=>{const d=n(!0);this.notify({type:"error",title:"Request Error",text:[`Unable to ${d} ${this.itemLabel}${c?":":""}`,(c==null?void 0:c.message)||c]})}}),u){if(this.resetValidation(),s||t.closeForm)this.close();else if(this.isCreating){const c=this.getItemId(this.schema,this.data);this.$router.replace({path:`../${c}`,append:!0})}}return u},async submitTransient(t,e,s,n,{onSuccess:a,onError:r,notifySuccess:i,notifyError:l}){const u=this.isCreating?this.addSourceData(n):this.setSourceData(n);if(u)a==null||a(),await this.emitButtonEvent(t,"success",{notify:i});else{const c="Could not submit transient item";r==null||r(c),await this.emitButtonEvent(t,"error",{notify:l,error:c})}return u}}}),Ve={};var Dr=p(Pr,$r,Cr,!1,wr,null,null,null);function wr(t){for(let e in Ve)this[e]=Ve[e]}const Ee=function(){return Dr.exports}(),oc="",Sr=Ee.component("dito-form-nested",{});let xr,Or;const ke={};var jr=p(Sr,xr,Or,!1,Fr,null,null,null);function Fr(t){for(let e in ke)this[e]=ke[e]}const Vr=function(){return jr.exports}();var Er=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()},kr=[];const lc="",Lr=g.component("dito-errors",{props:{errors:{type:Array,default:null}}}),Le={};var Br=p(Lr,Er,kr,!1,Rr,null,null,null);function Rr(t){for(let e in Le)this[e]=Le[e]}const Tr=function(){return Br.exports}();var qr=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)},Ir=[];const uc="",Mr=g.component("dito-scopes",{props:{query:{type:Object,required:!0},scopes:{type:Object,required:!0}},methods:{getScopeLink(t){const e={...this.query,scope:t.name};return e.page&&(e.page=0),this.getQueryLink(e)}}}),Be={};var Ar=p(Mr,qr,Ir,!1,Nr,null,null,null);function Nr(t){for(let e in Be)this[e]=Be[e]}const zr=function(){return Ar.exports}();var Ur=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}}})},Hr=[];const Kr=g.component("dito-pagination",{components:{Pagination:k.Pagination},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({...this.query,page:t-1}))}}}}),Re={};var Wr=p(Kr,Ur,Hr,!1,Jr,null,null,null);function Jr(t){for(let e in Re)this[e]=Re[e]}const Qr=function(){return Wr.exports}(),Ct={mixins:[$t],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}}};var Gr=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)},Xr=[];const cc="",Yr=g.component("dito-tree-item",{components:{VueDraggable:et.default},mixins:[Ct],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{...this.meta,schema:this.schema}},properties(){return N(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}`,l=n||s.startsWith(i)&&i.length<s.length;return{data:a,path:i,open:l,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&&M(this.schema)}}),editable:h("editable",{type:Boolean,default:!1,get(t){return t&&M(this.schema)}}),deletable:h("deletable",{type:Boolean,default:!1})},methods:{getPropertyDataPath(t){return V(this.dataPath,t.name)},onEdit(){this.$router.push({path:`${this.container.path}${this.path}`,query:this.$route.query})},onDelete(){},onChange(){this.container.onChange()}}}),Te={};var Zr=p(Yr,Gr,Xr,!1,ti,null,null,null);function ti(t){for(let e in Te)this[e]=Te[e]}const ei=function(){return Zr.exports}();var si=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)])},ni=[];const dc="",ai=g.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-${o.hyphenate(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({...this.query,order:`${t.name} ${e}`})}}}),qe={};var ri=p(ai,si,ni,!1,ii,null,null,null);function ii(t){for(let e in qe)this[e]=qe[e]}const oi=function(){return ri.exports}();var li=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)},ui=[];const ci=g.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 w(this,{name:e,value:n,data:t,dataPath:V(this.dataPath,e)})):o.escapeHtml(n)}}}),Ie={};var di=p(ci,li,ui,!1,hi,null,null,null);function hi(t){for(let e in Ie)this[e]=Ie[e]}const pi=function(){return di.exports}(),mi=g.component("dito-vnode",{functional:!0,render:(t,e)=>e.props.node});let fi,_i;const Me={};var gi=p(mi,fi,_i,!1,vi,null,null,null);function vi(t){for(let e in Me)this[e]=Me[e]}const bi=Object.freeze(Object.defineProperty({__proto__:null,DitoRoot:yt,DitoMenu:wn,DitoHeader:Tn,DitoAccount:zn,DitoDialog:Qn,DitoElement:ea,DitoLabel:oa,DitoSchema:pa,DitoSchemaInlined:ba,DitoPane:wa,DitoContainer:Ea,DitoTabs:qa,DitoPanel:Ua,DitoPanels:Ga,DitoButtons:sr,DitoEditButtons:lr,DitoCreateButton:mr,DitoClipboard:yr,DitoView:ie,DitoForm:Ee,DitoFormNested:Vr,DitoErrors:Tr,DitoScopes:zr,DitoPagination:Qr,DitoTreeItem:ei,DitoTableHead:oi,DitoTableCell:pi,DitoVNode:function(){return gi.exports}()},Symbol.toStringTag,{value:"Module"})),y=g.extend({mixins:[X],nativeField:!1,textField:!1,defaultValue:null,defaultNested:!0,defaultVisible:!0,generateLabel:!0,excludeValue:!1,ignoreMissingValue:null,omitPadding:!1});y.register=function(t,e={}){t=o.asArray(t);const s=this.component(`dito-type-${t[0]}`,e);for(const n of t)Xs(n,s);return s},y.get=pt;var yi=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))])},$i=[];const Ci=y.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||o.labelize(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&&Vt(this.schema)&&await this.submit()}}}),Ae={};var Pi=p(Ci,yi,$i,!1,Di,null,null,null);function Di(t){for(let e in Ae)this[e]=Ae[e]}const wi=function(){return Pi.exports}();var Si=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 l=null,u=t._i(a,l);r.checked?u<0&&(t.value=a.concat([l])):u>-1&&(t.value=a.slice(0,u).concat(a.slice(u+1)))}else t.value=i}}},"input",t.attributes,!1),t.listeners))},xi=[];const pc="",Oi=y.register("checkbox",{nativeField:!0}),Ne={};var ji=p(Oi,Si,xi,!1,Fi,null,null,null);function Fi(t){for(let e in Ne)this[e]=Ne[e]}const Vi=function(){return ji.exports}(),ze={mixins:[je],data(){return{isLoading:!1,asyncDataEntries:{}}},methods:{handleDataSchema(t,e,{resolveCounter:s=1,...n}={}){var l;o.isObject(t)||(t={data:t});let{data:a=void 0,dataPath:r=null}=t;const i=this.asyncDataEntries[e]||this.$set(this.asyncDataEntries,e,{dependencyFunction:null,resolveCounter:0,resolvedData:null,resolving:!1});if((l=i.dependencyFunction)==null||l.call(this,this.context),i.resolveCounter>0){const{resolvedData:u}=i;return--i.resolveCounter===0&&(i.resolvedData=null),u}if(i.resolving)a=null;else if(a){if(o.isFunction(a)){const u=a.call(this,this.context);o.isFunction(u)?(i.dependencyFunction=a,a=u.call(this,this.context)):a=u}o.isPromise(a)&&(i.resolving=!0,this.resolveData(a,n).then(u=>{i.resolveCounter=s,i.resolvedData=u,i.resolving=!1}),a=null)}else r&&(a=o.getValueAtDataPath(this.rootData,o.normalizeDataPath(`${this.dataPath}/${r}`)));return a},async resolveData(t,e={}){this.setLoading(!0,e);let s=null;try{s=await(o.isFunction(t)?t():t)}catch(n){this.addError(n.message||n)}return this.setLoading(!1,e),s}}},Z={mixins:[ze],data(){return{hasOptions:!1}},computed:{selectedValue:{get(){const t=s=>this.relate?this.hasOption(s)?this.getValueForOption(s):null:s,e=o.isArray(this.value)?this.value.map(t).filter(s=>s!==null):t(this.value);return this.relate&&this.hasOptions&&(e===null&&this.value!==null||Ms(this.value))&&(this.selectedValue=e),e},set(t){const e=s=>this.relate?this.getOptionForValue(s):s;this.value=o.isArray(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(!o.isArray(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}=o.isFunction(t)?{filter:t}:t;return s?o.debounceAsync(e,s):e}}}),groupByLabel(){return this.groupBy?"label":null},groupByOptions(){return this.groupBy?"options":null}},methods:{getOptionKey(t){const[e]=this.activeOptions;return o.isObject(e)&&t in e?t:null},processOptions(t){if(t.length){if(this.relate)for(const e of t)"id"in e||Is(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 o.isString(e)?t==null?void 0:t[e]:o.isFunction(e)?e.call(this,new w(this,{option:t})):t},getLabelForOption(t){const{optionLabel:e}=this;return o.isString(e)?t==null?void 0:t[e]:o.isFunction(e)?e.call(this,new w(this,{option:t})):o.labelize(`${t}`)}},processValue(t,e,s,n){var a;if(t.relate){const r=(a=t.options)==null?void 0:a.dataPath,i=r?o.normalizeDataPath(`${s}/${r}`):null;n.addRelation(s,i,t),i&&n.setSourceRelated(i);const l=u=>u&&{id:u.id};e=o.isArray(e)?e.map(l):l(e)}return e}};var Ei=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,l=!!i.checked;if(Array.isArray(r)){var u=t.getValueForOption(n),c=t._i(r,u);i.checked?c<0&&(t.selectedOptions=r.concat([u])):c>-1&&(t.selectedOptions=r.slice(0,c).concat(r.slice(c+1)))}else t.selectedOptions=l}}},"input",t.attributes,!1),t.listeners)),t._v(t._s(t.getLabelForOption(n)))])])}),0)},ki=[];const mc="",Li=y.register("checkboxes",{mixins:[Z],nativeField:!0,defaultValue:[],computed:{selectedOptions:{get(){return(this.selectedValue||[]).filter(t=>t)},set(t){this.selectedValue=t||[]}}}}),Ue={};var Bi=p(Li,Ei,ki,!1,Ri,null,null,null);function Ri(t){for(let e in Ue)this[e]=Ue[e]}const Ti=function(){return Bi.exports}();var qi=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}})},Ii=[];const fc="",Mi=y.register("code",{mixins:[K],computed:{lines(){return this.schema.lines||3},style(){return`height: calc(${this.lines}em * var(--line-height))`}},mounted(){const t=new Fs.default(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 l=c=>{c!==t.code&&(n=!0,t.updateCode(c))},u=c=>{c!==this.value&&(s=!0,this.value=c,e=!0,a())};t.onUpdate(c=>{n?n=!1:u(c)}),this.$watch("value",c=>{s?s=!1:l(c||"")}),l(this.value||"")},methods:{focusElement(){var t;(t=this.$el.querySelector("textarea"))==null||t.focus()}}}),He={};var Ai=p(Mi,qi,Ii,!1,Ni,null,null,null);function Ni(t){for(let e in He)this[e]=He[e]}const zi=function(){return Ai.exports}();var Ui=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)},Hi=[];const _c="",Ki=y.register("color",{components:{Trigger:k.Trigger,SketchPicker:Cs.Sketch},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=st.default(t).toString(e),this.onChange()}},hexValue:{get(){if(this.value==null)this.convertedHexValue=null;else if(!this.focused){const t=st.default(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=st.default(`#${this.convertedHexValue}`);e!=null&&e.isValid()&&(this.value=e.toString(this.colorFormat),this.onChange())}}}}),Ke={};var Wi=p(Ki,Ui,Hi,!1,Ji,null,null,null);function Ji(t){for(let e in Ke)this[e]=Ke[e]}const Qi=function(){return Wi.exports}();var Gi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s(t.component,t._b({tag:"component"},"component",t.$props,!1))},Xi=[];const Yi=y.register("component",{defaultValue:()=>{},ignoreMissingValue:t=>!("default"in t)}),We={};var Zi=p(Yi,Gi,Xi,!1,to,null,null,null);function to(t){for(let e in We)this[e]=We[e]}const eo=function(){return Zi.exports}();var so=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}})},no=[];const ao=y.register(["computed","data","hidden"],{mixins:[ze],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 X.computed.value.get.call(this)},set(t){X.computed.value.set.call(this,t)}}}}),Je={};var ro=p(ao,so,no,!1,io,null,null,null);function io(t){for(let e in Je)this[e]=Je[e]}const oo=function(){return ro.exports}();var lo=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)},uo=[];const co=y.register(["date","datetime","time"],{components:{DatePicker:k.DatePicker,TimePicker:k.TimePicker,DateTimePicker:k.DateTimePicker},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 o.isDate(e)?e.toISOString():e}}),Qe={};var ho=p(co,lo,uo,!1,po,null,null,null);function po(t){for(let e in Qe)this[e]=Qe[e]}const mo=function(){return ho.exports}(),tt={mixins:[Fe,se],defaultValue(t){return H(t)?[]:null},provide(){return{$sourceComponent:()=>this}},data(){return{wrappedPrimitives:null,unwrappingPrimitives:!1,ignoreRouteChange:!1}},computed:{sourceComponent(){return this},isObjectSource(){return U(this.type)},isListSource(){return H(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:ht("query",{get(t){return{...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={...this.query,...e!=null&&{scope:e},...s!=null&&{page:s},...t},o.equals(t,this.$route.query)||(this.ignoreRouteChange=!0,this.$router.replace({query:t,hash:this.$route.hash})),t}}),total:ht("total"),columns(){return N(this.schema.columns)},scopes(){return N(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=o.isString(e)?e:"asc";return`${t.name} ${s}`}}},nestedMeta(){return{...this.meta,schema:this.schema}},forms(){return Object.values(z(this.schema,this.context))},view(){return gt(this.schema,this.context)},linksToView(){return!!this.view},buttonSchemas(){return G(this.schema.buttons)},hasLabels(){return this.forms.some(rn)},isCompact(){return this.forms.every(zt)},isInlined(){return bt(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&&M(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&&o.isArray(t)||this.isObjectSource&&o.isObject(t)?this.value=t:this.unwrapListData(t)||o.isObject(t)&&this.isInView&&this.viewComponent.setData(t)},unwrapListData(t){if(this.isListSource&&o.isObject(t)&&o.isNumber(t.total)&&o.isArray(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=ct(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=o.parseDataPath(t.slice(this.dataPath.length+1))[0])!=null?s:null:0:null;if(a!==null&&o.isNumber(+a)){const r=this.getSchemaComponent(+a);if(r){const{opened:i}=r;i||(r.opened=!0,await this.$nextTick());const l=r.getComponentsByDataPath(t);if(l.length>0&&((n=e==null?void 0:e(l))!=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,l=i[i.length-1];s((u=e==null?void 0:e([l]))!=null?u:!0)},r=o.parseDataPath(t);for(;r.length>0;){const i=this.routeComponent.getChildPath(this.api.normalizePath(o.normalizeDataPath(r))),{matched:l}=this.$router.match(i);l.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,l=null){It(t,e,s);const u=bt(e);if(u&&e.resource)throw new Error("Lists with nested forms cannot load data from their own resources");const c=`id${a+1}`,d={api:t,schema:e},f={...d,flatten:i,nested:r,param:c},_=await tn(t,e,a);if(l&&await l(_,a+1),M(e)&&!u){const $=(b,S)=>S?b?`${b}/:${S}`:`:${S}`:b,m=a===0?"":e.path,P={path:$(m,H(e)&&c),component:g.component(r?"dito-form-nested":"dito-form"),meta:f};U(e)&&n.push({...P,path:$(m,c)}),m&&n.push({path:m,redirect:".",meta:d});const[x,D]=_.reduce((b,S)=>(b[S.meta.flatten?0:1].push(S),b),[[],[]]);if(D.length&&(P.children=D),n.push(P),x.length)for(const b of x)n.push({...b.redirect?b:P,path:`${P.path}/${b.path}`,meta:{...b.meta,flatten:i}})}},processValue(t,e,s,n){return n.addSource(s,t),e}},Pt={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:o.isArray(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 fo(t,e,s){const n={label:"Filters",name:"$filters",target:e,disabled:!1,data(){return vo(n,s.query)},components:_o(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.query,filter:go(this.schema,this.data),page:void 0}}}};return n}function _o(t){var s;const e={};for(const n of Object.values(t||{})){const{filter:a,...r}=n,i=a?(s=Pt[a])==null?void 0:s.call(Pt,n):n.components;if(i){r.components={};for(const[l,u]of Object.entries(i))if(u){const c=u.label||o.labelize(u.name||l);r.components[l]={...u,label:!1,placeholder:c}}e[n.name]={label:r.label,type:"object",default:()=>({}),form:r,inlined:!0}}else throw new Error(`Invalid filter '${n.name}': Unknown filter type '${a}'.`)}return e}function Ge(t,e){var n;const s=t.components[e];return(n=s==null?void 0:s.form)==null?void 0:n.components}function go(t,e){const s=[];for(const n in e){const a=e[n];if(a){const r=Object.keys(Ge(t,n)).map(i=>{var l;return(l=a[i])!=null?l:null});r.some(i=>i!==null)&&s.push(`${n}:${r.map(JSON.stringify).join(",")}`)}}return s.length?s:void 0}function vo(t,e){const s={};if(e)for(const a of o.asArray(e.filter)){const[,r,i]=a.match(/^(\w+):(.*)$/);try{s[r]=o.asArray(JSON.parse(`[${i}]`))}catch{}}const n={};for(const a in t.components){const r={},i=s[a];if(i){const l=Ge(t,a);if(l){let u=0;for(const c in l)r[c]=i[u++]}}n[a]=r}return n}var bo=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()},yo=[];const gc="",$o=y.register("list",{components:{VueDraggable:et.default},mixins:[tt,Ct],getSourceType(t){return t},getPanelSchema(t,e,s){const{filters:n}=t;if(n){const a=()=>s.getComponentByDataPath(e,r=>r.type==="list");return fo(N(n),e,{get query(){var r;return(r=a())==null?void 0:r.query},set query(r){const i=a();if(i){const l=u=>o.pickBy(u,c=>c!==void 0);o.equals(l(r),l(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 V(this.dataPath,t)},getEditPath(t,e){if(this.editable){const s=sn(this.schema,this.context)||this.path,n=this.getItemId(this.schema,t,e);return`${s}/${n}`}return null},getCellClass(t){return`dito-cell-${o.hyphenate(t.name)}`},getContext(t,e){return new w(this,{data:t,value:t,index:e,dataPath:this.getDataPath(e)})},onFilterErrors(t){const e=V(this.dataPath,"$filters"),s=this.schemaComponent.getPanelByDataPath(e);if(s)return s.showValidationErrors(t,!0),!0}}}),Xe={};var Co=p($o,bo,yo,!1,Po,null,null,null);function Po(t){for(let e in Xe)this[e]=Xe[e]}const Do=function(){return Co.exports}();var wo=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}})},So=[];const vc="",xo=y.register("label",{excludeValue:!0,generateLabel:!1}),Ye={};var Oo=p(xo,wo,So,!1,jo,null,null,null);function jo(t){for(let e in Ye)this[e]=Ye[e]}const Fo=function(){return Oo.exports}();var Vo=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,l=a.onClick;return s("button",{staticClass:"dito-button",class:{"dito-active":i},on:{click:l}},[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)},Eo=[];const bc="",ko=y.register("markup",{components:{EditorContent:W.EditorContent,EditorMenuBar:W.EditorMenuBar,Icon:k.Icon},mixins:[K],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 o.isObject(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=o.debounce(l=>{e=!0,this.value=l(),t=!0,s()},100),i=({getHTML:l})=>{r(l),this.onInput()};this.$watch("value",l=>{e?e=!1:this.editor.setContent(l,!1,this.parseOptions)}),this.editor=new W.Editor({...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:l})=>({x:i,y:l});let s=e(t).y,n=parseFloat(getComputedStyle(this.$refs.editor.$el).height);const a=i=>{const{y:l}=e(i);n+=l-s,s=l,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 F.Bold,t.italic&&new F.Italic,t.underline&&new F.Underline,t.strike&&new F.Strike,t.small&&new Lo,t.code&&new F.Code,t.link&&new Bo,e.blockquote&&new F.Blockquote,e.codeBlock&&new F.CodeBlock,new F.HardBreak,e.heading&&new F.Heading({levels:e.heading}),e.horizontalRule&&new F.HorizontalRule,(e.orderedList||e.bulletList)&&new F.ListItem,e.bulletList&&new F.BulletList,e.orderedList&&new F.OrderedList,s.history&&new F.History].filter(n=>!!n)},getButtons(t,e){const s=[],n=({name:r,icon:i,attrs:l,ignoreActive:u,onClick:c})=>{const d=this.editor.isActive[r],f=this.editor.commands[r];s.push({name:r,icon:i,isActive:(d==null?void 0:d(l))&&(u==null||!u()),onClick:()=>c?c(f,l):f(l)})},a=this.schema[t];if(a)for(const[r,i]of Object.entries(e)){const l=["undo","redo"].includes(r)?"history":r,u=a[l],c=o.underscore(r),d=o.hyphenate(r);if(u){if(i===!0)n({name:c,icon:d});else if(o.isObject(i)){const{attr:f,values:_,ignoreActive:$,onClick:m}=i;if(f){if(o.isArray(_)&&o.isArray(u))for(const P of _)u.includes(P)&&n({name:c,icon:`${d}-${P}`,attrs:{[f]:P},ignoreActive:$,onClick:m})}else n({name:c,icon:d,ignoreActive:$,onClick:m})}}}return s},focusElement(){var t,e;(e=(t=this.$el).scrollIntoView)==null||e.call(t),this.editor.focus()}}});class Lo extends W.Mark{get name(){return"small"}get schema(){return{parseDOM:[{tag:"small"}],toDOM:()=>["small",0]}}commands({type:e}){return()=>Ps.toggleMark(e)}}class Bo extends F.Link{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 Ze={};var Ro=p(ko,Vo,Eo,!1,To,null,null,null);function To(t){for(let e in Ze)this[e]=Ze[e]}const qo=function(){return Ro.exports}(),yc="";var Io=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)},Mo=[];const $c="",Ao=y.register("multiselect",{components:{VueMultiselect:Vs.default},mixins:[Z],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 w(this,{query:t})))):this.searchedOptions=null)}}}),ts={};var No=p(Ao,Io,Mo,!1,zo,null,null,null);function zo(t){for(let e in ts)this[e]=ts[e]}const Uo=function(){return No.exports}(),Dt={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){o.isArray(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}}};var Ho=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))},Ko=[];const Cc="",Wo=y.register(["number","integer"],{components:{InputField:k.InputField},mixins:[Dt],nativeField:!0,textField:!0,computed:{isInteger(){return this.type==="integer"}}}),es={};var Jo=p(Wo,Ho,Ko,!1,Qo,null,null,null);function Qo(t){for(let e in es)this[e]=es[e]}const Go=function(){return Jo.exports}();var Xo=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()},Yo=[];const Pc="",Zo=y.register("object",{mixins:[tt],getSourceType(t){return t},methods:{getContext(){return new w(this,{data:this.objectData})}}}),ss={};var tl=p(Zo,Xo,Yo,!1,el,null,null,null);function el(t){for(let e in ss)this[e]=ss[e]}const sl=function(){return tl.exports}(),nl=y.register("panel",{defaultValue:()=>{},excludeValue:!0,generateLabel:!1,omitPadding:!0,getPanelSchema(t){const{name:e,...s}=t;return s}});let al,rl;const ns={};var il=p(nl,al,rl,!1,ol,null,null,null);function ol(t){for(let e in ns)this[e]=ns[e]}const ll=function(){return il.exports}();var ul=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))},cl=[];const dl=y.register("progress",{mixins:[Dt],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]}}}),as={};var hl=p(dl,ul,cl,!1,pl,null,null,null);function pl(t){for(let e in as)this[e]=as[e]}const ml=function(){return hl.exports}();var fl=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)},_l=[];const Dc="",gl=y.register("radio",{mixins:[Z],nativeField:!0}),rs={};var vl=p(gl,fl,_l,!1,bl,null,null,null);function bl(t){for(let e in rs)this[e]=rs[e]}const yl=function(){return vl.exports}();var $l=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)},Cl=[];const wc="",Pl=y.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:vt},async processSchema(t,e,s,n,a){await _t(t,e,n,a)}}),is={};var Dl=p(Pl,$l,Cl,!1,wl,null,null,null);function wl(t){for(let e in is)this[e]=is[e]}const Sl=function(){return Dl.exports}();var xl=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()])},Ol=[];const Sc="",jl=y.register("select",{mixins:[Z],nativeField:!0,data(){return{populate:!0}}}),os={};var Fl=p(jl,xl,Ol,!1,Vl,null,null,null);function Vl(t){for(let e in os)this[e]=os[e]}const El=function(){return Fl.exports}();var kl=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)},Ll=[];const xc="",Bl=y.register("slider",{components:{InputField:k.InputField},mixins:[Dt],nativeField:!0,computed:{input:h("input",{type:Boolean,default:!0})}}),ls={};var Rl=p(Bl,kl,Ll,!1,Tl,null,null,null);function Tl(t){for(let e in ls)this[e]=ls[e]}const ql=function(){return Rl.exports}();var Il=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))},Ml=[];const Oc="",Al=y.register("switch",{defaultValue:!1,defaultWidth:"auto",components:{SwitchButton:k.SwitchButton},computed:{labels(){return this.schema.labels}}}),us={};var Nl=p(Al,Il,Ml,!1,zl,null,null,null);function zl(t){for(let e in us)this[e]=us[e]}const Ul=function(){return Nl.exports}();var Hl=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))},Kl=[];const Wl="****************",Jl=y.register(["text","email","url","hostname","domain","tel","password","creditcard"],{components:{InputField:k.InputField},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?Wl: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}:{}}}}),cs={};var Ql=p(Jl,Hl,Kl,!1,Gl,null,null,null);function Gl(t){for(let e in cs)this[e]=cs[e]}const Xl=function(){return Ql.exports}();var Yl=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))},Zl=[];const jc="",tu=y.register("textarea",{nativeField:!0,textField:!0,computed:{lines(){return this.schema.lines||4},resizable:h("resizable",{type:Boolean,default:!1})}}),ds={};var eu=p(tu,Yl,Zl,!1,su,null,null,null);function su(t){for(let e in ds)this[e]=ds[e]}const nu=function(){return eu.exports}();var au=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)},ru=[];const Fc="",iu=y.register(["tree-list","tree-object"],{mixins:[tt],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:{name:this.name,...this.schema}}:this.schema},hasEditableForms(){const t=e=>M(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,l=null){return tt.processSchema(t,e,s,n,a,r,i,(u,c)=>{const{children:d}=e;if(d)return d.type="tree-list",this.processSchema(t,d,d.name,u,c,r,!0,l)})},getFormSchemasForProcessing(t,e){const{children:s}=t;return z(t,e,s?n=>({...n,components:{...n.components,[s.name]:s}}):null)}}),hs={};var ou=p(iu,au,ru,!1,lu,null,null,null);function lu(t){for(let e in hs)this[e]=hs[e]}const uu=function(){return ou.exports}();function ps(t){return xs.filesize(t,{base:10})}var cu=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)])},du=[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")])])])}];const Vc="",hu=y.register("upload",{components:{VueUpload:Es.default,VueDraggable:et.default},filters:{formatFileSize:ps},mixins:[Ct],data(){return{uploads:[]}},computed:{upload(){return this.$refs.upload},files(){return ms(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 o.isArray(t)?t.join(","):t}}),maxSize:h("maxSize",{type:[String,Number],get(t){return t?ks.default(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 w(this,{value:t,data:this.files,index:e,dataPath:V(this.dataPath,e)})):o.escapeHtml(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: ${ps(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=ms(e).map(({upload:n,...a})=>!n||n.success?a:null).filter(n=>n);return t.multiple?s:s[0]||null}});function ms(t){return t?o.asArray(t):[]}const fs={};var pu=p(hu,cu,du,!1,mu,null,null,null);function mu(t){for(let e in fs)this[e]=fs[e]}const fu=Object.freeze(Object.defineProperty({__proto__:null,TypeButton:wi,TypeCheckbox:Vi,TypeCheckboxes:Ti,TypeCode:zi,TypeColor:Qi,TypeComponent:eo,TypeComputed:oo,TypeDate:mo,TypeList:Do,TypeLabel:Fo,TypeMarkup:qo,TypeMultiselect:Uo,TypeNumber:Go,TypeObject:sl,TypePanel:ll,TypeProgress:ml,TypeRadio:yl,TypeSection:Sl,TypeSelect:El,TypeSlider:ql,TypeSwitch:Ul,TypeText:Xl,TypeTextarea:nu,TypeTreeList:uu,TypeUpload:function(){return pu.exports}()},Symbol.toStringTag,{value:"Module"})),_s=new Set;function _u(t){_s.has(t)||(_s.add(t),console.warn(t))}const gu=["create","created","save","saved","submit","submitted","delete","deleted","edit","edited","close","closed","cancel","cancelled","drag","dragged"].reduce((t,e)=>(t[e]=e,t),{});q.default.config.productionTip=!1,q.default.use(xt.default),q.default.use(Os.default,{dynamic:!0}),q.default.use(js.default);class vu{constructor(e,{dito:s={},api:n,views:a={},...r}={}){this.el=e,this.api=n=o.merge({base:"/"},s.api,n),this.options=r,n.locale||(n.locale="en-US"),n.formats=o.merge({},o.defaultFormats,n.formats),n.request||(n.request=l=>yu(n,l)),n.getApiUrl||(n.getApiUrl=l=>$u(n,l)),n.isApiRequest||(n.isApiRequest=l=>Cu(n,l)),n.normalizePath||(n.normalizePath=n.normalizePaths?o.hyphenate:l=>l),n.denormalizePath||(n.denormalizePath=n.normalizePaths?o.camelize:l=>l);const i=n.users=B(n.users,{type:"collection"})||{};i.login=B(i.login||"login",{method:"post",parent:i}),i.logout=B(i.logout||"logout",{method:"post",parent:i}),i.session=B(i.session||"session",{method:"get",parent:i}),n.resources={any(l){const u=this[l==null?void 0:l.type]||this.default;return l&&u.call(this,l)},default(l){const u=this.any(l.parent);return u?`${u}/${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={"Content-Type":"application/json",...n.headers},o.isString(e)&&(e=document.querySelector(e)),this.root=new q.default({el:e,router:new xt.default({mode:"history",base:s.base,linkActiveClass:"",linkExactActiveClass:""}),components:{DitoRoot:yt},provide:{api:n,$verbs:()=>gu,$views:()=>{},$isPopulated:()=>!0,$schemaComponent:()=>null,$schemaParentComponent:()=>null,$routeComponent:()=>null,$dataComponent:()=>null,$sourceComponent:()=>null,$resourceComponent:()=>null,$dialogComponent:()=>null,$panelComponent:()=>null,$tabComponent:()=>null},render:l=>l(yt,{attrs:{id:e.id},props:{unresolvedViews:a,options:r},components:{...bi,...fu}})})}register(e,s){return y.register(e,s)}}class bu extends Error{constructor(e){super(`Request failed with status code: ${e.status} (${e.statusText})`),this.response=e}}async function yu(t,{url:e,method:s="get",params:n=null,query:a=n||null,headers:r=null,data:i=null}){var d,f;n&&_u("request.params is deprecated. Use action.method and action.path instead.");const l=t.isApiRequest(e);l&&!o.isAbsoluteUrl(e)&&(e=t.getApiUrl(e));const u=a&&new URLSearchParams(a).toString();u&&(e=`${e}?${u}`);const c=await fetch(e,{method:s.toUpperCase(),...i&&{body:JSON.stringify(i)},headers:{...l&&t.headers,...r},credentials:l&&((d=t.cors)==null?void 0:d.credentials)?"include":"same-origin"});if((f=c.headers.get("Content-Type"))!=null&&f.includes("application/json")&&(c.data=await c.json()),!c.ok)throw new bu(c);return c}function $u(t,e){return`${t.url.replace(/\/+$/,"")}/${e.replace(/^\/+/,"")}`}function Cu(t,e){return!o.isAbsoluteUrl(e)||e.startsWith(t.url)}return vu});
6
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBTdGF0ZS5qcyIsIi4uL3NyYy91dGlscy9kYXRhLmpzIiwiLi4vc3JjL0RpdG9Db250ZXh0LmpzIiwiLi4vc3JjL21peGlucy9FbWl0dGVyTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9yZXNvdXJjZS5qcyIsIi4uL3NyYy9taXhpbnMvRGl0b01peGluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19jcmVkaXRjYXJkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kZWNpbWFscy5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZW1haWwuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2hvc3RuYW1lLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kb21haW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2ludGVnZXIuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21heC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19wYXNzd29yZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmFuZ2UuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JlcXVpcmVkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL191cmwuanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRpb25NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9hY2Nlc3Nvci5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvc2NoZW1hLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvRGl0b0NvbXBvbmVudC5qcyIsIi4uL3NyYy9EaXRvVXNlci5qcyIsIi4uL3NyYy9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzIiwiLi4vc3JjL21peGlucy9Sb3V0ZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWUiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSGVhZGVyLnZ1ZSIsIi4uL3NyYy9taXhpbnMvUHVsbGRvd25NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9BY2NvdW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlIiwiLi4vc3JjL3V0aWxzL21hdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NyZWF0ZUJ1dHRvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY29wZXMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvbWl4aW5zL09yZGVyZWRNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlSGVhZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlQ2VsbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVk5vZGUudnVlIiwiLi4vc3JjL1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRGF0YU1peGluLmpzIiwiLi4vc3JjL21peGlucy9PcHRpb25zTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbG9yLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvZmlsdGVyLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxhYmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTWFya3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTXVsdGlzZWxlY3QudnVlIiwiLi4vc3JjL21peGlucy9OdW1iZXJNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVPYmplY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2xpZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVVcGxvYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWUiLCIuLi9zcmMvdXRpbHMvZGVwcmVjYXRlLmpzIiwiLi4vc3JjL3ZlcmJzLmpzIiwiLi4vc3JjL0RpdG9BZG1pbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG4gIHRpdGxlOiAnJyxcbiAgcm91dGVDb21wb25lbnRzOiBbXSxcbiAgdXNlcjogbnVsbCxcbiAgbG9hZENhY2hlOiB7fSwgLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgYWN0aXZlTGFiZWw6IG51bGwsXG4gIGNsaXBib2FyZERhdGE6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzSW50ZWdlciwgcGFyc2VEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKSB7XG4gIHJldHVybiBkYXRhUGF0aFxuICAgID8gYCR7ZGF0YVBhdGh9LyR7dG9rZW59YFxuICAgIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHBhdGg/LnBvcCgpXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5lc3RlZCA/IHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIDogcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICBpZiAocGF0aCkge1xuICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHRva2VuLiBJZiBpdCdzIGEgbnVtYmVyLCB0aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhblxuICAgIC8vIGFycmF5IGFuZCBuZWVkIHRvIHJlbW92ZSBtb3JlIHRva2VucyB1bnRpbCB3ZSBtZWV0IHRoZSBhY3R1YWwgcGFyZW50OlxuICAgIGxldCB0b2tlblxuICAgIGRvIHtcbiAgICAgIHRva2VuID0gcGF0aC5wb3AoKVxuICAgIH0gd2hpbGUgKHRva2VuICE9IG51bGwgJiYgaXNJbnRlZ2VyKCt0b2tlbikpXG4gICAgLy8gSWYgdGhlIHJlbW92ZWQgdG9rZW4gaXMgdmFsaWQsIHdlIGNhbiBnZXQgdGhlIHBhcmVudCBkYXRhOlxuICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aE5hbWUoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgcmV0dXJuIHRva2VuID09IG51bGwgfHwgaXNJbnRlZ2VyKCt0b2tlbikgPyBudWxsIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aEluZGV4KGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIGNvbnN0IGluZGV4ID0gdG9rZW4gPT0gbnVsbCA/IG51bGwgOiArdG9rZW5cbiAgcmV0dXJuIGlzSW50ZWdlcihpbmRleCkgPyBpbmRleCA6IG51bGxcbn1cblxubGV0IHRlbXBvcmFyeUlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBUZW1wb3JhcnkgaWRzIGFyZSBtYXJrZWQgd2l0aCBhICdAJyBhdCB0aGUgYmVnaW5uaW5nLlxuICBkYXRhW2lkS2V5XSA9IGBAJHsrK3RlbXBvcmFyeUlkfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcG9yYXJ5SWQoaWQpIHtcbiAgcmV0dXJuIC9eQC8udGVzdChpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1RlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICByZXR1cm4gaXNUZW1wb3JhcnlJZChkYXRhPy5baWRLZXldKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBob2xkcyBub3RoaW5nIG1vcmUgdGhhbiBhbiBpZC5cbiAgcmV0dXJuIGRhdGE/LltpZEtleV0gIT0gbnVsbCAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDFcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLCBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0sIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuLy8gYERpdG9Db250ZXh0YCBpbnN0YW5jZXMgYXJlIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCByYXcgYGNvbnRleHRgIG9iamVjdHMsXG4vLyB3aGljaCB0aGVtc2VsdmVzIGFjdHVhbGx5IGluaGVyaXQgZnJvbSB0aGUgbGlua2VkIGBjb21wb25lbnRgIGluc3RhbmNlLCBzb1xuLy8gdGhhdCB0aGV5IG9ubHkgbmVlZCB0byBwcm92aWRlIHRoZSB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgZGlmZmVyZW50IHRoYW5cbi8vIGluIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudC4gSW4gb3JkZXIgdG8gbm90IGV4cG9zZSBhbGwgZmllbGRzIGZyb20gdGhlXG4vLyBjb21wb25lbnQsIHRoZSB3cmFwcGVyIGlzIGludHJvZHVjZWQ6XG4vLyBVc2UgV2Vha01hcCBmb3IgdGhlIHJhdyBgY29udGV4dGAgb2JqZWN0cywgc28gd2UgZG9uJ3QgaGF2ZSB0byBwb2xsdXRlIHRoZVxuLy8gYWN0dWFsIGBEaXRvQ29udGV4dGAgaW5zdGFuY2Ugd2l0aCBpdC5cbmNvbnN0IGNvbnRleHRzID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBnZXQoY29udGV4dCwga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgY29uc3Qgb2JqZWN0ID0gY29udGV4dHMuZ2V0KGNvbnRleHQpXG4gIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV1cbiAgLy8gSWYgYG9iamVjdGAgZXhwbGljaXRseSBzZXRzIHRoZSBrZXkgdG8gYHVuZGVmaW5lZGAsIHJldHVybiBpdC5cbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgfHwgb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICAgID8gZGVmYXVsdFZhbHVlKClcbiAgICAgIDogZGVmYXVsdFZhbHVlXG59XG5cbmZ1bmN0aW9uIHNldChjb250ZXh0LCBrZXksIHZhbHVlKSB7XG4gIGNvbnRleHRzLmdldChjb250ZXh0KVtrZXldID0gdmFsdWVcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0NvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICAvLyBVc2UgdGhlIHByb3ZpZGVkIHBhcmFtcyBvYmplY3QgLyBmdW5jdGlvbiwgb3IgY3JlYXRlIGEgbmV3IG9uZTpcbiAgICBjb250ZXh0ID0gY29udGV4dFxuICAgICAgPyAoaXNGdW5jdGlvbihjb250ZXh0KSA/IGNvbnRleHQoKSA6IHsgLi4uY29udGV4dCB9KVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIGNvbnRleHRzLnNldCh0aGlzLCBvYmplY3QpXG4gIH1cblxuICBzdGF0aWMgZ2V0KGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0IGluc3RhbmNlb2YgRGl0b0NvbnRleHRcbiAgICAgID8gY29udGV4dFxuICAgICAgOiBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCBjb250ZXh0KVxuICB9XG5cbiAgLy8gYG5lc3RlZGAgaXMgYHRydWVgIHdoZW4gdGhlIGRhdGEtcGF0aCBwb2ludHMgYSB2YWx1ZSBpbnNpZGUgYW4gaXRlbSwgYW5kXG4gIC8vIGBmYWxzZWAgd2hlbiBpdCBwb2ludHMgdG8gdGhlIGl0ZW0gaXRzZWxmLlxuICBnZXQgbmVzdGVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25lc3RlZCcsIHRydWUpXG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmFsdWUnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YVBhdGgnLCAnJylcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25hbWUnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhOYW1lKHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGluZGV4KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2luZGV4JywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgaXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLml0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMucGFyZW50SXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IGl0ZW0oKSB7XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0czpcbiAgICAvLyBJZiBgZGF0YWAgaXNuJ3QgcHJvdmlkZWQsIHdlIGNhbiBkZXRlcm1pbmUgaXQgZnJvbSByb290RGF0YSAmIGRhdGFQYXRoOlxuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGEnLCAoKSA9PlxuICAgICAgZ2V0SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICApXG4gIH1cblxuICAvLyBOT1RFOiBgcGFyZW50SXRlbWAgaXNuJ3QgdGhlIGNsb3Nlc3QgZGF0YSBwYXJlbnQgdG8gYGl0ZW1gLCBpdCdzIHRoZVxuICAvLyBjbG9zZXN0IHBhcmVudCB0aGF0IGlzbid0IGFuIGFycmF5LCBlLmcuIGZvciByZWxhdGlvbnMgb3IgbmVzdGVkIEpTT05cbiAgLy8gZGF0YS4gIFRoaXMgaXMgd2h5IHRoZSB0ZXJtIGBpdGVtYCB3YXMgY2hvc2VuIG92ZXIgYGRhdGFgLCBlLmcuIFZTIHRoZVxuICAvLyB1c2Ugb2YgYHBhcmVudERhdGFgIGluIHNlcnZlci1zaWRlZCB2YWxpZGF0aW9uLCB3aGljaCBpcyB0aGUgY2xvc2VzdFxuICAvLyBwYXJlbnQuIElmIG5lZWRlZCwgd2UgY291bGQgZXhwb3NlIHRoaXMgZGF0YSBoZXJlIHRvbywgYXMgd2UgY2FuIGRvIGFsbFxuICAvLyBzb3J0cyBvZiBkYXRhIHByb2Nlc3Npbmcgd2l0aCBgcm9vdERhdGFgIGFuZCBgZGF0YVBhdGhgLlxuICBnZXQgcGFyZW50SXRlbSgpIHtcbiAgICBjb25zdCBwYXJlbnRJdGVtID1cbiAgICAgIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpIHx8IG51bGxcbiAgICByZXR1cm4gcGFyZW50SXRlbSAhPT0gdGhpcy5pdGVtID8gcGFyZW50SXRlbSA6IG51bGxcbiAgfVxuXG4gIGdldCByb290SXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyb290RGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwcm9jZXNzZWREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBjbGlwYm9hcmRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NsaXBib2FyZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndXNlcicsIG51bGwpXG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2FwaScsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld3MoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld3MnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGl0ZW1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpdGVtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogUmVtb3ZlIGV4cG9zdXJlIHNpbmNlIHRoZSBhc3NvY2lhdGVkIGNvbXBvbmVudCBkb2Vzbid0IGFsd2F5cyBleGlzdCxcbiAgLy8gZS5nLiBuZXN0ZWQgZm9ybXMgaW4gYHByb2Nlc3NEYXRhKClgLiBJbnN0ZWFkLCBiaW5kIGNvbXBvbmVudCB0byBgdGhpc2BcbiAgLy8gb25seSB3aGVyZSBhdmFpbGFibGUuXG4gIGdldCBjb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFRPRE86IEFkZCBgY29tcG9uZW50U2NoZW1hYCBnZXR0ZXIgZm9yIHRoZSBzY2hlbWEgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50LFxuICAvLyBldmVuIHdoZW4gdGhlIGNvbXBvbmVudCBpc24ndCBhY3R1YWxseSBpbnN0YW50aWF0ZWQuIENvbnNpZGVyIGFkZGluZ1xuICAvLyBgc291cmNlU2NoZW1hYCBhcyB3ZWxsP1xuXG4gIC8vIFRPRE86IEZpeCB1bmNsZWFyIG5hbWluZzogV2hpY2ggc2NoZW1hIGlzIHRoaXMsIHRoYXQgb2YgdGhlIGNvbXBvbmVudCBvciBvZlxuICAvLyBpdHMgcGFyZW50PyBJc24ndCBleHBvc2luZyBgZm9ybUNvbXBvbmVudGAgYW5kIGB2aWV3Q29tcG9uZW50YCBlbm91Z2gsIG9uY2VcbiAgLy8gd2Ugb2ZmZXIgYWNjZXNzIHRvIHRoZWlyIGNvbXBvbmVudHMgdGhlcmUgdGhyb3VnaCBgZ2V0Q29tcG9uZW50KClgICYgY28uIG9uXG4gIC8vIGBEaXRvTWl4aW5gIHBlcmhhcHM/ICBBbHNvLCB0aGVyZSBjb3VsZCBiZSBhIGB0YWJDb21wb25lbnRgIGdldHRlciBmb3JcbiAgLy8gc2NoZW1hcyBpbiB0YWJzP1xuICBnZXQgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3Q29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkaWFsb2dDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHBhbmVsQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3BhbmVsQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyZXNvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBXaGVuIHVzZWQgaW4gT3B0aW9uc01peGluIGZvciBgc2NoZW1hLm9wdGlvbnMudmFsdWUoKWAsXG4gIC8vIGBzY2hlbWEub3B0aW9ucy5sYWJlbCgpYCBhbmQgIGBzY2hlbWEuc2VhcmNoLmZpbHRlcigpYCBjYWxsYmFja3M6XG4gIGdldCBvcHRpb24oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9uJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9ucycsIHVuZGVmaW5lZClcbiAgfVxuXG4gIC8vIFRPRE86IFJlbmFtZSB0aGlzIHRvIGBzZWFyY2hUZXJtYCBvciBgc2VhcmNoUXVlcnlgLCB0byBwZXJoYXBzIGZyZWUgYHF1ZXJ5YFxuICAvLyBmb3IgdGhlIGFjdHVhbCBgcmVzb3VyY2VDb21wb25lbnQucXVlcnlgIG9iamVjdD9cbiAgZ2V0IHF1ZXJ5KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3F1ZXJ5JywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVGhlIGVycm9yIGZpZWxkIGlzIG9ubHkgcG9wdWxhdGVkIGluIHRoZSBjb250ZXh0IG9mIGJ1dHRvbnMgdGhhdCBzZW5kXG4gIC8vIHJlcXVlc3RzLCBzZWUgYFJlc291cmNlTWl4aW4uZW1pdEJ1dHRvbkV2ZW50KClgOlxuICBnZXQgZXJyb3IoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZXJyb3InLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgd2FzTm90aWZpZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnd2FzTm90aWZpZWQnLCBmYWxzZSlcbiAgfVxuXG4gIC8vIEhlbHBlciBNZXRob2RzXG5cbiAgZ2V0IHJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQucmVxdWVzdChvcHRpb25zKVxuICB9XG5cbiAgZ2V0IGZvcm1hdCgpIHtcbiAgICByZXR1cm4gKHZhbHVlLCBvcHRpb25zKSA9PiB0aGlzLmNvbXBvbmVudC5mb3JtYXQodmFsdWUsIG9wdGlvbnMpXG4gIH1cblxuICBnZXQgbmF2aWdhdGUoKSB7XG4gICAgcmV0dXJuIGxvY2F0aW9uID0+IHRoaXMuY29tcG9uZW50Lm5hdmlnYXRlKGxvY2F0aW9uKVxuICB9XG5cbiAgZ2V0IGRvd25sb2FkKCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHRoaXMuY29tcG9uZW50LmRvd25sb2FkKG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZ2V0UmVzb3VyY2VVcmwoKSB7XG4gICAgcmV0dXJuIHJlc291cmNlID0+IHRoaXMuY29tcG9uZW50LmdldFJlc291cmNlVXJsKHJlc291cmNlKVxuICB9XG5cbiAgZ2V0IG5vdGlmeSgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB7XG4gICAgICB0aGlzLmNvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICAgIHNldCh0aGlzLCAnd2FzTm90aWZpZWQnLCB0cnVlKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRldmVudHM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEFzeW5jIHZlcnNpb25zIG9mIFZ1ZSdzICRvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlXG4gICAgLy8gZXZlbnRzIGFkZGVkIC8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3NcbiAgICAvLyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy4kZXZlbnRzIHx8ICh0aGlzLiRldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZXZlbnRzW2V2ZW50XSB8fCAoZXZlbnRzW2V2ZW50XSA9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMuJGV2ZW50c1xuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vZmYoZXYsIGNhbGxiYWNrKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vZmYoa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgc3BlY2lmaWMgZXZlbnRcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBoYW5kbGVycyBmb3IgdGhpcyBldmVudFxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGV2ZW50c1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBjb25zdCB7IHF1ZXVlLCBjYWxsYmFja3MgfSA9IGVudHJ5XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gRW1pdCB0aGUgbmV4dCBldmVudCBpbiB0aGUgcXVldWUgd2l0aCBpdHMgcGFyYW1zLlxuICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0IG9ubHkgZ2V0cyByZW1vdmVkIG9uY2UgYG5leHQoKWAgaXMgY2FsbGVkLlxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgbGV0IHJlc3VsdFxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjYWxsYmFjay5hcHBseSh0aGlzLCBlbnRyeS5hcmdzKVxuICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgRXJyb3IgZHVyaW5nIGV2ZW50IGhhbmRsZXIgZm9yICcke2V2ZW50fSc6YCwgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgcXVldWUgZm9yIHRoZSBldmVudFxuICAgICAgICAgICAgICAvLyB0aGF0IHdhcyBqdXN0IGNvbXBsZXRlZCBieSB0aGUgd3JhcHBlciB0aGF0IGNhbGxlZCBgbmV4dCgpYFxuICAgICAgICAgICAgICBlbnRyeS5yZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlLnB1c2goeyBhcmdzLCByZXNvbHZlIH0pXG4gICAgICAgICAgLy8gRm9yIG5ldyBxdWV1ZXMgKD0gb25seSBvbmUgZW50cnkpIGVtaXQgdGhlIGZpcnN0IGV2ZW50IGltbWVkaWF0ZWx5LFxuICAgICAgICAgIC8vIHRvIGdldCB0aGUgcXVldWUgcnVubmluZy5cbiAgICAgICAgICBpZiAocXVldWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIENoZWNrcyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQgdHlwZTpcbiAgICBoYXNMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycyhldikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQubGVuZ3RoID4gMFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy4kZXZlbnRzPy5bZXZlbnRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGVnYXRlKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZShldiwgdGFyZ2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uKGV2ZW50LCAoLi4uYXJncykgPT4gdGFyZ2V0LmVtaXQoZXZlbnQsIC4uLmFyZ3MpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNBcnJheSwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0Jvb2xlYW4sIGlzTnVtYmVyLCBpc0Z1bmN0aW9uLCBpc0RhdGUsXG4gIGlzUmVnRXhwLCBhc0FycmF5XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDaGVja2VycyA9IHtcbiAgQm9vbGVhbjogaXNCb29sZWFuLFxuICBOdW1iZXI6IGlzTnVtYmVyLFxuICBTdHJpbmc6IGlzU3RyaW5nLFxuICBEYXRlOiBpc0RhdGUsXG4gIEFycmF5OiBpc0FycmF5LFxuICBPYmplY3Q6IGlzT2JqZWN0LFxuICBSZWdFeHA6IGlzUmVnRXhwLFxuICBGdW5jdGlvbjogaXNGdW5jdGlvblxufVxuXG4vLyBEZWNsYXJlIHRoZXNlIHNlcGFyYXRlbHkgZnJvbSB0aGUgYHR5cGVDb252ZXJ0ZXJzYCBvYmplY3QsIHRvIHByZXZlbnRcbi8vIEJhYmVsIGlzc3VlcyB3aXRoIGBPYmplY3RgIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBgT2JqZWN0YDpcbmNvbnN0IHRvQm9vbGVhbiA9IHZhbHVlID0+ICEhdmFsdWVcbmNvbnN0IHRvTnVtYmVyID0gdmFsdWUgPT4gK3ZhbHVlXG5jb25zdCB0b1N0cmluZyA9IHZhbHVlID0+IFN0cmluZyh2YWx1ZSlcblxuY29uc3QgdG9EYXRlID0gdmFsdWUgPT4gaXNEYXRlKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IERhdGUodmFsdWUpXG5cbmNvbnN0IHRvQXJyYXkgPSB2YWx1ZSA9PiBpc0FycmF5KHZhbHVlKVxuICA/IHZhbHVlXG4gIDogaXNTdHJpbmcodmFsdWUpXG4gICAgPyB2YWx1ZS5zcGxpdCgnLCcpXG4gICAgOiBhc0FycmF5KHZhbHVlKVxuXG5jb25zdCB0b09iamVjdCA9IHZhbHVlID0+IGlzT2JqZWN0KHZhbHVlKVxuICA/IHZhbHVlXG4gIC8vIElmIGEgT2JqZWN0IGlzIGV4cGVjdGVkIGJ1dCBhIEJvb2xlYW4gcHJvdmlkZSwgY29udmVydCB0byBhbiBlbXB0eVxuICAvLyBvYmplY3QuIFVzZWQgYnkgYGNyZWF0YWJsZWAgJiBjbywgdGhhdCBjYW4gYmUgYm90aC5cbiAgOiB2YWx1ZSA9PT0gdHJ1ZVxuICAgID8ge31cbiAgICA6IG51bGxcblxuY29uc3QgdG9SZWdFeHAgPSB2YWx1ZSA9PiBpc1JlZ0V4cCh2YWx1ZSlcbiAgPyB2YWx1ZVxuICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBwaWNrQnkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVzb3VyY2Uoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFJlc291cmNlKHNjaGVtYS5yZXNvdXJjZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlKHJlc291cmNlLCBkZWZhdWx0cyA9IHt9KSB7XG4gIGNvbnN0IHsgcGFyZW50LCAuLi5kZWZzIH0gPSBkZWZhdWx0c1xuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKSA/IHsgLi4uZGVmcywgLi4ucmVzb3VyY2UgfVxuICAgIDogaXNTdHJpbmcocmVzb3VyY2UpID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgOiBudWxsXG4gIC8vIE9ubHkgc2V0IHBhcmVudCBpZiBwYXRoIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnLycsIHNvIHJlbGF0aXZlIFVSTHMgYXJlXG4gIC8vIGRlYWx0IHdpdGggY29ycmVjdGx5LlxuICBpZiAoXG4gICAgcmVzb3VyY2UgJiZcbiAgICBwYXJlbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkICYmXG4gICAgIXJlc291cmNlLnBhdGg/LnN0YXJ0c1dpdGgoJy8nKVxuICApIHtcbiAgICByZXNvdXJjZS5wYXJlbnQgPSBwYXJlbnRcbiAgICBpZiAoIXJlc291cmNlLnBhdGgpIHtcbiAgICAgIHJlc291cmNlLnBhdGggPSAnLidcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc291cmNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW1iZXJSZXNvdXJjZShpZCwgcmVzb3VyY2UpIHtcbiAgcmV0dXJuIGlkICE9IG51bGwgJiYgcmVzb3VyY2U/LnR5cGUgPT09ICdjb2xsZWN0aW9uJ1xuICAgID8ge1xuICAgICAgdHlwZTogJ21lbWJlcicsXG4gICAgICAuLi5waWNrQnkoXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICAodmFsdWUsIGtleSkgPT4gWydtZXRob2QnLCAncGF0aCcsICdwYXJlbnQnXS5pbmNsdWRlcyhrZXkpXG4gICAgICApLFxuICAgICAgaWQ6IGAke2lkfWBcbiAgICB9XG4gICAgOiBudWxsXG59XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcsIGlzRnVuY3Rpb24sIGFzQXJyYXksIGVxdWFscyxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoLCBsYWJlbGl6ZSwgaHlwaGVuYXRlLCBmb3JtYXRcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBhcHBTdGF0ZSBmcm9tICcuLi9hcHBTdGF0ZS5qcydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtFbWl0dGVyTWl4aW5dLFxuXG4gIGluamVjdDogW1xuICAgICdhcGknLFxuICAgICckdmVyYnMnLFxuICAgICckdmlld3MnLFxuICAgICckaXNQb3B1bGF0ZWQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8geyAkZGF0YUNvbXBvbmVudDogKCkgPT4gdGhpcyB9XG4gICAgICA6IHt9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGUsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRjaGlsZHJlblswXVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBVc2UgY29tcHV0ZWQgcHJvcGVydGllcyBhcyBsaW5rcyB0byBpbmplY3RzLCBzbyBEaXRvU2NoZW1hIGNhblxuICAgICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICAgIHJldHVybiB0aGlzLiRzY2hlbWFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIFJvdXRlTWl4aW4gY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzRm9ybSA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlld0NvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzVmlldyA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIGN1cnJlbnQgY29tcG9uZW50LCB0aGF0IGlzIGxpbmtlZCB0byBhIHJlc291cmNlIChhbmQgdGh1cyBsb2FkcyBpdHNcbiAgICAvLyBvd24gZGF0YSBhbmQgZG9lc24ndCBob2xkIG5lc3RlZCBkYXRhKS5cbiAgICBkYXRhQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhID8gdGhpcyA6IHRoaXMuJGRhdGFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZGlhbG9nQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFuZWxDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50Py4kcGFyZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50Py4kcGFyZW50LnJvdXRlQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudEZvcm1Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py4kcGFyZW50LmZvcm1Db21wb25lbnRcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlQ3JlYXRlKCkge1xuICAgIHRoaXMuJHVpZCA9ICsrdWlkXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2V0KHRoaXMuc3RvcmUsIGtleSwgdmFsdWUpXG4gICAgfSxcblxuICAgIGdldENoaWxkU3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdG9yZShrZXkpIHx8IHRoaXMuc2V0U3RvcmUoa2V5LCB7fSlcbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hVmFsdWUoXG4gICAgICBrZXlPckRhdGFQYXRoLFxuICAgICAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIHNjaGVtYSA9IHRoaXMuc2NoZW1hLCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4gICAgKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IHR5cGUgJiYgYXNBcnJheSh0eXBlKVxuICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gICAgICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgICAgIGxldCB2YWx1ZSA9IHNjaGVtYVxuICAgICAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgICAgICA6IHNjaGVtYVtrZXlPckRhdGFQYXRoXVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihkZWYpICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgZGVmKSkge1xuICAgICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgICAgICBkZWYgPSBkZWYuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH1cbiAgICAgIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAgICAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgICAgIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydGVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0TGFiZWwoc2NoZW1hLCBuYW1lKSB7XG4gICAgICByZXR1cm4gc2NoZW1hXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnbGFiZWwnLCB7IHR5cGU6IFN0cmluZywgc2NoZW1hIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBsYWJlbGl6ZSxcblxuICAgIGdldEJ1dHRvbkF0dHJpYnV0ZXMobmFtZSwgYnV0dG9uKSB7XG4gICAgICBjb25zdCB2ZXJiID0gdGhpcy52ZXJic1tuYW1lXSB8fCBuYW1lXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzczogYGRpdG8tYnV0dG9uLSR7dmVyYn1gLFxuICAgICAgICB0aXRsZTogYnV0dG9uPy50ZXh0IHx8IGxhYmVsaXplKHZlcmIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldERyYWdPcHRpb25zKGRyYWdnYWJsZSwgZmFsbGJhY2sgPSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGRpc2FibGVkOiAhZHJhZ2dhYmxlLFxuICAgICAgICBoYW5kbGU6ICcuZGl0by1idXR0b24tZHJhZycsXG4gICAgICAgIGRyYWdDbGFzczogJ2RpdG8tZHJhZy1hY3RpdmUnLFxuICAgICAgICBjaG9zZW5DbGFzczogJ2RpdG8tZHJhZy1jaG9zZW4nLFxuICAgICAgICBnaG9zdENsYXNzOiAnZGl0by1kcmFnLWdob3N0JyxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogJ2RpdG8tZHJhZy1mYWxsYmFjaycsXG4gICAgICAgIGZvcmNlRmFsbGJhY2s6IGZhbGxiYWNrXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFF1ZXJ5TGluayhxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiAhIXNjaGVtYSAmJiB0aGlzLmdldFNjaGVtYVZhbHVlKCdpZicsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHtcbiAgICAgIGNvbXBvbmVudHMsXG4gICAgICBidXR0b25zLFxuICAgICAgZGF0YSxcbiAgICAgIHNldHRpbmdzID0ge1xuICAgICAgICB3aWR0aDogNDgwLFxuICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfVxuICAgIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IHRocm91Z2ggdnVlLWpzLW1vZGFsLCBhbmQgd3JhcHMgaXQgaW4gYVxuICAgICAgLy8gcHJvbWlzZSBzbyB0aGF0IHRoZSBidXR0b25zIGluIHRoZSBkaWFsb2cgY2FuIHVzZSBgZGlhbG9nLnJlc29sdmUoKWBcbiAgICAgIC8vIGFuZCBgZGlhbG9nLnJlamVjdCgpYCB0byBjbG9zZSB0aGUgbW9kYWwgZGlhbG9nIGFuZCByZXNvbHZlIC8gcmVqZWN0XG4gICAgICAvLyB0aGUgcHJvbWlzZSBhdCBvbmNlLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy4kbW9kYWwuc2hvdyhEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1kaWFsb2cnKSwge1xuICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgfSwgc2V0dGluZ3MpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UpXG4gICAgICAvLyBSZXNvdXJjZXMgd2l0aG91dCBhIHBhcmVudCBpbmhlcml0IHRoZSBvbmUgZnJvbSBgZGF0YUNvbXBvbmVudGBcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICBpZiAocmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb3VyY2UucGFyZW50ID0gdGhpcy5kYXRhQ29tcG9uZW50Py5yZXNvdXJjZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkoZ2V0UmVzb3VyY2UocmVzb3VyY2UpKVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVVybChyZXNvdXJjZSkge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgaWYgKCFwYXRoKSByZXR1cm4gbnVsbFxuICAgICAgY29uc3QgdXJsID0gdGhpcy5hcGkuZ2V0QXBpVXJsKHBhdGgpXG4gICAgICAvLyBTdXBwb3J0IG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMsIHRvIGJlIGFyZSBhZGRlZCB0byB0aGUgVVJMLlxuICAgICAgY29uc3QgeyBxdWVyeSB9ID0gcmVzb3VyY2VcbiAgICAgIGNvbnN0IHNlYXJjaCA9IHF1ZXJ5ICYmIG5ldyBVUkxTZWFyY2hQYXJhbXMocXVlcnkpLnRvU3RyaW5nKClcbiAgICAgIHJldHVybiBzZWFyY2ggPyBgJHt1cmx9PyR7c2VhcmNofWAgOiB1cmxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QoeyBtZXRob2QsIHVybCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBpbnRlcm5hbCB9KSB7XG4gICAgICB1cmwgfHw9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgbWV0aG9kIHx8PSByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlSZXF1ZXN0KHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIGRhdGEsIHF1ZXJ5IH0pXG4gICAgICAvLyBEZXRlY3QgY2hhbmdlIG9mIHRoZSBvd24gdXNlciwgYW5kIGZldGNoIGl0IGFnYWluIGlmIGl0IHdhcyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICBjaGVja1VzZXIgJiZcbiAgICAgICAgbWV0aG9kID09PSAncGF0Y2gnICYmXG4gICAgICAgIGVxdWFscyhyZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy51c2VyLmlkLCB0aGlzLmFwaS51c2VycykpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmZldGNoVXNlcigpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9LFxuXG4gICAgcmVxdWVzdCh7IGNhY2hlLCAuLi5vcHRpb25zIH0pIHtcbiAgICAgIC8vIEFsbG93IGNhY2hpbmcgb2YgbG9hZGVkIGRhdGEgb24gdHdvIGxldmVsczpcbiAgICAgIC8vIC0gJ2dsb2JhbCc6IGNhY2hlIGdsb2JhbGx5LCBmb3IgdGhlIGVudGlyZSBhZG1pbiBzZXNzaW9uXG4gICAgICAvLyAtICdsb2NhbCc6IGNhY2hlIGxvY2FsbHkgd2l0aGluIHRoZSBjbG9zZXN0IHJvdXRlIGNvbXBvbmVudCB0aGF0IGlzXG4gICAgICAvLyAgICBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZSBhbmQgbG9hZHMgaXRzIG93biBkYXRhLlxuICAgICAgY29uc3QgY2FjaGVQYXJlbnQgPSBjYWNoZSAmJiB7XG4gICAgICAgIGdsb2JhbDogdGhpcy5hcHBTdGF0ZSxcbiAgICAgICAgbG9jYWw6IHRoaXMuZGF0YUNvbXBvbmVudFxuICAgICAgfVtjYWNoZV1cbiAgICAgIGNvbnN0IGxvYWRDYWNoZSA9IGNhY2hlUGFyZW50Py5sb2FkQ2FjaGVcbiAgICAgIC8vIEJ1aWxkIGEgY2FjaGUga2V5IGZyb20gdGhlIGNvbmZpZzpcbiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gbG9hZENhY2hlICYmIGAke1xuICAgICAgICBvcHRpb25zLm1ldGhvZCB8fCAnZ2V0J30gJHtcbiAgICAgICAgb3B0aW9ucy51cmx9ICR7XG4gICAgICAgIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYHF1ZXJ5YCBvblxuICAgICAgICAvLyAyMDIyLTExLTAxLCByZW1vdmUgb25jZSBub3QgaW4gdXNlIGFueXdoZXJlIGFueW1vcmUuXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucXVlcnkgfHwgb3B0aW9ucy5wYXJhbXMgfHwgJycpfSAke1xuICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLmRhdGEgfHwgJycpXG4gICAgICB9YFxuICAgICAgaWYgKGxvYWRDYWNoZSAmJiAoY2FjaGVLZXkgaW4gbG9hZENhY2hlKSkge1xuICAgICAgICByZXR1cm4gbG9hZENhY2hlW2NhY2hlS2V5XVxuICAgICAgfVxuICAgICAgLy8gTk9URTogTm8gYXdhaXQgaGVyZSwgcmVzIGlzIGEgcHJvbWlzZSB0aGF0IHdlIGNhbiBlYXNpbHkgY2FjaGUuXG4gICAgICAvLyBUaGF0J3MgZmluZSBiZWNhdXNlIHByb21pc2VzIGNhbiBiZSByZXNvbHZlZCBvdmVyIGFuZCBvdmVyIGFnYWluLlxuICAgICAgY29uc3QgcmVzID0gdGhpcy5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIENvbnZlcnQgYXhpb3MgZXJyb3JzIHRvIG5vcm1hbCBlcnJvcnNcbiAgICAgICAgICBjb25zdCBkYXRhID0gZXJyb3IucmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICB0aHJvdyBkYXRhXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGRhdGEubWVzc2FnZSksIGRhdGEpXG4gICAgICAgICAgICA6IGVycm9yXG4gICAgICAgIH0pXG4gICAgICBpZiAobG9hZENhY2hlKSB7XG4gICAgICAgIGxvYWRDYWNoZVtjYWNoZUtleV0gPSByZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9LFxuXG4gICAgZm9ybWF0KHZhbHVlLCB7XG4gICAgICBsb2NhbGUgPSB0aGlzLmFwaS5sb2NhbGUsXG4gICAgICBkZWZhdWx0cyA9IHRoaXMuYXBpLmZvcm1hdHMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCB7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlKGxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICgpID0+IHJlc29sdmUodHJ1ZSksXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZG93bmxvYWQob3B0aW9ucyA9IHt9KSB7XG4gICAgICBpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcbiAgICAgICAgb3B0aW9ucyA9IHsgdXJsOiBvcHRpb25zIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdXJsLCBmaWxlbmFtZSB9ID0gb3B0aW9uc1xuICAgICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk5MTcwNjYvMTE2MzcwOFxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgYS5ocmVmID0gdXJsXG4gICAgICBpZiAoZmlsZW5hbWUpIHtcbiAgICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lXG4gICAgICB9XG4gICAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgICBib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoYSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50LmNsb3NlTm90aWZpY2F0aW9ucygpXG4gICAgfSxcblxuICAgIHNldHVwU2NoZW1hRmllbGRzKCkge1xuICAgICAgdGhpcy5zZXR1cE1ldGhvZHMoKVxuICAgICAgdGhpcy5zZXR1cENvbXB1dGVkKClcbiAgICAgIHRoaXMuc2V0dXBFdmVudHMoKVxuICAgIH0sXG5cbiAgICBzZXR1cE1ldGhvZHMoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5tZXRob2RzIHx8IHt9KSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgbWV0aG9kIGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwQ29tcHV0ZWQoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgICAgICAgID8geyBnZXQ6IHZhbHVlIH1cbiAgICAgICAgICA6IGlzT2JqZWN0KHZhbHVlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmdldClcbiAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoYWNjZXNzb3IpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCBhY2Nlc3NvcilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgY29tcHV0ZWQgcHJvcGVydHkgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXBlcmVjYXRlIG9uZSBmb3JtYXQgb3IgdGhlIG90aGVyLCBpbiBmYXZvdXIgb2Ygb25seSBvbmUgd2F5IG9mXG4gICAgICAvLyBkb2luZyB0aGluZ3MuIERlY2lkZSB3aGljaCBvbmUgdG8gcmVtb3ZlLlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEpKSB7XG4gICAgICAgIGlmICgvXm9uW0EtWl0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LnNsaWNlKDIpLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0RXZlbnQoZXZlbnQsIHtcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGFyZW50ID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgaGFzTGlzdGVuZXJzID0gdGhpcy5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBjb25zdCBwYXJlbnRIYXNMaXN0ZW5lcnMgPSBwYXJlbnQ/Lmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGlmIChoYXNMaXN0ZW5lcnMgfHwgcGFyZW50SGFzTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIFRoZSBlZmZlY3RzIG9mIHNvbWUgZXZlbnRzIG5lZWQgc29tZSB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgLy8gVXNlICRuZXh0VGljaygpIHRvIG1ha2Ugc3VyZSBvdXIgaGFuZGxlcnMgc2VlIHRoZXNlIGNoYW5nZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBgcHJvY2Vzc2VkSXRlbWAgaXMgb25seSBjb3JyZWN0IGFmdGVyIGNvbXBvbmVudHMgdGhhdFxuICAgICAgICAvLyBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgaWYgKFsnbG9hZCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpXG4gICAgICAgIGNvbnN0IHJlcyA9IGhhc0xpc3RlbmVyc1xuICAgICAgICAgID8gYXdhaXQgdGhpcy5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHRvIHBhcmVudCBpZiBoYW5kbGVkIGV2ZW50IHJldHVybmVkIGBmYWxzZWBcbiAgICAgICAgaWYgKHBhcmVudEhhc0xpc3RlbmVycyAmJiByZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcGFyZW50LmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCB1aWQgPSAwXG4iLCJpbXBvcnQgeyBpc0NyZWRpdENhcmQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgY3JlZGl0Y2FyZCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzQ3JlZGl0Q2FyZCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBpbnZhbGlkJ1xufVxuIiwiZXhwb3J0IGNvbnN0IGRlY2ltYWxzID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBkZWNpbWFscykgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gZGVjaW1hbHMgPT09ICcqJyA/ICcrJyA6IGB7MSwke2RlY2ltYWxzfX1gXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bLStdP1xcXFxkKihcXFxcLlxcXFxkJHttYXRjaH0pPyRgKS50ZXN0KHZhbHVlKVxuICB9LFxuXG4gIG1lc3NhZ2U6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IChcbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2BcbiAgKVxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXZlbnRzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVG91Y2hlZCA9IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGUoKVxuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sIGlzU3RyaW5nLCBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPSAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgIC8vIE5PVEU6IEJlY2F1c2UgYHNjaGVtYWAgb2JqZWN0cyBhcmUgcmV0cmlldmVkIGZyb20gYG1ldGFgIG9iamVjdCwgdGhleVxuICAgICAgICAvLyBkb24ndCBzZWVtIHRvIGJlIHJlYWN0aXZlLiBUbyBhbGxvdyBjaGFuZ2VkIGluIGBzY2hlbWFgIHZhbHVlcyxcbiAgICAgICAgLy8gYHNldCgpYCBzdG9yZXMgY2hhbmdlZCB2YWx1ZXMgaW4gdGhlIHNlcGFyYXRlIGBvdmVycmlkZXNgIG9iamVjdC5cbiAgICAgICAgPyB0aGlzLm92ZXJyaWRlcyAmJiBuYW1lIGluIHRoaXMub3ZlcnJpZGVzXG4gICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgIDogdGhpcy5nZXRTY2hlbWFWYWx1ZShrZXlPckRhdGFQYXRoLCB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgY2FsbGJhY2sgfSlcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIGlmIChzZXQpIHtcbiAgICAgICAgc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm92ZXJyaWRlcyB8fD0ge31cbiAgICAgICAgdGhpcy4kc2V0KHRoaXMub3ZlcnJpZGVzLCBuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dCkgOiBkZWZcbiAgICAgICAgLy8gVHJpZ2dlciBzZXR0ZXIgYnkgc2V0dGluZyB2YWx1ZSBhbmQgYWNjZXNzb3IgdG8gZGVmYXVsdDpcbiAgICAgICAgdGhpc1tuYW1lXSA9IHZhbHVlXG4gICAgICAgIC8vIE5vdyBhY2Nlc3Mgc3RvcmUgYWdhaW4sIGZvciByZWFjdGl2aXR5IHRyYWNraW5nXG4gICAgICAgIHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBnZXR0ZXIgdG8gZnVydGhlciBjaGFuZ2Ugb3IgcHJvY2VzcyB0aGUgdmFsdWVcbiAgICAgIC8vIHJldHJpZXZlZCBmcm9tIHRoZSBzdG9yZTpcbiAgICAgIHJldHVybiBnZXQgPyBnZXQuY2FsbCh0aGlzLCB2YWx1ZSkgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBzZXQodmFsdWUpIHtcbiAgICAgIC8vIEFsbG93IHRoZSBwcm92aWRlZCBzZXR0ZXIgdG8gcmV0dXJuIGEgbmV3IHZhbHVlIHRvIHNldCwgb3IgZG8gdGhlXG4gICAgICAvLyBzZXR0aW5nIGl0c2VsZiwgYW5kIHRoZW4gcmV0dXJuIGB1bmRlZmluZWRgOlxuICAgICAgaWYgKCFzZXQgfHwgKHZhbHVlID0gc2V0LmNhbGwodGhpcywgdmFsdWUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuc2V0U3RvcmUobmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJjb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKG9iamVjdCwgaXRlbUlkKSB7XG4gIGxldCBpZCA9IHVpZE1hcC5nZXQob2JqZWN0KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBpdGVtSWQgfHwgYEAkeysrdWlkfWBcbiAgICB1aWRNYXAuc2V0KG9iamVjdCwgaWQpXG4gIH1cbiAgcmV0dXJuIGlkXG59XG4iLCJpbXBvcnQgeyBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBhc0FycmF5LCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCdcblxuLy8gU2NoZW1hR3JhcGggaXMgYSBjbGFzcyB0byBjb2xsZWN0IHNjaGVtYSBncmFwaCBtZXRhIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvXG4vLyBwcm9jZXNzIHNvdXJjZXMgYW5kIHJlbGF0aW9ucyBmb3IgdGhlIGdpdmVuIHRhcmdldHMgJ3NlcnZlcicgYW5kICdjbGlwYm9hcmQnLFxuLy8gYWNjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlOlxuLy9cbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXJ2ZXIgICAgfCBjbGlwYm9hcmQgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IGZhbHNlICAgICAgICAgICB8IGtlZXAgaWQgICB8IGtlZXAgaWQgICB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSwgdGVtcG9yYXJ5IHwgcmVmLCAjcmVmIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSwgdGVtcG9yYXJ5ICAgfCByZWYsICNpZCAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSAgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjaWQgIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUsIHRlbXBvcmFyeSAgICB8IHJlZiwgI2lkICB8IHJlZiwgI2lkICB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuXG5leHBvcnQgY2xhc3MgU2NoZW1hR3JhcGgge1xuICBncmFwaCA9IHt9XG4gIHJlZmVyZW5jZXMgPSB7fVxuXG4gIHNldChkYXRhUGF0aCwgc2V0dGluZ3MsIGRlZmF1bHRzKSB7XG4gICAgZGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgIGxldCBzdWJHcmFwaCA9IHRoaXMuZ3JhcGhcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGF0YVBhdGgpIHtcbiAgICAgIGNvbnN0IGtleSA9IGlzSW50ZWdlcigrcGFydCkgPyAnKicgOiBwYXJ0XG4gICAgICBzdWJHcmFwaCA9IChzdWJHcmFwaFtrZXldID8/PSB7fSlcbiAgICB9XG4gICAgc3ViR3JhcGguJHNldHRpbmdzID0ge1xuICAgICAgLi4uZGVmYXVsdHMsIC8vIFNlZSBgYWRkU291cmNlKGRhdGFQYXRoKWBcbiAgICAgIC4uLnN1YkdyYXBoLiRzZXR0aW5ncyxcbiAgICAgIC4uLnNldHRpbmdzXG4gICAgfVxuICB9XG5cbiAgYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICAvLyBPbmx5IHNldCBgcmVsYXRlZDogZmFsc2VgIHRocm91Z2ggdGhlIGRlZmF1bHRzLCBhcyBgc2V0U291cmNlUmVsYXRlZCgpYFxuICAgIC8vIG1heSBiZSBjYWxsZWQgYmVmb3JlIGBhZGRTb3VyY2UoKWAsIGRlcGVuZGluZyBvbiB0aGUgZ3JhcGggc3RydWN0dXJlLlxuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7IHR5cGU6ICdzb3VyY2UnLCBzY2hlbWEgfSwgeyByZWxhdGVkOiBmYWxzZSB9KVxuICB9XG5cbiAgc2V0U291cmNlUmVsYXRlZChkYXRhUGF0aCkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICByZWxhdGVkOiB0cnVlLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHR5cGU6ICdyZWxhdGlvbicsXG4gICAgICBzY2hlbWEsXG4gICAgICBpbnRlcm5hbDogISFyZWxhdGVkRGF0YVBhdGgsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KHJlbGF0ZWREYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKSB7XG4gICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgICA/ICh0aGlzLnJlZmVyZW5jZXNbZGF0YVBhdGhdID8/PSBuYW5vaWQoNikpXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIGZsYXR0ZW4oKSB7XG4gICAgY29uc3QgZmxhdHRlbiA9IGdyYXBoID0+IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuICAgICAgZm9yIChjb25zdCBba2V5LCB7ICRzZXR0aW5ncywgLi4uc3ViR3JhcGggfV0gb2YgT2JqZWN0LmVudHJpZXMoZ3JhcGgpKSB7XG4gICAgICAgIGlmICgkc2V0dGluZ3MpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgJHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtzdWJLZXksIHNldHRpbmdzXSBvZiBmbGF0dGVuKHN1YkdyYXBoKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaChbYCR7a2V5fS8ke3N1YktleX1gLCBzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXR0ZW4odGhpcy5ncmFwaClcbiAgfVxuXG4gIHByb2Nlc3Moc291cmNlU2NoZW1hLCBkYXRhLCB7IHRhcmdldCB9KSB7XG4gICAgY29uc3QgY2xpcGJvYXJkID0gdGFyZ2V0ID09PSAnY2xpcGJvYXJkJ1xuICAgIGlmIChjbGlwYm9hcmQpIHtcbiAgICAgIGRlbGV0ZSBkYXRhW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgc2V0dGluZ3NdIG9mIHRoaXMuZmxhdHRlbigpKSB7XG4gICAgICBjb25zdCB7IHR5cGUsIHNjaGVtYSwgaW50ZXJuYWwsIHJlbGF0ZWQsIHJlZmVyZW5jZSB9ID0gc2V0dGluZ3NcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHR5cGUgPT09ICdzb3VyY2UnXG4gICAgICBjb25zdCByZWxhdGlvbiA9IHR5cGUgPT09ICdyZWxhdGlvbidcbiAgICAgIGlmIChzb3VyY2UgfHwgcmVsYXRpb24gJiYgaW50ZXJuYWwpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZ2V0VmFsdWVBdERhdGFQYXRoKGRhdGEsIGRhdGFQYXRoLCAoKSA9PiBudWxsKVxuICAgICAgICBjb25zdCByZW1vdmVJZCA9IGNsaXBib2FyZCAmJiBzb3VyY2UgJiYgIXJlbGF0ZWRcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlSWQgPSBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgIHJlbGF0aW9uICYmIGludGVybmFsIHx8XG4gICAgICAgICAgc291cmNlICYmIHJlbGF0ZWRcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGFzQXJyYXkodmFsdWVzKS5mbGF0KCkpIHtcbiAgICAgICAgICBjb25zdCBpZEtleSA9IChcbiAgICAgICAgICAgIHNvdXJjZSAmJiBzY2hlbWEuaWRLZXkgfHxcbiAgICAgICAgICAgIHJlbGF0aW9uICYmIHNjaGVtYS5yZWxhdGVCeSB8fFxuICAgICAgICAgICAgJ2lkJ1xuICAgICAgICAgIClcbiAgICAgICAgICBsZXQgaWQgPSB2YWx1ZT8uW2lkS2V5XVxuICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocmVtb3ZlSWQpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgfSBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgIC8vIENsaXBib2FyZCBqdXN0IG5lZWRzIHRlbXBvcmFyeSBpZHMgdW5kZXIgdGhlIGFjdHVhbCBgaWRLZXlgLlxuICAgICAgICAgICAgICAgID8gaWRLZXlcbiAgICAgICAgICAgICAgICAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgIDogc291cmNlID8gJyNpZCcgOiAnI3JlZidcbiAgICAgICAgICAgICAgY29uc3QgcmV2VmFsdWUgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICA/IGBAJHtpZH1gXG4gICAgICAgICAgICAgICAgLy8gS2VlcCB0aGUgaWRzIHVuaXF1ZSBpbiByZWZlcmVuY2UgZ3JvdXBzLCBzaW5jZSB0aGV5IHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgIC8vIGFjY3Jvc3MgdGhlIGZ1bGwgZ3JhcGguXG4gICAgICAgICAgICAgICAgOiByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgID8gYCR7cmVmZXJlbmNlfS0ke2lkfWBcbiAgICAgICAgICAgICAgICAgIDogaWQgLy8gQSB0ZW1wb3JhcnkgaWQgd2l0aG91dCBhIHJlbGF0ZWQsIGp1c3QgcHJlc2VydmUgaXQuXG4gICAgICAgICAgICAgIHZhbHVlW3JlZktleV0gPSByZXZWYWx1ZVxuICAgICAgICAgICAgICBpZiAocmVmS2V5ICE9PSBpZEtleSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFVpZCB9IGZyb20gJy4vdWlkLmpzJ1xuaW1wb3J0IHsgU2NoZW1hR3JhcGggfSBmcm9tICcuL1NjaGVtYUdyYXBoLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzUHJvbWlzZSwgY2xvbmUsIGNhbWVsaXplLCBpc01vZHVsZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgY29uc3Qgc2NoZW1hcyA9IFtcbiAgICAuLi5PYmplY3QudmFsdWVzKHNjaGVtYT8udGFicyB8fCB7fSksXG4gICAgc2NoZW1hXG4gIF1cbiAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGNhbGxiYWNrKHNjaGVtYSlcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWEoc2NoZW1hLCBzY2hlbWEgPT4ge1xuICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hLmNvbXBvbmVudHMgfHwge30pKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpXG4gICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChcbiAgICBzY2hlbWEsXG4gICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IGNvbXBvbmVudCA6IHVuZGVmaW5lZFxuICApIHx8IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChcbiAgICBzY2hlbWEsXG4gICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKSA/IHRydWUgOiB1bmRlZmluZWRcbiAgKSA9PT0gdHJ1ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChcbiAgICBzY2hlbWEsXG4gICAgKGNvbXBvbmVudCwgbmFtZSkgPT4gIWNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBmYWxzZSA6IHVuZGVmaW5lZFxuICApICE9PSBmYWxzZVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSA9IGZhbHNlKSB7XG4gIGlmIChpc0Z1bmN0aW9uKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBzY2hlbWEoKVxuICB9XG4gIGlmIChpc1Byb21pc2Uoc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IGF3YWl0IHNjaGVtYVxuICB9XG4gIGlmIChpc01vZHVsZShzY2hlbWEpKSB7XG4gICAgLy8gQ29weSB0byBjb252ZXJ0IGZyb20gbW9kdWxlIHRvIG9iamVjdDpcbiAgICBzY2hlbWEgPSB7IC4uLnNjaGVtYSB9XG4gICAgLy8gVW53cmFwIGRlZmF1bHQgb3IgbmFtZWQgc2NoZW1hXG4gICAgaWYgKCFzY2hlbWEubmFtZSAmJiAodW53cmFwTW9kdWxlIHx8IHNjaGVtYS5kZWZhdWx0KSkge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNjaGVtYSlcbiAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBuYW1lID0ga2V5c1swXVxuICAgICAgICBzY2hlbWEgPSBzY2hlbWFbbmFtZV1cbiAgICAgICAgaWYgKG5hbWUgIT09ICdkZWZhdWx0Jykge1xuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFzKFxuICB1bnJlc29sdmVkU2NoZW1hcyxcbiAgcmVzb2x2ZUl0ZW0gPSByZXNvbHZlU2NoZW1hXG4pIHtcbiAgbGV0IHNjaGVtYXMgPSBpc0Z1bmN0aW9uKHVucmVzb2x2ZWRTY2hlbWFzKVxuICAgID8gdW5yZXNvbHZlZFNjaGVtYXMoKVxuICAgIDogdW5yZXNvbHZlZFNjaGVtYXNcbiAgc2NoZW1hcyA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hcywgZmFsc2UpXG4gIGlmIChpc0FycmF5KHNjaGVtYXMpKSB7XG4gICAgLy8gVHJhbnNsYXRlIGFuIGFycmF5IG9mIGR5bmFtaWMgaW1wb3J0LCBlYWNoIGltcG9ydGluZyBvbmUgbmFtZWQgc2NoZW1hXG4gICAgLy8gbW9kdWxlIHRvIGFuIG9iamVjdCB3aXRoIG5hbWVkIGVudHJpZXMuXG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhhd2FpdCBQcm9taXNlLmFsbChzY2hlbWFzLm1hcChcbiAgICAgIGFzeW5jIGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW3NjaGVtYS5uYW1lLCBzY2hlbWFdXG4gICAgICB9XG4gICAgKSkpXG4gIH0gZWxzZSBpZiAoaXNPYmplY3Qoc2NoZW1hcykpIHtcbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLm1hcChcbiAgICAgIGFzeW5jIChba2V5LCBpdGVtXSkgPT4ge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgfVxuICAgICkpKVxuICB9XG4gIHJldHVybiBzY2hlbWFzXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUGFuZWxzKHNjaGVtYSkge1xuICBjb25zdCB7IHBhbmVscyB9ID0gc2NoZW1hXG4gIGlmIChzY2hlbWEucGFuZWxzKSB7XG4gICAgc2NoZW1hLnBhbmVscyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHBhbmVscylcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZpZXcoY29tcG9uZW50LCBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzKSB7XG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICBhd2FpdCByZXNvbHZlUGFuZWxzKHNjaGVtYSlcbiAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc0NvbXBvbmVudChhcGksIHNjaGVtYSwgbmFtZSwgY2hpbGRyZW4sIDApXG4gIH0gZWxzZSB7XG4gICAgLy8gQSBtdWx0aS1jb21wb25lbnQgdmlldywgc3RhcnQgYXQgbGV2ZWwgMVxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCBjaGlsZHJlbiwgMSlcbiAgfVxuICByb3V0ZXMucHVzaCh7XG4gICAgcGF0aDogYC8ke3NjaGVtYS5wYXRofWAsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgc2NoZW1hLmxldmVsID0gbGV2ZWxcbiAgLy8gRGVsZWdhdGUgc2NoZW1hIHByb2Nlc3NpbmcgdG8gdGhlIGFjdHVhbCB0eXBlIGNvbXBvbmVudHMuXG4gIHJldHVybiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5wcm9jZXNzU2NoZW1hPy4oXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW5cbiAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gIHNjaGVtYS5wYXRoID0gc2NoZW1hLnBhdGggfHwgYXBpLm5vcm1hbGl6ZVBhdGgobmFtZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKSB7XG4gIGNvbnN0IHByb21pc2VzID0gW11cbiAgZm9yRWFjaFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIChjb21wb25lbnQsIG5hbWUpID0+IHtcbiAgICBwcm9taXNlcy5wdXNoKHByb2Nlc3NDb21wb25lbnQoYXBpLCBjb21wb25lbnQsIG5hbWUsIHJvdXRlcywgbGV2ZWwpKVxuICB9KVxuICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpIHtcbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICBpZiAoZm9ybXMpIHtcbiAgICBmb3JtcyA9IHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCByZXNvbHZlRm9ybSlcbiAgfSBlbHNlIGlmIChmb3JtKSB7XG4gICAgZm9ybSA9IHNjaGVtYS5mb3JtID0gYXdhaXQgcmVzb2x2ZUZvcm0oZm9ybSlcbiAgfSBlbHNlIGlmIChjb21wb25lbnRzKSB7XG4gICAgLy8gTk9URTogUHJvY2Vzc2luZyBmb3JtcyBpbiBjb21wdXRlZCBjb21wb25lbnRzIGlzIG5vdCBzdXBwb3J0ZWQsIHNpbmNlIGl0XG4gICAgLy8gb25seSBjYW4gYmUgY29tcHV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhY3R1YWwgZGF0YS5cbiAgICBpZiAoaXNPYmplY3QoY29tcG9uZW50cykpIHtcbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMgfVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH0gLy8gT25seSB1c2VkIGZvciBwcm9jZXNzIGxvb3AgYmVsb3cuXG4gIGNvbnN0IGNoaWxkcmVuID0gW11cbiAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBmb3JtLCBjaGlsZHJlbiwgbGV2ZWwgKyAxKVxuICB9XG4gIHJldHVybiBjaGlsZHJlblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUZvcm0oZm9ybSkge1xuICBmb3JtID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShmb3JtLCB0cnVlKVxuICBpZiAoZm9ybSkge1xuICAgIGF3YWl0IHJlc29sdmVQYW5lbHMoZm9ybSlcbiAgfVxuICByZXR1cm4gZm9ybVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTaW5nbGVDb21wb25lbnRWaWV3KHNjaGVtYSkge1xuICAvLyBJZiB0aGUgc2NoZW1hIGhhcyBhIHR5cGUsIGl0IGlzIGEgc2luZ2xlLWNvbXBvbmVudCB2aWV3LlxuICByZXR1cm4gISFzY2hlbWEudHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRm9ybVNjaGVtYShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBib3RoIHNpbmdsZSBmb3JtIGFuZCBtdWx0aXBsZSBmb3JtcyBub3RhdGlvbiwgYXMgd2VsbCBhcyBpbmxpbmVkXG4gIC8vIGNvbXBvbmVudHMuXG4gIHJldHVybiBpc09iamVjdChzY2hlbWEpICYmICEhKFxuICAgIHNjaGVtYS5mb3JtIHx8XG4gICAgc2NoZW1hLmZvcm1zIHx8XG4gICAgc2NoZW1hLmNvbXBvbmVudHNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzY2hlbWEpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHNjaGVtYT8uZm9ybXMgfHwge30pLmxlbmd0aCA+IDFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgdmlldyB9ID0gc2NoZW1hXG4gIGNvbnN0IHZpZXdTY2hlbWEgPSB2aWV3ICYmIGNvbnRleHQudmlld3Nbdmlld11cbiAgcmV0dXJuIHZpZXdTY2hlbWFcbiAgICA/IGhhc0Zvcm1TY2hlbWEodmlld1NjaGVtYSlcbiAgICAgID8gdmlld1NjaGVtYVxuICAgICAgLy8gTk9URTogVmlld3MgY2FuIGhhdmUgdGFicywgaW4gd2hpY2ggY2FzZSB0aGUgdmlldyBjb21wb25lbnQgaXMgbmVzdGVkXG4gICAgICAvLyBpbiBvbmUgb2YgdGhlIHRhYnMsIGdvIGZpbmQgaXQuXG4gICAgICA6IGZvckVhY2hTY2hlbWEodmlld1NjaGVtYSwgc2NoZW1hID0+IHtcbiAgICAgICAgY29uc3Qgdmlld0NvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzPy5bdmlld11cbiAgICAgICAgaWYgKGhhc0Zvcm1TY2hlbWEodmlld0NvbXBvbmVudCkpIHtcbiAgICAgICAgICByZXR1cm4gdmlld0NvbXBvbmVudFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld0VkaXRQYXRoKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIHJldHVybiB2aWV3XG4gICAgPyB2aWV3LmxldmVsID09PSAwXG4gICAgICA/IGAvJHt2aWV3LnBhdGh9YCAvLyBBIHNpbmdsZS1jb21wb25lbnQgdmlld1xuICAgICAgOiBgLyR7dmlldy5wYXRofS8ke3ZpZXcucGF0aH1gIC8vIEEgbXVsdGktY29tcG9uZW50IHZpZXdcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCwgbW9kaWZ5Rm9ybSkge1xuICBjb25zdCB2aWV3ID0gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpXG4gIGlmICh2aWV3KSB7XG4gICAgc2NoZW1hID0gdmlld1xuICB9IGVsc2UgaWYgKHNjaGVtYS52aWV3KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHZpZXc6ICcke3NjaGVtYS52aWV3fSdgKVxuICB9XG5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMsIGNvbXBhY3QgfSA9IHNjaGVtYVxuICBpZiAoIWZvcm0gJiYgIWZvcm1zKSB7XG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIC8vIENvbnZlcnQgaW5saW5lZCBjb21wb25lbnRzIHRvIGZvcm1zLCBzdXBwb3J0aW5nIGBjb21wYWN0YCBzZXR0aW5nLlxuICAgICAgZm9ybSA9IHsgY29tcG9uZW50cywgY29tcGFjdCB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGBmb3Jtc2AsIGBmb3JtYCBvciBgY29tcG9uZW50c2AsIHJldHVybiBhbmQgZW1wdHkgYGZvcm1zYCBvYmplY3QuXG4gICAgICByZXR1cm4ge31cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoZm9ybXMpLm1hcCgoW3R5cGUsIGZvcm1dKSA9PiB7XG4gICAgICAvLyBTdXBwb3J0IGBzY2hlbWEuY29tcG9uZW50c2AgY2FsbGJhY2tzIHRvIGNyZWF0ZSBjb21wb25lbnRzIG9uIHRoZSBmbHkuXG4gICAgICBpZiAoaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGZvcm0gPSB7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbChzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS5sYWJlbCAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29tcGFjdChzY2hlbWEpIHtcbiAgcmV0dXJuICEhc2NoZW1hLmNvbXBhY3Rcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5saW5lZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5pbmxpbmVkIHx8IHNjaGVtYS5jb21wb25lbnRzKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOZXN0ZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShcbiAgICBzY2hlbWEubmVzdGVkIHx8XG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdE5lc3RlZCA9PT0gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRPbWl0UGFkZGluZyhzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ub21pdFBhZGRpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgLy8gU3VwcG9ydCBkZWZhdWx0IHZhbHVlcyBib3RoIG9uIHNjaGVtYSBhbmQgb24gY29tcG9uZW50IGxldmVsLlxuICAvLyBOT1RFOiBBdCB0aGUgdGltZSBvZiBjcmVhdGlvbiwgY29tcG9uZW50cyBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCwgKGUuZy4gaWZcbiAgLy8gZW50cmllcyBhcmUgY3JlYXRlZCB0aHJvdWdoIG5lc3RlZCBmb3JtcywgdGhlIHBhcmVudCBmb3JtIGlzbid0IG1vdW50ZWQpIHNvXG4gIC8vIHdlIGNhbid0IHVzZSBgZGF0YVBhdGhgIHRvIGdldCB0byBjb21wb25lbnRzLCBhbmQgdGhlIGBkZWZhdWx0VmFsdWVgIGZyb21cbiAgLy8gdGhlcmUuIFRoYXQncyB3aHkgYGRlZmF1bHRWYWx1ZWAgaXMgZGVmaW5lZCBzdGF0aWNhbGx5IGluIHRoZSBjb21wb25lbnRzOlxuICBjb25zdCBkZWZhdWx0VmFsdWUgPSBzY2hlbWEuZGVmYXVsdFxuICBjb25zdCB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgPyBkZWZhdWx0VmFsdWVcbiAgICA6IGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHRWYWx1ZVxuICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZSlcbiAgICA/IHZhbHVlKHNjaGVtYSlcbiAgICA6IGNsb25lKHZhbHVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkge1xuICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcbiAgcmV0dXJuICEhKFxuICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMYWJlbHMoc2NoZW1hKSB7XG4gIGNvbnN0IGNoZWNrQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT5cbiAgICBPYmplY3QudmFsdWVzKGNvbXBvbmVudHMgfHwge30pLnNvbWUoaGFzTGFiZWwpXG5cbiAgcmV0dXJuIChcbiAgICBjaGVja0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpIHx8XG4gICAgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicyB8fCB7fSkuc29tZShjaGVja0NvbXBvbmVudHMpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldERlZmF1bHRzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUpID0+IHtcbiAgICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0cyB1cCBhIGRhdGEgb2JqZWN0IHRoYXQgaGFzIGtleXMgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsXG4gIC8vIGZvcm0gZmllbGRzLCBzbyB0aGV5IGNhbiBiZSBjb3JyZWN0bHkgd2F0Y2hlZCBmb3IgY2hhbmdlcy5cbiAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSwgZGF0YSwgbnVsbCwgbnVsbCwgcHJvY2Vzc0JlZm9yZSwgbnVsbCwgb3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQgPSBudWxsLFxuICByb290RGF0YSA9IGNvbXBvbmVudD8ucm9vdERhdGFcbn0gPSB7fSkge1xuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShEaXRvQ29udGV4dC5nZXQoY29tcG9uZW50LCB7XG4gICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgIC8vIGdldHRlciBmb3IgYHRoaXMudmFsdWVgIGluIGBEaXRvQ29udGV4dGA6XG4gICAgICB2YWx1ZTogZGF0YVtuYW1lXSxcbiAgICAgIG5hbWUsXG4gICAgICBkYXRhLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICByb290RGF0YVxuICAgIH0pKVxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBVc2UgYCRzZXQoKWAgZGlyZWN0bHkgaW5zdGVhZCBvZiBgdGhpcy52YWx1ZSA9IOKApmAgdG8gdXBkYXRlIHRoZVxuICAgICAgLy8gdmFsdWUgd2l0aG91dCBjYWxsaW5nIHBhcnNlKCk6XG4gICAgICBWdWUuc2V0KGRhdGEsIG5hbWUsIHZhbHVlKVxuICAgIH1cbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgc3RpbGwgbWlzc2luZyBhZnRlciBjb21wdXRlLCBzZXQgdGhlIGRlZmF1bHQgZm9yIGl0OlxuICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgIFZ1ZS5zZXQoZGF0YSwgbmFtZSwgZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkpXG4gIH1cbiAgLy8gTm93IGFjY2VzcyB0aGUgdmFsdWUuIFRoaXMgaXMgaW1wb3J0YW50IGZvciByZWFjdGl2aXR5IGFuZCBuZWVkcyB0b1xuICAvLyBoYXBwZW4gYWZ0ZXIgYWxsIHByaW9yIG1hbmlwdWxhdGlvbiB0aHJvdWdoIGAkc2V0KClgLCBzZWUgYWJvdmU6XG4gIHJldHVybiBkYXRhW25hbWVdXG59XG5cbmZ1bmN0aW9uIGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMuc2NoZW1hT25seSkge1xuICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgIGNvbnN0IHsgaWRLZXkgPSAnaWQnLCBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgY29uc3QgaWQgPSBpdGVtW2lkS2V5XVxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3B5W2lkS2V5XSA9IGlkXG4gICAgfVxuICAgIC8vIENvcHkgb3ZlciB0eXBlIGluIGNhc2UgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgIGlmIChoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNvdXJjZVNjaGVtYSkpIHtcbiAgICAgIGNvcHkudHlwZSA9IGl0ZW0udHlwZVxuICAgIH1cbiAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgIGNvcHlbb3JkZXJLZXldID0gaXRlbVtvcmRlcktleV1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0RhdGEoc2NoZW1hLCBzb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXRoLCB7XG4gIGNvbXBvbmVudCxcbiAgc2NoZW1hT25seSwgLy8gd2hldGhlciB0byBvbmx5IGluY2x1ZGUgZGF0YSBjb3ZlcmVkIGJ5IHRoZSBzY2hlbWEsIG9yIGFsbCBkYXRhXG4gIHRhcmdldFxufSA9IHt9KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgc2NoZW1hT25seSwgdGFyZ2V0LCByb290RGF0YTogZGF0YSB9XG4gIGNvbnN0IHByb2Nlc3NlZERhdGEgPSBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBkYXRhLCBvcHRpb25zKVxuICBjb25zdCBncmFwaCA9IG5ldyBTY2hlbWFHcmFwaCgpXG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIG9wdGlvbnMpXG4gICAgLy8gVGhlIHNjaGVtYSBleHBlY3RzIHRoZSBgd3JhcFByaW1pdGl2ZXNgIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBwcmVzZW50IG9uXG4gICAgLy8gdGhlIGRhdGEgdGhhdCBpdCBpcyBhcHBsaWVkIG9uLCBzbyB3YXJwIGJlZm9yZSBhbmQgdW53cmFwIGFmdGVyLlxuICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgb3JkZXJLZXksIGlkS2V5ID0gJ2lkJyB9ID0gc2NoZW1hXG4gICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoZW50cnkgPT4gKHtcbiAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiBlbnRyeVxuICAgICAgICB9KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFsd2F5cyBzaGFsbG93LWNsb25lIGFycmF5IHZhbHVlczpcbiAgICAgICAgdmFsdWUgPSBbLi4udmFsdWVdXG4gICAgICB9XG4gICAgICBpZiAob3JkZXJLZXkgJiYgdGFyZ2V0ID09PSAnY2xpcGJvYXJkJykge1xuICAgICAgICAvLyBTb3J0IHRoZSBkYXRhIGJhY2sgaW50byB0aGUgbmF0dXJhbCBzZXF1ZW5jZSBhcyBkZWZpbmVkIGJ5IHRoZWlyIGlkcyxcbiAgICAgICAgLy8gc28gY29weS1wYXN0aW5nIGJldHdlZW4gc2VydmVycyAoZS5nLiBuZXN0ZWQgZm9udC1jdXRzIG9uIExpbmV0bylcbiAgICAgICAgLy8gbmF0dXJhbGx5IGdldHMgbWFwcGVkIHRvIHRoZSBzYW1lIGVudHJpZXMgaW4gdGhlIGdyYXBoLlxuICAgICAgICB2YWx1ZS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQxID0gYT8uW2lkS2V5XVxuICAgICAgICAgIGNvbnN0IGlkMiA9IGI/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/LnJlc291cmNlQ29tcG9uZW50IHx8IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNWaWV3OiB0cnVlLFxuICAgICAgLy8gVXBkYXRlZCBmcm9tIExvYWRpbmdNaXhpbiB0aHJvdWdoIGBzZXRMb2FkaW5nKGlzTG9hZGluZylgOlxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIC8vIE5PVEU6IERhdGEgaXMgc2hhcmVkIGFjcm9zcyBhbGwgdmlld3MgYmVjYXVzZSB0aGUgcm91dGVyIHJlY3ljbGVzIHRoZVxuICAgICAgLy8gRGl0b1ZpZXcgY29tcG9uZW50LlxuICAgICAgZGF0YToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLnNjaGVtYVxuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnRWaWV3KCkge1xuICAgICAgcmV0dXJuIGlzU2luZ2xlQ29tcG9uZW50Vmlldyh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgbWFpbkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aCh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHZpZXdTY2hlbWEoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgLy8gVHJhbnNsYXRlIHNpbmdsZS1jb21wb25lbnQgc2NoZW1hcyBpbnRvIG11bHRpLWNvbXBvbmVudCBzY2hlbWFzLFxuICAgICAgLy8gc28gdGhleSBjYW4gYmUgcmVuZGVyZWQgZGlyZWN0bHkgdGhyb3VnaCBEaXRvU2NoZW1hIGFsc286XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgbmFtZTogc2NoZW1hLm5hbWUsXG4gICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgW3NjaGVtYS5uYW1lXToge1xuICAgICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICAgIGxhYmVsOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICA6IHNjaGVtYVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICByZXR1cm4gc29tZVNjaGVtYUNvbXBvbmVudChcbiAgICAgICAgdGhpcy52aWV3U2NoZW1hLFxuICAgICAgICBjb21wb25lbnQgPT4gaGFzUmVzb3VyY2UoY29tcG9uZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgLy8gU2VlIGlmIHRoZSByb3V0ZSBjaGFuZ2VzIGNvbXBsZXRlbHksIGFuZCBjbGVhciB0aGUgZGF0YSBpZiBpdCBkb2VzLlxuICAgICAgaWYgKHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5kYXRhID0ge31cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgLy8gTGlzdHMgaW5zaWRlIHNpbmdsZS1jb21wb25lbnQgdmlld3MgdXNlIHRoZSB2aWV3J3MgcGF0aCBmb3Igc3ViLXBhdGhzOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8gdGhpcy5wYXRoXG4gICAgICAgIDogYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9tSGFuZGxlcnM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbW92ZSB9IG9mIHRoaXMuZG9tSGFuZGxlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICAgIHRoaXMuZG9tSGFuZGxlcnMgPSBbXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb21PbihlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRFdmVudHMoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlzT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgW3R5cGVdOiBoYW5kbGVyIH1cbiAgICAgIClcbiAgICAgIHRoaXMuZG9tSGFuZGxlcnMucHVzaChyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXJvb3RcbiAgbm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gIClcbiAgZGl0by1tZW51XG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGRpdG8taGVhZGVyKFxuICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICB2LWlmPVwidXNlclwiXG4gICAgICApXG4gICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgKVxuICAgICAgICBzcGFuIExvZ2luXG4gICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXJvb3RcbiAgICBub3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICAgIHJlZj1cIm5vdGlmaWNhdGlvbnNcIlxuICAgICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgICApXG4gICAgZGl0by1tZW51XG4gICAgbWFpbi5kaXRvLXBhZ2UuZGl0by1zY3JvbGwtcGFyZW50XG4gICAgICBkaXRvLWhlYWRlcihcbiAgICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIClcbiAgICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICAgIHYtaWY9XCJ1c2VyXCJcbiAgICAgICAgKVxuICAgICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgICAgdi1lbHNlLWlmPVwiYWxsb3dMb2dpblwiXG4gICAgICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNwYW4gTG9naW5cbiAgICAgIHJvdXRlci12aWV3XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAnLi4vc3R5bGVzL3N0eWxlLnNhc3MnXG5cbiAgLmRpdG8tcm9vdFxuICAgIGhlaWdodDogMTAwJVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1wYWdlXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAvLyBUaGUgcm9vdC1sZXZlbCB2aWV3cyBhbmQgZm9ybXMgbWF5IGhhdmUgYSBgLmRpdG8tc2NoZW1hLWhlYWRlcmAgdGhhdFxuICAgICAgLy8gc2hvdWxkIGFwcGVhciBsYXllcmVkIG92ZXIgYC5kaXRvLW1lbnVgLCB3aGlsZSBoYXZpbmcgYG92ZXJsYXk6IGhpZGRlbmBcbiAgICAgIC8vIHNldCBieSBgLmRpdG8tc2Nyb2xsLXBhcmVudGAgdG8gZGVsZWdhdGUgc2Nyb2xsaW5nIHRvIGAuZGl0by1zY3JvbGxgLlxuICAgICAgLy8gSW4gb3JkZXIgdG8gbm90IGhhdmUgdGhlIGhlYWRlciBjbGlwcGVkLCBhZGp1c3QgdGhlIHRvcCBoZXJlOlxuICAgICAgPiAuZGl0by1mb3JtLFxuICAgICAgPiAuZGl0by12aWV3XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWVudS1oZWlnaHRcbiAgICAgICAgcGFkZGluZy10b3A6ICRtZW51LWhlaWdodFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGFzQXJyYXksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IHByb2Nlc3NWaWV3LCByZXNvbHZlU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXJvb3QnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+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+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1hY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LmxvZ291dCgpXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgIGNvbnNvbGUuaW5mbygnVE9ETzogSW1wbGVtZW50IFNldHRpbmdzJylcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIilcbiAgZGl0by1zY2hlbWEuZGl0by1zY3JvbGwoXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgKVxuICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBmb3JtLmRpdG8tZGlhbG9nKEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiKVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAudi0tbW9kYWwtb3ZlcmxheVxuICAgIHotaW5kZXg6IDIwMDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1kaWFsb2cnLCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBjb21wb25lbnRzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwcm9taXNlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBNYWtlIHN1cmUgZGlhbG9nIGRhdGEgY29udGFpbnMgYWxsIHRoZSBleHBlY3RlZCBrZXlzXG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IGNsb25lKHRoaXMuZGF0YSlcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBkaWFsb2dEYXRhKSkge1xuICAgICAgICBkaWFsb2dEYXRhW2tleV0gPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB3aW5kb3dFdmVudHM6IG51bGwsXG4gICAgICBkaWFsb2dEYXRhXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQubmFtZVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb21wb25lbnRzOiB0aGlzLmNvbXBvbmVudHNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGdldEJ1dHRvblNjaGVtYXModGhpcy5idXR0b25zKSkubWFwKFxuICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGJ1dHRvbiBzY2hlbWFzIHRvIGFkZCBkZWZhdWx0IGNsaWNrIGV2ZW50c1xuICAgICAgICAgIC8vIGZvciBib3RoICdzdWJtaXQnIGFuZCAnY2FuY2VsJyBidXR0b25zOlxuICAgICAgICAgIChba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnY2FuY2VsJyAmJiAhc2NoZW1hLmV2ZW50cykge1xuICAgICAgICAgICAgICBzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NhbmNlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuYnV0dG9uU2NoZW1hcy5jYW5jZWxcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLndpbmRvd0V2ZW50cyA9IGFkZEV2ZW50cyh3aW5kb3csIHtcbiAgICAgIGtleXVwOiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmhhc0NhbmNlbCAmJiBldmVudC5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgIHRoaXMuY2FuY2VsKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgZGVzdHJveWVkKCkge1xuICAgIHRoaXMud2luZG93RXZlbnRzLnJlbW92ZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhpZGUoKSB7XG4gICAgICB0aGlzLiRtb2RhbC5oaWRlKHRoaXMubmFtZSlcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH0sXG5cbiAgICByZWplY3QodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZWplY3QodmFsdWUpXG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH0sXG5cbiAgICBzdWJtaXQoKSB7XG4gICAgICB0aGlzLnJlc29sdmUodGhpcy5kaWFsb2dEYXRhKVxuICAgIH0sXG5cbiAgICBjYW5jZWwoKSB7XG4gICAgICB0aGlzLnJlc29sdmUobnVsbClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuY29tcG9uZW50KFxuICB2LWlmPVwiY29udGVudFwiXG4gIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKSB7eyBvcHRpb25zLnRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY29udGVudFwiXG4gICAgOmlzPVwib3B0aW9ucy50YWcgfHwgdGFnXCJcbiAgICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApIHt7IG9wdGlvbnMudGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZWxlbWVudCcsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc3BhbicgfSxcbiAgICBjb250ZW50OiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0gfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGNvbnRlbnQpID8gY29udGVudCA6IHsgdGV4dDogY29udGVudCB9XG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLmNsYXNzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5zdHlsZSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLnN0eWxlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gYXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLnJlZHVjZSgob2JqZWN0LCBlbnRyeSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhlbnRyeSkpIHtcbiAgICAgIG9iamVjdFtlbnRyeV0gPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChlbnRyeSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqZWN0LCBlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFxuICB9LCB7fSlcbn1cblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gIDppcz1cInRhZ1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuKVxuICAuZGl0by1jaGV2cm9uKFxuICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiAhY29sbGFwc2VkIH1cIlxuICApXG4gIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXByZWZpeChcbiAgICB2LWZvcj1cIihwcmVmaXgsIGluZGV4KSBvZiBwcmVmaXhlc1wiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICA6Y29udGVudD1cInByZWZpeFwiXG4gIClcbiAgbGFiZWwoOmZvcj1cImRhdGFQYXRoXCIgdi1odG1sPVwidGV4dFwiKVxuICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICApXG4gIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gICAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICAgIDppcz1cInRhZ1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbiAgKVxuICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiAhY29sbGFwc2VkIH1cIlxuICAgIClcbiAgICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgICB2LWZvcj1cIihwcmVmaXgsIGluZGV4KSBvZiBwcmVmaXhlc1wiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgICA6Y29udGVudD1cInByZWZpeFwiXG4gICAgKVxuICAgIGxhYmVsKDpmb3I9XCJkYXRhUGF0aFwiIHYtaHRtbD1cInRleHRcIilcbiAgICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgICB0YWc9XCJzcGFuXCJcbiAgICAgIDprZXk9XCJgc3VmZml4LSR7aW5kZXh9YFwiXG4gICAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gICAgKVxuICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWxhYmVsXG4gICAgLS1sYWJlbC1wYWRkaW5nOiAwXG4gICAgLy8gRm9yIGJ1dHRvbnMgYW5kIGNoZXZyb24gdG8gYWxpZ24gcmlnaHQ6XG4gICAgZGlzcGxheTogZmxleFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC8vIFZlcnRpY2FsbHkgY2VudGVyIGFsbCBpdGVtcyBpbiB0aGUgbGFiZWwsIGUuZy4gY2hldnJvbiwgZWRpdC1idXR0b25zLlxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXJcbiAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKVxuICAgIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmctaGFsZiAwXG5cbiAgICBsYWJlbFxuICAgICAgZGlzcGxheTogaW5saW5lXG4gICAgICBjdXJzb3I6IGluaGVyaXRcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG5cbiAgICBsYWJlbCxcbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICAmOm50aC1sYXN0LWNoaWxkKDIpXG4gICAgICAgIC8vIFRvIHN0cmV0Y2ggZWl0aGVyIGxhYmVsIG9yIC5kaXRvLWxhYmVsLXN1ZmZpeCB0byBmdWxsIGF2YWlsYWJsZSB3aWR0aFxuICAgICAgICAvLyBzbyB0aGF0IGJ1dHRvbnMgYWx3YXlzIGFwcGVhciByaWdodC1hbGlnbmVkOlxuICAgICAgICBmbGV4OiAxIDEgYXV0b1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgY29udGVudDogJ1xcYTAnIC8vICZuYnBzO1xuXG4gICAgLmRpdG8tbGFiZWwtcHJlZml4LFxuICAgIC5kaXRvLWxhYmVsLXN1ZmZpeFxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICArZWxsaXBzaXNcblxuICAgIC5kaXRvLWJ1dHRvbnNcbiAgICAgIC8vIE1vdmUgdGhlIGxhYmVsIHBhZGRpbmcgaW5zaWRlIC5kaXRvLWJ1dHRvbnMsIHNvIHRoYXQgaXQgY2FwdHVyZXMgYWxsXG4gICAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLWxhYmVsLXBhZGRpbmcpKVxuICAgICAgbWFyZ2luLWxlZnQ6IDBcbiAgICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG5cbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC8vIEluIG9yZGVyIGZvciBlbGxpcHNpcyB0byB3b3JrIG9uIGxhYmVscyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBsYXlvdXQsXG4gICAgICAvLyB3ZSBuZWVkIHRvIHBvc2l0aW9uIGl0IGFic29sdXRlbHkgaW5zaWRlIGl0cyBjb250YWluZXIuXG4gICAgICBsYWJlbFxuICAgICAgICArZWxsaXBzaXNcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIG1heC13aWR0aDogMTAwJVxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gU2luY2UgPGxhYmVsPiB1c2VzIGBwb3NpdGlvbjogYWJzb2x1dGVgLCBzZXQgY29udGVudCB0byBhIHplcm8td2lkdGhcbiAgICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInIC8vIHplcm8td2lkdGggc3BhY2VcblxuICBhLmRpdG8tbGFiZWxcbiAgICAmOmhvdmVyXG4gICAgICAuZGl0by1jaGV2cm9uXG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGFya2VyXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSk6bm90KC5kaXRvLWFjdGl2ZSlcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgLXdlYmtpdC10ZXh0LXN0cm9rZTogJGJvcmRlci13aWR0aCAkY29sb3ItYWN0aXZlXG5cbiAgLy8gRGlzcGxheSBsYWJlbHMgaW4gY29tcGFjdCBzY2hlbWEgYXMgaW5saW5lLWJsb2NrcywgdG8gYWxsb3cgY29tcGFjdCBsYXlvdXRzXG4gIC8vIHdpdGggYHdpZHRoOiAnYXV0bydgIGVsZW1lbnRzOlxuICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IuXG4gIC5kaXRvLXNjaGVtYS1jb21wYWN0XG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgPiAuZGl0by1wYW5lXG4gICAgICAgID4gLmRpdG8tY29udGFpbmVyXG4gICAgICAgICAgPiAuZGl0by1sYWJlbDpub3QoLmRpdG8tbGFiZWwtY29tcG9uZW50KVxuICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWxhYmVsJywge1xuICBwcm9wczoge1xuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/ICdhJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHRleHQoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QobGFiZWwpID8gbGFiZWw/LnRleHQgOiBsYWJlbFxuICAgIH0sXG5cbiAgICBwcmVmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnByZWZpeClcbiAgICB9LFxuXG4gICAgc3VmZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5zdWZmaXgpXG4gICAgfSxcblxuICAgIGxpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLih0aGlzLmNvbGxhcHNpYmxlICYmIHtcbiAgICAgICAgICBjbGljazogdGhpcy5vbkNsaWNrXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPT09IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID0gdGhpc1xuICAgICAgdGhpcy4kZW1pdCgnZXhwYW5kJywgdGhpcy5jb2xsYXBzZWQpXG4gICAgfVxuICB9XG59KVxuXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLCBnZXRJdGVtSWQsIGdldEl0ZW1VaWQsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgLy8gRm9yIHRyYW5zaWVudCBkYXRhLCB0aGUgaW5kZXggaXMgdXNlZCBhcyB0aGUgaWRcbiAgICAgICAgPyBpdGVtSWRcbiAgICAgICAgOiBkYXRhPy5maW5kSW5kZXgoXG4gICAgICAgICAgKGl0ZW0sIGluZGV4KSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkgPT09IGl0ZW1JZFxuICAgICAgICApXG4gICAgICByZXR1cm4gaW5kZXggIT09IC0xID8gaW5kZXggOiBudWxsXG4gICAgfSxcblxuICAgIGdldEl0ZW1MYWJlbChzb3VyY2VTY2hlbWEsIGl0ZW0sIHtcbiAgICAgIGluZGV4ID0gbnVsbCxcbiAgICAgIGV4dGVuZGVkID0gZmFsc2UsXG4gICAgICBhc09iamVjdCA9IGZhbHNlXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCB7IGl0ZW1MYWJlbCB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAoIWl0ZW0gfHwgIWV4dGVuZGVkICYmIGl0ZW1MYWJlbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGFQYXRoXG4gICAgICBjb25zdCBnZXREYXRhUGF0aCA9ICgpID0+XG4gICAgICAgIChkYXRhUGF0aCB8fD0gdGhpcy5nZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkpXG5cbiAgICAgIGxldCBmb3JtTGFiZWxcbiAgICAgIGNvbnN0IGdldEZvcm1MYWJlbCA9ICgpID0+XG4gICAgICAgIChmb3JtTGFiZWwgfHw9IHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgICAgZ2V0SXRlbUZvcm1TY2hlbWEoc291cmNlU2NoZW1hLCBpdGVtLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICkpXG5cbiAgICAgIGxldCB0ZXh0XG4gICAgICBsZXQgcHJlZml4XG4gICAgICBsZXQgc3VmZml4XG4gICAgICBpZiAoaXNGdW5jdGlvbihpdGVtTGFiZWwpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbUxhYmVsLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgIGluZGV4LFxuXG4gICAgICAgICAgICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXREYXRhUGF0aCgpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXQgZm9ybUxhYmVsKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIGlmIChpc09iamVjdChsYWJlbCkpIHtcbiAgICAgICAgICAoeyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9ID0gbGFiZWwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGxhYmVsXG4gICAgICAgIH1cbiAgICAgICAgLy8gSXQncyB1cCB0byBgaXRlbUxhYmVsKClgIGVudGlyZWx5IHRvIHByb2R1Y2UgdGhlIGxhYmVsOlxuICAgICAgICBleHRlbmRlZCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb29rIHVwIHRoZSBuYW1lIG9uIHRoZSBpdGVtLCBieSB0aGVzZSBydWxlczpcbiAgICAgICAgLy8gMS4gSWYgYGl0ZW1MYWJlbGAgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyB0aGUgcHJvcGVydHkga2V5XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIGNvbHVtbnMsIHVzZSB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIDMuIE90aGVyd2lzZSwgc2VlIGlmIHRoZSBpdGVtIGhhcyBhIHByb3BlcnR5IG5hbWVkICduYW1lJ1xuICAgICAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgICBjb25zdCBrZXkgPSAoXG4gICAgICAgICAgaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiBpdGVtTGFiZWwgfHxcbiAgICAgICAgICBpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBjb2x1bW5zICYmIE9iamVjdC5rZXlzKGNvbHVtbnMpWzBdIHx8XG4gICAgICAgICAgJ25hbWUnXG4gICAgICAgIClcbiAgICAgICAgdGV4dCA9IGl0ZW1ba2V5XVxuICAgICAgfVxuICAgICAgY29uc3QgaGFkTGFiZWwgPSAhIXRleHRcbiAgICAgIHRleHQgfHw9ICcnXG4gICAgICAvLyBJZiBubyBsYWJlbCB3YXMgZm91bmQgc28gZmFyLCB0cnkgdG8gcHJvZHVjZSBvbmUgZnJvbSB0aGVpbmRleC5cbiAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgaWYgKGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGluZGV4ICE9PSBudWxsKSB7XG4gICAgICAgICAgdGV4dCA9IGAke2luZGV4ICsgMX1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0ID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9IDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1zY2hlbWFcbiAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgdi1pZj1cImhhc0xhYmVsIHx8IGhhc1RhYnMgfHwgY2xpcGJvYXJkXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICApXG4gICAgICBkaXRvLWxhYmVsKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgIEBleHBhbmQ9XCJvbkV4cGFuZFwiXG4gICAgICApXG4gICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgZGl0by10YWJzKFxuICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgIClcbiAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgKVxuICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtdGFiKFxuICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgcmVmPVwidGFic1wiXG4gICAgICA6a2V5PVwidGFiXCJcbiAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICA6dGFiPVwidGFiXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgIClcbiAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgIHNsb3QoXG4gICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgIClcbiAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICApXG4gIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgZGl0by1wYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxTY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNjaGVtYVxuICAgIC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICAuZGl0by1zY2hlbWEtaGVhZGVyKFxuICAgICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1tZW51LWhlYWRlcic6IG1lbnVIZWFkZXIgfVwiXG4gICAgICApXG4gICAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICAgICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICA6Y29sbGFwc2VkPVwiIW9wZW5lZFwiXG4gICAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgICAgKVxuICAgICAgICAgIC8vIFBhc3MgZWRpdC1idXR0b25zIHRocm91Z2ggdG8gZGl0by1sYWJlbCdzIG93biBlZGl0LWJ1dHRvbnMgc2xvdDpcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICNlZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIHYtaWY9XCJpbmxpbmVkXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiAgICAgICAgZGl0by10YWJzKFxuICAgICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICAgIDpzZWxlY3RlZFRhYj1cInNlbGVjdGVkVGFiXCJcbiAgICAgICAgKVxuICAgICAgICBkaXRvLWNsaXBib2FyZChcbiAgICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICAgIHYtaWY9XCJoYXNUYWJzXCJcbiAgICAgICAgdi1mb3I9XCIoc2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgICByZWY9XCJ0YWJzXCJcbiAgICAgICAgOmtleT1cInRhYlwiXG4gICAgICAgIDp2aXNpYmxlPVwic2VsZWN0ZWRUYWIgPT09IHRhYlwiXG4gICAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIClcbiAgICAgIHRyYW5zaXRpb24taGVpZ2h0KFxuICAgICAgICA6ZW5hYmxlZD1cImlubGluZWRcIlxuICAgICAgKVxuICAgICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLW1haW4oXG4gICAgICAgICAgdi1pZj1cImhhc01haW5QYW5lICYmIG9wZW5lZFwiXG4gICAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgICApXG4gICAgICBzbG90KFxuICAgICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgICApXG4gICAgdGVtcGxhdGUodi1pZj1cImlubGluZWRcIilcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCIhaGFzTGFiZWxcIlxuICAgICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJpc1BvcHVsYXRlZFwiKVxuICAgICAgZGl0by1wYW5lbHMoXG4gICAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zY2hlbWFcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gZGlzcGxheSBzY2hlbWEgbmV4dCB0byBwYW5lbHM6XG4gICAgZGlzcGxheTogZmxleFxuICAgIG1pbi1oZWlnaHQ6IDEwMCVcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICBmbGV4OiAxIDEgMTAwJVxuICAgICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICA+ICo6b25seS1jaGlsZFxuICAgICAgICBncmlkLXJvdy1lbmQ6IG5vbmVcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmdcbiAgICA+IC5kaXRvLWJ1dHRvbnMsXG4gICAgPiAuZGl0by1wYW5lbHNcbiAgICAgIGZsZXg6IDEgMSAwJVxuICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbiAgICA+IC5kaXRvLXBhbmVsc1xuICAgICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgMFxuICAgIC8vIERpc3BsYXkgYSBydWxlciBiZXR3ZWVuIHRhYmJlZCBjb21wb25lbnRzIGFuZCB0b3dhcmRzIHRoZSAuZGl0by1idXR0b25zXG4gICAgLmRpdG8tcGFuZS10YWIgKyAuZGl0by1wYW5lLW1haW5cbiAgICAgICY6OmJlZm9yZVxuICAgICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBjb250ZW50OiAnJ1xuICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW4gdG8gdGhlIHJ1bGVyXG4gICAgICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZyAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmXG4gIC5kaXRvLXNjaGVtYS1oZWFkZXJcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdGFicyxcbiAgICAuZGl0by1jbGlwYm9hcmRcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kXG4gICAgLmRpdG8tY2xpcGJvYXJkXG4gICAgICAmOm9ubHktY2hpbGRcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpblxuICAgICYuZGl0by1zY2hlbWEtbWVudS1oZWFkZXJcbiAgICAgIC8vIEJyaW5nIHRoZSB0YWJzIHVwIHRvIHRoZSBtZW51LlxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICBoZWlnaHQ6ICRtZW51LWhlaWdodFxuICAgICAgcGFkZGluZzogMCAkbWVudS1wYWRkaW5nLWhvclxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgICByaWdodDogMFxuICAgICAgei1pbmRleDogJG1lbnUtei1pbmRleFxuICAgICAgLy8gVHVybiBvZmYgcG9pbnRlciBldmVudHMgc28gdGhhdCBEaXRvVHJhaWwga2VlcHMgcmVjZWl2aW5nIGV2ZW50cy4uLlxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIC8vIC4uLmJ1dCBhbGxvdyBpbnRlcmFjdGlvbiB3aXRoIHRoZSB0YWJzIGFuZCBidXR0b25zIChlLmcuIGNsaXBib2FyZClcbiAgICAgIC8vIGxheWVyZWQgb24gdG9wIG9mIERpdG9UcmFpbC5cbiAgICAgIC5kaXRvLXRhYnMsXG4gICAgICAuZGl0by1idXR0b25zXG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGJ1dHRvbi5kaXRvLWxhYmVsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gQ2F0Y2ggYWxsIGNsaWNrcywgZXZlbiB3aGVuIGl0IHdvdWxkIGJlIHBhcnRpYWxseSBjb3ZlcmVkIGJ5IHNjaGVtYS5cbiAgICAgIHotaW5kZXg6IDFcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNSZWdFeHAsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoLCBsYWJlbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgVHJhbnNpdGlvbkhlaWdodCB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0gfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0TmFtZWRTY2hlbWFzLCBnZXRQYW5lbFNjaGVtYXMsIHNldERlZmF1bHRzLCBwcm9jZXNzRGF0YVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEnLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJhbnNpdGlvbkhlaWdodCB9LFxuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJyRzY2hlbWFQYXJlbnRDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBtZW51SGVhZGVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICByZXR1cm4ge1xuICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIHByb3ZpZGUgbW9yZSBkYXRhIHRocm91Z2ggYHNjaGVtYS5kYXRhYCwgdnVlLXN0eWxlOlxuICAgICAgLi4uKFxuICAgICAgICBkYXRhICYmIGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgOiBkYXRhXG4gICAgICApLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMuJHBhcmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgY29uc3QgcGFuZWxzID0gZ2V0UGFuZWxTY2hlbWFzKHRoaXMuc2NoZW1hLnBhbmVscywgJycpXG4gICAgICBmb3IgKGNvbnN0IHBhbmUgb2YgdGhpcy5wYW5lcykge1xuICAgICAgICBwYW5lbHMucHVzaCguLi5wYW5lLnBhbmVsU2NoZW1hcylcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYW5lbHNcbiAgICB9LFxuXG4gICAgdGFicygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEudGFicylcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICBjb25zdCBjdXJyZW50VGFiID0gdGhpcy4kcm91dGUuaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgICAgY29uc3QgdGFiID0gY3VycmVudFRhYiAmJiB0aGlzLnNob3VsZFJlbmRlcih0aGlzLnRhYnNbY3VycmVudFRhYl0pXG4gICAgICAgID8gY3VycmVudFRhYlxuICAgICAgICA6IHRoaXMuZGVmYXVsdFRhYj8ubmFtZSB8fCBudWxsXG4gICAgICBpZiAodGFiICE9PSBjdXJyZW50VGFiKSB7XG4gICAgICAgIC8vIEFueSB0YWIgY2hhbmdlIG5lZWRzIHRvIGJlIHJlZmxlY3RlZCBpbiB0aGUgcm91dGVyIGFsc28uXG4gICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgaGFzaDogdGFiIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gdGFiXG4gICAgfSxcblxuICAgIGRlZmF1bHRUYWIoKSB7XG4gICAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0VGFiIH0gPSB0YWJcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihkZWZhdWx0VGFiKVxuICAgICAgICAgICAgPyBkZWZhdWx0VGFiLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgICAgOiBkZWZhdWx0VGFiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGFiXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gdGFiXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWE/LmNsaXBib2FyZFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdzZXJ2ZXInLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGNsaXBib2FyZERhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAuLi50aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzLlxuICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgYXM6XG4gICAgLy8gcmV0dXJuIGdldEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKFxuICAgICAgICB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHRoaXMuY29udGV4dClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNEaXJ0eSlcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc1RvdWNoZWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWRhdGVkKVxuICAgIH0sXG5cbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5sYWJlbCB8fCB0aGlzLmNvbGxhcHNpYmxlXG4gICAgfSxcblxuICAgIGhhc1RhYnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaW5saW5lZCAmJiAhIXRoaXMudGFic1xuICAgIH0sXG5cbiAgICBoYXNNYWluUGFuZSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiAhIWNvbXBvbmVudHMgJiYgT2JqZWN0LmtleXMoY29tcG9uZW50cykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBvcGVuZWQ6IGdldFN0b3JlQWNjZXNzb3IoJ29wZW5lZCcsIHtcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb2xsYXBzZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVscygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZXNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVsc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzUmVnaXN0cnkpXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgICAvLyBEZWxlZ2F0ZSBjaGFuZ2UgZXZlbnRzIHRocm91Z2ggdG8gcGFyZW50IHNjaGVtYTpcbiAgICB0aGlzLmRlbGVnYXRlKCdjaGFuZ2UnLCB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudClcbiAgICB0aGlzLmVtaXRFdmVudCgnaW5pdGlhbGl6ZScpIC8vIE5vdCBgJ2NyZWF0ZSdgLCBzaW5jZSB0aGF0J3MgZm9yIGRhdGEuXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmVtaXRFdmVudCgnZGVzdHJveScpXG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKFxuICAgICAgICB0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzQnlOYW1lKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeU5hbWUobmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50KGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFuZWxzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25FeHBhbmQoZXhwYW5kKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnZXhwYW5kJywge1xuICAgICAgICAvLyBUT0RPOiBBY3R1YWxseSBleHBvc2UgdGhpcyBvbiBEaXRvQ29udGV4dD9cbiAgICAgICAgY29udGV4dDogeyBleHBhbmQgfVxuICAgICAgfSlcbiAgICAgIC8vIFByZXZlbnQgY2xvc2luZyB0aGUgc2NoZW1hIHdpdGggaW52YWxpZCBkYXRhLCBzaW5jZSB0aGUgaW4tY29tcG9uZW50XG4gICAgICAvLyB2YWxpZGF0aW9uIHdpbGwgbm90IGJlIGV4ZWN1dGVkIG9uY2UgaXQncyBjbG9zZWQuXG5cbiAgICAgIC8vIFRPRE86IE1vdmUgdmFsaWRhdGlvbiBvdXQgb2YgY29tcG9uZW50cywgdG8gc2NoZW1hLCBqdXN0IGxpa2VcbiAgICAgIC8vIHByb2Nlc3NpbmcsIGFuZCB1c2UgYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIGZvciB0aGUgcmVzdWx0aW5nIGVycm9ycyxcbiAgICAgIC8vIHRoZW4gcmVtb3ZlIHRoaXMgcmVxdWlyZW1lbnQsIHNpbmNlIHdlIGNhbiB2YWxpZGF0ZSBjbG9zZWQgZm9ybXMgYW5kXG4gICAgICAvLyBzY2hlbWFzIHRoZW4uXG4gICAgICBpZiAoIXRoaXMub3BlbmVkIHx8IGV4cGFuZCB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBleHBhbmRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJylcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5mb2N1cygpXG4gICAgICB0aGlzLm9wZW5lZCA9IHRydWVcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuZm9jdXMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGNvbnN0IHVubWF0Y2hlZCA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgZXJyc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JzKSkge1xuICAgICAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGEgZGF0YS1yb290LCBwcmVmaXggaXRzIG93biBkYXRhUGF0aCB0byBhbGwgZXJyb3JzLFxuICAgICAgICAvLyBzaW5jZSB0aGUgZGF0YSB0aGF0IGl0IHNlbmRzIGFuZCB2YWxpZGF0ZXMgd2lsbCBiZSB1bnByZWZpeGVkLlxuICAgICAgICBjb25zdCBmdWxsRGF0YVBhdGggPSB0aGlzLmhhc093bkRhdGFcbiAgICAgICAgICA/IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICAgIDogZGF0YVBhdGhcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5oYXNPd25EYXRhLCBmdWxsRGF0YVBhdGgpXG4gICAgICAgIC8vIENvbnZlcnQgZnJvbSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvbiwgdG8gb3VyIG93biBmb3JtXG4gICAgICAgIC8vIG9mIHJlbGF0aXZlIEpTT04gcG9pbnRlcnMgYXMgZGF0YS1wYXRoczpcbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZnVsbERhdGFQYXRoKVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBpZiAoYXdhaXQgY29tcG9uZW50Lm5hdmlnYXRlVG9Db21wb25lbnQ/LihcbiAgICAgICAgICAgICAgICBmdWxsRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgc3ViQ29tcG9uZW50cyA9PiB7XG4gICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2Ygc3ViQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJzID0gZXJyb3JzW2NvbXBvbmVudC5kYXRhUGF0aF1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIGVycnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgZm9ybSB0byBkaXNwbGF5IGF0IGxlYXN0IHBhcnRzIGZvIHRoZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbGwgZXJyb3JzIGF0IG9uY2UsIHNvIHdlJ3JlIGRvbmUuIERvbid0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBgbm90aWZ5RXJyb3JzKClgIHlldCwgYXMgd2UgY2FuIG9ubHkgZGlzcGxheSBpdCBvbmNlXG4gICAgICAgICAgICAgICAgLy8gYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIHdhcyBjYWxsZWQgZnJvbSBgRGl0b0Zvcm0ubW91bnRlZCgpYFxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGlsbCBoZXJlLCBzbyBrZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXaGVuIHRoZSBlcnJvciBjYW4ndCBiZSBtYXRjaGVkLCBhZGQgaXQgdG8gYSBsaXN0IG9mIHVubWF0Y2hlZFxuICAgICAgICAgIC8vIGVycm9ycyB3aXRoIGRlY2VudCBtZXNzYWdlLCB0byByZXBvcnQgYXQgdGhlIGVuZC5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhYmVsaXplKHByb3BlcnR5KVxuICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZpZWxkXG4gICAgICAgICAgICAgID8gYFRoZSBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICAgICAgICAgOiBgVGhlICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goYCR7cHJlZml4fSAke2Vyci5tZXNzYWdlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnModW5tYXRjaGVkLmpvaW4oJ1xcbicpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBub3RpZnlFcnJvcnMobWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1ZhbGlkYXRpb24gRXJyb3JzJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZSB8fCAnUGxlYXNlIGNvcnJlY3QgdGhlIGhpZ2hsaWdodGVkIGVycm9ycy4nXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4ndCBzZXQgYHRoaXMuZGF0YSA9IC4uLmAgYmVjYXVzZSBpdCdzIGEgcHJvcGVydHksIGJ1dCB3ZSBjYW5cbiAgICAgIC8vIHNldCBhbGwga25vd24gcHJvcGVydGllcyBvbiBpdCB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5XG4gICAgICAvLyBgc2V0RGVmYXVsdHMoKWAsIGFzIHRoZXkgYXJlIGFsbCByZWFjdGl2ZSBhbHJlYWR5IGZyb20gdGhlIHN0YXJ0czpcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCBzZXREZWZhdWx0cyh0aGlzLnNjaGVtYSwge30sIHRoaXMpKVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgbmFtZSwgZGF0YVtuYW1lXSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5tYXJrRGlydHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmaWx0ZXJEYXRhKGRhdGEpIHtcbiAgICAgIC8vIEZpbHRlcnMgb3V0IGFycmF5cyBhbmQgb2JqZWN0cyB0aGF0IGFyZSBiYWNrIGJ5IGRhdGEgcmVzb3VyY2VzXG4gICAgICAvLyB0aGVtc2VsdmVzLCBhcyB0aG9zZSBhcmUgYWxyZWFkeSB0YWtpbmcgY2FyZSBvZiB0aHJvdWdoIHRoZWlyIG93biBBUElcbiAgICAgIC8vIHJlc291cmNlIGVuZC1wb2ludHMgYW5kIHNob3VsZG4ndCBiZSBzZXQuXG4gICAgICBjb25zdCBjb3B5ID0ge31cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSkge1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKVxuICAgICAgICAgIGlmIChjb21wb25lbnRzLnNvbWUoY29tcG9uZW50ID0+IGNvbXBvbmVudC5wcm92aWRlc0RhdGEpKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb3B5W25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb3B5XG4gICAgfSxcblxuICAgIHByb2Nlc3NEYXRhKHsgdGFyZ2V0ID0gJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHkgPSB0cnVlIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIHByb2Nlc3NEYXRhKFxuICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCwge1xuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgRGl0b0NvbnRleHQgaGFuZGxpbmcgaW5zaWRlIGBwcm9jZXNzRGF0YWAgYW5kXG4gICAgICAgICAgLy8gYHByb2Nlc3NTY2hlbWFEYXRhKClgOlxuICAgICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgICBzY2hlbWFPbmx5LFxuICAgICAgICAgIHRhcmdldFxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIGAkc2NoZW1hUGFyZW50Q29tcG9uZW50KClgIGlzIG9ubHkgc2V0IGlmIG9uZSBvZiB0aGUgYW5jZXN0b3JzIHVzZXNcbiAgICAgIC8vIHRoZSBgU2NoZW1hUGFyZW50TWl4aW5gOlxuICAgICAgdGhpcy4kc2NoZW1hUGFyZW50Q29tcG9uZW50KCk/Ll9yZWdpc3RlclNjaGVtYUNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLmNvbXBvbmVudHNSZWdpc3RyeSwgY29tcG9uZW50LCBhZGQpXG4gICAgICAvLyBPbmx5IHJlZ2lzdGVyIHdpdGggdGhlIHBhcmVudCBpZiBzY2hlbWEgc2hhcmVzIGRhdGEgd2l0aCBpdC5cbiAgICAgIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50Py5fcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmUocGFuZSwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZXNSZWdpc3RyeSwgcGFuZSwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lbChwYW5lbCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMucGFuZWxzUmVnaXN0cnksIHBhbmVsLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlckVudHJ5KHJlZ2lzdHJ5LCBlbnRyeSwgYWRkKSB7XG4gICAgICBjb25zdCB1aWQgPSBlbnRyeS4kdWlkXG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHRoaXMuJHNldChyZWdpc3RyeSwgdWlkLCBlbnRyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGRlbGV0ZShyZWdpc3RyeSwgdWlkKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBlbnRyaWVzQnlEYXRhUGF0aFtkYXRhUGF0aF0gfHw9IFtdXG4gICAgICAgIGVudHJpZXMucHVzaChlbnRyeSlcbiAgICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoXG4gICAgICB9LCB7fSlcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXMoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKS5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgID8gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICAgICAgOiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmlsdGVyRW50cmllcyhcbiAgICAgICAgZW50cmllc0J5RGF0YVBhdGhbYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZmlsdGVyRW50cmllcyhlbnRyaWVzLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIG1hdGNoID8gZW50cmllcy5maWx0ZXIobWF0Y2gpIDogZW50cmllc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLXNjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbilcbiAgLy8gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLXNjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gICAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4gIClcbiAgICAvLyBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2hlbWFzIHNlcGFyYXRlbHkgZnJvbSBhbGxcbiAgICAvLyBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgICB0ZW1wbGF0ZSgjZWRpdC1idXR0b25zKVxuICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICBAZGVsZXRlPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zY2hlbWEtaW5saW5lZFxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgICAgICAvLyBDaGFuZ2Ugc3BhY2luZyBzbyAuZGl0by1sYWJlbCBjb3ZlcnMgdGhlIGZ1bGwgLmRpdG8tc2NoZW1hLWhlYWRlci5cbiAgICAgICAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZ1xuICAgICAgICAuZGl0by1sYWJlbFxuICAgICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW5cbiAgICAgICAgICAtLWxhYmVsLXBhZGRpbmc6ICN7JGZvcm0tc3BhY2luZ31cbiAgICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgICAgICAvLyBCZWNhdXNlIHRhYmxlcyBoYXZlIGEgZnVubnkgd2F5IG9mIGFsbG93aW5nIHRvbyBtdWNoIHdpZHRoIGdyb3d0aDpcbiAgICAgICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICAgICYgKy5kaXRvLXBhbmVcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIHRyYW5zaXRpb24taGVpZ2h0IGluIERpdG9TY2hlbWE6XG4gICAgICAgICAgbWluLWhlaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc0NvbXBhY3QgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NoZW1hLWlubGluZWQnLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1zaG93PVwidmlzaWJsZVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPWB7XG4gICAgICBzY2hlbWEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgbmVzdGVkLFxuICAgICAgc3RvcmVcbiAgICB9IGluIGNvbXBvbmVudFNjaGVtYXNgXG4gIClcbiAgICAuZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdiZWZvcmUnXCJcbiAgICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFuZShcbiAgICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgICB2LXNob3c9XCJ2aXNpYmxlXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9YHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgc3RvcmVcbiAgICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgICAgKVxuICAgICAgZGl0by1jb250YWluZXIoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tYnJlYWsoXG4gICAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgZmxleC1mbG93OiByb3cgd3JhcFxuICAgIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnRcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmVcbiAgICAvLyBSZW1vdmUgcGFkZGluZyBhZGRlZCBieSBgLmRpdG8tY29udGFpbmVyYFxuICAgIG1hcmdpbjogKC0kZm9ybS1zcGFjaW5nKSAoLSRmb3JtLXNwYWNpbmctaGFsZilcbiAgICAvLyBBZGQgcmVtb3ZlZCBob3Jpem9udGFsIG1hcmdpbiBhZ2FpbiB0byBtYXgtd2lkdGg6XG4gICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArIDIgKiAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgICAvLyBVc2UgYGZsZXg6IDAlYCBmb3IgYWxsIGAuZGl0by1wYW5lYCBleGNlcHQgYC5kaXRvLXBhbmUtbWFpbmAsXG4gICAgLy8gc28gdGhhdCB0aGUgYC5kaXRvLWJ1dHRvbnMtbWFpbmAgY2FuIGJlIG1vdmVkIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b20uXG4gICAgZmxleDogMCVcblxuICAgICYuZGl0by1wYW5lLW1haW5cbiAgICAgIGZsZXg6IDEwMCVcblxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXI6bm90KC5kaXRvLXNjaGVtYS1tZW51LWhlYWRlcikgKyAmXG4gICAgICAvLyBDbGVhciB0b3AtbWFyZ2luIGlmIHRoZSBjb21wb25lbnRzIGFyZSBwcmVjZWRlZCBieSBhIHNjaGVtYSBoZWFkZXIuXG4gICAgICBtYXJnaW4tdG9wOiAwXG5cbiAgICAuZGl0by1jb250YWluZXIuZGl0by1vbWl0LXBhZGRpbmcgPiAmXG4gICAgICAvLyBDbGVhciBtYXJnaW5zIHNldCBhYm92ZSBhZ2FpbiBpZiBwYXJlbnQgaXMgb21pdHRpbmcgcGFkZGluZy5cbiAgICAgIG1hcmdpbjogMFxuICAgICAgbWF4LXdpZHRoOiB1bnNldFxuXG4gICAgLmRpdG8tYnJlYWtcbiAgICAgIGZsZXg6IDEwMCVcbiAgICAgIGhlaWdodDogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRBbGxQYW5lbFNjaGVtYXMsIGlzTmVzdGVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZScsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy50YWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0YWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdmlzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgID8gbmVzdGVkRGF0YVBhdGhcbiAgICAgICAgICAgICAgOiB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICBzdG9yZTogbmVzdGVkID8gdGhpcy5nZXRDaGlsZFN0b3JlKG5hbWUpIDogdGhpcy5zdG9yZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYXMoKSB7XG4gICAgICAvLyBHYXRoZXIgYWxsIHBhbmVsIHNjaGVtYXMgZnJvbSBhbGwgY29tcG9uZW50IHNjaGVtYXMsIGJ5IGZpbmRpbmcgdGhvc2VcbiAgICAgIC8vIHRoYXQgd2FudCB0byBwcm92aWRlIGEgcGFuZWwuIFNlZSBgZ2V0QWxsUGFuZWxTY2hlbWFzKClgIGZvciBkZXRhaWxzLlxuICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U2NoZW1hcy5mbGF0TWFwKFxuICAgICAgICAoeyBzY2hlbWEsIG5lc3RlZERhdGFQYXRoOiBkYXRhUGF0aCB9KSA9PiBnZXRBbGxQYW5lbFNjaGVtYXMoXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LFxuICAgICAgICAgIHRoaXMudGFiQ29tcG9uZW50XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaW5nbGUgJiYgdGhpcy5jb21wb25lbnRTY2hlbWFzLmxlbmd0aCA9PT0gMVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZSh0aGlzLCBhZGQpXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgaWYgKHRoaXMudGFiKSB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgaGFzaDogdGhpcy50YWIgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJhY3Rpb24odmFsdWUpIHtcbiAgY29uc3QgbWF0Y2ggPSAoXG4gICAgaXNTdHJpbmcodmFsdWUpICYmXG4gICAgdmFsdWUubWF0Y2goL15cXHMqKFsrLV0/XFxkKylcXHMqXFwvXFxzKihbKy1dP1xcZCspXFxzKiQvKVxuICApXG4gIGlmIChtYXRjaCkge1xuICAgIGNvbnN0IFssIGRpdmlkZW5kLCBkaXZpc29yXSA9IG1hdGNoXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoZGl2aWRlbmQpIC8gcGFyc2VGbG9hdChkaXZpc29yKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKVxuICB9XG59XG4iLCJcbi5kaXRvLWNvbnRhaW5lcihcbiAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuKVxuICBkaXRvLWxhYmVsKFxuICAgIHYtaWY9XCJsYWJlbFwiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgKVxuICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0VHlwZUNvbXBvbmVudChzY2hlbWEudHlwZSlcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgKVxuICBkaXRvLWVycm9ycyhcbiAgICA6ZXJyb3JzPVwiZXJyb3JzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY29udGFpbmVyKFxuICAgIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICAgIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgICA6c3R5bGU9XCJjb250YWluZXJTdHlsZVwiXG4gIClcbiAgICBkaXRvLWxhYmVsKFxuICAgICAgdi1pZj1cImxhYmVsXCJcbiAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgIClcbiAgICBjb21wb25lbnQuZGl0by1jb21wb25lbnQoXG4gICAgICA6aXM9XCJnZXRUeXBlQ29tcG9uZW50KHNjaGVtYS50eXBlKVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gICAgKVxuICAgIGRpdG8tZXJyb3JzKFxuICAgICAgOmVycm9ycz1cImVycm9yc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNvbnRhaW5lclxuICAgIC8vIE5lZWRlZCBmb3IgYmV0dGVyIHZlcnRpY2FsIGFsaWdubWVudDpcbiAgICBhbGlnbi1zZWxmOiBzdHJldGNoXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICAgIG1heC13aWR0aDogMTAwJVxuICAgIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAgIC8vIHBlcmNlbnRhZ2VzIGluIGZsZXgtYmFzaXMgdG8gd29yay5cbiAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZlxuICAgICY6ZW1wdHlcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAmLmRpdG8tb21pdC1wYWRkaW5nXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+IC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogJGZvcm0tc3BhY2luZyAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuICAgICYuZGl0by1zaW5nbGVcbiAgICAgIGhlaWdodDogMTAwJSAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b21cbiAgLy8gTk9URTogVGhpcyBpcyBub3QgbmVzdGVkIGluc2lkZSBgLmRpdG8tY29udGFpbmVyYCBzbyB0aGF0IG90aGVyXG4gIC8vIHR5cGUgY29tcG9uZW50cyBjYW4gb3ZlcnJpZGUgYC5kaXRvLXdpZHRoLWZpbGxgIGNsYXNzIChmaWx0ZXIgcHJlY2VkZW5jZSkuXG4gIC5kaXRvLWNvbXBvbmVudFxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgJi5kaXRvLWNoZWNrYm94LFxuICAgICAgJi5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHdpZHRoOiBhdXRvXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGlzTnVtYmVyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZU9wdGlvbnMsIHNob3VsZE9taXRQYWRkaW5nIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcGFyc2VGcmFjdGlvbiB9IGZyb20gJy4uL3V0aWxzL21hdGguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1jb250YWluZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdHlwZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0VHlwZU9wdGlvbnModGhpcy5zY2hlbWEpIHx8IHt9XG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHNjaGVtYVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGFiZWwgIT09IGZhbHNlICYmXG4gICAgICAgICghIWxhYmVsIHx8IHRoaXMudHlwZU9wdGlvbnMuZ2VuZXJhdGVMYWJlbCAmJiB0aGlzLmdlbmVyYXRlTGFiZWxzKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSkgOiBudWxsXG4gICAgfSxcblxuICAgIGxhYmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBVbm5lc3RlZCB0eXBlcyBkb24ndCBoYXZlIGEgZGF0YVBhdGggZm9yIHRoZW1zZWx2ZXMsIGRvbid0IHVzZSBpdDpcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMuZGF0YVBhdGggOiBudWxsXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFdpZHRoOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFdpZHRoXG4gICAgICB9LFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIC8vIFVzZSAxMDAlID09IDEuMCBhcyBkZWZhdWx0IHdpZHRoIHdoZW4gbm90aGluZyBpcyBzZXQ6XG4gICAgICAgIHJldHVybiB3aWR0aCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAxLjBcbiAgICAgICAgICA6IGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccypbPD5dP1xccyooLiopJC8pWzFdIC8vIFJlbW92ZSB3aWR0aCBvcGVyYXRvclxuICAgICAgICAgICAgOiB3aWR0aFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50V2lkdGhPcGVyYXRvcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKihbPD5dPykvKVsxXSB8fCBudWxsXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRWaXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0VmlzaWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50RGlzYWJsZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkaXNhYmxlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm4gZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29udGFpbmVyQ2xhc3MoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBjb250YWluZXJDbGFzcyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXNpbmdsZSc6IHRoaXMuc2luZ2xlLFxuICAgICAgICAnZGl0by1vbWl0LXBhZGRpbmcnOiBzaG91bGRPbWl0UGFkZGluZyh0aGlzLnNjaGVtYSksXG4gICAgICAgIC4uLihcbiAgICAgICAgICBpc1N0cmluZyhjb250YWluZXJDbGFzcylcbiAgICAgICAgICAgID8geyBbY29udGFpbmVyQ2xhc3NdOiB0cnVlIH1cbiAgICAgICAgICAgIDogY29udGFpbmVyQ2xhc3NcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRCYXNpcygpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5jb21wb25lbnRXaWR0aFxuICAgICAgLy8gJ2F1dG8nID0gbm8gZml0dGluZzpcbiAgICAgIGNvbnN0IGJhc2lzID0gKFxuICAgICAgICBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKSA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aCkgPyBwYXJzZUZsb2F0KHdpZHRoKSAvLyBwZXJjZW50YWdlXG4gICAgICAgIDogL1thLXpdLy50ZXN0KHdpZHRoKSA/IHdpZHRoIC8vIG5hdGl2ZSB1bml0c1xuICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpICogMTAwIC8vIGZyYWN0aW9uXG4gICAgICApXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYmFzaXMpID8gYCR7YmFzaXN9JWAgOiBiYXNpc1xuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZSgpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgY29uc3QgZ3JvdyA9IChcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgY29uc3Qgc2hyaW5rID0gdGhpcy5jb21wb25lbnRXaWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZsZXg6IGAke2dyb3cgPyAxIDogMH0gJHtzaHJpbmsgPyAxIDogMH0gJHt0aGlzLmNvbXBvbmVudEJhc2lzfWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3MoKSB7XG4gICAgICBjb25zdCBiYXNpc0lzQXV0byA9IHRoaXMuY29tcG9uZW50QmFzaXMgPT09ICdhdXRvJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5jb21wb25lbnREaXNhYmxlZCxcbiAgICAgICAgJ2RpdG8td2lkdGgtZmlsbCc6ICFiYXNpc0lzQXV0byB8fCB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCcsXG4gICAgICAgICdkaXRvLXdpZHRoLWF1dG8nOiBiYXNpc0lzQXV0byxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnNcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRXJyb3JzKGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tdGFic1xuICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgOmtleT1cImtleVwiXG4gICAgOnRvPVwieyBoYXNoOiBrZXkgfVwiXG4gICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICApXG4gICAgfCB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRhYnNcbiAgICByb3V0ZXItbGluay5kaXRvLWxpbmsoXG4gICAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHRhYlNjaGVtYSlcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICAgIGFjdGl2ZS1jbGFzcz1cImRpdG8tYWN0aXZlXCJcbiAgICApXG4gICAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gICR0YWItY29sb3ItYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaW5hY3RpdmU6ICRjb2xvci1saWdodFxuICAkdGFiLWNvbG9yLWFjdGl2ZTogJGNvbG9yLWxpZ2h0ZXN0XG4gICR0YWItY29sb3ItaG92ZXI6ICRjb2xvci13aGl0ZVxuXG4gIC5kaXRvLXRhYnNcbiAgICAvLyBTZWU6IGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgYVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1pbmFjdGl2ZVxuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yXG4gICAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW5cbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICR0YWItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgICY6aG92ZXJcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1ob3ZlclxuICAgICAgJjphY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1hY3RpdmVcbiAgICAgICYuZGl0by1hY3RpdmVcbiAgICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1iYWNrZ3JvdW5kXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYnMnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzZWxlY3RlZFRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG5jb21wb25lbnQuZGl0by1wYW5lbChcbiAgOmlzPVwicGFuZWxUYWdcIlxuICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICApXG4gICAgZGl0by1idXR0b25zKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLyBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuICBjb21wb25lbnQuZGl0by1wYW5lbChcbiAgICA6aXM9XCJwYW5lbFRhZ1wiXG4gICAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICAgIGRpdG8tc2NoZW1hLmRpdG8tcGFuZWwtc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVsXG4gICAgbWFyZ2luLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZ1xuICAgIC5kaXRvLXBhbmVsLXRpdGxlXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgIGJhY2tncm91bmQ6ICRidXR0b24tY29sb3JcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIC5kaXRvLXBhbmVsLXNjaGVtYVxuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsXG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci10b3A6IDBcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmdcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgLS1idXR0b24tbWFyZ2luOiAjeyRmb3JtLXNwYWNpbmd9XG4gICAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmIDBcbiAgICAgIC5kaXRvLW9iamVjdFxuICAgICAgICBib3JkZXI6IDBcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgIGxhYmVsXG4gICAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgLmRpdG8tcGFuZVxuICAgICAgICBtYXJnaW46IDAgKC0kZm9ybS1zcGFjaW5nLWhhbGYpXG4gICAgICAuZGl0by1jb250YWluZXJcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWwnLCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFuZWxUYWJDb21wb25lbnQ6IHsgdHlwZTogRGl0b0NvbXBvbmVudCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3duRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhbmVsQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIHRhcmdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS50YXJnZXQgfHwgdGhpcy5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICBoYXNPd25EYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5vd25EYXRhXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm93bkRhdGEgfHwgdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hKCkge1xuICAgICAgaWYgKHRoaXMuaGFzT3duRGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBgZGF0YWAgZnJvbSB0aGUgc2NoZW1hLCBzbyB0aGF0IERpdG9TY2hlbWEgaXNuJ3QgdXNpbmcgaXQgdG9cbiAgICAgICAgLy8gcHJvZHVjZSBpdHMgb3duIGRhdGEuIFNlZSAkZmlsdGVycyBwYW5lbCBmb3IgbW9yZSBkZXRhaWxzIG9uIGRhdGEuXG4gICAgICAgIGNvbnN0IHsgZGF0YSwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICByZXR1cm4gc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhbmVsVGFnKCkge1xuICAgICAgLy8gUGFuZWxzIHRoYXQgcHJvdmlkZSB0aGVpciBvd24gZGF0YSBuZWVkIHRoZWlyIG93biBmb3JtLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/ICdmb3JtJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHBhbmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBJZiB0aGUgcGFuZWwgcHJvdmlkZXMgaXRzIG93biBkYXRhLCB0aGVuIGl0IG5lZWRzIHRvIHByZWZpeCBhbGxcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCBpdHMgZGF0YS1wYXRoLCBidXQgaWYgaXQgc2hhcmVzIGRhdGEgd2l0aCB0aGUgc2NoZW1hXG4gICAgICAvLyBjb21wb25lbnQsIHRoZW4gaXQgc2hvdWxkIHNoYXJlIHRoZSBkYXRhLXBhdGggbmFtZSBzcGFjZSB0b28uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gdGhpcy5kYXRhUGF0aCA6IHRoaXMuc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBgc2NoZW1hLmRhdGFgIGhhbmRsaW5nIGluIERpdG9TY2hlbWEsXG4gICAgLy8gd2hlcmUgdGhlIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGFjdHVhbCBjb21wb25lbnQuXG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLm93bkRhdGEgPSBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgID8gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgOiBkYXRhXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSBwYW5lbHMgc28gdGhhdCBvdGhlciBjb21wb25lbnRzIGNhbiBmaW5kIHRoZW0gYnkgdGhlaXJcbiAgICAgIC8vIGRhdGEtcGF0aCwgZS5nLiBpbiBUeXBlTGlzdC5vbkZpbHRlckVycm9ycygpXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lbCh0aGlzLCBhZGQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgZGl0by1wYW5lbChcbiAgICB2LWZvcj1cInsgc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50IH0gaW4gcGFuZWxzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkICE9IG51bGwgPyBzY2hlbWEuZGlzYWJsZWQgOiBkaXNhYmxlZFwiXG4gICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tcGFuZWxzKFxuICAgIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4gIClcbiAgICBkaXRvLXBhbmVsKFxuICAgICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXBhbmVsc1xuICAgIG1heC13aWR0aDogJGNvbnRlbnQtc2lkZWJhci13aWR0aFxuICAgIG1pbi13aWR0aDogY2FsYygkY29udGVudC1zaWRlYmFyLXdpZHRoIC8gMilcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFuZWxzJywge1xuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1idXR0b25zKFxuICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gIC8qIFBhc3Mgb24gJGxpc3RlbmVycyBzbyB0aGF0IGRpdG8tZWRpdC1idXR0b25zIGNhbiBwYXNzIGV2ZW50cy4gKi9cbiAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuKVxuICBkaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgIDprZXk9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgKVxuICAvLyBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsIHNvIGl0IGNhbiBiZVxuICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gIC5kaXRvLWNvbnRhaW5lcihcbiAgICB2LWZvcj1cIm5vZGUgaW4gJHNsb3RzLmRlZmF1bHRcIlxuICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gIClcbiAgICBkaXRvLXZub2RlKDpub2RlPVwibm9kZVwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tYnV0dG9ucyhcbiAgICB2LWlmPVwiYnV0dG9uU2NoZW1hcyB8fCAkc2xvdHMuZGVmYXVsdFwiXG4gICAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICAgIHYtb249XCIkbGlzdGVuZXJzXCJcbiAgKVxuICAgIGRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCIoYnV0dG9uU2NoZW1hLCBidXR0b25EYXRhUGF0aCkgaW4gYnV0dG9uU2NoZW1hc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGJ1dHRvblNjaGVtYSlcIlxuICAgICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGJ1dHRvblNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gICAgKVxuICAgIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gICAgLy8gd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAgIC5kaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgICB2LWlmPVwibm9kZS50YWdcIlxuICAgIClcbiAgICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbi5kaXRvLWJ1dHRvbnNcbiAgPiAuZGl0by1jb250YWluZXJcbiAgICBwYWRkaW5nOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWJ1dHRvbnMnLCB7XG4gIHByb3ZpZGU6IHtcbiAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBidXR0b25zIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzLlxuICAgICAgY29uc3QgeyBkYXRhUGF0aCwgYnV0dG9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKGJ1dHRvbnMpLnJlZHVjZSgoc2NoZW1hcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgIHJldHVybiBzY2hlbWFzXG4gICAgICAgIH0sIHt9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgOmJ1dHRvbnM9XCJidXR0b25zXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICA6dG89XCJ7IHBhdGg6IGVkaXRQYXRoIH1cIiBhcHBlbmRcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgKVxuICBkaXRvLWNyZWF0ZS1idXR0b24oXG4gICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6cGF0aD1cImNyZWF0ZVBhdGhcIlxuICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1idXR0b25zLmRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIC8qIFByZXZlbnQgY2xpY2sgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gZGl0by1sYWJlbDogKi9cbiAgICBAY2xpY2suc3RvcFxuICApXG4gICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRHJhZ2dhYmxlXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgIClcbiAgICByb3V0ZXItbGluay5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0VkaXRhYmxlXCJcbiAgICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgKVxuICAgIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgICA6dGV4dD1cImNyZWF0ZUJ1dHRvblRleHRcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEZWxldGFibGVcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgQGNsaWNrPVwiJGVtaXQoJ2RlbGV0ZScpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZWRpdC1idXR0b25zXG4gICAgLy8gT3ZlcnJpZGUgY3Vyc29yIGZyb20gY29sbGFwc2libGUgZGl0by1sYWJlbDpcbiAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICBmbGV4OiBub25lXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZWRpdC1idXR0b25zJywge1xuICBwcm9wczoge1xuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY3JlYXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3JlYXRlUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYS5mb3JtKVxuICAgIH0sXG5cbiAgICBpc0RyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZHJhZ2dhYmxlJylcbiAgICB9LFxuXG4gICAgaXNFZGl0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZWRpdGFibGUnKSAmJiAhIXRoaXMuZWRpdFBhdGhcbiAgICB9LFxuXG4gICAgaXNDcmVhdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2NyZWF0YWJsZScpICYmICEhdGhpcy5jcmVhdGVQYXRoXG4gICAgfSxcblxuICAgIGlzRGVsZXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkZWxldGFibGUnKVxuICAgIH0sXG5cbiAgICBjcmVhdGVCdXR0b25UZXh0KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQWxsb3cgc2NoZW1hIHRvIG92ZXJyaWRlIGNyZWF0ZSBidXR0b24gdGhyb3VnaCBjcmVhdGFibGUgb2JqZWN0OlxuICAgICAgICB0aGlzLnNjaGVtYS5jcmVhdGFibGU/LmxhYmVsIHx8XG4gICAgICAgIChcbiAgICAgICAgICAvLyBBdXRvLWdlbmVyYXRlIGNyZWF0ZSBidXR0b24gbGFiZWxzIGZyb20gZnJvbSBsYWJlbHMgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzIHdpdGggb25seSBvbmUgZm9ybTpcbiAgICAgICAgICB0aGlzLmZvcm1MYWJlbCAmJlxuICAgICAgICAgIGAke2NhcGl0YWxpemUodGhpcy52ZXJicy5jcmVhdGUpfSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgKSB8fFxuICAgICAgICBudWxsXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNPcHRpb24obmFtZSkge1xuICAgICAgLy8gVGhlIG9wdGlvbnMgb2YgdGhlIG91dGVyIGNvbXBvbmVudCBhcmUgcGFzc2VkIHRvIHRoZSBidXR0b25zIGNvbXBvbmVudFxuICAgICAgLy8gdGhyb3VnaCBwcm9wZXJ0aWVzIGB0aGlzW25hbWVdYCwgYnV0IGNhbiBiZSBkaXNhYmxlZCBvbiBhIHBlci1mb3JtXG4gICAgICAvLyBiYXNpcyBieSBzZXR0aW5nIGBzY2hlbWFbbmFtZV1gIHRvIGBmYWxzZWAuXG4gICAgICByZXR1cm4gISEodGhpc1tuYW1lXSAmJiB0aGlzLnNjaGVtYVtuYW1lXSAhPT0gZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNyZWF0ZS1idXR0b25cbiAgdGVtcGxhdGUodi1pZj1cInNob3dQdWxsZG93blwiKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgKVxuICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgYShcbiAgICAgICAgICB2LWlmPVwiaXNDcmVhdGFibGUoZm9ybSlcIlxuICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICB2LWVsc2VcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICApIHt7IHRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgICApIHt7IHRleHQgfX1cbiAgICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgICApXG4gICAgICAgIGxpKHYtZm9yPVwiKGZvcm0sIHR5cGUpIGluIGZvcm1zXCIpXG4gICAgICAgICAgYShcbiAgICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJgZGl0by10eXBlLSR7dHlwZX1gXCJcbiAgICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odHlwZSlcIlxuICAgICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZWxzZVxuICAgICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICAgIEBjbGljaz1cImNyZWF0ZUl0ZW0oZm9ybXMuZGVmYXVsdClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jcmVhdGUtYnV0dG9uXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHJpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNyZWF0ZS1idXR0b24nLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBzaG93UHVsbGRvd24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5mb3JtcykubGVuZ3RoID4gMSB8fCAhdGhpcy5mb3Jtcy5kZWZhdWx0XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0NyZWF0YWJsZShmb3JtKSB7XG4gICAgICAvLyBGb3JtcyBjYW4gYmUgZXhjbHVkZWQgZnJvbSB0aGUgbGlzdCBieSBwcm92aWRpbmcgYGNyZWF0YWJsZTogZmFsc2VgXG4gICAgICByZXR1cm4gZm9ybS5jcmVhdGFibGUgIT09IGZhbHNlXG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSA9IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRhYmxlKGZvcm0pKSB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5saW5lZCkge1xuICAgICAgICAgIHRoaXMuc291cmNlQ29tcG9uZW50LmNyZWF0ZUl0ZW0oZm9ybSwgdHlwZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgICAgICBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAsXG4gICAgICAgICAgICBxdWVyeTogeyB0eXBlIH0sXG4gICAgICAgICAgICBhcHBlbmQ6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhbGxvd2VkIHRvIGNyZWF0ZSBpdGVtIGZvciBnaXZlbiBmb3JtJylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCh0eXBlKSB7XG4gICAgICB0aGlzLmNyZWF0ZUl0ZW0odGhpcy5mb3Jtc1t0eXBlXSwgdHlwZSlcbiAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgdi1pZj1cImNsaXBib2FyZFwiXG4pXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIWNvcHlFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1wYXN0ZShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFwYXN0ZUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jbGlwYm9hcmQuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZChcbiAgICB2LWlmPVwiY2xpcGJvYXJkXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1jb3B5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgICB0aXRsZT1cIkNvcHkgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25Db3B5XCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB0aXRsZT1cIlBhc3RlIERhdGFcIlxuICAgICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNPYmplY3QsIGNsb25lLCBkZWluZGVudCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNsaXBib2FyZCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgY2xpcGJvYXJkOiB7IHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpeENsaXBib2FyZDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT4gY29weS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsb25lKGNsaXBib2FyZERhdGEpXG4gICAgfSxcblxuICAgIHBhc3RlRGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgcGFzdGUgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIHBhc3RlXG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBwYXN0ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICB9KSlcbiAgICAgICAgOiBjbGlwYm9hcmREYXRhID0+IGNsaXBib2FyZERhdGFcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgIGNvcHk6IHRoaXMuY2hlY2tDbGlwYm9hcmRcbiAgICB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7XG4gICAgICBmb2N1czogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy4kd2F0Y2goJ2RhdGEnLCB7XG4gICAgICAvLyBDaGVjayByaWdodCBhd2F5IGFsc28gaW4gY2FzZSB0aGVyZSdzIGFscmVhZHkgZGF0YSAoZS5nLiBjcmVhdGUgZm9ybSkuXG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiAodG8sIGZyb20pID0+IHtcbiAgICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhc3luYyBnZXRDbGlwYm9hcmREYXRhKHJlcG9ydCkge1xuICAgICAgLy8gVXNlIHRoZSBpbnRlcm5hbCBjbGlwYm9hcmQgYXMgZmFsbGJhY2suXG4gICAgICBsZXQgeyBjbGlwYm9hcmREYXRhIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ucmVhZFRleHQ/LigpXG4gICAgICAgIGlmICh0aGlzLmZpeENsaXBib2FyZCAmJiBqc29uKSB7XG4gICAgICAgICAgLy8gVGhpcyBhcHBlYXJzIHRvIGJlIG5lZWRlZCBvbiBTYWZhcmkgdG8gcHJldmVudCBhIHN0cmFuZ2UgXCJQYXN0ZVwiXG4gICAgICAgICAgLy8gYnV0dG9uIGZyb20gYXBwZWFyaW5nIHdoZW4gdGhlIGNsaXBib2FyZCBpcyBhY2Nlc3NlZCAod2h5PyEpLlxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgdGhpcy5maXhDbGlwYm9hcmQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGlmIChqc29uKSB7XG4gICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IEpTT04ucGFyc2UoanNvbilcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChyZXBvcnQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICAgIGlmIChlcnIubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgYWxlcnQoZGVpbmRlbnRgXG4gICAgICAgICAgICAgIFRoZSBkYXRhIGluIHRoZSBjbGlwYm9hcmQgYXBwZWFycyB0byBiZSBtYWxmb3JtZWQ6XG4gICAgICAgICAgICAgICR7ZXJyLm1lc3NhZ2V9XG4gICAgICAgICAgICBgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgeyAkc2NoZW1hLCAuLi5kYXRhIH0gPSBjbGlwYm9hcmREYXRhIHx8IHt9XG4gICAgICByZXR1cm4gJHNjaGVtYSA9PT0gdGhpcy5zY2hlbWFDb21wb25lbnQ/LnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgY2hlY2tDbGlwYm9hcmQoKSB7XG4gICAgICB0aGlzLmNvcHlFbmFibGVkID0gISF0aGlzLmRhdGFcbiAgICAgIC8vIFNlZSBpZiB0aGUgY2xpcGJvYXJkIGNvbnRlbnQgaXMgdmFsaWQgSlNPTiBkYXRhIHRoYXQgaXMgY29tcGF0aWJsZVxuICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCB0YXJnZXQgc2NoZW1hLCBhbmQgb25seSB0aGVuIGFjdGl2YXRlIHRoZSBwYXN0aW5nOlxuICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIShhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEoZmFsc2UpKSAvLyBkb24ndCByZXBvcnRcbiAgICB9LFxuXG4gICAgYXN5bmMgb25Db3B5KCkge1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uY2xpcGJvYXJkRGF0YVxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5jb3B5RGF0YShkYXRhKVxuICAgICAgICAvLyBLZWVwIGFuIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKVxuICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LndyaXRlVGV4dD8uKGpzb24pXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBhY3RpdmF0ZSB0aGUgcGFzdGUgYnV0dG9uLCBkZXBlbmRkaW5nIG9uIGJyb3dzZXJzOlxuICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tDbGlwYm9hcmQoKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblBhc3RlKCkge1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEodHJ1ZSkgLy8gcmVwb3J0XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLnBhc3RlRGF0YShkYXRhKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nLCB7IHVwZGF0ZVJvb3QgPSBmYWxzZSwgdXBkYXRlVmlldyA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZyBeICFpc0xvYWRpbmcpIHsgLy8gQm9vbGVhbiB4b3JcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgICAgICBpZiAodXBkYXRlUm9vdCkge1xuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5yZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVWaWV3KSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldExvYWRpbmcodGhpcy5pc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuaW1wb3J0IHsgc2V0RGVmYXVsdHMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgJzxiPk5vdGU8L2I+OiB0aGUgcGFyZW50IHN0aWxsIG5lZWRzIHRvIGJlIHNhdmVkICcgK1xuICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICApXG4gICAgfSxcblxuICAgIHNob3VsZExvYWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAhdGhpcy5pc0xvYWRpbmdcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIC8vIEJhc2UgZGVmaW5pdGlvbiwgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpblxuICAgICAgcmV0dXJuICEhdGhpcy5sb2FkZWREYXRhXG4gICAgfSxcblxuICAgIHZlcmJzKCkge1xuICAgICAgLy8gVGhlIGFjdHVhbCBjb2RlIGlzIHRoZSBgZ2V0VmVyYnMoKWAgbWV0aG9kLCBmb3IgZWFzaWVyIG92ZXJyaWRpbmcgb2ZcbiAgICAgIC8vIHRoaXMgY29tcHV0ZWQgcHJvcGVydHkgaW4gY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgUmVzb3VyY2VNaXhpbi5cbiAgICAgIHJldHVybiB0aGlzLmdldFZlcmJzKClcbiAgICB9LFxuXG4gICAgcGFnaW5hdGlvblJhbmdlKCkge1xuICAgICAgLy8gT25seSBhcHBseSBwYWdpbmF0aW9uIHRvIGxpc3RzLlxuICAgICAgY29uc3QgeyBwYWdpbmF0ZTogYW1vdW50IH0gPSB0aGlzLnNvdXJjZVNjaGVtYVxuICAgICAgaWYgKHRoaXMuaXNMaXN0U291cmNlICYmIGFtb3VudCkge1xuICAgICAgICBjb25zdCB7IHBhZ2UgPSAwIH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gcGFnZSAqIGFtb3VudFxuICAgICAgICByZXR1cm4gW3N0YXJ0LCBzdGFydCArIGFtb3VudCAtIDFdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgLi4udmVyYnMsXG4gICAgICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCB2ZXJicyB3aXRoIHRoZWlyIHRyYW5zaWVudCB2ZXJzaW9uczpcbiAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgIGNyZWF0ZWQ6ICdhZGRlZCcsXG4gICAgICAgICAgc2F2ZTogJ2FwcGx5JyxcbiAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgIGRlbGV0ZTogJ3JlbW92ZScsXG4gICAgICAgICAgZGVsZXRlZDogJ3JlbW92ZWQnXG4gICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0cyhzY2hlbWEsIHR5cGUgPyB7IHR5cGUgfSA6IHt9LCB0aGlzKVxuICAgIH0sXG5cbiAgICByZXF1ZXN0RGF0YSgpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5xdWVyeVBhcmFtc1xuICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZ2V0JywgcXVlcnkgfSwgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkYXRhPy50eXBlID09PSAnRmlsdGVyVmFsaWRhdGlvbicgJiZcbiAgICAgICAgICAgICAgdGhpcy5vbkZpbHRlckVycm9ycz8uKGRhdGEuZXJyb3JzKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IENhbiB3ZSByZWFsbHkgc3dhbGxvdyB0aGVzZSBlcnJvcnM/XG4gICAgICAgICAgICAgIC8vIElzIGNhbGxpbmcgYGVuc3VyZVVzZXIoKWAgaW4gYG9uQmVmb3JlUmVxdWVzdCgpYCBlbm91Z2g/XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShyZXNwb25zZS5kYXRhKVxuICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdsb2FkJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDBcbiAgICB9LFxuXG4gICAgaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMVxuICAgIH0sXG5cbiAgICBhc3luYyBoYW5kbGVSZXF1ZXN0KHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSxcbiAgICAgIHF1ZXJ5LFxuICAgICAgZGF0YVxuICAgIH0sIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBsb2FkaW5nT3B0aW9ucyA9IHtcbiAgICAgICAgdXBkYXRlUm9vdDogdHJ1ZSwgLy8gRGlzcGxheSBzcGlubmVyIGluIGhlYWRlciB3aGVuIGxvYWRpbmcgaW4gcmVzb3VyY2VzXG4gICAgICAgIHVwZGF0ZVZpZXc6IHRoaXMuaXNJblZpZXcgLy8gTm90aWZ5IHZpZXcgb2YgbG9hZGluZyBmb3IgdmlldyBjb21wb25lbnRzXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBjb25zdCByZXF1ZXN0ID0geyBtZXRob2QsIHJlc291cmNlLCBkYXRhLCBxdWVyeSB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdClcbiAgICAgICAgLy8gUGFzcyBib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRvIHRoZSBjYWxsYmFjaywgc28gdGhleSBjYW4gYmVcbiAgICAgICAgLy8gZXhwb3NlZCB0byBmdXJ0aGVyIGNhbGxiYWNrcyB0aHJvdWdoIERpdG9Db250ZXh0LlxuICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgZXJyb3JzIHdlcmUgYWxyZWFkeSBoYW5kbGVkLlxuICAgICAgICBjb25zdCB7IHJlc3BvbnNlIH0gPSBlcnJvclxuICAgICAgICBpZiAoIWNhbGxiYWNrKGVycm9yLCByZXNwb25zZSkpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICBpZiAoZGF0YSAmJiBpc1N0cmluZyhkYXRhLnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiBsYWJlbGl6ZShkYXRhLnR5cGUpLFxuICAgICAgICAgICAgICB0ZXh0OiBkYXRhLm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogZXJyb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgIH0sXG5cbiAgICBnZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZCkge1xuICAgICAgLy8gQ29udmVudGlvbjogb25seSBwb3N0LCBwdXQgYW5kIHBhdGNoIHJlcXVlc3RzIHBhc3MgdGhlIGRhdGEgYXMgcGF5bG9hZC5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmNsdWRlcyhtZXRob2QpICYmIChcbiAgICAgICAgICAvLyBUT0RPOiBVc2UgYGhhbmRsZURhdGFTY2hlbWEoKWAgYXN5bmNocm9ub3VzbHkgaGVyZSBpbnN0ZWFkLCB0b1xuICAgICAgICAgIC8vIG9mZmVyIHRoZSBzYW1lIGFtb3VudCBvZiBwb3NzaWJpbGl0aWVzIGZvciBkYXRhIGxvYWRpbmcuXG4gICAgICAgICAgYnV0dG9uLmdldFNjaGVtYVZhbHVlKFsncmVzb3VyY2UnLCAnZGF0YSddKSB8fFxuICAgICAgICAgIGJ1dHRvbi5wcm9jZXNzZWRJdGVtXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbikge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCB7IG1ldGhvZCB9ID0gcmVzb3VyY2VcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgIHNldERhdGEgPSBmYWxzZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzID0gKCkgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgdGV4dDogJ1JlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBzZW50LidcbiAgICAgIH0pLFxuICAgICAgbm90aWZ5RXJyb3IgPSBlcnJvciA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgIF1cbiAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/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/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRhdGVGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkYXRlRm9ybWF0Jywge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudCh0eXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRlOiAnZGF0ZS1waWNrZXInLFxuICAgICAgICB0aW1lOiAndGltZS1waWNrZXInLFxuICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICB9W3R5cGVdXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRGF0ZSh2YWx1ZSkgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogdmFsdWVcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4vUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuLi9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciwgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYSwgcHJvY2Vzc0Zvcm1zLCBnZXROYW1lZFNjaGVtYXMsIGdldEJ1dHRvblNjaGVtYXMsXG4gIGhhc0Zvcm1TY2hlbWEsIGdldEZvcm1TY2hlbWFzLCBnZXRWaWV3U2NoZW1hLFxuICBoYXNMYWJlbHMsIGlzQ29tcGFjdCwgaXNJbmxpbmVkLFxuICBpc09iamVjdFNvdXJjZSwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc1N0cmluZywgaXNBcnJheSwgaXNOdW1iZXIsIGVxdWFscyxcbiAgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbUmVzb3VyY2VNaXhpbiwgU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgICByZXR1cm4gaXNMaXN0U291cmNlKHNjaGVtYSkgPyBbXSA6IG51bGxcbiAgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyYXBwZWRQcmltaXRpdmVzOiBudWxsLFxuICAgICAgdW53cmFwcGluZ1ByaW1pdGl2ZXM6IGZhbHNlLFxuICAgICAgaWdub3JlUm91dGVDaGFuZ2U6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgaXNPYmplY3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICBpc0xpc3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNMaXN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgaXNSZWFkeSgpIHtcbiAgICAgIC8vIExpc3RzIHRoYXQgaGF2ZSBubyBkYXRhIGFuZCBubyBhc3NvY2lhdGVkIHJlc291cmNlIHNob3VsZCBzdGlsbCByZW5kZXIsXG4gICAgICAvLyBhcyB0aGV5IG1heSBiZSBnZXR0aW5nIHRoZWlyIGRhdGEgZWxzZXdoZXJlLCBlLmcuIGBjb21wdXRlKClgLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzRGF0YSB8fCAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNJblZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdDb21wb25lbnRcbiAgICB9LFxuXG4gICAgd3JhcFByaW1pdGl2ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEud3JhcFByaW1pdGl2ZXNcbiAgICB9LFxuXG4gICAgbGlzdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnZhbHVlXG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgICAgLy8gQ29udmVydCB0byBsaXN0IGFycmF5LlxuICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBbZGF0YV0gOiBbXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGRhdGEgZ2V0cyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIHVud3JhcHBpbmcgaXMgbm90IGhhcHBlbmluZ1xuICAgICAgICAgIC8vIGF0IHRoZSByb290IGluIGBzZXREYXRhKClgLCBidXQgaGVyZSBpbnN0ZWFkLlxuICAgICAgICAgIGRhdGEgPSB0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpIHx8IGRhdGFcbiAgICAgICAgfVxuICAgICAgICBkYXRhIHx8PSBbXVxuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIGlmICh0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBkb25lIHVud3JhcHBpbmcgb25jZSBgbGlzdERhdGFgIGlzIHJlZXZhbHVhdGVkLCBzbyBzZXRcbiAgICAgICAgICAgIC8vIHRoaXMgdG8gYGZhbHNlYCBhZ2Fpbi4gU2VlIGB3cmFwcGVkUHJpbWl0aXZlc2Agd2F0Y2hlciBhYm92ZS5cbiAgICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEgdG8gYSBsaXN0IG9mIHdyYXBwZWQgcHJpbWl0aXZlcywgYW5kIHJldHVybiBpdC5cbiAgICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhLm1hcCh2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiB2YWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRQcmltaXRpdmVzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+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+XG4gIC5kaXRvLWxhYmVsLWNvbXBvbmVudFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBoZWlnaHQ6IDJlbVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsYWJlbCcsIHtcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1tYXJrdXAoXG4gIDppZD1cImRhdGFQYXRoXCJcbilcbiAgZWRpdG9yLW1lbnUtYmFyLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gICAgKVxuICAgICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCIsXG4gICAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICAgIClcbiAgICAgICAgICBpY29uKDpuYW1lPVwiaWNvblwiKVxuICBlZGl0b3ItY29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgcmVmPVwiZWRpdG9yXCJcbiAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gIC5kaXRvLXJlc2l6ZShcbiAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW1hcmt1cChcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gIClcbiAgICBlZGl0b3ItbWVudS1iYXIuZGl0by1tYXJrdXAtdG9vbGJhcig6ZWRpdG9yPVwiZWRpdG9yXCIpXG4gICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIixcbiAgICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGljb24oOm5hbWU9XCJpY29uXCIpXG4gICAgZWRpdG9yLWNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgICAgcmVmPVwiZWRpdG9yXCJcbiAgICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgICApXG4gICAgLmRpdG8tcmVzaXplKFxuICAgICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLW1hcmt1cFxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgICAuZGl0by1yZXNpemVcbiAgICAgIEBleHRlbmQgJWljb24tcmVzaXplXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHRvcDogdW5zZXRcbiAgICAgIGxlZnQ6IHVuc2V0XG4gICAgICByaWdodDogMFxuICAgICAgYm90dG9tOiAwXG4gICAgICB3aWR0aDogMWVtXG4gICAgICBoZWlnaHQ6IDFlbVxuXG4gICAgLlByb3NlTWlycm9yXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIG91dGxpbmU6IG5vbmVcblxuICAgIC5kaXRvLW1hcmt1cC1lZGl0b3JcbiAgICAgIG92ZXJmbG93LXk6IHNjcm9sbFxuICAgICAgLy8gTW92ZSBwYWRkaW5nIFwiaW5zaWRlXCIgZWRpdG9yIHRvIGNvcnJlY3RseSBwb3NpdGlvbiBzY3JvbGxiYXJcbiAgICAgIG1hcmdpbi1yaWdodDogLSRpbnB1dC1wYWRkaW5nLWhvclxuICAgICAgcGFkZGluZy1yaWdodDogJGlucHV0LXBhZGRpbmctaG9yXG5cbiAgICAuZGl0by1idXR0b25zLXRvb2xiYXJcbiAgICAgIG1hcmdpbjogJGlucHV0LXBhZGRpbmctdmVyIDBcblxuICAgIGgxLFxuICAgIGgyLFxuICAgIGgzLFxuICAgIHAsXG4gICAgdWwsXG4gICAgb2wsXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIG1hcmdpbjogMXJlbSAwXG4gICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi10b3A6IDBcbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDNcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgaDFcbiAgICAgIGZvbnQtc2l6ZTogMS40cmVtXG4gICAgaDJcbiAgICAgIGZvbnQtc2l6ZTogMS4ycmVtXG4gICAgdWxcbiAgICAgIGxpc3Qtc3R5bGU6IGRpc2NcbiAgICBjb2RlXG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9cbiAgICBwcmVcbiAgICAgIHBhZGRpbmc6IDAuN3JlbSAxcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlclxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgb3ZlcmZsb3cteDogYXV0b1xuICAgICAgY29kZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgIHAgY29kZVxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBwYWRkaW5nOiAwIDAuM3JlbVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyXG4gICAgYVxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIGN1cnNvcjogZGVmYXVsdFxuICAgICAgY29sb3I6IGJsdWVcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lXG4gICAgdWwsXG4gICAgb2xcbiAgICAgIHBhZGRpbmctbGVmdDogMnJlbVxuICAgIGxpXG4gICAgICAmID4gcCxcbiAgICAgICYgPiBvbCxcbiAgICAgICYgPiB1bFxuICAgICAgICBtYXJnaW46IDBcbiAgICBibG9ja3F1b3RlXG4gICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICRjb2xvci1saWdodGVyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDFyZW1cbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpY1xuICAgICAgcFxuICAgICAgICBtYXJnaW46IDBcblxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IEVkaXRvciwgRWRpdG9yQ29udGVudCwgRWRpdG9yTWVudUJhciwgTWFyayB9IGZyb20gJ3RpcHRhcCdcbmltcG9ydCB7IHRvZ2dsZU1hcmsgfSBmcm9tICd0aXB0YXAtY29tbWFuZHMnXG5pbXBvcnQge1xuICAvLyBNYXJrczpcbiAgQm9sZCwgQ29kZSwgSXRhbGljLCBMaW5rLCBTdHJpa2UsIFVuZGVybGluZSxcbiAgLy8gTm9kZXM6XG4gIEJsb2NrcXVvdGUsIENvZGVCbG9jaywgSGFyZEJyZWFrLCBIZWFkaW5nLCBIb3Jpem9udGFsUnVsZSxcbiAgT3JkZXJlZExpc3QsIEJ1bGxldExpc3QsIExpc3RJdGVtLFxuICAvLyBUT0RPOlxuICAvLyAtIEltYWdlLCBNZW50aW9uLCBDb2RlQmxvY2tIaWdobGlnaHRcbiAgLy8gLSBUYWJsZSwgVGFibGVDZWxsLCBUYWJsZUhlYWRlciwgVGFibGVOb2RlcywgVGFibGVSb3csXG4gIC8vIC0gVG9kb0l0ZW0sIFRvZG9MaXN0XG4gIC8vIFRvb2xzOlxuICBIaXN0b3J5XG59IGZyb20gJ3RpcHRhcC1leHRlbnNpb25zJ1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgdW5kZXJzY29yZSwgaHlwaGVuYXRlLCBkZWJvdW5jZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbWFya3VwJywge1xuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBFZGl0b3JNZW51QmFyLFxuICAgIEljb25cbiAgfSxcblxuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGNvbW1hbmQgPT4gdGhpcy5vbkNsaWNrTGluayhjb21tYW5kKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBiYXNpY05vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIHBhcmFncmFwaDoge1xuICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGUgcGFyYWdyYXBoIGNvbW1hbmQgYXMgYWN0aXZlIGlmIGFueSBvZiB0aGUgYmxvY2tcbiAgICAgICAgLy8gY29tbWFuZHMgYXJlIGFsc28gYWN0aXZlOlxuICAgICAgICAgIGlnbm9yZUFjdGl2ZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMub3RoZXJOb2RlQnV0dG9ucy5zb21lKGJ1dHRvbiA9PiBidXR0b24uaXNBY3RpdmUpXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRpbmc6IHtcbiAgICAgICAgICBhdHRyOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG90aGVyTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgfSA9IHRoaXNcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGdldFZhbHVlID0+IHtcbiAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgdGhpcy52YWx1ZSA9IGdldFZhbHVlKClcbiAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfSwgMTAwKVxuXG4gICAgY29uc3Qgb25VcGRhdGUgPSAoeyBnZXRIVE1MIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGdldEhUTUwpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmNyZWF0ZUV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhjb21tYW5kKSB7XG4gICAgICBjb25zdCBhdHRycyA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgaHJlZjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBudWxsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogdGhpcy5lZGl0b3IuZ2V0TWFya0F0dHJzKCdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cnMpIHtcbiAgICAgICAgbGV0IHsgaHJlZiwgdGl0bGUgfSA9IGF0dHJzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LCBwcmVmaXggaXQgd2l0aFxuICAgICAgICAgIC8vIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwOi8vJHtocmVmfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZCh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUV4dGVuc2lvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtzID0ge30sXG4gICAgICAgIG5vZGVzID0ge30sXG4gICAgICAgIHRvb2xzID0ge31cbiAgICAgIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy8gc2NoZW1hLm1hcmtzOlxuICAgICAgICBtYXJrcy5ib2xkICYmIG5ldyBCb2xkKCksXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBuZXcgSXRhbGljKCksXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBuZXcgVW5kZXJsaW5lKCksXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBuZXcgU3RyaWtlKCksXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIG5ldyBTbWFsbCgpLFxuICAgICAgICBtYXJrcy5jb2RlICYmIG5ldyBDb2RlKCksXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgbmV3IExpbmtXaXRoVGl0bGUoKSxcblxuICAgICAgICAvLyBzY2hlbWEubm9kZXM6XG4gICAgICAgIG5vZGVzLmJsb2NrcXVvdGUgJiYgbmV3IEJsb2NrcXVvdGUoKSxcbiAgICAgICAgbm9kZXMuY29kZUJsb2NrICYmIG5ldyBDb2RlQmxvY2soKSxcbiAgICAgICAgbmV3IEhhcmRCcmVhaygpLCAvLyBUT0RPOiBTaG91bGQgdGhpcyBhbHdheXMgb24/XG4gICAgICAgIG5vZGVzLmhlYWRpbmcgJiYgbmV3IEhlYWRpbmcoeyBsZXZlbHM6IG5vZGVzLmhlYWRpbmcgfSksXG4gICAgICAgIG5vZGVzLmhvcml6b250YWxSdWxlICYmIG5ldyBIb3Jpem9udGFsUnVsZSgpLFxuICAgICAgICAobm9kZXMub3JkZXJlZExpc3QgfHwgbm9kZXMuYnVsbGV0TGlzdCkgJiYgbmV3IExpc3RJdGVtKCksXG4gICAgICAgIG5vZGVzLmJ1bGxldExpc3QgJiYgbmV3IEJ1bGxldExpc3QoKSxcbiAgICAgICAgbm9kZXMub3JkZXJlZExpc3QgJiYgbmV3IE9yZGVyZWRMaXN0KCksXG4gICAgICAgIC8vIFRPRE86XG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIG5ldyBUb2RvSXRlbSgpLFxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBuZXcgVG9kb0xpc3QoKSxcblxuICAgICAgICAvLyBzY2hlbWEudG9vbHM6XG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgbmV3IEhpc3RvcnkoKVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgYXR0cnMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5lZGl0b3IuaXNBY3RpdmVbbmFtZV1cbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMuZWRpdG9yLmNvbW1hbmRzW25hbWVdXG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiAoXG4gICAgICAgICAgICBpc0FjdGl2ZT8uKGF0dHJzKSAmJlxuICAgICAgICAgICAgKGlnbm9yZUFjdGl2ZSA9PSBudWxsIHx8ICFpZ25vcmVBY3RpdmUoKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IG9uQ2xpY2tcbiAgICAgICAgICAgID8gb25DbGljayhjb21tYW5kLCBhdHRycylcbiAgICAgICAgICAgIDogY29tbWFuZChhdHRycylcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhrZXkpID8gJ2hpc3RvcnknIDoga2V5XG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IG5hbWUgPSB1bmRlcnNjb3JlKGtleSlcbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKGtleSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYXR0ciwgdmFsdWVzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IFthdHRyXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG5cbmNsYXNzIFNtYWxsIGV4dGVuZHMgTWFyayB7XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiAnc21hbGwnXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZURPTTogW1xuICAgICAgICB7IHRhZzogJ3NtYWxsJyB9XG4gICAgICBdLFxuICAgICAgdG9ET006ICgpID0+IFsnc21hbGwnLCAwXVxuICAgIH1cbiAgfVxuXG4gIGNvbW1hbmRzKHsgdHlwZSB9KSB7XG4gICAgcmV0dXJuICgpID0+IHRvZ2dsZU1hcmsodHlwZSlcbiAgfVxufVxuY2xhc3MgTGlua1dpdGhUaXRsZSBleHRlbmRzIExpbmsge1xuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBocmVmOiB7XG4gICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICBwYXJzZURPTTogW3tcbiAgICAgICAgdGFnOiAnYScsXG4gICAgICAgIGdldEF0dHJzOiBkb20gPT4gKHtcbiAgICAgICAgICBocmVmOiBkb20uZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgdGl0bGU6IGRvbS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgfSlcbiAgICAgIH1dLFxuICAgICAgdG9ET006IG5vZGUgPT4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1tdWx0aXNlbGVjdChcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgfWBcbilcbiAgdnVlLW11bHRpc2VsZWN0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpzaG93LWxhYmVscz1cImZhbHNlXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgIDpncm91cC1sYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpwcmVzZXJ2ZS1zZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tdWx0aXNlbGVjdChcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgICB9YFxuICApXG4gICAgdnVlLW11bHRpc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6c2hvdy1sYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgICB0YWctcGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiLFxuICAgICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgICA6dHJhY2stYnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgICA6Z3JvdXAtbGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgICA6aW50ZXJuYWwtc2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6cHJlc2VydmUtc2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsb3NlLW9uLXNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0Lm1pbi5jc3MnXG5cbiAgJHNwaW5uZXItd2lkdGg6ICRzZWxlY3QtYXJyb3ctd2lkdGhcbiAgJHRhZy1pY29uLXdpZHRoOiAxLjhlbVxuICAkdGFnLW1hcmdpbjogMnB4XG4gICR0YWctcGFkZGluZzogM3B4XG4gICR0YWctbGluZS1oZWlnaHQ6IDEuMWVtXG5cbiAgLmRpdG8tbXVsdGlzZWxlY3RcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5tdWx0aXNlbGVjdFxuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0XG4gICAgICBjb2xvcjogJGNvbG9yLWJsYWNrXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdFxuICAgICAgb3ZlcmZsb3c6IGF1dG9cbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIHBhZGRpbmc6IDAgJHNwaW5uZXItd2lkdGggMCAwXG4gICAgICAvLyBTbyB0YWdzIGNhbiBmbG9hdCBvbiBtdWx0aXBsZSBsaW5lcyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2luczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkdGFnLW1hcmdpblxuXG4gICAgLm11bHRpc2VsZWN0X190YWdcbiAgICAgIGZsb2F0OiBsZWZ0XG4gICAgICBtYXJnaW46ICR0YWctbWFyZ2luIDAgMCAkdGFnLW1hcmdpblxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBwYWRkaW5nOiAkdGFnLXBhZGRpbmcgJHRhZy1pY29uLXdpZHRoICR0YWctcGFkZGluZyAwLjhlbVxuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFncy13cmFwXG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbGluZS1oZWlnaHQ6IDBcblxuICAgIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXIsXG4gICAgLm11bHRpc2VsZWN0X19pbnB1dFxuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdFxuICAgICAgbWluLWhlaWdodDogMFxuICAgICAgbWFyZ2luOiAwIDAgMXB4IDBcbiAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgc3R5bGU9XCJwYWRkaW5nOiAuLi47XCIgaW4gYWRkaXRpb24gdG8gdXNpbmdcbiAgICAgIC8vIGNsYXNzZXMsIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZyAhaW1wb3J0YW50XG4gICAgICAvLyBTbyBpbnB1dCBjYW4gZmxvYXQgbmV4dCB0byB0YWdzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zIHdpdGhcbiAgICAgIC8vIC5tdWx0aXNlbGVjdF9fdGFnczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnRcbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcblxuICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXIsXG4gICAgLm11bHRpc2VsZWN0X19pbnB1dDo6cGxhY2Vob2xkZXJcbiAgICAgIGNvbG9yOiAkY29sb3ItcGxhY2Vob2xkZXJcblxuICAgIC5tdWx0aXNlbGVjdC0tYWN0aXZlXG4gICAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyXG4gICAgICAgIC8vIERvbid0IHVzZSBgZGlzcGxheTogbm9uZWAgdG8gaGlkZSBwbGFjZS1ob2xkZXIsIGFzIHRoZSBsYXlvdXQgd291bGRcbiAgICAgICAgLy8gY29sbGFwc2UuXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cblxuICAgIC5tdWx0aXNlbGVjdF9fc2VsZWN0LFxuICAgIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgICAgcGFkZGluZzogMFxuICAgICAgLy8gJGJvcmRlci13aWR0aCB0byBwcmV2ZW50IG1hc2tpbmcgYm9yZGVyIHdpdGggLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICB0b3A6ICRib3JkZXItd2lkdGhcbiAgICAgIHJpZ2h0OiAkYm9yZGVyLXdpZHRoXG4gICAgICBib3R0b206ICRib3JkZXItd2lkdGhcbiAgICAgIGhlaWdodDogaW5oZXJpdFxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcblxuICAgIC5tdWx0aXNlbGVjdF9fc2VsZWN0XG4gICAgICB3aWR0aDogMFxuICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKCRzZWxlY3QtYXJyb3ctd2lkdGggLyAyKVxuICAgICAgJjo6YmVmb3JlXG4gICAgICAgICthcnJvdygkc2VsZWN0LWFycm93LXNpemUpXG4gICAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b21cbiAgICAgICAgcmlnaHQ6IGNhbGMoLTEgKiAkc2VsZWN0LWFycm93LXNpemUgLyAyKVxuXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGhcbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIENoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICBib3JkZXItd2lkdGg6IDNweFxuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGluc2V0OiAwXG4gICAgICAgIG1hcmdpbjogYXV0b1xuXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb25cbiAgICAgIG1pbi1oZWlnaHQ6IHVuc2V0XG4gICAgICBoZWlnaHQ6IHVuc2V0XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIEluc3RydWN0aW9uIHRleHQgZm9yIG9wdGlvbnNcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICAmOjphZnRlclxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnRcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1kaXNhYmxlZFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWctaWNvblxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBmb250LXdlaWdodDogaW5oZXJpdFxuICAgICAgbGluZS1oZWlnaHQ6IDEuNGVtXG4gICAgICB3aWR0aDogJHRhZy1pY29uLXdpZHRoXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcbiAgICAgICAgZm9udC1zaXplOiAxLjNlbVxuICAgICAgJjpob3Zlcjo6YWZ0ZXJcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0tc2VsZWN0ZWRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dFxuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgJi5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZyxcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFncyxcbiAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LXNpbmdsZVxuICAgICAgLS1pbnB1dC13aWR0aDogMTAwJVxuICAgICYuZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZVxuICAgICAgLS1pbnB1dC13aWR0aDogYXV0b1xuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAgICAgLm11bHRpc2VsZWN0X19pbnB1dFxuICAgICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIGBzdHlsZT1cIndpZHRoXCJgIGluIGFkZGl0aW9uIHRvIHVzaW5nIGNsYXNzZXNcbiAgICAgICAgLy8gc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgICAgd2lkdGg6IHZhcigtLWlucHV0LXdpZHRoKSAhaW1wb3J0YW50XG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgIG1hcmdpbjogLTFweCAwIDBcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgICAmLm11bHRpc2VsZWN0LS1hYm92ZVxuICAgICAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMFxuICAgICAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGJvcmRlci1jb2xvclxuICAgICAgICAgIG1hcmdpbjogMCAwIC0xcHhcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgJi5kaXRvLWhhcy1lcnJvcnNcbiAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1lcnJvclxuXG4gICAgLmRpdG8tYnV0dG9uLWNsZWFyXG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGhcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuaW1wb3J0IFZ1ZU11bHRpc2VsZWN0IGZyb20gJ3Z1ZS1tdWx0aXNlbGVjdCdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgJ3Z1ZS1tdWx0aXNlbGVjdC9kaXN0L3Z1ZS1tdWx0aXNlbGVjdC5taW4uY3NzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbXVsdGlzZWxlY3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlTXVsdGlzZWxlY3QgfSxcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hlZE9wdGlvbnM6IG51bGwsXG4gICAgICBwb3B1bGF0ZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/ICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAvLyBJZiBhbiBvcHRpb24gY2Fubm90IGJlIGZvdW5kLCB3ZSBtYXkgYmUgaW4gdGFnZ2FibGUgbW9kZSBhbmRcbiAgICAgICAgICAgICAgLy8gY2FuIGFkZCBpdC5cbiAgICAgICAgICAgICAgdmFsdWUgPT4gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkgfHwgdGhpcy5hZGRUYWdPcHRpb24odmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IG9wdGlvbnMgdGhhdCB3ZSBjb3VsZG4ndCBtYXRjaC5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIHJlYWxseSBzaG91bGQgZGlzcGxheSBhbiBlcnJvciBpbnN0ZWFkXG4gICAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgICAgIDogdGhpcy5zZWxlY3RlZE9wdGlvblxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIG9wdGlvbnMgb2JqZWN0LCBzaW5jZSB2dWUtbXVsdGlzZWxlY3QgY2FuJ3QgbWFwIHRoYXRcbiAgICAgICAgLy8gaXRzZWxmIHVuZm9ydHVuYXRlbHkuIGB0cmFjay1ieWAgaXMgdXNlZCBmb3IgOmtleSBtYXBwaW5nIGl0IHNlZW1zLlxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAob3B0aW9uIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSkpXG4gICAgICAgICAgOiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVkT3B0aW9ucyB8fCB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc2VhcmNoYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHRhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndGFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHN0YXlPcGVuOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RheU9wZW4nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyKCkge1xuICAgICAgY29uc3QgeyBwbGFjZWhvbGRlciwgc2VhcmNoYWJsZSwgdGFnZ2FibGUgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXIgfHwgKFxuICAgICAgICBzZWFyY2hhYmxlICYmIHRhZ2dhYmxlID8gJ1NlYXJjaCBvciBhZGQgYSB0YWcnXG4gICAgICAgIDogc2VhcmNoYWJsZSA/ICdTZWxlY3Qgb3Igc2VhcmNoIGVudHJ5J1xuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLmF1dG9mb2N1cykge1xuICAgICAgLy8gdnVlLW11bHRpc2VsZWN0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYXV0b2ZvY3VzIGF0dHJpYnV0ZS4gV2UgbmVlZCB0b1xuICAgICAgLy8gaGFuZGxlIGl0IGhlcmUuXG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEBvdmVycmlkZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIC8vIG92ZXJyaWRlIGBUeXBlTWl4aW4uZ2V0TGlzdGVuZXJzKClgIHRvIHJlLXJvdXRlICdpbnB1dCcgdG8gYG9uQ2hhbmdlKClgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgaW5wdXQ6IHRoaXMub25DaGFuZ2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWRkVGFnT3B0aW9uKHRhZykge1xuICAgICAgaWYgKHRoaXMudGFnZ2FibGUpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCwgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gb3B0aW9uTGFiZWwgJiYgb3B0aW9uVmFsdWVcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIFtvcHRpb25MYWJlbF06IHRhZyxcbiAgICAgICAgICAgIC8vIFRPRE86IERlZmluZSBhIHNpbXBsZSBzY2hlbWEgb3B0aW9uIHRvIGNvbnZlcnQgdGhlIHRhZyB2YWx1ZSB0b1xuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGVsc2UsIGUuZy4gYHRvVGFnOiB0YWcgPT4gdW5kZXJzY29yZSh0YWcpYFxuICAgICAgICAgICAgW29wdGlvblZhbHVlXTogdGFnXG4gICAgICAgICAgfVxuICAgICAgICAgIDogdGFnXG4gICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuYWN0aXZhdGUoKVxuICAgIH0sXG5cbiAgICBvbkFkZFRhZyh0YWcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuYWRkVGFnT3B0aW9uKHRhZylcbiAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25TZWFyY2hDaGFuZ2UocXVlcnkpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZpbHRlcikge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAvLyBTZXQgYHNlYXJjaGVkT3B0aW9uc2AgdG8gYW4gZW1wdHkgYXJyYXksIGJlZm9yZSBpdCB3aWxsIGJlXG4gICAgICAgICAgLy8gcG9wdWxhdGVkIGFzeW5jaHJvbm91c2x5IHdpdGggdGhlIGFjdHVhbCByZXN1bHRzLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gW11cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IGF3YWl0IHRoaXMucmVzb2x2ZURhdGEoXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnNlYXJjaEZpbHRlcihuZXcgRGl0b0NvbnRleHQodGhpcywgeyBxdWVyeSB9KSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ2xlYXIgYHNlYXJjaGVkT3B0aW9uc2Agd2hlbiB0aGUgcXVlcnkgaXMgY2xlYXJlZC5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgIT09IG51bGwgPyB0aGlzLnZhbHVlIDogJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUgIT09ICcnXG4gICAgICAgICAgPyB0aGlzLmlzSW50ZWdlciA/IHBhcnNlSW50KHZhbHVlLCAxMCkgOiBwYXJzZUZsb2F0KHZhbHVlKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc3RlcFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RlcCA9PSBudWxsICYmICF0aGlzLmlzSW50ZWdlciA/ICdhbnknIDogdGhpcy5zdGVwXG4gICAgfSxcblxuICAgIGRlY2ltYWxzOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVjaW1hbHMnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHN0ZXA6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGVwJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KHN0ZXApIHtcbiAgICAgICAgLy8gRm9yIGludGVnZXJzLCByb3VuZCB0aGUgc3RlcHMgdG8gdGhlIG5leHQgYmlnZ2VyIGludGVnZXIgdmFsdWU6XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBzdGVwICE9IG51bGwgPyBNYXRoLmNlaWwoc3RlcCkgOiBzdGVwXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtaW46IGdldFNjaGVtYUFjY2Vzc29yKCdtaW4nLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWluKSB7XG4gICAgICAgIG1pbiA9IG1pbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlswXVxuICAgICAgICAgIDogbWluXG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtaW4gIT0gbnVsbCA/IE1hdGguZmxvb3IobWluKSA6IG1pblxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4OiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4Jywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1heCkge1xuICAgICAgICBtYXggPSBtYXggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMV1cbiAgICAgICAgICA6IG1heFxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWF4ICE9IG51bGwgPyBNYXRoLmNlaWwobWF4KSA6IG1heFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgcmFuZ2U6IGdldFNjaGVtYUFjY2Vzc29yKCdyYW5nZScsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBgdGhpcy5taW5gLCBgdGhpcy5tYXhgIGFscmVhZHkgc3VwcG9ydCBgc2NoZW1hLnJhbmdlYCxcbiAgICAgICAgLy8gc28gcmVkaXJlY3QgdGhlcmUuXG4gICAgICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIG1pbiAhPSBudWxsICYmIG1heCAhPSBudWxsID8gW21pbiwgbWF4XSA6IHVuZGVmaW5lZFxuICAgICAgfSxcblxuICAgICAgc2V0KHJhbmdlKSB7XG4gICAgICAgIC8vIFByb3ZpZGUgYSBzZXR0ZXIgdGhhdCBkZWxlZ2F0ZXMgdG8gYFt0aGlzLm1pbiwgdGhpcy5tYXhdYCxcbiAgICAgICAgLy8gc2luY2UgdGhvc2UgYWxyZWFkeSBoYW5kbGUgYHNjaGVtYS5yYW5nZWAuXG4gICAgICAgIGlmIChpc0FycmF5KHJhbmdlKSkge1xuICAgICAgICAgIFt0aGlzLm1pbiwgdGhpcy5tYXhdID0gcmFuZ2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7fVxuICAgICAgY29uc3QgeyByYW5nZSwgbWluLCBtYXgsIGRlY2ltYWxzLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmFuZ2UgPSByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1pbiAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWluID0gbWluXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWF4ID0gbWF4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkZWNpbWFscyAhPSBudWxsKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCkge1xuICAgICAgICBjb25zdCBkZWNpbWFscyA9IChgJHtzdGVwfWAuc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoXG4gICAgICAgIGlmIChkZWNpbWFscyA+IDApIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNJbnRlZ2VyKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9XG4gIH1cbn1cbiIsIlxuaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHR5cGU9XCJudW1iZXJcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOm1pbj1cIm1pblwiXG4gIDptYXg9XCJtYXhcIlxuICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC8vIE9ubHkgc2hvdyBzcGluIGJ1dHRvbnMgaWYgdGhlIG51bWJlciBjb21wb25lbnQgZGVmaW5lcyBhIHN0ZXAgc2l6ZS5cbiAgaW5wdXRbdHlwZT1cIm51bWJlclwiXTpub3QoW3N0ZXBdKVxuICAgICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICAgJjo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvblxuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lXG4gICAgICBtYXJnaW46IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ251bWJlcicsICdpbnRlZ2VyJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW50ZWdlcidcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tb2JqZWN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbilcbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQoXG4gICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICApXG4gICAgLy8gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICApXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICApXG4gIGRpdG8tZWRpdC1idXR0b25zKFxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgOmVkaXRhYmxlPVwib2JqZWN0RGF0YSAmJiBlZGl0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgIDpwYXRoPVwicGF0aFwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1vYmplY3QoXG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICAgIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4gIClcbiAgICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgICApXG4gICAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICApXG4gICAgICBjb21wb25lbnQoXG4gICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgICApXG4gICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6cGF0aD1cInBhdGhcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tb2JqZWN0XG4gICAgZGlzcGxheTogZmxleFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgbWFyZ2luOiAwXG4gICAgcGFkZGluZzogJGZvcm0tc3BhY2luZ1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAuZGl0by1vYmplY3QtY29udGVudFxuICAgICAgZmxleDogMCAxIDEwMCVcbiAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgIGZsZXg6IDEgMCAwJVxuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBkYXRhOiB0aGlzLm9iamVjdERhdGEgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncGFuZWwnLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0UGFkZGluZzogdHJ1ZSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICAgIDptYXg9XCJwcm9ncmVzc01heFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiByYW5nZVsxXSAtIHJhbmdlWzBdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuICApXG4gICAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgICAgbGFiZWxcbiAgICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcmFkaW8tYnV0dG9uc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tcmFkaW8tYnV0dG9uXG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncmFkaW8nLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc2VjdGlvbihcbiAgOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLWxhYmVsbGVkJyA6ICEhc2NoZW1hLmxhYmVsIH1cIlxuKVxuICBkaXRvLXBhbmUuZGl0by1zZWN0aW9uLXBhbmUoXG4gICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIml0ZW1cIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2VjdGlvbihcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tbGFiZWxsZWQnIDogISFzY2hlbWEubGFiZWwgfVwiXG4gIClcbiAgICBkaXRvLXBhbmUuZGl0by1zZWN0aW9uLXBhbmUoXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2VjdGlvblxuICAgICYuZGl0by1zZWN0aW9uLWxhYmVsbGVkXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlY3Rpb24nLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhc2NoZW1hLm5lc3RlZCAmJiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuICBkZWZhdWx0TmVzdGVkOiBmYWxzZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRGbGV4R3JvdzogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5kYXRhXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgICAvLyBQcm9jZXNzIHNlY3Rpb24gY29tcG9uZW50cyBzbyB0aGVpciBmb3JtcyBnZXQgcmVzb2x2ZWQgdG9vLlxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbi5kaXRvLXNlbGVjdFxuICBzZWxlY3QoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgIClcbiAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgIG9wdGlvbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgKVxuICAgICAgb3B0aW9uKFxuICAgICAgICA6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24oc2VsZWN0ZWRPcHRpb24pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbiAgLmRpdG8tc2VsZWN0XG4gICAgc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgICApXG4gICAgICAgIG9wdGlvbihcbiAgICAgICAgICA6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiAgJHNlbGVjdC1hcnJvdy1yaWdodDogY2FsYygoJHNlbGVjdC1hcnJvdy13aWR0aCAtICRzZWxlY3QtYXJyb3ctc2l6ZSkgLyAyKVxuXG4gIC5kaXRvLXNlbGVjdFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgc2VsZWN0XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoXG5cbiAgICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgc2VsZWN0XG4gICAgICAgIHdpZHRoOiAxMDAlXG5cbiAgICAmOjphZnRlclxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICArYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKVxuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgcmlnaHQ6IGNhbGMoI3skc2VsZWN0LWFycm93LXJpZ2h0fSArICN7JGJvcmRlci13aWR0aH0pXG5cbiAgICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyXG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cInJhbmdlXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2xpZGVyXG4gICAgaW5wdXQuZGl0by1yYW5nZShcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbiAgICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zbGlkZXJcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1yYW5nZVxuICAgICAgZmxleDogYXV0b1xuICAgICAgaGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlcbiAgICAuZGl0by1udW1iZXJcbiAgICAgIGJvcmRlcjogMFxuICAgICAgcGFkZGluZzogMFxuICAgICAgdGV4dC1hbGlnbjogcmlnaHRcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NsaWRlcicsIHtcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnN3aXRjaC1idXR0b24uZGl0by1zd2l0Y2goXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzeW5jPVwidHJ1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBzd2l0Y2gtYnV0dG9uLmRpdG8tc3dpdGNoKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6c3luYz1cInRydWVcIlxuICAgIDpsYWJlbHM9XCJsYWJlbHNcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zd2l0Y2hcbiAgICAuZGl0by1zd2l0Y2gtbGFiZWxcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBTd2l0Y2hCdXR0b24gfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc3dpdGNoJywge1xuICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgU3dpdGNoQnV0dG9uXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGFiZWxzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmlucHV0LWZpZWxkLmRpdG8tdGV4dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnR5cGU9XCJpbnB1dFR5cGVcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGlucHV0LWZpZWxkLmRpdG8tdGV4dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnR5cGU9XCJpbnB1dFR5cGVcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuY29uc3QgbWFza2VkUGFzc3dvcmQgPSAnKioqKioqKioqKioqKioqKidcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICd0ZXh0JywgJ2VtYWlsJywgJ3VybCcsICdob3N0bmFtZScsICdkb21haW4nLCAndGVsJywgJ3Bhc3N3b3JkJywgJ2NyZWRpdGNhcmQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+IHNjaGVtYS50eXBlID09PSAncGFzc3dvcmQnLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRUeXBlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3JlZGl0Y2FyZDogJ3RleHQnLFxuICAgICAgICBob3N0bmFtZTogJ3RleHQnLFxuICAgICAgICBkb21haW46ICd0ZXh0J1xuICAgICAgfVt0aGlzLnR5cGVdIHx8IHRoaXMudHlwZVxuICAgIH0sXG5cbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmXG4gICAgICAgICAgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgIXRoaXMuZm9jdXNlZFxuICAgICAgICApXG4gICAgICAgICAgPyBtYXNrZWRQYXNzd29yZFxuICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICBlbWFpbDogJ2VtYWlsJyxcbiAgICAgICAgdXJsOiAndXJsJyxcbiAgICAgICAgaG9zdG5hbWU6ICdob3N0bmFtZScsXG4gICAgICAgIGRvbWFpbjogJ2RvbWFpbicsXG4gICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQnLFxuICAgICAgICBjcmVkaXRjYXJkOiAnY3JlZGl0Y2FyZCdcbiAgICAgIH1bdGhpcy50eXBlXVxuICAgICAgcmV0dXJuIHJ1bGUgPyB7IFtydWxlXTogdHJ1ZSB9IDoge31cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDpyb3dzPVwibGluZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6cm93cz1cImxpbmVzXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXRleHRhcmVhXG4gICAgZGlzcGxheTogYmxvY2tcbiAgICByZXNpemU6IG5vbmVcbiAgICBtaW4taGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSArICN7IDIgKiAkaW5wdXQtcGFkZGluZy12ZXIgfSlcbiAgICAmLmRpdG8tcmVzaXphYmxlXG4gICAgICByZXNpemU6IHZlcnRpY2FsXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd0ZXh0YXJlYScsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDRcbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by10cmVlLWxpc3RcbiAgZGl0by1zY29wZXMoXG4gICAgdi1pZj1cInNjb3Blc1wiXG4gICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICApXG4gIC5kaXRvLXRyZWUtcGFuZWxcbiAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInRyZWVEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOm9wZW49XCJ0cnVlXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNFZGl0YWJsZUZvcm1zXCJcbiAgICApXG4gICAgICAvLyBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgIHJvdXRlci12aWV3XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by10cmVlLWxpc3RcbiAgICBkaXRvLXNjb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtcGFuZWxcbiAgICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cInRyZWVEYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgOm9wZW49XCJ0cnVlXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICAgIHYtaWY9XCJoYXNFZGl0YWJsZUZvcm1zXCJcbiAgICAgIClcbiAgICAgICAgLy8gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICAgIHJvdXRlci12aWV3XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdHJlZS1saXN0XG4gICAgQGV4dGVuZCAlZmllbGRcbiAgICAuZGl0by10cmVlLXBhbmVsXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAgID4gLmRpdG8tdHJlZS1pdGVtXG4gICAgICAgIGZsZXg6IDEgMSAyNSVcbiAgICAgID4gLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lclxuICAgICAgICBmbGV4OiAwIDEgNzUlXG4gICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2hcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZVxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgbWFyZ2luOiAoLSRpbnB1dC1wYWRkaW5nLXZlcikgKC0kaW5wdXQtcGFkZGluZy1ob3IpXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAkaW5wdXQtcGFkZGluZy1ob3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGhhc0Zvcm1TY2hlbWEsIGdldEZvcm1TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ3RyZWUtbGlzdCcsICd0cmVlLW9iamVjdCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4geyBjb250YWluZXI6IHRoaXMgfVxuICB9LFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIHJldHVybiB0eXBlID09PSAndHJlZS1vYmplY3QnID8gJ29iamVjdCcgOiAnbGlzdCdcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIucGF0aGA6XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXRoXG4gICAgfSxcblxuICAgIGVkaXRQYXRoKCkge1xuICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLmVkaXRQYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXRoLnNsaWNlKHRoaXMucGF0aD8ubGVuZ3RoKVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHsgW3RoaXMubmFtZV06IHRoaXMudmFsdWUgfVxuICAgICAgICA6IHRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgdHJlZURhdGFQYXRoKCkge1xuICAgICAgLy8gUmVtb3ZlIGBuYW1lYCBmcm9tIGBkYXRhUGF0aGAsIGFzIGl0IGlzIGFkZGVlZFxuICAgICAgLy8gdG8gYHRyZWVEYXRhYCBhbmQgYHRyZWVTY2hlbWFgXG4gICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgPyB0aGlzLmRhdGFQYXRoLnNsaWNlKDAsIHRoaXMuZGF0YVBhdGgubGVuZ3RoIC0gdGhpcy5uYW1lLmxlbmd0aClcbiAgICAgICAgOiB0aGlzLmRhdGFQYXRoXG4gICAgfSxcblxuICAgIHRyZWVTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgPyB7XG4gICAgICAgICAgY2hpbGRyZW46IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIC4uLnRoaXMuc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIDogdGhpcy5zY2hlbWFcbiAgICB9LFxuXG4gICAgaGFzRWRpdGFibGVGb3JtcygpIHtcbiAgICAgIGNvbnN0IGhhc0VkaXRhYmxlRm9ybXMgPSBzY2hlbWEgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAoXG4gICAgICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdlZGl0YWJsZScsIHtcbiAgICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgIHNjaGVtYVxuICAgICAgICAgICAgfSkgfHxcbiAgICAgICAgICAgIHNjaGVtYS5jaGlsZHJlbiAmJlxuICAgICAgICAgICAgaGFzRWRpdGFibGVGb3JtcyhzY2hlbWEuY2hpbGRyZW4pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzRWRpdGFibGVGb3Jtcyh0aGlzLnNjaGVtYSlcbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCxcbiAgICBuZXN0ZWQgPSB0cnVlLCBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCxcbiAgICAgIG5lc3RlZCwgZmxhdHRlbixcbiAgICAgIC8vIFBhc3MgcHJvY2VzcygpIHRvIGFkZCBtb3JlIHJvdXRlcyB0byBjaGlsZFJvdXRlczpcbiAgICAgIChjaGlsZFJvdXRlcywgbGV2ZWwpID0+IHtcbiAgICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgIC8vIEFkZCBgdHlwZWAgdG8gdGhlIG5lc3RlZCB0cmVlIGxpc3QuXG4gICAgICAgICAgY2hpbGRyZW4udHlwZSA9ICd0cmVlLWxpc3QnXG4gICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICAgIGFwaSwgY2hpbGRyZW4sIGNoaWxkcmVuLm5hbWUsIGNoaWxkUm91dGVzLCBsZXZlbCxcbiAgICAgICAgICAgIG5lc3RlZCwgdHJ1ZSwgLy8gUGFzcyBgdHJ1ZWAgZm9yIGBmbGF0dGVuYCBpbiB0cmVlIGxpc3RzLlxuICAgICAgICAgICAgcHJvY2Vzc1xuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgfSxcblxuICBnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3Npbmcoc2NoZW1hLCBjb250ZXh0KSB7XG4gICAgLy8gQ29udmVydCBuZXN0ZWQgY2hpbGRyZW4gc2NoZW1hIHRvIHN0YW5kLWFsb25lIHNjaGVtYSBjb21wb25lbnQsXG4gICAgLy8gcHJlc2VudCBpbiBlYWNoIG9mIHRoZSBmb3JtcywgYXMgcmVxdWlyZWQgYnkgYHByb2Nlc3NTY2hlbWFEYXRhKClgXG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCwgY2hpbGRyZW5cbiAgICAgID8gZm9ybSA9PiAoe1xuICAgICAgICAuLi5mb3JtLFxuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgLi4uZm9ybS5jb21wb25lbnRzLFxuICAgICAgICAgIFtjaGlsZHJlbi5uYW1lXTogY2hpbGRyZW5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIDogbnVsbFxuICAgIClcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgZmlsZXNpemUgfSBmcm9tICdmaWxlc2l6ZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKHNpemUpIHtcbiAgcmV0dXJuIGZpbGVzaXplKHNpemUsIHsgYmFzZTogMTAgfSlcbn1cbiIsIlxuLmRpdG8tdXBsb2FkXG4gIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gRGl0b1RhYmxlSGVhZFxuICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgdHJcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIE5hbWVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICB0aFxuICAgICAgICAgIHNwYW5cbiAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICA6bGlzdD1cImZpbGVzXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgKVxuICAgICAgICB0ZCh2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiKVxuICAgICAgICB0ZCB7eyBmaWxlLnNpemUgfCBmb3JtYXRGaWxlU2l6ZSB9fVxuICAgICAgICB0ZFxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZFwiKVxuICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCIpXG4gICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIilcbiAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIilcbiAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgIHwgU3RvcmVkXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnNcbiAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICApXG4gICAgdGZvb3RcbiAgICAgIHRyXG4gICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgKSBDYW5jZWwgQWxsXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJpc1VwbG9hZFJlYWR5XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSB0cnVlXCJcbiAgICAgICAgICAgICAgKSBVcGxvYWQgQWxsXG4gICAgICAgICAgICAgIHZ1ZS11cGxvYWQuZGl0by1idXR0b24uZGl0by1idXR0b24tYWRkLXVwbG9hZChcbiAgICAgICAgICAgICAgICA6aW5wdXQtaWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIDpwb3N0LWFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgICAgICAgICAgICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgICAgICAgICAgICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgICAgICAgICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgICAgICAgICAgICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgICAgICAgICAgICAgIEBpbnB1dC1maWx0ZXI9XCJpbnB1dEZpbHRlclwiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbGU9XCJpbnB1dEZpbGVcIlxuICAgICAgICAgICAgICAgIHJlZj1cInVwbG9hZFwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJVcGxvYWQgRmlsZXNcIlxuICAgICAgICAgICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by11cGxvYWRcbiAgICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gRGl0b1RhYmxlSGVhZFxuICAgICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICAgIHRyXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBTdGF0dXNcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhblxuICAgICAgdnVlLWRyYWdnYWJsZShcbiAgICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgICAgOmxpc3Q9XCJmaWxlc1wiXG4gICAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgICApXG4gICAgICAgIHRyKFxuICAgICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgICAgOmtleT1cImZpbGUua2V5XCJcbiAgICAgICAgKVxuICAgICAgICAgIHRkKHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCIpXG4gICAgICAgICAgdGQge3sgZmlsZS5zaXplIHwgZm9ybWF0RmlsZVNpemUgfX1cbiAgICAgICAgICB0ZFxuICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkXCIpXG4gICAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiKVxuICAgICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkaW5nLi4uXG4gICAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIilcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgICAgIHwgU3RvcmVkXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgIHRmb290XG4gICAgICAgIHRyXG4gICAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJpc1VwbG9hZFJlYWR5XCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgKSBVcGxvYWQgQWxsXG4gICAgICAgICAgICAgICAgdnVlLXVwbG9hZC5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkKFxuICAgICAgICAgICAgICAgICAgOmlucHV0LWlkPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICA6cG9zdC1hY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgICBAaW5wdXQtZmlsdGVyPVwiaW5wdXRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgQGlucHV0LWZpbGU9XCJpbnB1dEZpbGVcIlxuICAgICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiVXBsb2FkIEZpbGVzXCJcbiAgICAgICAgICAgICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdXBsb2FkXG4gICAgLmRpdG8tdGFibGVcbiAgICAgIHRyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGVcbiAgICAuZGl0by1idXR0b24tYWRkLXVwbG9hZFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAqXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyXG4gICAgICAuZGl0by1wcm9ncmVzc1xuICAgICAgICBmbGV4OiBhdXRvXG4gICAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgcGFyc2VGaWxlU2l6ZSBmcm9tICdmaWxlc2l6ZS1wYXJzZXInXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZm9ybWF0RmlsZVNpemUgfSBmcm9tICcuLi91dGlscy91bml0cy5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZVVwbG9hZCwgVnVlRHJhZ2dhYmxlIH0sXG4gIGZpbHRlcnM6IHsgZm9ybWF0RmlsZVNpemUgfSxcbiAgbWl4aW5zOiBbT3JkZXJlZE1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHVwbG9hZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLnVwbG9hZFxuICAgIH0sXG5cbiAgICBmaWxlcygpIHtcbiAgICAgIHJldHVybiBhc0ZpbGVzKHRoaXMudmFsdWUpXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBObyBjYWxsYmFjayBhcyBpdCdzIHVzZWQgaW4gYHByb2Nlc3NWYWx1ZSgpYFxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBleHRlbnNpb25zOiBnZXRTY2hlbWFBY2Nlc3NvcignZXh0ZW5zaW9ucycsIHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBSZWdFeHBdXG4gICAgfSksXG5cbiAgICBhY2NlcHQ6IGdldFNjaGVtYUFjY2Vzc29yKCdhY2NlcHQnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldChhY2NlcHQpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkoYWNjZXB0KSA/IGFjY2VwdC5qb2luKCcsJykgOiBhY2NlcHRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhTaXplJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGdldChtYXhTaXplKSB7XG4gICAgICAgIHJldHVybiBtYXhTaXplID8gcGFyc2VGaWxlU2l6ZShtYXhTaXplKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gZHJhZ2dhYmxlICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBpc1VwbG9hZFJlYWR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiZcbiAgICAgICAgISh0aGlzLnVwbG9hZC5hY3RpdmUgfHwgdGhpcy51cGxvYWQudXBsb2FkZWQpXG4gICAgfSxcblxuICAgIGlzVXBsb2FkQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgZmlsZS5wcm9ncmVzcywgMCkgL1xuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoXG4gICAgICApXG4gICAgfSxcblxuICAgIHVwbG9hZFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybCh7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyByZW5kZXIgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgdmFsdWU6IGZpbGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmZpbGVzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwoZmlsZS5uYW1lKVxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKGZpbGUgJiYgd2luZG93LmNvbmZpcm0oXG4gICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZS51cGxvYWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5yZW1vdmUoZmlsZS51cGxvYWQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogYCR7bmFtZX0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZpbGVJbmRleChmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlXG4gICAgICAgID8gdGhpcy52YWx1ZS5maW5kSW5kZXgoaXQgPT4gaXQuaWQgPT09IGZpbGUuaWQpXG4gICAgICAgIDogLTFcbiAgICB9LFxuXG4gICAgYWRkRmlsZShmaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbZmlsZV1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwbGFjZUZpbGUoZmlsZSwgbmV3RmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZpbGVJbmRleChmaWxlKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGlmIChuZXdGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLiRzZXQodGhpcy52YWx1ZSwgaW5kZXgsIG5ld0ZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIGlucHV0RmlsZShuZXdGaWxlLCBvbGRGaWxlKSB7XG4gICAgICBpZiAobmV3RmlsZSAmJiAhb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IGlkLCBuYW1lLCBzaXplIH0gPSBuZXdGaWxlXG4gICAgICAgIHRoaXMuYWRkRmlsZSh7IGlkLCBuYW1lLCBzaXplLCB1cGxvYWQ6IG5ld0ZpbGUgfSlcbiAgICAgIH1cbiAgICAgIGlmIChuZXdGaWxlICYmIG9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gbmV3RmlsZVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlLnJlc3BvbnNlWzBdXG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUudXBsb2FkID0gbmV3RmlsZVxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXBsb2FkIGZpbGUgb2JqZWN0IHdpdGggdGhlIGZpbGUgb2JqZWN0IHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSB1cGxvYWQgcmVzcG9uc2UuXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VGaWxlKG5ld0ZpbGUsIGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSB7XG4gICAgICAgICAgICBhYm9ydDogJ1VwbG9hZCBhYm9ydGVkJyxcbiAgICAgICAgICAgIGRlbmllZDogJ1VwbG9hZCBkZW5pZWQnLFxuICAgICAgICAgICAgZXh0ZW5zaW9uOiBgVW5zdXBwb3J0ZWQgZmlsZS10eXBlOiAke25ld0ZpbGUubmFtZX1gLFxuICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmsgZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzZXJ2ZXI6ICdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICBzaXplOiBgRmlsZSBpcyB0b28gbGFyZ2U6ICR7Zm9ybWF0RmlsZVNpemUobmV3RmlsZS5zaXplKX1gLFxuICAgICAgICAgICAgdGltZW91dDogJ1RpbWVvdXQgb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCdcblxuICAgICAgICAgIH1bZXJyb3JdIHx8IGBVbmtub3duIEZpbGUgVXBsb2FkIEVycm9yOiAnJHtlcnJvcn0nYFxuICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0ZpbGUgVXBsb2FkIEVycm9yJyxcbiAgICAgICAgICAgIHRleHRcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGlucHV0RmlsdGVyKG5ld0ZpbGUvKiwgb2xkRmlsZSwgcHJldmVudCAqLykge1xuICAgICAgY29uc3QgeGhyID0gbmV3RmlsZT8ueGhyXG4gICAgICBpZiAodGhpcy5hcGkuY29ycz8uY3JlZGVudGlhbHMgJiYgeGhyICYmICF4aHIud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoXG4gICAgICAgICh7IHVwbG9hZCwgLi4uZmlsZSB9KSA9PiAhdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlKVxuICAgIHJldHVybiBzY2hlbWEubXVsdGlwbGUgPyBmaWxlcyA6IGZpbGVzWzBdIHx8IG51bGxcbiAgfVxufSlcblxuZnVuY3Rpb24gYXNGaWxlcyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBhc0FycmF5KHZhbHVlKSA6IFtdXG59XG5cbjwvc2NyaXB0PlxuIiwiY29uc3QgbG9nZ2VkRGVwcmVjYXRpb25zID0gbmV3IFNldCgpXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXByZWNhdGUobWVzc2FnZSkge1xuICAvLyBPbmx5IGxvZyBkZXByZWNhdGlvbiBtZXNzYWdlcyBvbmNlLlxuICBpZiAoIWxvZ2dlZERlcHJlY2F0aW9ucy5oYXMobWVzc2FnZSkpIHtcbiAgICBsb2dnZWREZXByZWNhdGlvbnMuYWRkKG1lc3NhZ2UpXG4gICAgY29uc29sZS53YXJuKG1lc3NhZ2UpXG4gIH1cbn1cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnc3VibWl0JywgJ3N1Ym1pdHRlZCcsXG4gICdkZWxldGUnLCAnZGVsZXRlZCcsXG4gICdlZGl0JywgJ2VkaXRlZCcsXG4gICdjbG9zZScsICdjbG9zZWQnLFxuICAnY2FuY2VsJywgJ2NhbmNlbGxlZCcsXG4gICdkcmFnJywgJ2RyYWdnZWQnXG5dLnJlZHVjZSgodmVyYnMsIHZlcmIpID0+IHtcbiAgdmVyYnNbdmVyYl0gPSB2ZXJiXG4gIHJldHVybiB2ZXJic1xufSwge30pXG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVNb2RhbCBmcm9tICd2dWUtanMtbW9kYWwnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5pbXBvcnQgVnVlTm90aWZpY2F0aW9ucyBmcm9tICd2dWUtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsIGlzQWJzb2x1dGVVcmwsIG1lcmdlLCBoeXBoZW5hdGUsIGNhbWVsaXplLCBkZWZhdWx0Rm9ybWF0c1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBkZXByZWNhdGUgfSBmcm9tICcuL3V0aWxzL2RlcHJlY2F0ZS5qcydcbmltcG9ydCB2ZXJicyBmcm9tICcuL3ZlcmJzLmpzJ1xuXG5WdWUuY29uZmlnLnByb2R1Y3Rpb25UaXAgPSBmYWxzZVxuXG4vLyBBbGwgZ2xvYmFsIHBsdWdpbnMgdGhhdCBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgb24gYFZ1ZWA6XG5WdWUudXNlKFZ1ZVJvdXRlcilcblZ1ZS51c2UoVnVlTW9kYWwsIHsgZHluYW1pYzogdHJ1ZSB9KVxuVnVlLnVzZShWdWVOb3RpZmljYXRpb25zKVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQWRtaW4ge1xuICBjb25zdHJ1Y3RvcihlbCwge1xuICAgIC8vIGBkaXRvYCBjb250YWlucyB0aGUgYmFzZSBhbmQgYXBpIHNldHRpbmdzIHBhc3NlZCBmcm9tIGBBZG1pbkNvbnRyb2xsZXJgXG4gICAgZGl0byA9IHt9LFxuICAgIGFwaSxcbiAgICB2aWV3cyA9IHt9LFxuICAgIC4uLm9wdGlvbnNcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5lbCA9IGVsXG4gICAgLy8gTWVyZ2UgaW4gYGFwaWAgc2V0dGluZ3MgYXMgcGFzc2VkIGZyb20gYGNvbmZpZy5hZG1pbmAgYW5kIHRocm91Z2ggdGhlXG4gICAgLy8gYEFkbWluQ29udHJvbGxlcmAgd2l0aCBgYXBpYCB2YWx1ZXMgZnJvbSBmcm9tICdhZG1pbi9pbmRleC5qcydcbiAgICAvLyBOT1RFOiBgQWRtaW5Db250cm9sbGVyYCBwcm92aWRlcyBgZGl0by5hcGkuYmFzZWBcbiAgICB0aGlzLmFwaSA9IGFwaSA9IG1lcmdlKHsgYmFzZTogJy8nIH0sIGRpdG8uYXBpLCBhcGkpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuXG4gICAgLy8gU2V0dXAgZGVmYXVsdCBhcGkgc2V0dHRpbmdzOlxuICAgIGFwaS5sb2NhbGUgfHw9ICdlbi1VUydcbiAgICBhcGkuZm9ybWF0cyA9IG1lcmdlKHt9LCBkZWZhdWx0Rm9ybWF0cywgYXBpLmZvcm1hdHMpXG4gICAgYXBpLnJlcXVlc3QgfHw9IG9wdGlvbnMgPT4gcmVxdWVzdChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmdldEFwaVVybCB8fD0gcGF0aCA9PiBnZXRBcGlVcmwoYXBpLCBwYXRoKVxuICAgIGFwaS5pc0FwaVJlcXVlc3QgfHw9IHVybCA9PiBpc0FwaVJlcXVlc3QoYXBpLCB1cmwpXG4gICAgLy8gU2V0dGluZyBgYXBpLm5vcm1hbGl6ZVBhdGhzID0gdHJ1ZSAocGx1cmFsKSBzZXRzIGJvdGg6XG4gICAgLy8gYGFwaS5ub3JtYWxpemVQYXRoID0gaHlwaGVuYXRlYCBhbmQgYGFwaS5kZW5vcm1hbGl6ZVBhdGggPSBjYW1lbGl6ZWBcbiAgICBhcGkubm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gaHlwaGVuYXRlIDogdmFsID0+IHZhbFxuICAgIGFwaS5kZW5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGNhbWVsaXplIDogdmFsID0+IHZhbFxuXG4gICAgLy8gQWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGF1dGggcmVzb3VyY2VzLCBsaWtlIHNvOlxuICAgIC8vIGFwaS51c2VycyA9IHtcbiAgICAvLyAgIHBhdGg6ICcvYWRtaW5zJyxcbiAgICAvLyAgIC8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdHM6XG4gICAgLy8gICBsb2dpbjoge1xuICAgIC8vICAgICBwYXRoOiAnbG9naW4nLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGxvZ291dDoge1xuICAgIC8vICAgICBwYXRoOiAnbG9nb3V0JyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzZXNzaW9uOiB7XG4gICAgLy8gICAgIHBhdGg6ICdzZXNzaW9uJyxcbiAgICAvLyAgICAgbWV0aG9kOiAnZ2V0J1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBjb25zdCB1c2VycyA9IGFwaS51c2VycyA9IGdldFJlc291cmNlKGFwaS51c2Vycywge1xuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nXG4gICAgfSkgfHwge31cbiAgICB1c2Vycy5sb2dpbiA9IGdldFJlc291cmNlKHVzZXJzLmxvZ2luIHx8ICdsb2dpbicsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMubG9nb3V0ID0gZ2V0UmVzb3VyY2UodXNlcnMubG9nb3V0IHx8ICdsb2dvdXQnLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLnNlc3Npb24gPSBnZXRSZXNvdXJjZSh1c2Vycy5zZXNzaW9uIHx8ICdzZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyBvZiByZXNvdXJjZSBwYXRoIGhhbmRsZXJzOlxuICAgIC8vIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgLy8gICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgLy8gICAgIHJldHVybiByZXNvdXJjZS5wYXJlbnRcbiAgICAvLyAgICAgICA/IGAke3Jlc291cmNlLnBhdGh9PyR7cmVzb3VyY2UucGFyZW50LnBhdGh9X2lkPSR7XG4gICAgLy8gICAgICAgICAgcmVzb3VyY2UucGFyZW50LmlkfWBcbiAgICAvLyAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkucmVzb3VyY2VzID0ge1xuICAgICAgYW55KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzW3Jlc291cmNlPy50eXBlXSB8fCB0aGlzLmRlZmF1bHRcbiAgICAgICAgcmV0dXJuIHJlc291cmNlICYmIGhhbmRsZXIuY2FsbCh0aGlzLCByZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIGRlZmF1bHQocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHRoaXMuYW55KHJlc291cmNlLnBhcmVudClcbiAgICAgICAgcmV0dXJuIHBhcmVudFBhdGhcbiAgICAgICAgICA/IGAke3BhcmVudFBhdGh9LyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgICB9LFxuXG4gICAgICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQocmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBtZW1iZXIocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gTk9URTogV2UgYXNzdW1lIHRoYXQgYWxsIG1lbWJlcnMgaGF2ZSByb290LWxldmVsIGNvbGxlY3Rpb24gcm91dGVzLFxuICAgICAgICAvLyB0byBhdm9pZCBleGNlc3NpdmUgbmVzdGluZyBvZiAoc3ViLSljb2xsZWN0aW9uIHJvdXRlcy5cbiAgICAgICAgcmV0dXJuIGAke3Jlc291cmNlLnBhdGh9LyR7cmVzb3VyY2UuaWR9YFxuICAgICAgfSxcblxuICAgICAgdXBsb2FkKHJlc291cmNlKSB7XG4gICAgICAgIC8vIERpdG8gU2VydmVyIGhhbmRsZXMgdXBsb2FkIHJvdXRlcyBvbiB0aGUgY29sbGVjdGlvbiByZXNvdXJjZTpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29sbGVjdGlvbihyZXNvdXJjZS5wYXJlbnQpfS91cGxvYWQvJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgIH0sXG5cbiAgICAgIC4uLmFwaS5yZXNvdXJjZXNcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIC8gZXh0ZW5kaW5nIG9mIGhlYWRlcnM6XG4gICAgLy8gYXBpLmhlYWRlcnMgPSB7XG4gICAgLy8gICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgLy8gfVxuICAgIGFwaS5oZWFkZXJzID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIC4uLmFwaS5oZWFkZXJzXG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGVsKSkge1xuICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKVxuICAgIH1cblxuICAgIHRoaXMucm9vdCA9IG5ldyBWdWUoe1xuICAgICAgZWwsXG4gICAgICByb3V0ZXI6IG5ldyBWdWVSb3V0ZXIoe1xuICAgICAgICBtb2RlOiAnaGlzdG9yeScsXG4gICAgICAgIGJhc2U6IGRpdG8uYmFzZSxcbiAgICAgICAgbGlua0FjdGl2ZUNsYXNzOiAnJyxcbiAgICAgICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICcnXG4gICAgICB9KSxcbiAgICAgIGNvbXBvbmVudHM6IHsgRGl0b1Jvb3QgfSxcbiAgICAgIC8vIE1vc3QgaW5qZWN0cyBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlIHJlYWN0aXZlbmVzcyBhY3Jvc3NcbiAgICAgIC8vIHByb3ZpZGUvaW5qZWN0LCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICAgIHByb3ZpZGU6IHtcbiAgICAgICAgYXBpLFxuICAgICAgICAvLyBBIGRlZmF1bHQgbGlzdCBvZiB2ZXJicyBhcmUgcHJvdmlkZWQgYnkgJHZlcmJzKCkgYW5kIGNhbiBiZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGF0IGFueSBwb2ludCBpbiB0aGUgY29tcG9uZW50IGhpZXJhcmNoeS5cbiAgICAgICAgJHZlcmJzOiAoKSA9PiB2ZXJicyxcbiAgICAgICAgLy8gUHJvdmlkZSBkZWZhdWx0cyBzbyBEaXRvTWl4aW4gY2FuIGluamVjdCB0aGVtIGZvciBhbGwgY29tcG9uZW50czpcbiAgICAgICAgLy8gICBpbmplY3Q6IFsgICckaXNQb3B1bGF0ZWQnLCAnJHNjaGVtYUNvbXBvbmVudCcsICckcm91dGVDb21wb25lbnQnIF1cbiAgICAgICAgJHZpZXdzOiAoKSA9PiB7fSxcbiAgICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0cnVlLFxuICAgICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkYXRhQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICAgICAgfSxcblxuICAgICAgcmVuZGVyOiBjcmVhdGVFbGVtZW50ID0+IGNyZWF0ZUVsZW1lbnQoRGl0b1Jvb3QsIHtcbiAgICAgICAgLy8gUHJlc2VydmUgdGhlIHJvb3QgY29udGFpbmVyJ3MgaWQsIGFzIHJlcXVpcmVkIGJ5IGhvdC1yZWxvYWRpbmc6XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgaWQ6IGVsLmlkXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgdW5yZXNvbHZlZFZpZXdzOiB2aWV3cyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFRoaXMgbWF5IG9ubHkgYmUgbmVlZGVkIHRvIGF2b2lkIHRyZWUtc2hhY2tpbmcgb2YgdGhlc2UgY29tcG9uZW50cyxcbiAgICAgICAgLy8gc2luY2UgdGhleSBhY3R1YWxseSBoYW5kbGUgcmVnaXN0cnkgaW50ZXJuYWxseSBhbHJlYWR5LlxuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgLi4uY29tcG9uZW50cyxcbiAgICAgICAgICAuLi50eXBlc1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICByZWdpc3Rlcih0eXBlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFR5cGVDb21wb25lbnQucmVnaXN0ZXIodHlwZSwgb3B0aW9ucylcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfSAoJHtyZXNwb25zZS5zdGF0dXNUZXh0fSlgKVxuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QoYXBpLCB7XG4gIHVybCxcbiAgbWV0aG9kID0gJ2dldCcsXG4gIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYHF1ZXJ5YCBvbiAyMDIyLTExLTAxLFxuICAvLyByZW1vdmUgb25jZSBub3QgaW4gdXNlIGFueXdoZXJlIGFueW1vcmUuXG4gIHBhcmFtcyA9IG51bGwsXG4gIHF1ZXJ5ID0gcGFyYW1zIHx8IG51bGwsXG4gIGhlYWRlcnMgPSBudWxsLFxuICBkYXRhID0gbnVsbFxufSkge1xuICBpZiAocGFyYW1zKSB7XG4gICAgZGVwcmVjYXRlKGByZXF1ZXN0LnBhcmFtcyBpcyBkZXByZWNhdGVkLiBVc2UgYWN0aW9uLm1ldGhvZCBhbmQgYWN0aW9uLnBhdGggaW5zdGVhZC5gKVxuICB9XG5cbiAgY29uc3QgaXNBcGlSZXF1ZXN0ID0gYXBpLmlzQXBpUmVxdWVzdCh1cmwpXG4gIGlmIChpc0FwaVJlcXVlc3QgJiYgIWlzQWJzb2x1dGVVcmwodXJsKSkge1xuICAgIHVybCA9IGFwaS5nZXRBcGlVcmwodXJsKVxuICB9XG5cbiAgY29uc3Qgc2VhcmNoID0gcXVlcnkgJiYgbmV3IFVSTFNlYXJjaFBhcmFtcyhxdWVyeSkudG9TdHJpbmcoKVxuICBpZiAoc2VhcmNoKSB7XG4gICAgdXJsID0gYCR7dXJsfT8ke3NlYXJjaH1gXG4gIH1cblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgLi4uKGRhdGEgJiYgeyBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4oaXNBcGlSZXF1ZXN0ICYmIGFwaS5oZWFkZXJzKSxcbiAgICAgIC4uLmhlYWRlcnNcbiAgICB9LFxuICAgIGNyZWRlbnRpYWxzOiBpc0FwaVJlcXVlc3QgJiYgYXBpLmNvcnM/LmNyZWRlbnRpYWxzXG4gICAgICA/ICdpbmNsdWRlJ1xuICAgICAgOiAnc2FtZS1vcmlnaW4nXG4gIH0pXG5cbiAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIHJlc3BvbnNlLmRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKHJlc3BvbnNlKVxuICB9XG4gIHJldHVybiByZXNwb25zZVxufVxuXG5mdW5jdGlvbiBnZXRBcGlVcmwoYXBpLCBwYXRoKSB7XG4gIC8vIFVzZSBzYW1lIGFwcHJvYWNoIGFzIGF4aW9zIGBjb21iaW5lVVJMcygpYCB0byBqb2luIGJhc2VVUkwgd2l0aCBwYXRoOlxuICByZXR1cm4gYCR7YXBpLnVybC5yZXBsYWNlKC9cXC8rJC8sICcnKX0vJHtwYXRoLnJlcGxhY2UoL15cXC8rLywgJycpfWBcbn1cblxuZnVuY3Rpb24gaXNBcGlSZXF1ZXN0KGFwaSwgdXJsKSB7XG4gIHJldHVybiAhaXNBYnNvbHV0ZVVybCh1cmwpIHx8IHVybC5zdGFydHNXaXRoKGFwaS51cmwpXG59XG4iXSwibmFtZXMiOlsiYXBwU3RhdGUiLCJhcHBlbmREYXRhUGF0aCIsImRhdGFQYXRoIiwidG9rZW4iLCJwYXJzZVBhcmVudERhdGFQYXRoIiwicGF0aCIsInBhcnNlRGF0YVBhdGgiLCJwYXJzZUl0ZW1EYXRhUGF0aCIsIm5lc3RlZCIsImdldEl0ZW1EYXRhUGF0aCIsIm5vcm1hbGl6ZURhdGFQYXRoIiwicGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgiLCJpc0ludGVnZXIiLCJnZXRQYXJlbnRJdGVtRGF0YVBhdGgiLCJnZXRJdGVtIiwicm9vdEl0ZW0iLCJnZXRWYWx1ZUF0RGF0YVBhdGgiLCJnZXRQYXJlbnRJdGVtIiwiZ2V0TGFzdERhdGFQYXRoVG9rZW4iLCJnZXRMYXN0RGF0YVBhdGhOYW1lIiwiZ2V0TGFzdERhdGFQYXRoSW5kZXgiLCJpbmRleCIsInRlbXBvcmFyeUlkIiwic2V0VGVtcG9yYXJ5SWQiLCJkYXRhIiwiaWRLZXkiLCJpc1RlbXBvcmFyeUlkIiwiaWQiLCJpc1JlZmVyZW5jZSIsImNvbnRleHRzIiwiZ2V0IiwiY29udGV4dCIsImtleSIsImRlZmF1bHRWYWx1ZSIsIm9iamVjdCIsInZhbHVlIiwiaXNGdW5jdGlvbiIsInNldCIsIkRpdG9Db250ZXh0IiwiY29tcG9uZW50IiwiX2EiLCJwYXJlbnRJdGVtIiwib3B0aW9ucyIsImxvY2F0aW9uIiwicmVzb3VyY2UiLCJFbWl0dGVyTWl4aW4iLCJldmVudCIsImNhbGxiYWNrIiwiaXNBcnJheSIsImV2IiwiaXNQbGFpbk9iamVjdCIsImV2ZW50cyIsImNhbGxiYWNrcyIsIm9uIiwiYXJncyIsImVudHJ5IiwiY2IiLCJxdWV1ZSIsInJlc29sdmUiLCJuZXh0IiwicmVzdWx0IiwicmVzIiwiZXJyb3IiLCJ0YXJnZXQiLCJ0eXBlQ2hlY2tlcnMiLCJpc0Jvb2xlYW4iLCJpc051bWJlciIsImlzU3RyaW5nIiwiaXNEYXRlIiwiaXNPYmplY3QiLCJpc1JlZ0V4cCIsInR5cGVDb252ZXJ0ZXJzIiwiYXNBcnJheSIsImlzTWF0Y2hpbmdUeXBlIiwidHlwZXMiLCJ0eXBlIiwiY29udmVydFR5cGUiLCJjb252ZXJ0ZXIiLCJoYXNSZXNvdXJjZSIsInNjaGVtYSIsImdldFJlc291cmNlIiwiZGVmYXVsdHMiLCJwYXJlbnQiLCJkZWZzIiwiZ2V0TWVtYmVyUmVzb3VyY2UiLCJwaWNrQnkiLCJEaXRvTWl4aW4iLCJ1aWQiLCJrZXlPckRhdGFQYXRoIiwiZGVmIiwiY29udmVydGVkIiwibmFtZSIsImxhYmVsaXplIiwiYnV0dG9uIiwidmVyYiIsImRyYWdnYWJsZSIsImZhbGxiYWNrIiwicXVlcnkiLCJjb21wb25lbnRzIiwiYnV0dG9ucyIsInNldHRpbmdzIiwicmVqZWN0IiwiRGl0b0NvbXBvbmVudCIsInVybCIsInNlYXJjaCIsIm1ldGhvZCIsImludGVybmFsIiwiY2hlY2tVc2VyIiwicmVzcG9uc2UiLCJlcXVhbHMiLCJjYWNoZSIsImNhY2hlUGFyZW50IiwibG9hZENhY2hlIiwiY2FjaGVLZXkiLCJsb2NhbGUiLCJmb3JtYXQiLCJmaWxlbmFtZSIsImEiLCJib2R5IiwiYWNjZXNzb3IiLCJ3YXRjaCIsImhhbmRsZXJzIiwiZXhwciIsImFkZEV2ZW50IiwiaHlwaGVuYXRlIiwiaGFzTGlzdGVuZXJzIiwicGFyZW50SGFzTGlzdGVuZXJzIiwiZ2V0Q29udGV4dCIsInBhcmFtcyIsImlzQ3JlZGl0Q2FyZCIsImRlY2ltYWxzIiwibWF0Y2giLCJpc0VtYWlsIiwiaXNIb3N0bmFtZSIsImlzRG9tYWluIiwibWF4IiwibWluIiwicGFzc3dvcmQiLCJpc1VybCIsIlZhbGlkYXRpb25NaXhpbiIsIm5vdGlmeSIsImlzVmFsaWQiLCJydWxlIiwic2V0dGluZyIsInZhbGlkYXRvciIsInZhbGlkYXRpb25zIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiYWRkTGFiZWwiLCJlcnJvcnMiLCJmb2N1cyIsImdldFNjaGVtYUFjY2Vzc29yIiwiZ2V0U3RvcmVBY2Nlc3NvciIsInVpZE1hcCIsImdldFVpZCIsIml0ZW1JZCIsIlNjaGVtYUdyYXBoIiwiX19wdWJsaWNGaWVsZCIsInN1YkdyYXBoIiwicGFydCIsInJlbGF0ZWREYXRhUGF0aCIsIl9iIiwibmFub2lkIiwiZmxhdHRlbiIsImdyYXBoIiwiZW50cmllcyIsIiRzZXR0aW5ncyIsInN1YktleSIsInNvdXJjZVNjaGVtYSIsImNsaXBib2FyZCIsInJlbGF0ZWQiLCJyZWZlcmVuY2UiLCJzb3VyY2UiLCJyZWxhdGlvbiIsInZhbHVlcyIsInJlbW92ZUlkIiwicmVmZXJlbmNlSWQiLCJyZWZLZXkiLCJyZXZWYWx1ZSIsInR5cGVDb21wb25lbnRzIiwidW5rbm93blR5cGVSZXBvcnRlZCIsInJlZ2lzdGVyVHlwZUNvbXBvbmVudCIsImdldFR5cGVDb21wb25lbnQiLCJhbGxvd051bGwiLCJmb3JFYWNoU2NoZW1hIiwic2NoZW1hcyIsImZvckVhY2hTY2hlbWFDb21wb25lbnQiLCJzb21lU2NoZW1hQ29tcG9uZW50IiwicmVzb2x2ZVNjaGVtYSIsInVud3JhcE1vZHVsZSIsImlzUHJvbWlzZSIsImlzTW9kdWxlIiwia2V5cyIsInJlc29sdmVTY2hlbWFzIiwidW5yZXNvbHZlZFNjaGVtYXMiLCJyZXNvbHZlSXRlbSIsIml0ZW0iLCJyZXNvbHZlUGFuZWxzIiwicGFuZWxzIiwicHJvY2Vzc1ZpZXciLCJhcGkiLCJyb3V0ZXMiLCJjaGlsZHJlbiIsInByb2Nlc3NSb3V0ZVNjaGVtYSIsImlzU2luZ2xlQ29tcG9uZW50VmlldyIsInByb2Nlc3NDb21wb25lbnQiLCJwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyIsImxldmVsIiwiZ2V0VHlwZU9wdGlvbnMiLCJwcm9taXNlcyIsInByb2Nlc3NGb3JtcyIsImZvcm0iLCJmb3JtcyIsInJlc29sdmVGb3JtIiwiaGFzRm9ybVNjaGVtYSIsImhhc011bHRpcGxlRm9ybVNjaGVtYXMiLCJnZXRWaWV3U2NoZW1hIiwidmlldyIsInZpZXdTY2hlbWEiLCJ2aWV3Q29tcG9uZW50IiwiZ2V0Vmlld0VkaXRQYXRoIiwiZ2V0Rm9ybVNjaGVtYXMiLCJtb2RpZnlGb3JtIiwiY29tcGFjdCIsImdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zIiwiZ2V0SXRlbUZvcm1TY2hlbWEiLCJoYXNMYWJlbCIsImlzQ29tcGFjdCIsImlzSW5saW5lZCIsImlzTmVzdGVkIiwic2hvdWxkT21pdFBhZGRpbmciLCJnZXREZWZhdWx0VmFsdWUiLCJjbG9uZSIsImlnbm9yZU1pc3NpbmdWYWx1ZSIsInR5cGVPcHRpb25zIiwiaGFzTGFiZWxzIiwiY2hlY2tDb21wb25lbnRzIiwic2V0RGVmYXVsdHMiLCJwcm9jZXNzU2NoZW1hRGF0YSIsImNvbXB1dGVWYWx1ZSIsInJvb3REYXRhIiwiY29tcHV0ZSIsIlZ1ZSIsImNsb25lSXRlbSIsImNvcHkiLCJvcmRlcktleSIsInByb2Nlc3NEYXRhIiwic2NoZW1hT25seSIsInByb2Nlc3NlZERhdGEiLCJ3cmFwUHJpbWl0aXZlcyIsImIiLCJpZDEiLCJpZDIiLCJleGNsdWRlIiwicHJvY2VzcyIsInByb2Nlc3NWYWx1ZSIsInByb2Nlc3NCZWZvcmUiLCJwcm9jZXNzQWZ0ZXIiLCJwcm9jZXNzQ29tcG9uZW50cyIsImdldERhdGFQYXRoIiwiY29tcG9uZW50U2NoZW1hIiwiY29tcG9uZW50RGF0YVBhdGgiLCJwcm9jZXNzSXRlbSIsInByb2Nlc3NlZEl0ZW0iLCJ0YWIiLCJwYW5lbCIsImdldEFsbFBhbmVsU2NoZW1hcyIsImdldE5hbWVkU2NoZW1hcyIsImRlc2NyaXB0aW9ucyIsInRvT2JqZWN0IiwiYXJyYXkiLCJ0b1NjaGVtYSIsImNhbWVsaXplIiwiZ2V0QnV0dG9uU2NoZW1hcyIsImdldFR5cGUiLCJzY2hlbWFPclR5cGUiLCJnZXRTb3VyY2VUeXBlIiwiX2MiLCJnZXRQYW5lbFNjaGVtYSIsInRhYkNvbXBvbmVudCIsImdldFBhbmVsU2NoZW1hcyIsInNjaGVtYUNvbXBvbmVudCIsImlzT2JqZWN0U291cmNlIiwiaXNMaXN0U291cmNlIiwiZ2V0SXRlbUlkIiwiZ2V0SXRlbVVpZCIsIlR5cGVNaXhpbiIsInBhcnNlIiwibGFiZWwiLCJuYXRpdmVGaWVsZCIsInRleHRGaWVsZCIsImF0dHJpYnV0ZXMiLCJsaXN0ZW5lcnMiLCJhZGQiLCJlbGVtZW50IiwibWl4aW5zIiwiY29tcCIsImN0b3IiLCJEaXRvVXNlciIsInJvbGVzIiwicm9sZSIsIlNjaGVtYVBhcmVudE1peGluIiwic2NoZW1hQ29tcG9uZW50cyIsIlZhbGlkYXRvck1peGluIiwiaXQiLCJSb3V0ZU1peGluIiwidG8iLCJmcm9tIiwibWF0Y2hlZCIsImkiLCJyZWNvcmQiLCJicmVhZGNydW1iIiwicm91dGVDb21wb25lbnRzIiwib2siLCJ0ZW1wbGF0ZVBhdGgiLCJyb290UGF0aCIsImdldENvbW1vblByZWZpeCIsInJlbmRlciIsIl92bSIsIl9oIiwic3RhdGljUmVuZGVyRm5zIiwiX192dWUyX3NjcmlwdCIsImlzTG9hZGluZyIsIkRvbU1peGluIiwicmVtb3ZlIiwiaGFuZGxlciIsImFkZEV2ZW50cyIsIiRldmVudCIsImVyciIsInRpdGxlIiwidGV4dCIsImxvZyIsInN0cmlwVGFncyIsIm5vdGlmaWNhdGlvbnMiLCJkdXJhdGlvbkZhY3RvciIsImR1cmF0aW9uIiwiYWRkaXRpb25hbENvbXBvbmVudHMiLCJyZWRpcmVjdEFmdGVyTG9naW4iLCJsb2dpbkRhdGEiLCJ1c2VyIiwiRGl0b1ZpZXciLCJyb3V0ZSIsIlNwaW5uZXIiLCJQdWxzZUxvYWRlciIsInNpemUiLCJjb2xvciIsInByb3BzIiwiUHVsbGRvd25NaXhpbiIsInN0YXJ0VGltZSIsIm9wZW4iLCJkaWFsb2dEYXRhIiwiY29udGVudCIsImFzT2JqZWN0IiwicHJlZml4Iiwic3VmZml4IiwiSXRlbU1peGluIiwiZXh0ZW5kZWQiLCJpdGVtTGFiZWwiLCJmb3JtTGFiZWwiLCJnZXRGb3JtTGFiZWwiLCJjb2x1bW5zIiwiaGFkTGFiZWwiLCJUcmFuc2l0aW9uSGVpZ2h0IiwicGFuZSIsImN1cnJlbnRUYWIiLCJmaXJzdCIsImRlZmF1bHRUYWIiLCJkYXRhUGF0aE9yTmFtZSIsImV4cGFuZCIsImNvbXBvbmVudHNCeURhdGFQYXRoIiwiZGF0YVBhdGhzIiwiY2hlY2siLCJmaWVsZCIsInVubWF0Y2hlZCIsImVycnMiLCJmdWxsRGF0YVBhdGgiLCJkYXRhUGF0aFBhcnRzIiwiZm91bmQiLCJwcm9wZXJ0eSIsInN1YkNvbXBvbmVudHMiLCJyZWdpc3RyeSIsImVudHJpZXNCeURhdGFQYXRoIiwiX3JlZiIsIm5lc3RlZERhdGFQYXRoIiwic3RvcmUiLCJwYXJzZUZyYWN0aW9uIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwid2lkdGgiLCJkaXNhYmxlZCIsImNvbnRhaW5lckNsYXNzIiwiYmFzaXMiLCJncm93Iiwic2hyaW5rIiwiYmFzaXNJc0F1dG8iLCJ0YWJTY2hlbWEiLCJidXR0b25TY2hlbWEiLCJidXR0b25EYXRhUGF0aCIsIm5vZGUiLCJjYXBpdGFsaXplIiwiY2xpcGJvYXJkRGF0YSIsInBhc3RlIiwicmVwb3J0IiwianNvbiIsIl9kIiwiZGVpbmRlbnQiLCIkc2NoZW1hIiwiX2UiLCJMb2FkaW5nTWl4aW4iLCJ1cGRhdGVSb290IiwidXBkYXRlVmlldyIsIlJlc291cmNlTWl4aW4iLCJhbW91bnQiLCJwYWdlIiwic3RhcnQiLCJyYW5nZSIsInZlcmJzIiwiY2xlYXIiLCJsb2FkaW5nT3B0aW9ucyIsInJlcXVlc3QiLCJzZXREYXRhIiwib25TdWNjZXNzIiwib25FcnJvciIsIm5vdGlmeVN1Y2Nlc3MiLCJub3RpZnlFcnJvciIsImlzQ3JlYXRpbmciLCJwcm92aWRlc0RhdGEiLCJtZXJnZSIsImRhdGFQYXJ0cyIsInBhdGhQYXJ0cyIsInJvdXRlUGFydHMiLCJsYXN0RGF0YVBhcnQiLCJsIiwiZGF0YVBhcnQiLCJtYWluU2NoZW1hQ29tcG9uZW50IiwibmV3VmFsdWUiLCJvbGRWYWx1ZSIsInByZXNlbnQiLCJjbG9zZUZvcm0iLCJnZXRWZXJiIiwiYnV0dHRvblJlc291cmNlIiwic3VjY2VzcyIsIl9yZXNvdXJjZSIsIl9tZXRob2QiLCJEaXRvRm9ybSIsInNjb3BlIiwibmF2aWdhdGUiLCJQYWdpbmF0aW9uIiwiT3JkZXJlZE1peGluIiwib2xkSW5kZXgiLCJuZXdJbmRleCIsImxpc3QiLCJwYWdpbmF0aW9uUmFuZ2UiLCJvZmZzZXQiLCJWdWVEcmFnZ2FibGUiLCJjaGlsZHJlblNjaGVtYSIsImVkaXRQYXRoIiwiY2hpbGRyZW5PcGVuIiwibnVtQ2hpbGRyZW4iLCJjcmVhdGFibGUiLCJlZGl0YWJsZSIsImNvbHVtbiIsIm9yZGVyIiwiZXNjYXBlSHRtbCIsImgiLCJUeXBlQ29tcG9uZW50IiwiVHlwZUNvbXBvbmVudCQxIiwiZGVmaW5pdGlvbiIsIiQkYSIsIiQkZWwiLCIkJGMiLCIkJHYiLCIkJGkiLCJEYXRhTWl4aW4iLCJyZXNvbHZlQ291bnRlciIsImFzeW5jRW50cnkiLCJyZXNvbHZlZERhdGEiLCJsb2FkIiwiT3B0aW9uc01peGluIiwiY29udmVydFZhbHVlIiwiY29udmVydCIsImZpbHRlciIsImRlYm91bmNlIiwiZGVib3VuY2VBc3luYyIsIm9wdGlvbiIsImdyb3VwZWQiLCJyZXN1bHRzIiwiZ3JvdXAiLCJmaW5kT3B0aW9uIiwiZ3JvdXBCeSIsIm9wdGlvblZhbHVlIiwib3B0aW9uTGFiZWwiLCJwcm9jZXNzUmVsYXRlIiwiZmxhc2siLCJDb2RlRmxhc2siLCJjaGFuZ2VkIiwiaWdub3JlV2F0Y2giLCJpZ25vcmVVcGRhdGUiLCJvbkNoYW5nZSIsIm9uRm9jdXMiLCJvbkJsdXIiLCJzZXRDb2RlIiwiY29kZSIsInNldFZhbHVlIiwiVHJpZ2dlciIsIlNrZXRjaFBpY2tlciIsInRpbnljb2xvciIsImZvY3VzZWQiLCJEYXRlUGlja2VyIiwiVGltZVBpY2tlciIsIkRhdGVUaW1lUGlja2VyIiwiU291cmNlTWl4aW4iLCJkZWZhdWx0U29ydCIsImRpcmVjdGlvbiIsImNvbGxhcHNpYmxlIiwibGlzdERhdGEiLCJsZW5ndGgiLCJvbkNvbXBsZXRlIiwib3BlbmVkIiwiY2FsbE9uQ29tcGxldGUiLCJyb3V0ZUNvbXBvbmVudCIsImlubGluZWQiLCJwYXJhbSIsIm1ldGEiLCJmb3JtTWV0YSIsImNoaWxkUm91dGVzIiwiZ2V0UGF0aFdpdGhQYXJhbSIsInNvdXJjZVBhdGgiLCJmb3JtUm91dGUiLCJmbGF0Um91dGVzIiwic3ViUm91dGVzIiwiY2hpbGRSb3V0ZSIsImZpbHRlckNvbXBvbmVudHMiLCJkYXRlRm9ybWF0IiwiZ2V0RmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInByb3h5IiwicGFyc2VGaWx0ZXJzRGF0YSIsImdldEZpbHRlcnNDb21wb25lbnRzIiwiZm9ybWF0RmlsdGVyc0RhdGEiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsImdldExpc3RDb21wb25lbnQiLCJvYmoiLCJmaWx0ZXJzRGF0YVBhdGgiLCJpY29uIiwiaXNBY3RpdmUiLCJvbkNsaWNrIiwiRWRpdG9yQ29udGVudCIsIkVkaXRvck1lbnVCYXIiLCJJY29uIiwiY29tbWFuZCIsIm1hcmtCdXR0b25zIiwiYmFzaWNOb2RlQnV0dG9ucyIsIm90aGVyTm9kZUJ1dHRvbnMiLCJ0b29sQnV0dG9ucyIsImVuYWJsZVJ1bGVzIiwic2V0VmFsdWVEZWJvdW5jZWQiLCJnZXRWYWx1ZSIsIm9uVXBkYXRlIiwiZ2V0SFRNTCIsIkVkaXRvciIsImdldFBvaW50IiwieCIsInkiLCJwcmV2WSIsImhlaWdodCIsIm1vdXNlbW92ZSIsImF0dHJzIiwiZGlhbG9nQ29tcG9uZW50IiwiaHJlZiIsIm1hcmtzIiwibm9kZXMiLCJ0b29scyIsIkJvbGQiLCJJdGFsaWMiLCJVbmRlcmxpbmUiLCJTdHJpa2UiLCJTbWFsbCIsIkNvZGUiLCJMaW5rV2l0aFRpdGxlIiwiQmxvY2txdW90ZSIsIkNvZGVCbG9jayIsIkhhcmRCcmVhayIsIkhlYWRpbmciLCJIb3Jpem9udGFsUnVsZSIsIkxpc3RJdGVtIiwiQnVsbGV0TGlzdCIsIk9yZGVyZWRMaXN0IiwiSGlzdG9yeSIsImV4dGVuc2lvbiIsInNldHRpbmdzTmFtZSIsImFkZEJ1dHRvbiIsImlnbm9yZUFjdGl2ZSIsImRlc2NyaXB0aW9uIiwic2V0dGluZ05hbWUiLCJ1bmRlcnNjb3JlIiwiYXR0ciIsIk1hcmsiLCJ0b2dnbGVNYXJrIiwiTGluayIsImRvbSIsIlZ1ZU11bHRpc2VsZWN0IiwicGxhY2Vob2xkZXIiLCJzZWFyY2hhYmxlIiwidGFnZ2FibGUiLCJ0YWciLCJOdW1iZXJNaXhpbiIsInN0ZXAiLCJJbnB1dEZpZWxkIiwiJCRzZWxlY3RlZFZhbCIsIm8iLCJ2YWwiLCJvcHQiLCJTd2l0Y2hCdXR0b24iLCJtYXNrZWRQYXNzd29yZCIsImhhc0VkaXRhYmxlRm9ybXMiLCJmb3JtYXRGaWxlU2l6ZSIsImZpbGVzaXplIiwiZmlsZSIsIlZ1ZVVwbG9hZCIsImFzRmlsZXMiLCJhY2NlcHQiLCJtYXhTaXplIiwicGFyc2VGaWxlU2l6ZSIsInRvdGFsIiwibmV3RmlsZSIsIm9sZEZpbGUiLCJ4aHIiLCJmaWxlcyIsInVwbG9hZCIsImxvZ2dlZERlcHJlY2F0aW9ucyIsImRlcHJlY2F0ZSIsIlZ1ZVJvdXRlciIsIlZ1ZV9fZGVmYXVsdCIsIlZ1ZU1vZGFsIiwiVnVlTm90aWZpY2F0aW9ucyIsIkRpdG9BZG1pbiIsImVsIiwiZGl0byIsInZpZXdzIiwiZGVmYXVsdEZvcm1hdHMiLCJnZXRBcGlVcmwiLCJpc0FwaVJlcXVlc3QiLCJ1c2VycyIsInBhcmVudFBhdGgiLCJEaXRvUm9vdCIsImNyZWF0ZUVsZW1lbnQiLCJSZXF1ZXN0RXJyb3IiLCJoZWFkZXJzIiwiaXNBYnNvbHV0ZVVybCJdLCJtYXBwaW5ncyI6IjRoREFBZUEsR0FBQSxDQUNiLE1BQU8sR0FDUCxnQkFBaUIsQ0FBRSxFQUNuQixLQUFNLEtBQ04sVUFBVyxDQUFFLEVBQ2IsWUFBYSxLQUNiLGNBQWUsSUFDakIsRUNITyxTQUFTQyxFQUFlQyxFQUFVQyxFQUFPLENBQzlDLE9BQU9ELEVBQ0gsR0FBR0EsS0FBWUMsSUFDZkEsQ0FDTixDQUVPLFNBQVNDLEdBQW9CRixFQUFVLENBQzVDLE1BQU1HLEVBQU9DLEVBQWEsY0FBQ0osQ0FBUSxFQUNuQyxPQUFBRyxHQUFBLE1BQUFBLEVBQU0sTUFDQ0EsQ0FDVCxDQU1PLFNBQVNFLEdBQWtCTCxFQUFVTSxFQUFTLEdBQU8sQ0FDMUQsT0FBT0EsRUFBU0osR0FBb0JGLENBQVEsRUFBSUksRUFBQUEsY0FBY0osQ0FBUSxDQUN4RSxDQUVPLFNBQVNPLEdBQWdCUCxFQUFVTSxFQUFTLEdBQU8sQ0FDeEQsT0FBT0Usb0JBQWtCSCxHQUFrQkwsRUFBVU0sQ0FBTSxDQUFDLENBQzlELENBRU8sU0FBU0csR0FBd0JULEVBQVVNLEVBQVMsR0FBTyxDQUNoRSxNQUFNSCxFQUFPRSxHQUFrQkwsRUFBVU0sQ0FBTSxFQUMvQyxHQUFJSCxFQUFNLENBR1IsSUFBSUYsRUFDSixHQUNFQSxFQUFRRSxFQUFLLElBQUssUUFDWEYsR0FBUyxNQUFRUyxZQUFVLENBQUNULENBQUssR0FFMUMsR0FBSUEsR0FBUyxLQUNYLE9BQU9FLENBRVYsQ0FDRCxPQUFPLElBQ1QsQ0FFTyxTQUFTUSxHQUFzQlgsRUFBVU0sRUFBUyxHQUFPLENBQzlELE9BQU9FLG9CQUFrQkMsR0FBd0JULEVBQVVNLENBQU0sQ0FBQyxDQUNwRSxDQUVPLFNBQVNNLEdBQVFDLEVBQVViLEVBQVVNLEVBQVMsR0FBTyxDQUMxRCxNQUFNSCxFQUFPRSxHQUFrQkwsRUFBVU0sQ0FBTSxFQUMvQyxPQUFPSCxFQUFPVyxFQUFrQixtQkFBQ0Qs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T0FBQSxDQUFBNk4sQ0FBQSxFQUVBLFNBQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxJQUFBLEtBQUEsYUFDQSxDQUNBLEVBRUEsTUFBQSxDQUNBLGdCQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsU0FBQSxPQUFBLEVBQUEsU0FBQSxFQUFBLEVBQ0EsUUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLEtBQUEsQ0FBQSxFQUFBLENBQ0EsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLGNBQUEsQ0FBQSxFQUNBLFdBQUEsR0FDQSxhQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxlQUFBLENBQ0EsT0FBQSxLQUFBLE1BQUEsYUFDQSxFQUVBLFdBQUEsQ0FDQSxPQUFBLEtBQUEsYUFBQSxDQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxTQUFBLE1BQUEsU0FBQSxPQUFBLGdCQUdBLEtBQUEsU0FBQSxnQkFBQSxDQUFBLENBQ0EsRUFFQSxNQUFBLFNBQUEsQ0FHQSxLQUFBLE1BQUEsU0FBQSxDQUNBLE1BQUFyUixHQUFBLENBQ0FBLEVBQUEsT0FBQSxRQUFBLGFBQUEsSUFDQSxLQUFBLFNBQUEsWUFBQSxLQUVBLEVBRUEsTUFBQUEsR0FBQSxDQUNBQSxFQUFBLE9BQUEsUUFDQSxLQUFBLFNBQUEsWUFBQSxLQUVBLENBQ0EsQ0FBQSxFQUNBLEdBQUEsQ0FDQSxLQUFBLFdBQUEsR0FDQSxNQUFBLEtBQUEsWUFDQSxNQUFBLEtBQUEsYUFBQSxFQUVBLE1BQUEsS0FBQSxNQUFBLENBRUEsT0FBQTBSLEVBQUEsQ0FDQSxRQUFBLE1BQUFBLENBQUEsQ0FDQSxDQUNBLEtBQUEsV0FBQSxFQUNBLEVBRUEsUUFBQSxDQUNBLE9BQUEsQ0FBQSxLQUFBN1AsRUFBQSxPQUFBLE1BQUE4UCxFQUFBLEtBQUFDLENBQUEsRUFBQSxHQUFBLENBQ0FELE1BQUEsQ0FDQSxRQUFBLFVBQ0EsTUFBQSxRQUNBLEtBQUEsY0FDQSxRQUFBLFNBQ0EsRUFBQTlQLElBQUEsZ0JBQ0ErUCxFQUFBLE1BQ0FsUSxFQUFBQSxRQUFBa1EsQ0FBQSxF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QUEsQ0FDQSxNQUFBLENBQ0EsaUJBQUEsSUFBQSxJQUNBLENBQ0EsRUFFQSxNQUFBLENBQ0EsV0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxRQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFFBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLEtBQUEsQ0FBQSxFQUFBLENBQ0EsRUFFQSxNQUFBLENBRUEsTUFBQXdQLEVBQUF0SCxFQUFBQSxNQUFBLEtBQUEsSUFBQSxFQUNBLFVBQUF4TSxLQUFBLEtBQUEsV0FDQUEsS0FBQThULElBQ0FBLEVBQUE5VCxHQUFBLE1BR0EsTUFBQSxDQUNBLGFBQUEsS0FDQSxXQUFBOFQsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLGlCQUFBLENBQ0EsT0FBQSxJQUNBLEVBRUEsTUFBQSxDQUNBLE9BQUEsS0FBQSxRQUFBLElBQ0EsRUFFQSxRQUFBLENBQ0EsTUFBQSxDQUNBLFdBQUEsS0FBQSxVQUNBLENBQ0EsRUFFQSxlQUFBLENBQ0EsT0FBQSxPQUFBLFlBQ0EsT0FBQSxRQUFBN0UsRUFBQSxLQUFBLE9BQUEsQ0FBQSxFQUFBLElBR0EsQ0FBQSxDQUFBalAsRUFBQStDLENBQUEsS0FDQS9DLElBQUEsVUFBQSxDQUFBK0MsRUFBQSxTQUNBQSxFQUFBLENBQ0EsR0FBQUEsRUFDQSxPQUFBLENBQ0EsTUFBQSxJQUFBLEtBQUEsT0FBQSxDQUNBLENBQ0EsR0FFQSxDQUFBL0MsRUFBQStDLENBQUEsRUFFQSxDQUNBLENBQ0EsRUFFQSxXQUFBLENBQ0EsTUFBQSxDQUFBLENBQUEsS0FBQSxjQUFBLE1BQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxLQUFBLGFBQUF1UCxFQUFBLFVBQUEsT0FBQSxDQUNBLE1BQUEsSUFBQSxDQUNBLEtBQUEsV0FBQSxNQUFBLFVBQUEsSUFDQSxLQUFBLE9BQUEsQ0FFQSxDQUNBLENBQUEsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxLQUFBLGFBQUEsT0FBQSxDQUNBLEVB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QUFBLENBQ0EsTUFBQSxDQUNBLGlCQUFBLElBQUEsSUFDQSxDQUNBLEVBRUEsT0FBQSxDQUNBLHdCQUNBLEVBRUEsTUFBQSxDQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxLQUFBLENBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxLQUFBLENBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxNQUFBLEVBQUEsUUFBQSxJQUFBLEVBQ0EsUUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsWUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxlQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFdBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsV0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxLQUFBLENBQUEsS0FBQTNVLEdBQUEsS0FBQSxPQUNBLE1BQUEsQ0FFQSxHQUNBQSxHQUFBWSxFQUFBLFdBQUFaLENBQUEsRUFDQUEsRUFBQSxLQUFBLEtBQUEsS0FBQSxPQUFBLEVBQ0FBLEVBRUEsbUJBQUEsQ0FBQSxFQUNBLGNBQUEsQ0FBQSxFQUNBLGVBQUEsQ0FBQSxDQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsaUJBQUEsQ0FFQSxPQUFBLElBQ0EsRUFFQSx1QkFBQSxDQUlBLE9BQUEsS0FBQSxXQUFBLEtBQUEsS0FBQSxRQUFBLGVBQ0EsRUFFQSxjQUFBLENBQ0EsTUFBQThLLEVBQUFrRixHQUFBLEtBQUEsT0FBQSxPQUFBLEVBQUEsRUFDQSxVQUFBbUYsS0FBQSxLQUFBLE1BQ0FySyxFQUFBLEtBQUEsR0FBQXFLLEVBQUEsWUFBQSxFQUVBLE9BQUFySyxDQUNBLEVBRUEsTUFBQSxDQUNBLE9BQUFxRSxFQUFBLEtBQUEsT0FBQSxJQUFBLENBQ0EsRUFFQSxhQUFBLFNBQ0EsTUFBQWlHLElBQUFwVSxFQUFBLEtBQUEsT0FBQSxPQUFBLFlBQUFBLEVBQUEsTUFBQSxLQUFBLEtBQ0FnTyxFQUFBb0csR0FBQSxLQUFBLGFBQUEsS0FBQSxLQUFBQSxFQUFBLEVBQ0FBLElBQ0EzTSxFQUFBLEtBQUEsYUFBQSxZQUFBQSxFQUFBLE9BQUEsS0FDQSxPQUFBdUcsSUFBQW9HLEdBRUEsS0FBQSxRQUFBLFFBQUEsQ0FBQSxLQUFBcEcsQ0FBQSxDQUFBLEVBRUFBLENBQ0EsRUFFQSxZQUFBLENBQ0EsR0FBQSxLQUFBLEtBQUEsQ0FDQSxJQUFBcUcsRUFBQSxLQUNBLFVBQUFyRyxLQUFBLE9BQUEsT0FBQSxLQUFBLElBQUEsRUFBQSxDQUNBLEtBQUEsQ0FBQSxXQUFBc0csQ0FBQSxFQUFBdEcsRUFDQSxHQUFBcE8sRUFBQUEsV0FBQTBVLENBQUEsRUFDQUEsRUFBQSxLQUFBLEtBQUEsS0FBQSxPQUFBLEVBQ0FBLEVBRUEsT0FBQXRHLEVBRUFxRyxJQUNBQSxFQUFBckcsRUFFQSxDQUNBLE9BQUFxRyxDQUNBLENBQ0EsRUFFQSxXQUFBLE9BQ0EsT0FBQXJVLEVBQUEsS0FBQSxTQUFBLFlBQUFBLEVBQUEsU0FDQSxFQUVBLGVBQUEsQ0FDQSxPQUFBLEtBQUEsWUFBQSxDQUFBLE9BQUEsU0FBQSxXQUFBLEdBQUEsQ0FDQSxFQUVBLGVBQUEsQ0FDQSxNQUFBLENBQ0EsUUFBQSxLQUFBLE9BQUEsS0FDQSxHQUFBLEtBQUEsWUFBQSxDQUFBLE9BQUEsWUFBQSxXQUFBLEdBQUEsQ0FDQSxDQUNBLEVBUUEsTUFBQSxDQUNBLE9BQUEsS0FBQSxJQUNBLEVBRUEsVUFBQSxDQUNBLE9BQUEsS0FBQSxRQUNBLEVBRUEsZUFBQSxDQUNBLE9BQUEsS0FBQSxhQUNBLEVBRUEsZUFBQSxDQUNBLE9B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LEVBQUEsVUFBQSxvQkFBQSxDQUNBLE1BQUEsQ0FDQSxVQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsVUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxVQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsV0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFDQSxRQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxDQUFBLE9BQUEsS0FBQSxFQUFBLFFBQUEsSUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxXQUFBLENBQ0EsT0FBQSxLQUFBLFNBQUEsS0FBQSxPQUFBLElBQUEsQ0FDQSxFQUVBLGFBQUEsQ0FDQSxPQUFBLEtBQUEsVUFBQSxXQUFBLENBQ0EsRUFFQSxZQUFBLENBQ0EsT0FBQSxLQUFBLFVBQUEsVUFBQSxHQUFBLENBQUEsQ0FBQSxLQUFBLFFBQ0EsRUFFQSxhQUFBLENBQ0EsT0FBQSxLQUFBLFVBQUEsV0FBQSxHQUFBLENBQUEsQ0FBQSxLQUFBLFVBQ0EsRUFFQSxhQUFBLENBQ0EsT0FBQSxLQUFBLFVBQUEsV0FBQSxDQUNBLEVBRUEsa0JBQUEsT0FDQSxRQUVBOUQsRUFBQSxLQUFBLE9BQUEsWUFBQSxZQUFBQSxFQUFBLFFBSUEsS0FBQSxXQUNBLEdBQUF1VyxFQUFBQSxXQUFBLEtBQUEsTUFBQSxNQUFBLEtBQUEsS0FBQSxhQUVBLElBRUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxVQUFBcFQsRUFBQSxDQUlBLE1BQUEsQ0FBQSxFQUFB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QUFBLFNBQ0EsT0FBQSxDQUNBLE1BQUEsSUFBQSxLQUFBLE9BQUEsQ0FDQSxDQUNBLEVBRUEsT0FBQSxDQUFBLEtBQUEsWUFBQSxDQUNBLEtBQUEsU0FFQSxVQUFBLEdBQ0EsT0FBQSxDQUNBLE1BQUEsQ0FBQSxDQUFBLFVBQUE5VSxDQUFBLElBQUFBLEVBQUEsT0FBQSxDQUNBLENBQ0EsQ0FDQSxFQUNBLEtBQUEsT0FBQSxPQUNBLENBQ0EsQ0FDQSxFQUVBLFVBQUEsQ0FDQSxPQUFBLEtBQUEsYUFBQSxLQUFBLG1CQUNBLEVBRUEsYUFBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLFlBQ0EsRUFFQSxZQUFBLENBRUEsT0FBQSxLQUFBLFFBQUEsUUFDQSxFQUVBLFNBQUEsT0FDQSxNQUFBLENBQUEsS0FBQSxZQUFBLENBQUEsR0FBQXJELEVBQUEsS0FBQSxzQkFBQSxNQUFBQSxFQUFBLFFBQ0EsRUFFQSxhQUFBLE9BQ0EsUUFBQUEsRUFBQSxLQUFBLHNCQUFBLFlBQUFBLEVBQUEsY0FBQSxJQUNBLEVBRUEsWUFBQSxDQUlBLE9BQUEsS0FBQSxhQUFBLE1BQ0EsRUFFQSxNQUFBLENBRUEsT0FBQSxLQUFBLE9BQUEsTUFBQSxJQUNBLEVBRUEsUUFBQSxPQUNBLE9BQUEsS0FBQSxXQUNBLE1BQ0FBLEVBQUEsS0FBQSxRQUFBLEtBQUFBLEVBQUEsSUFDQSxFQUVBLFFBQUEsQ0FDQSxPQUFBLEtBQUEsV0FBQSxPQUFBLE9BQ0EsRUFFQSxVQUFBLENBQ0EsTUFBQUksRUFBQSxLQUFBLFlBQUEsRUFDQSxPQUFBd0MsR0FBQSxLQUFBLE9BQUF4QyxDQUFBLEdBQUFBLENBQ0EsRUFFQSxrQkFBQSxDQUNBLE9BQUFtVyxFQUFBLFdBQUEsS0FBQSxXQUFBLEtBQUEsTUFBQSxPQUFBLEtBQUEsTUFBQSxJQUFBLENBQ0EsRUFFQSxNQUFBLENBU0EsT0FBQSxLQUFBLGFBQUEsS0FBQSxZQUFBLEtBQUEsZUFBQSxJQUNBLEVBRUEsVUFBQSxDQUNBLE9BQUEsS0FBQSxnQkFBQSxLQUFBLGFBQUEsQ0FDQSxFQUVBLFlBQUEsQ0FJ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
5
+ `))}const{$schema:s,...n}=e||{};return s===((u=this.schemaComponent)==null?void 0:u.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)}}}}),Oe={};var vr=p(gr,fr,_r,!1,br,null,null,null);function br(t){for(let e in Oe)this[e]=Oe[e]}const yr=function(){return vr.exports}(),je={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))}}},Fe={mixins:[$t,je],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,{page:e,...s}=this.query||{};return{...s,...t&&{range:t.join(",")}}}},created(){(this.providesData||this.isCreating)&&this.setupData()},methods:{getResource(){var t,e,s;return B((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?{...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 Wt(t,e?{type:e}:{},this)},requestData(){const t=this.queryParams;this.handleRequest({method:"get",query: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,query:s,data:n},a){const r={updateRoot:!0,updateView:this.isInView};this.setLoading(!0,r);const i={method:t,resource:e,data:n,query:s};try{const l=await this.sendRequest(i);a(null,l)}catch(l){const{response:u}=l;if(!a(l,u)){const c=u==null?void 0:u.data;c&&o.isString(c.type)?this.notify({type:"error",title:o.labelize(c.type),text:c.message||l}):this.notify({type:"error",title:"Request Error",text:l})}}this.setLoading(!1,r)},getPayloadData(t,e){return["post","put","patch"].includes(e)&&(t.getSchemaValue(["resource","data"])||t.processedItem)},async submit(t){const e=B(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:l=()=>this.notify({type:"success",title:"Request Successful",text:"Request was successfully sent."}),notifyError:u=c=>this.notify({type:"error",title:"Request Error",text:[`Unable to send request${c?":":""}`,(c==null?void 0:c.message)||c]})}={}){return new Promise(c=>{this.handleRequest({method:s,resource:e,data:n},async(d,_)=>{const f=_==null?void 0:_.data;if(d){const $=this.isValidationError(_)&&f.errors;if($)await this.showValidationErrors($,!0);else{const m=o.isObject(f)?f:d;i==null||i(m),await this.emitButtonEvent(t,"error",{notify:u,error:m})}c(!1)}else a&&f&&this.setData(f),r==null||r(),await this.emitButtonEvent(t,"success",{notify:l}),c(!0)})})},async emitButtonEvent(t,e,{notify:s,error:n}){const a=new w(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}}};var $r=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)},Cr=[];const Pr=g.component("dito-form",{mixins:[ae,Fe],data(){return{createdData:null,clonedData:void 0,sourceKey:null,isForm:!0}},computed:{verbs(){const t=this.getVerbs(),{isCreating:e,providesData:s}=this;return{...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 G(o.merge({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 ct(this.itemId,t)||t},breadcrumbPrefix(){return o.capitalize(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=o.parseDataPath(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];U(this.sourceSchema)&&a==="create"&&e.length--;for(let r=0,i=e.length;r<i&&t;r++){const l=e[r],u=/^:id/.test(n[r])?l==="create"?null:this.findItemIdIndex(this.sourceSchema,t,l):l;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=o.clone(t)),t===null&&!this.isCreating&&U(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 U(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=c=>this.verbs[this.getSubmitVerb(c)],a=B(t.schema.resource,{parent:this.resource}),r=a||this.resource,i=(r==null?void 0:r.method)||this.method,l=this.getPayloadData(t,i);let u;if(!a&&this.isTransient?u=await this.submitTransient(t,r,i,l,{onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:c=>this.emitSchemaEvent("error",{context:{error:c}}),notifySuccess:()=>{const c=n(!1);this.notify({type:"info",title:this.isCreating?`Item ${o.capitalize(c)}`:`Change ${o.capitalize(c)}`,text:[this.isCreating?`${this.itemLabel} was ${c}.`:`Changes to ${this.itemLabel} were ${c}.`,this.transientNote]})},notifyError:()=>{const c=n(!0);this.notify({type:"error",title:"Request Error",text:`Unable to ${c} ${this.itemLabel}.`})}}):u=await this.submitResource(t,r,i,l,{setData:!0,onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:c=>this.emitSchemaEvent("error",{context:{error:c}}),notifySuccess:()=>{const c=n(!1);this.notify({type:"success",title:`Successfully ${o.capitalize(c)}`,text:`${this.itemLabel} was ${c}.`})},notifyError:c=>{const d=n(!0);this.notify({type:"error",title:"Request Error",text:[`Unable to ${d} ${this.itemLabel}${c?":":""}`,(c==null?void 0:c.message)||c]})}}),u){if(this.resetValidation(),s||t.closeForm)this.close();else if(this.isCreating){const c=this.getItemId(this.schema,this.data);this.$router.replace({path:`../${c}`,append:!0})}}return u},async submitTransient(t,e,s,n,{onSuccess:a,onError:r,notifySuccess:i,notifyError:l}){const u=this.isCreating?this.addSourceData(n):this.setSourceData(n);if(u)a==null||a(),await this.emitButtonEvent(t,"success",{notify:i});else{const c="Could not submit transient item";r==null||r(c),await this.emitButtonEvent(t,"error",{notify:l,error:c})}return u}}}),Ve={};var Dr=p(Pr,$r,Cr,!1,wr,null,null,null);function wr(t){for(let e in Ve)this[e]=Ve[e]}const Ee=function(){return Dr.exports}(),uc="",Sr=Ee.component("dito-form-nested",{});let xr,Or;const ke={};var jr=p(Sr,xr,Or,!1,Fr,null,null,null);function Fr(t){for(let e in ke)this[e]=ke[e]}const Vr=function(){return jr.exports}();var Er=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()},kr=[];const cc="",Lr=g.component("dito-errors",{props:{errors:{type:Array,default:null}}}),Le={};var Br=p(Lr,Er,kr,!1,Rr,null,null,null);function Rr(t){for(let e in Le)this[e]=Le[e]}const Tr=function(){return Br.exports}();var qr=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)},Ir=[];const dc="",Mr=g.component("dito-scopes",{props:{query:{type:Object,required:!0},scopes:{type:Object,required:!0}},methods:{getScopeLink(t){const e={...this.query,scope:t.name};return e.page&&(e.page=0),this.getQueryLink(e)}}}),Be={};var Ar=p(Mr,qr,Ir,!1,Nr,null,null,null);function Nr(t){for(let e in Be)this[e]=Be[e]}const zr=function(){return Ar.exports}();var Ur=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}}})},Hr=[];const Kr=g.component("dito-pagination",{components:{Pagination:k.Pagination},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({...this.query,page:t-1}))}}}}),Re={};var Wr=p(Kr,Ur,Hr,!1,Jr,null,null,null);function Jr(t){for(let e in Re)this[e]=Re[e]}const Qr=function(){return Wr.exports}(),Ct={mixins:[$t],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}}};var Gr=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)},Xr=[];const hc="",Yr=g.component("dito-tree-item",{components:{VueDraggable:et.default},mixins:[Ct],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{...this.meta,schema:this.schema}},properties(){return N(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}`,l=n||s.startsWith(i)&&i.length<s.length;return{data:a,path:i,open:l,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&&M(this.schema)}}),editable:h("editable",{type:Boolean,default:!1,get(t){return t&&M(this.schema)}}),deletable:h("deletable",{type:Boolean,default:!1})},methods:{getPropertyDataPath(t){return V(this.dataPath,t.name)},onEdit(){this.$router.push({path:`${this.container.path}${this.path}`,query:this.$route.query})},onDelete(){},onChange(){this.container.onChange()}}}),Te={};var Zr=p(Yr,Gr,Xr,!1,ti,null,null,null);function ti(t){for(let e in Te)this[e]=Te[e]}const ei=function(){return Zr.exports}();var si=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)])},ni=[];const pc="",ai=g.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-${o.hyphenate(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({...this.query,order:`${t.name} ${e}`})}}}),qe={};var ri=p(ai,si,ni,!1,ii,null,null,null);function ii(t){for(let e in qe)this[e]=qe[e]}const oi=function(){return ri.exports}();var li=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)},ui=[];const ci=g.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 w(this,{name:e,value:n,data:t,dataPath:V(this.dataPath,e)})):o.escapeHtml(n)}}}),Ie={};var di=p(ci,li,ui,!1,hi,null,null,null);function hi(t){for(let e in Ie)this[e]=Ie[e]}const pi=function(){return di.exports}(),mi=g.component("dito-vnode",{functional:!0,render:(t,e)=>e.props.node});let fi,_i;const Me={};var gi=p(mi,fi,_i,!1,vi,null,null,null);function vi(t){for(let e in Me)this[e]=Me[e]}const bi=Object.freeze(Object.defineProperty({__proto__:null,DitoRoot:yt,DitoMenu:wn,DitoHeader:Tn,DitoAccount:zn,DitoDialog:Qn,DitoElement:ea,DitoLabel:oa,DitoSchema:pa,DitoSchemaInlined:ba,DitoPane:wa,DitoContainer:Ea,DitoTabs:qa,DitoPanel:Ua,DitoPanels:Ga,DitoButtons:sr,DitoEditButtons:lr,DitoCreateButton:mr,DitoClipboard:yr,DitoView:ie,DitoForm:Ee,DitoFormNested:Vr,DitoErrors:Tr,DitoScopes:zr,DitoPagination:Qr,DitoTreeItem:ei,DitoTableHead:oi,DitoTableCell:pi,DitoVNode:function(){return gi.exports}()},Symbol.toStringTag,{value:"Module"})),y=g.extend({mixins:[X],nativeField:!1,textField:!1,defaultValue:null,defaultNested:!0,defaultVisible:!0,generateLabel:!0,excludeValue:!1,ignoreMissingValue:null,omitPadding:!1});y.register=function(t,e={}){t=o.asArray(t);const s=this.component(`dito-type-${t[0]}`,e);for(const n of t)Xs(n,s);return s},y.get=pt;var yi=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))])},$i=[];const Ci=y.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||o.labelize(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&&Vt(this.schema)&&await this.submit()}}}),Ae={};var Pi=p(Ci,yi,$i,!1,Di,null,null,null);function Di(t){for(let e in Ae)this[e]=Ae[e]}const wi=function(){return Pi.exports}();var Si=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 l=null,u=t._i(a,l);r.checked?u<0&&(t.value=a.concat([l])):u>-1&&(t.value=a.slice(0,u).concat(a.slice(u+1)))}else t.value=i}}},"input",t.attributes,!1),t.listeners))},xi=[];const fc="",Oi=y.register("checkbox",{nativeField:!0}),Ne={};var ji=p(Oi,Si,xi,!1,Fi,null,null,null);function Fi(t){for(let e in Ne)this[e]=Ne[e]}const Vi=function(){return ji.exports}(),ze={mixins:[je],data(){return{isLoading:!1,asyncDataEntries:{}}},methods:{handleDataSchema(t,e,{resolveCounter:s=1,...n}={}){var l;o.isObject(t)||(t={data:t});let{data:a=void 0,dataPath:r=null}=t;const i=this.asyncDataEntries[e]||this.$set(this.asyncDataEntries,e,{dependencyFunction:null,resolveCounter:0,resolvedData:null,resolving:!1});if((l=i.dependencyFunction)==null||l.call(this,this.context),i.resolveCounter>0){const{resolvedData:u}=i;return--i.resolveCounter===0&&(i.resolvedData=null),u}if(i.resolving)a=null;else if(a){if(o.isFunction(a)){const u=a.call(this,this.context);o.isFunction(u)?(i.dependencyFunction=a,a=u.call(this,this.context)):a=u}o.isPromise(a)&&(i.resolving=!0,this.resolveData(a,n).then(u=>{i.resolveCounter=s,i.resolvedData=u,i.resolving=!1}),a=null)}else r&&(a=o.getValueAtDataPath(this.rootData,o.normalizeDataPath(`${this.dataPath}/${r}`)));return a},async resolveData(t,e={}){this.setLoading(!0,e);let s=null;try{s=await(o.isFunction(t)?t():t)}catch(n){this.addError(n.message||n)}return this.setLoading(!1,e),s}}},Z={mixins:[ze],data(){return{hasOptions:!1}},computed:{selectedValue:{get(){const t=s=>this.relate?this.hasOption(s)?this.getValueForOption(s):null:s,e=o.isArray(this.value)?this.value.map(t).filter(s=>s!==null):t(this.value);return this.relate&&this.hasOptions&&(e===null&&this.value!==null||Ms(this.value))&&(this.selectedValue=e),e},set(t){const e=s=>this.relate?this.getOptionForValue(s):s;this.value=o.isArray(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(!o.isArray(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}=o.isFunction(t)?{filter:t}:t;return s?o.debounceAsync(e,s):e}}}),groupByLabel(){return this.groupBy?"label":null},groupByOptions(){return this.groupBy?"options":null}},methods:{getOptionKey(t){const[e]=this.activeOptions;return o.isObject(e)&&t in e?t:null},processOptions(t){if(t.length){if(this.relate)for(const e of t)"id"in e||Is(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 o.isString(e)?t==null?void 0:t[e]:o.isFunction(e)?e.call(this,new w(this,{option:t})):t},getLabelForOption(t){const{optionLabel:e}=this;return o.isString(e)?t==null?void 0:t[e]:o.isFunction(e)?e.call(this,new w(this,{option:t})):o.labelize(`${t}`)}},processValue(t,e,s,n){var a;if(t.relate){const r=(a=t.options)==null?void 0:a.dataPath,i=r?o.normalizeDataPath(`${s}/${r}`):null;n.addRelation(s,i,t),i&&n.setSourceRelated(i);const l=u=>u&&{id:u.id};e=o.isArray(e)?e.map(l):l(e)}return e}};var Ei=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,l=!!i.checked;if(Array.isArray(r)){var u=t.getValueForOption(n),c=t._i(r,u);i.checked?c<0&&(t.selectedOptions=r.concat([u])):c>-1&&(t.selectedOptions=r.slice(0,c).concat(r.slice(c+1)))}else t.selectedOptions=l}}},"input",t.attributes,!1),t.listeners)),t._v(t._s(t.getLabelForOption(n)))])])}),0)},ki=[];const _c="",Li=y.register("checkboxes",{mixins:[Z],nativeField:!0,defaultValue:[],computed:{selectedOptions:{get(){return(this.selectedValue||[]).filter(t=>t)},set(t){this.selectedValue=t||[]}}}}),Ue={};var Bi=p(Li,Ei,ki,!1,Ri,null,null,null);function Ri(t){for(let e in Ue)this[e]=Ue[e]}const Ti=function(){return Bi.exports}();var qi=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}})},Ii=[];const gc="",Mi=y.register("code",{mixins:[K],computed:{lines(){return this.schema.lines||3},style(){return`height: calc(${this.lines}em * var(--line-height))`}},mounted(){const t=new Fs.default(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 l=c=>{c!==t.code&&(n=!0,t.updateCode(c))},u=c=>{c!==this.value&&(s=!0,this.value=c,e=!0,a())};t.onUpdate(c=>{n?n=!1:u(c)}),this.$watch("value",c=>{s?s=!1:l(c||"")}),l(this.value||"")},methods:{focusElement(){var t;(t=this.$el.querySelector("textarea"))==null||t.focus()}}}),He={};var Ai=p(Mi,qi,Ii,!1,Ni,null,null,null);function Ni(t){for(let e in He)this[e]=He[e]}const zi=function(){return Ai.exports}();var Ui=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)},Hi=[];const vc="",Ki=y.register("color",{components:{Trigger:k.Trigger,SketchPicker:Cs.Sketch},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=st.default(t).toString(e),this.onChange()}},hexValue:{get(){if(this.value==null)this.convertedHexValue=null;else if(!this.focused){const t=st.default(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=st.default(`#${this.convertedHexValue}`);e!=null&&e.isValid()&&(this.value=e.toString(this.colorFormat),this.onChange())}}}}),Ke={};var Wi=p(Ki,Ui,Hi,!1,Ji,null,null,null);function Ji(t){for(let e in Ke)this[e]=Ke[e]}const Qi=function(){return Wi.exports}();var Gi=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s(t.component,t._b({tag:"component"},"component",t.$props,!1))},Xi=[];const Yi=y.register("component",{defaultValue:()=>{},ignoreMissingValue:t=>!("default"in t)}),We={};var Zi=p(Yi,Gi,Xi,!1,to,null,null,null);function to(t){for(let e in We)this[e]=We[e]}const eo=function(){return Zi.exports}();var so=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}})},no=[];const ao=y.register(["computed","data","hidden"],{mixins:[ze],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 X.computed.value.get.call(this)},set(t){X.computed.value.set.call(this,t)}}}}),Je={};var ro=p(ao,so,no,!1,io,null,null,null);function io(t){for(let e in Je)this[e]=Je[e]}const oo=function(){return ro.exports}();var lo=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)},uo=[];const co=y.register(["date","datetime","time"],{components:{DatePicker:k.DatePicker,TimePicker:k.TimePicker,DateTimePicker:k.DateTimePicker},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 o.isDate(e)?e.toISOString():e}}),Qe={};var ho=p(co,lo,uo,!1,po,null,null,null);function po(t){for(let e in Qe)this[e]=Qe[e]}const mo=function(){return ho.exports}(),tt={mixins:[Fe,se],defaultValue(t){return H(t)?[]:null},provide(){return{$sourceComponent:()=>this}},data(){return{wrappedPrimitives:null,unwrappingPrimitives:!1,ignoreRouteChange:!1}},computed:{sourceComponent(){return this},isObjectSource(){return U(this.type)},isListSource(){return H(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:ht("query",{get(t){return{...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={...this.query,...e!=null&&{scope:e},...s!=null&&{page:s},...t},o.equals(t,this.$route.query)||(this.ignoreRouteChange=!0,this.$router.replace({query:t,hash:this.$route.hash})),t}}),total:ht("total"),columns(){return N(this.schema.columns)},scopes(){return N(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=o.isString(e)?e:"asc";return`${t.name} ${s}`}}},nestedMeta(){return{...this.meta,schema:this.schema}},forms(){return Object.values(z(this.schema,this.context))},view(){return gt(this.schema,this.context)},linksToView(){return!!this.view},buttonSchemas(){return G(this.schema.buttons)},hasLabels(){return this.forms.some(rn)},isCompact(){return this.forms.every(zt)},isInlined(){return bt(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&&M(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&&o.isArray(t)||this.isObjectSource&&o.isObject(t)?this.value=t:this.unwrapListData(t)||o.isObject(t)&&this.isInView&&this.viewComponent.setData(t)},unwrapListData(t){if(this.isListSource&&o.isObject(t)&&o.isNumber(t.total)&&o.isArray(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=ct(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=o.parseDataPath(t.slice(this.dataPath.length+1))[0])!=null?s:null:0:null;if(a!==null&&o.isNumber(+a)){const r=this.getSchemaComponent(+a);if(r){const{opened:i}=r;i||(r.opened=!0,await this.$nextTick());const l=r.getComponentsByDataPath(t);if(l.length>0&&((n=e==null?void 0:e(l))!=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,l=i[i.length-1];s((u=e==null?void 0:e([l]))!=null?u:!0)},r=o.parseDataPath(t);for(;r.length>0;){const i=this.routeComponent.getChildPath(this.api.normalizePath(o.normalizeDataPath(r))),{matched:l}=this.$router.match(i);l.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,l=null){It(t,e,s);const u=bt(e);if(u&&e.resource)throw new Error("Lists with nested forms cannot load data from their own resources");const c=`id${a+1}`,d={api:t,schema:e},_={...d,flatten:i,nested:r,param:c},f=await tn(t,e,a);if(l&&await l(f,a+1),M(e)&&!u){const $=(b,S)=>S?b?`${b}/:${S}`:`:${S}`:b,m=a===0?"":e.path,P={path:$(m,H(e)&&c),component:g.component(r?"dito-form-nested":"dito-form"),meta:_};U(e)&&n.push({...P,path:$(m,c)}),m&&n.push({path:m,redirect:".",meta:d});const[x,D]=f.reduce((b,S)=>(b[S.meta.flatten?0:1].push(S),b),[[],[]]);if(D.length&&(P.children=D),n.push(P),x.length)for(const b of x)n.push({...b.redirect?b:P,path:`${P.path}/${b.path}`,meta:{...b.meta,flatten:i}})}},processValue(t,e,s,n){return n.addSource(s,t),e}},Pt={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:o.isArray(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 fo(t,e,s){const n={label:"Filters",name:"$filters",target:e,disabled:!1,data(){return vo(n,s.query)},components:_o(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.query,filter:go(this.schema,this.data),page:void 0}}}};return n}function _o(t){var s;const e={};for(const n of Object.values(t||{})){const{filter:a,...r}=n,i=a?(s=Pt[a])==null?void 0:s.call(Pt,n):n.components;if(i){r.components={};for(const[l,u]of Object.entries(i))if(u){const c=u.label||o.labelize(u.name||l);r.components[l]={...u,label:!1,placeholder:c}}e[n.name]={label:r.label,type:"object",default:()=>({}),form:r,inlined:!0}}else throw new Error(`Invalid filter '${n.name}': Unknown filter type '${a}'.`)}return e}function Ge(t,e){var n;const s=t.components[e];return(n=s==null?void 0:s.form)==null?void 0:n.components}function go(t,e){const s=[];for(const n in e){const a=e[n];if(a){const r=Object.keys(Ge(t,n)).map(i=>{var l;return(l=a[i])!=null?l:null});r.some(i=>i!==null)&&s.push(`${n}:${r.map(JSON.stringify).join(",")}`)}}return s.length?s:void 0}function vo(t,e){const s={};if(e)for(const a of o.asArray(e.filter)){const[,r,i]=a.match(/^(\w+):(.*)$/);try{s[r]=o.asArray(JSON.parse(`[${i}]`))}catch{}}const n={};for(const a in t.components){const r={},i=s[a];if(i){const l=Ge(t,a);if(l){let u=0;for(const c in l)r[c]=i[u++]}}n[a]=r}return n}var bo=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()},yo=[];const bc="",$o=y.register("list",{components:{VueDraggable:et.default},mixins:[tt,Ct],getSourceType(t){return t},getPanelSchema(t,e,s){const{filters:n}=t;if(n){const a=()=>s.getComponentByDataPath(e,r=>r.type==="list");return fo(N(n),e,{get query(){var r;return(r=a())==null?void 0:r.query},set query(r){const i=a();if(i){const l=u=>o.pickBy(u,c=>c!==void 0);o.equals(l(r),l(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 V(this.dataPath,t)},getEditPath(t,e){if(this.editable){const s=sn(this.schema,this.context)||this.path,n=this.getItemId(this.schema,t,e);return`${s}/${n}`}return null},getCellClass(t){return`dito-cell-${o.hyphenate(t.name)}`},getContext(t,e){return new w(this,{data:t,value:t,index:e,dataPath:this.getDataPath(e)})},onFilterErrors(t){const e=V(this.dataPath,"$filters"),s=this.schemaComponent.getPanelByDataPath(e);if(s)return s.showValidationErrors(t,!0),!0}}}),Xe={};var Co=p($o,bo,yo,!1,Po,null,null,null);function Po(t){for(let e in Xe)this[e]=Xe[e]}const Do=function(){return Co.exports}();var wo=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}})},So=[];const yc="",xo=y.register("label",{excludeValue:!0,generateLabel:!1}),Ye={};var Oo=p(xo,wo,So,!1,jo,null,null,null);function jo(t){for(let e in Ye)this[e]=Ye[e]}const Fo=function(){return Oo.exports}();var Vo=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,l=a.onClick;return s("button",{staticClass:"dito-button",class:{"dito-active":i},on:{click:l}},[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)},Eo=[];const $c="",ko=y.register("markup",{components:{EditorContent:W.EditorContent,EditorMenuBar:W.EditorMenuBar,Icon:k.Icon},mixins:[K],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 o.isObject(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=o.debounce(l=>{e=!0,this.value=l(),t=!0,s()},100),i=({getHTML:l})=>{r(l),this.onInput()};this.$watch("value",l=>{e?e=!1:this.editor.setContent(l,!1,this.parseOptions)}),this.editor=new W.Editor({...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:l})=>({x:i,y:l});let s=e(t).y,n=parseFloat(getComputedStyle(this.$refs.editor.$el).height);const a=i=>{const{y:l}=e(i);n+=l-s,s=l,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 F.Bold,t.italic&&new F.Italic,t.underline&&new F.Underline,t.strike&&new F.Strike,t.small&&new Lo,t.code&&new F.Code,t.link&&new Bo,e.blockquote&&new F.Blockquote,e.codeBlock&&new F.CodeBlock,new F.HardBreak,e.heading&&new F.Heading({levels:e.heading}),e.horizontalRule&&new F.HorizontalRule,(e.orderedList||e.bulletList)&&new F.ListItem,e.bulletList&&new F.BulletList,e.orderedList&&new F.OrderedList,s.history&&new F.History].filter(n=>!!n)},getButtons(t,e){const s=[],n=({name:r,icon:i,attrs:l,ignoreActive:u,onClick:c})=>{const d=this.editor.isActive[r],_=this.editor.commands[r];s.push({name:r,icon:i,isActive:(d==null?void 0:d(l))&&(u==null||!u()),onClick:()=>c?c(_,l):_(l)})},a=this.schema[t];if(a)for(const[r,i]of Object.entries(e)){const l=["undo","redo"].includes(r)?"history":r,u=a[l],c=o.underscore(r),d=o.hyphenate(r);if(u){if(i===!0)n({name:c,icon:d});else if(o.isObject(i)){const{attr:_,values:f,ignoreActive:$,onClick:m}=i;if(_){if(o.isArray(f)&&o.isArray(u))for(const P of f)u.includes(P)&&n({name:c,icon:`${d}-${P}`,attrs:{[_]:P},ignoreActive:$,onClick:m})}else n({name:c,icon:d,ignoreActive:$,onClick:m})}}}return s},focusElement(){var t,e;(e=(t=this.$el).scrollIntoView)==null||e.call(t),this.editor.focus()}}});class Lo extends W.Mark{get name(){return"small"}get schema(){return{parseDOM:[{tag:"small"}],toDOM:()=>["small",0]}}commands({type:e}){return()=>Ps.toggleMark(e)}}class Bo extends F.Link{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 Ze={};var Ro=p(ko,Vo,Eo,!1,To,null,null,null);function To(t){for(let e in Ze)this[e]=Ze[e]}const qo=function(){return Ro.exports}(),Cc="";var Io=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)},Mo=[];const Pc="",Ao=y.register("multiselect",{components:{VueMultiselect:Vs.default},mixins:[Z],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 ${this.label}`:e?`Select or search ${this.label}`: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 w(this,{query:t})))):this.searchedOptions=null)}}}),ts={};var No=p(Ao,Io,Mo,!1,zo,null,null,null);function zo(t){for(let e in ts)this[e]=ts[e]}const Uo=function(){return No.exports}(),Dt={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){o.isArray(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}}};var Ho=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))},Ko=[];const Dc="",Wo=y.register(["number","integer"],{components:{InputField:k.InputField},mixins:[Dt],nativeField:!0,textField:!0,computed:{isInteger(){return this.type==="integer"}}}),es={};var Jo=p(Wo,Ho,Ko,!1,Qo,null,null,null);function Qo(t){for(let e in es)this[e]=es[e]}const Go=function(){return Jo.exports}();var Xo=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()},Yo=[];const wc="",Zo=y.register("object",{mixins:[tt],getSourceType(t){return t},methods:{getContext(){return new w(this,{data:this.objectData})}}}),ss={};var tl=p(Zo,Xo,Yo,!1,el,null,null,null);function el(t){for(let e in ss)this[e]=ss[e]}const sl=function(){return tl.exports}(),nl=y.register("panel",{defaultValue:()=>{},excludeValue:!0,generateLabel:!1,omitPadding:!0,getPanelSchema(t){const{name:e,...s}=t;return s}});let al,rl;const ns={};var il=p(nl,al,rl,!1,ol,null,null,null);function ol(t){for(let e in ns)this[e]=ns[e]}const ll=function(){return il.exports}();var ul=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))},cl=[];const dl=y.register("progress",{mixins:[Dt],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]}}}),as={};var hl=p(dl,ul,cl,!1,pl,null,null,null);function pl(t){for(let e in as)this[e]=as[e]}const ml=function(){return hl.exports}();var fl=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)},_l=[];const Sc="",gl=y.register("radio",{mixins:[Z],nativeField:!0}),rs={};var vl=p(gl,fl,_l,!1,bl,null,null,null);function bl(t){for(let e in rs)this[e]=rs[e]}const yl=function(){return vl.exports}();var $l=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)},Cl=[];const xc="",Pl=y.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:vt},async processSchema(t,e,s,n,a){await _t(t,e,n,a)}}),is={};var Dl=p(Pl,$l,Cl,!1,wl,null,null,null);function wl(t){for(let e in is)this[e]=is[e]}const Sl=function(){return Dl.exports}();var xl=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()])},Ol=[];const Oc="",jl=y.register("select",{mixins:[Z],nativeField:!0,data(){return{populate:!0}}}),os={};var Fl=p(jl,xl,Ol,!1,Vl,null,null,null);function Vl(t){for(let e in os)this[e]=os[e]}const El=function(){return Fl.exports}();var kl=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)},Ll=[];const jc="",Bl=y.register("slider",{components:{InputField:k.InputField},mixins:[Dt],nativeField:!0,computed:{input:h("input",{type:Boolean,default:!0})}}),ls={};var Rl=p(Bl,kl,Ll,!1,Tl,null,null,null);function Tl(t){for(let e in ls)this[e]=ls[e]}const ql=function(){return Rl.exports}();var Il=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))},Ml=[];const Fc="",Al=y.register("switch",{defaultValue:!1,defaultWidth:"auto",components:{SwitchButton:k.SwitchButton},computed:{labels(){return this.schema.labels}}}),us={};var Nl=p(Al,Il,Ml,!1,zl,null,null,null);function zl(t){for(let e in us)this[e]=us[e]}const Ul=function(){return Nl.exports}();var Hl=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))},Kl=[];const Wl="****************",Jl=y.register(["text","email","url","hostname","domain","tel","password","creditcard"],{components:{InputField:k.InputField},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?Wl: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}:{}}}}),cs={};var Ql=p(Jl,Hl,Kl,!1,Gl,null,null,null);function Gl(t){for(let e in cs)this[e]=cs[e]}const Xl=function(){return Ql.exports}();var Yl=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))},Zl=[];const Vc="",tu=y.register("textarea",{nativeField:!0,textField:!0,computed:{lines(){return this.schema.lines||4},resizable:h("resizable",{type:Boolean,default:!1})}}),ds={};var eu=p(tu,Yl,Zl,!1,su,null,null,null);function su(t){for(let e in ds)this[e]=ds[e]}const nu=function(){return eu.exports}();var au=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)},ru=[];const Ec="",iu=y.register(["tree-list","tree-object"],{mixins:[tt],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:{name:this.name,...this.schema}}:this.schema},hasEditableForms(){const t=e=>M(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,l=null){return tt.processSchema(t,e,s,n,a,r,i,(u,c)=>{const{children:d}=e;if(d)return d.type="tree-list",this.processSchema(t,d,d.name,u,c,r,!0,l)})},getFormSchemasForProcessing(t,e){const{children:s}=t;return z(t,e,s?n=>({...n,components:{...n.components,[s.name]:s}}):null)}}),hs={};var ou=p(iu,au,ru,!1,lu,null,null,null);function lu(t){for(let e in hs)this[e]=hs[e]}const uu=function(){return ou.exports}();function ps(t){return xs.filesize(t,{base:10})}var cu=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)])},du=[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")])])])}];const kc="",hu=y.register("upload",{components:{VueUpload:Es.default,VueDraggable:et.default},filters:{formatFileSize:ps},mixins:[Ct],data(){return{uploads:[]}},computed:{upload(){return this.$refs.upload},files(){return ms(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 o.isArray(t)?t.join(","):t}}),maxSize:h("maxSize",{type:[String,Number],get(t){return t?ks.default(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 w(this,{value:t,data:this.files,index:e,dataPath:V(this.dataPath,e)})):o.escapeHtml(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: ${ps(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=ms(e).map(({upload:n,...a})=>!n||n.success?a:null).filter(n=>n);return t.multiple?s:s[0]||null}});function ms(t){return t?o.asArray(t):[]}const fs={};var pu=p(hu,cu,du,!1,mu,null,null,null);function mu(t){for(let e in fs)this[e]=fs[e]}const fu=Object.freeze(Object.defineProperty({__proto__:null,TypeButton:wi,TypeCheckbox:Vi,TypeCheckboxes:Ti,TypeCode:zi,TypeColor:Qi,TypeComponent:eo,TypeComputed:oo,TypeDate:mo,TypeList:Do,TypeLabel:Fo,TypeMarkup:qo,TypeMultiselect:Uo,TypeNumber:Go,TypeObject:sl,TypePanel:ll,TypeProgress:ml,TypeRadio:yl,TypeSection:Sl,TypeSelect:El,TypeSlider:ql,TypeSwitch:Ul,TypeText:Xl,TypeTextarea:nu,TypeTreeList:uu,TypeUpload:function(){return pu.exports}()},Symbol.toStringTag,{value:"Module"})),_s=new Set;function _u(t){_s.has(t)||(_s.add(t),console.warn(t))}const gu=["create","created","save","saved","submit","submitted","delete","deleted","edit","edited","close","closed","cancel","cancelled","drag","dragged"].reduce((t,e)=>(t[e]=e,t),{});q.default.config.productionTip=!1,q.default.use(xt.default),q.default.use(Os.default,{dynamic:!0}),q.default.use(js.default);class vu{constructor(e,{dito:s={},api:n,views:a={},...r}={}){this.el=e,this.api=n=o.merge({base:"/"},s.api,n),this.options=r,n.locale||(n.locale="en-US"),n.formats=o.merge({},o.defaultFormats,n.formats),n.request||(n.request=l=>yu(n,l)),n.getApiUrl||(n.getApiUrl=l=>Cu(n,l)),n.isApiUrl||(n.isApiUrl=l=>$u(n,l)),n.normalizePath||(n.normalizePath=n.normalizePaths?o.hyphenate:l=>l),n.denormalizePath||(n.denormalizePath=n.normalizePaths?o.camelize:l=>l);const i=n.users=B(n.users,{type:"collection"})||{};i.login=B(i.login||"login",{method:"post",parent:i}),i.logout=B(i.logout||"logout",{method:"post",parent:i}),i.session=B(i.session||"session",{method:"get",parent:i}),n.resources={any(l){const u=this[l==null?void 0:l.type]||this.default;return l&&u.call(this,l)},default(l){const u=this.any(l.parent);return u?`${u}/${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={"Content-Type":"application/json",...n.headers},o.isString(e)&&(e=document.querySelector(e)),this.root=new q.default({el:e,router:new xt.default({mode:"history",base:s.base,linkActiveClass:"",linkExactActiveClass:""}),components:{DitoRoot:yt},provide:{api:n,$verbs:()=>gu,$views:()=>{},$isPopulated:()=>!0,$schemaComponent:()=>null,$schemaParentComponent:()=>null,$routeComponent:()=>null,$dataComponent:()=>null,$sourceComponent:()=>null,$resourceComponent:()=>null,$dialogComponent:()=>null,$panelComponent:()=>null,$tabComponent:()=>null},render:l=>l(yt,{attrs:{id:e.id},props:{unresolvedViews:a,options:r},components:{...bi,...fu}})})}register(e,s){return y.register(e,s)}}class bu extends Error{constructor(e){super(`Request failed with status code: ${e.status} (${e.statusText})`),this.response=e}}async function yu(t,{url:e,method:s="get",params:n=null,query:a=n||null,headers:r=null,data:i=null}){var c,d;n&&_u("request.params is deprecated. Use action.method and action.path instead.");const l=t.isApiUrl(e),u=await fetch(t.getApiUrl({url:e,query:a}),{method:s.toUpperCase(),...i&&{body:JSON.stringify(i)},headers:{...l&&t.headers,...r},credentials:l&&((c=t.cors)==null?void 0:c.credentials)?"include":"same-origin"});if((d=u.headers.get("Content-Type"))!=null&&d.includes("application/json")&&(u.data=await u.json()),!u.ok)throw new bu(u);return u}function $u(t,e){return!o.isAbsoluteUrl(e)||e.startsWith(t.url)}function Cu(t,{url:e,query:s}){o.isAbsoluteUrl(e)||(e=Pu(t.url,e));const n=Du(s);return n?`${e}?${n}`:e}function Pu(t,e){return`${t.replace(/\/+$/,"")}/${e.replace(/^\/+/,"")}`}function Du(t){const e=t?o.isArray(t)?t:Object.entries(t):[];return new URLSearchParams(e.reduce((s,[n,a])=>{for(const r of o.asArray(a))s.push([n,r]);return s},[])).toString()}return vu});
6
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBTdGF0ZS5qcyIsIi4uL3NyYy91dGlscy9kYXRhLmpzIiwiLi4vc3JjL0RpdG9Db250ZXh0LmpzIiwiLi4vc3JjL21peGlucy9FbWl0dGVyTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9yZXNvdXJjZS5qcyIsIi4uL3NyYy9taXhpbnMvRGl0b01peGluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19jcmVkaXRjYXJkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kZWNpbWFscy5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZW1haWwuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2hvc3RuYW1lLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kb21haW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2ludGVnZXIuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21heC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19wYXNzd29yZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmFuZ2UuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JlcXVpcmVkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL191cmwuanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRpb25NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9hY2Nlc3Nvci5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvc2NoZW1hLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvRGl0b0NvbXBvbmVudC5qcyIsIi4uL3NyYy9EaXRvVXNlci5qcyIsIi4uL3NyYy9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzIiwiLi4vc3JjL21peGlucy9Sb3V0ZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWUiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSGVhZGVyLnZ1ZSIsIi4uL3NyYy9taXhpbnMvUHVsbGRvd25NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9BY2NvdW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlIiwiLi4vc3JjL3V0aWxzL21hdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NyZWF0ZUJ1dHRvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY29wZXMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvbWl4aW5zL09yZGVyZWRNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlSGVhZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlQ2VsbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVk5vZGUudnVlIiwiLi4vc3JjL1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRGF0YU1peGluLmpzIiwiLi4vc3JjL21peGlucy9PcHRpb25zTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbG9yLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvZmlsdGVyLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxhYmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTWFya3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTXVsdGlzZWxlY3QudnVlIiwiLi4vc3JjL21peGlucy9OdW1iZXJNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVPYmplY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2xpZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVVcGxvYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWUiLCIuLi9zcmMvdXRpbHMvZGVwcmVjYXRlLmpzIiwiLi4vc3JjL3ZlcmJzLmpzIiwiLi4vc3JjL0RpdG9BZG1pbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG4gIHRpdGxlOiAnJyxcbiAgcm91dGVDb21wb25lbnRzOiBbXSxcbiAgdXNlcjogbnVsbCxcbiAgbG9hZENhY2hlOiB7fSwgLy8gU2VlIFR5cGVNaXhpbi5sb2FkKClcbiAgYWN0aXZlTGFiZWw6IG51bGwsXG4gIGNsaXBib2FyZERhdGE6IG51bGxcbn1cbiIsImltcG9ydCB7XG4gIGlzSW50ZWdlciwgcGFyc2VEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKSB7XG4gIHJldHVybiBkYXRhUGF0aFxuICAgID8gYCR7ZGF0YVBhdGh9LyR7dG9rZW59YFxuICAgIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHBhdGg/LnBvcCgpXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5lc3RlZCA/IHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIDogcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICBpZiAocGF0aCkge1xuICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHRva2VuLiBJZiBpdCdzIGEgbnVtYmVyLCB0aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhblxuICAgIC8vIGFycmF5IGFuZCBuZWVkIHRvIHJlbW92ZSBtb3JlIHRva2VucyB1bnRpbCB3ZSBtZWV0IHRoZSBhY3R1YWwgcGFyZW50OlxuICAgIGxldCB0b2tlblxuICAgIGRvIHtcbiAgICAgIHRva2VuID0gcGF0aC5wb3AoKVxuICAgIH0gd2hpbGUgKHRva2VuICE9IG51bGwgJiYgaXNJbnRlZ2VyKCt0b2tlbikpXG4gICAgLy8gSWYgdGhlIHJlbW92ZWQgdG9rZW4gaXMgdmFsaWQsIHdlIGNhbiBnZXQgdGhlIHBhcmVudCBkYXRhOlxuICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aE5hbWUoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgcmV0dXJuIHRva2VuID09IG51bGwgfHwgaXNJbnRlZ2VyKCt0b2tlbikgPyBudWxsIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aEluZGV4KGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIGNvbnN0IGluZGV4ID0gdG9rZW4gPT0gbnVsbCA/IG51bGwgOiArdG9rZW5cbiAgcmV0dXJuIGlzSW50ZWdlcihpbmRleCkgPyBpbmRleCA6IG51bGxcbn1cblxubGV0IHRlbXBvcmFyeUlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBUZW1wb3JhcnkgaWRzIGFyZSBtYXJrZWQgd2l0aCBhICdAJyBhdCB0aGUgYmVnaW5uaW5nLlxuICBkYXRhW2lkS2V5XSA9IGBAJHsrK3RlbXBvcmFyeUlkfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcG9yYXJ5SWQoaWQpIHtcbiAgcmV0dXJuIC9eQC8udGVzdChpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1RlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICByZXR1cm4gaXNUZW1wb3JhcnlJZChkYXRhPy5baWRLZXldKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBob2xkcyBub3RoaW5nIG1vcmUgdGhhbiBhbiBpZC5cbiAgcmV0dXJuIGRhdGE/LltpZEtleV0gIT0gbnVsbCAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDFcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLCBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW0sIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuLy8gYERpdG9Db250ZXh0YCBpbnN0YW5jZXMgYXJlIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCByYXcgYGNvbnRleHRgIG9iamVjdHMsXG4vLyB3aGljaCB0aGVtc2VsdmVzIGFjdHVhbGx5IGluaGVyaXQgZnJvbSB0aGUgbGlua2VkIGBjb21wb25lbnRgIGluc3RhbmNlLCBzb1xuLy8gdGhhdCB0aGV5IG9ubHkgbmVlZCB0byBwcm92aWRlIHRoZSB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgZGlmZmVyZW50IHRoYW5cbi8vIGluIHRoZSB1bmRlcmx5aW5nIGNvbXBvbmVudC4gSW4gb3JkZXIgdG8gbm90IGV4cG9zZSBhbGwgZmllbGRzIGZyb20gdGhlXG4vLyBjb21wb25lbnQsIHRoZSB3cmFwcGVyIGlzIGludHJvZHVjZWQ6XG4vLyBVc2UgV2Vha01hcCBmb3IgdGhlIHJhdyBgY29udGV4dGAgb2JqZWN0cywgc28gd2UgZG9uJ3QgaGF2ZSB0byBwb2xsdXRlIHRoZVxuLy8gYWN0dWFsIGBEaXRvQ29udGV4dGAgaW5zdGFuY2Ugd2l0aCBpdC5cbmNvbnN0IGNvbnRleHRzID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBnZXQoY29udGV4dCwga2V5LCBkZWZhdWx0VmFsdWUpIHtcbiAgY29uc3Qgb2JqZWN0ID0gY29udGV4dHMuZ2V0KGNvbnRleHQpXG4gIGNvbnN0IHZhbHVlID0gb2JqZWN0W2tleV1cbiAgLy8gSWYgYG9iamVjdGAgZXhwbGljaXRseSBzZXRzIHRoZSBrZXkgdG8gYHVuZGVmaW5lZGAsIHJldHVybiBpdC5cbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgfHwgb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSlcbiAgICA/IHZhbHVlXG4gICAgOiBpc0Z1bmN0aW9uKGRlZmF1bHRWYWx1ZSlcbiAgICAgID8gZGVmYXVsdFZhbHVlKClcbiAgICAgIDogZGVmYXVsdFZhbHVlXG59XG5cbmZ1bmN0aW9uIHNldChjb250ZXh0LCBrZXksIHZhbHVlKSB7XG4gIGNvbnRleHRzLmdldChjb250ZXh0KVtrZXldID0gdmFsdWVcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0NvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICAvLyBVc2UgdGhlIHByb3ZpZGVkIHBhcmFtcyBvYmplY3QgLyBmdW5jdGlvbiwgb3IgY3JlYXRlIGEgbmV3IG9uZTpcbiAgICBjb250ZXh0ID0gY29udGV4dFxuICAgICAgPyAoaXNGdW5jdGlvbihjb250ZXh0KSA/IGNvbnRleHQoKSA6IHsgLi4uY29udGV4dCB9KVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIGNvbnRleHRzLnNldCh0aGlzLCBvYmplY3QpXG4gIH1cblxuICBzdGF0aWMgZ2V0KGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0IGluc3RhbmNlb2YgRGl0b0NvbnRleHRcbiAgICAgID8gY29udGV4dFxuICAgICAgOiBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCBjb250ZXh0KVxuICB9XG5cbiAgLy8gYG5lc3RlZGAgaXMgYHRydWVgIHdoZW4gdGhlIGRhdGEtcGF0aCBwb2ludHMgYSB2YWx1ZSBpbnNpZGUgYW4gaXRlbSwgYW5kXG4gIC8vIGBmYWxzZWAgd2hlbiBpdCBwb2ludHMgdG8gdGhlIGl0ZW0gaXRzZWxmLlxuICBnZXQgbmVzdGVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25lc3RlZCcsIHRydWUpXG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmFsdWUnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgZGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YVBhdGgnLCAnJylcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ25hbWUnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhOYW1lKHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGluZGV4KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2luZGV4JywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbURhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gIH1cblxuICBnZXQgaXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLml0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMucGFyZW50SXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IGl0ZW0oKSB7XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0czpcbiAgICAvLyBJZiBgZGF0YWAgaXNuJ3QgcHJvdmlkZWQsIHdlIGNhbiBkZXRlcm1pbmUgaXQgZnJvbSByb290RGF0YSAmIGRhdGFQYXRoOlxuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGEnLCAoKSA9PlxuICAgICAgZ2V0SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICApXG4gIH1cblxuICAvLyBOT1RFOiBgcGFyZW50SXRlbWAgaXNuJ3QgdGhlIGNsb3Nlc3QgZGF0YSBwYXJlbnQgdG8gYGl0ZW1gLCBpdCdzIHRoZVxuICAvLyBjbG9zZXN0IHBhcmVudCB0aGF0IGlzbid0IGFuIGFycmF5LCBlLmcuIGZvciByZWxhdGlvbnMgb3IgbmVzdGVkIEpTT05cbiAgLy8gZGF0YS4gIFRoaXMgaXMgd2h5IHRoZSB0ZXJtIGBpdGVtYCB3YXMgY2hvc2VuIG92ZXIgYGRhdGFgLCBlLmcuIFZTIHRoZVxuICAvLyB1c2Ugb2YgYHBhcmVudERhdGFgIGluIHNlcnZlci1zaWRlZCB2YWxpZGF0aW9uLCB3aGljaCBpcyB0aGUgY2xvc2VzdFxuICAvLyBwYXJlbnQuIElmIG5lZWRlZCwgd2UgY291bGQgZXhwb3NlIHRoaXMgZGF0YSBoZXJlIHRvbywgYXMgd2UgY2FuIGRvIGFsbFxuICAvLyBzb3J0cyBvZiBkYXRhIHByb2Nlc3Npbmcgd2l0aCBgcm9vdERhdGFgIGFuZCBgZGF0YVBhdGhgLlxuICBnZXQgcGFyZW50SXRlbSgpIHtcbiAgICBjb25zdCBwYXJlbnRJdGVtID1cbiAgICAgIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpIHx8IG51bGxcbiAgICByZXR1cm4gcGFyZW50SXRlbSAhPT0gdGhpcy5pdGVtID8gcGFyZW50SXRlbSA6IG51bGxcbiAgfVxuXG4gIGdldCByb290SXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyb290RGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwcm9jZXNzZWREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBjbGlwYm9hcmRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NsaXBib2FyZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndXNlcicsIG51bGwpXG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2FwaScsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld3MoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld3MnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGl0ZW1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpdGVtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtTGFiZWwnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogUmVtb3ZlIGV4cG9zdXJlIHNpbmNlIHRoZSBhc3NvY2lhdGVkIGNvbXBvbmVudCBkb2Vzbid0IGFsd2F5cyBleGlzdCxcbiAgLy8gZS5nLiBuZXN0ZWQgZm9ybXMgaW4gYHByb2Nlc3NEYXRhKClgLiBJbnN0ZWFkLCBiaW5kIGNvbXBvbmVudCB0byBgdGhpc2BcbiAgLy8gb25seSB3aGVyZSBhdmFpbGFibGUuXG4gIGdldCBjb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFRPRE86IEFkZCBgY29tcG9uZW50U2NoZW1hYCBnZXR0ZXIgZm9yIHRoZSBzY2hlbWEgb2YgdGhlIGN1cnJlbnQgY29tcG9uZW50LFxuICAvLyBldmVuIHdoZW4gdGhlIGNvbXBvbmVudCBpc24ndCBhY3R1YWxseSBpbnN0YW50aWF0ZWQuIENvbnNpZGVyIGFkZGluZ1xuICAvLyBgc291cmNlU2NoZW1hYCBhcyB3ZWxsP1xuXG4gIC8vIFRPRE86IEZpeCB1bmNsZWFyIG5hbWluZzogV2hpY2ggc2NoZW1hIGlzIHRoaXMsIHRoYXQgb2YgdGhlIGNvbXBvbmVudCBvciBvZlxuICAvLyBpdHMgcGFyZW50PyBJc24ndCBleHBvc2luZyBgZm9ybUNvbXBvbmVudGAgYW5kIGB2aWV3Q29tcG9uZW50YCBlbm91Z2gsIG9uY2VcbiAgLy8gd2Ugb2ZmZXIgYWNjZXNzIHRvIHRoZWlyIGNvbXBvbmVudHMgdGhlcmUgdGhyb3VnaCBgZ2V0Q29tcG9uZW50KClgICYgY28uIG9uXG4gIC8vIGBEaXRvTWl4aW5gIHBlcmhhcHM/ICBBbHNvLCB0aGVyZSBjb3VsZCBiZSBhIGB0YWJDb21wb25lbnRgIGdldHRlciBmb3JcbiAgLy8gc2NoZW1hcyBpbiB0YWJzP1xuICBnZXQgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NjaGVtYUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmb3JtQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3Q29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkaWFsb2dDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHBhbmVsQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3BhbmVsQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdyZXNvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3NvdXJjZUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBXaGVuIHVzZWQgaW4gT3B0aW9uc01peGluIGZvciBgc2NoZW1hLm9wdGlvbnMudmFsdWUoKWAsXG4gIC8vIGBzY2hlbWEub3B0aW9ucy5sYWJlbCgpYCBhbmQgIGBzY2hlbWEuc2VhcmNoLmZpbHRlcigpYCBjYWxsYmFja3M6XG4gIGdldCBvcHRpb24oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9uJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnb3B0aW9ucycsIHVuZGVmaW5lZClcbiAgfVxuXG4gIC8vIFRPRE86IFJlbmFtZSB0aGlzIHRvIGBzZWFyY2hUZXJtYCBvciBgc2VhcmNoUXVlcnlgLCB0byBwZXJoYXBzIGZyZWUgYHF1ZXJ5YFxuICAvLyBmb3IgdGhlIGFjdHVhbCBgcmVzb3VyY2VDb21wb25lbnQucXVlcnlgIG9iamVjdD9cbiAgZ2V0IHF1ZXJ5KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3F1ZXJ5JywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVGhlIGVycm9yIGZpZWxkIGlzIG9ubHkgcG9wdWxhdGVkIGluIHRoZSBjb250ZXh0IG9mIGJ1dHRvbnMgdGhhdCBzZW5kXG4gIC8vIHJlcXVlc3RzLCBzZWUgYFJlc291cmNlTWl4aW4uZW1pdEJ1dHRvbkV2ZW50KClgOlxuICBnZXQgZXJyb3IoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZXJyb3InLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgd2FzTm90aWZpZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnd2FzTm90aWZpZWQnLCBmYWxzZSlcbiAgfVxuXG4gIC8vIEhlbHBlciBNZXRob2RzXG5cbiAgZ2V0IHJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQucmVxdWVzdChvcHRpb25zKVxuICB9XG5cbiAgZ2V0IGZvcm1hdCgpIHtcbiAgICByZXR1cm4gKHZhbHVlLCBvcHRpb25zKSA9PiB0aGlzLmNvbXBvbmVudC5mb3JtYXQodmFsdWUsIG9wdGlvbnMpXG4gIH1cblxuICBnZXQgbmF2aWdhdGUoKSB7XG4gICAgcmV0dXJuIGxvY2F0aW9uID0+IHRoaXMuY29tcG9uZW50Lm5hdmlnYXRlKGxvY2F0aW9uKVxuICB9XG5cbiAgZ2V0IGRvd25sb2FkKCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHRoaXMuY29tcG9uZW50LmRvd25sb2FkKG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZ2V0UmVzb3VyY2VVcmwoKSB7XG4gICAgcmV0dXJuIHJlc291cmNlID0+IHRoaXMuY29tcG9uZW50LmdldFJlc291cmNlVXJsKHJlc291cmNlKVxuICB9XG5cbiAgZ2V0IG5vdGlmeSgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB7XG4gICAgICB0aGlzLmNvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICAgIHNldCh0aGlzLCAnd2FzTm90aWZpZWQnLCB0cnVlKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRldmVudHM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEFzeW5jIHZlcnNpb25zIG9mIFZ1ZSdzICRvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlXG4gICAgLy8gZXZlbnRzIGFkZGVkIC8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3NcbiAgICAvLyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy4kZXZlbnRzIHx8ICh0aGlzLiRldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZXZlbnRzW2V2ZW50XSB8fCAoZXZlbnRzW2V2ZW50XSA9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMuJGV2ZW50c1xuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vZmYoZXYsIGNhbGxiYWNrKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vZmYoa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgc3BlY2lmaWMgZXZlbnRcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBoYW5kbGVycyBmb3IgdGhpcyBldmVudFxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuJGV2ZW50c1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICBjb25zdCB7IHF1ZXVlLCBjYWxsYmFja3MgfSA9IGVudHJ5XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gRW1pdCB0aGUgbmV4dCBldmVudCBpbiB0aGUgcXVldWUgd2l0aCBpdHMgcGFyYW1zLlxuICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGl0IG9ubHkgZ2V0cyByZW1vdmVkIG9uY2UgYG5leHQoKWAgaXMgY2FsbGVkLlxuICAgICAgICAgICAgY29uc3QgZW50cnkgPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgbGV0IHJlc3VsdFxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrcykge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjYWxsYmFjay5hcHBseSh0aGlzLCBlbnRyeS5hcmdzKVxuICAgICAgICAgICAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgRXJyb3IgZHVyaW5nIGV2ZW50IGhhbmRsZXIgZm9yICcke2V2ZW50fSc6YCwgZXJyb3JcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSB0aGF0IHdhcyBhZGRlZCB0byB0aGUgcXVldWUgZm9yIHRoZSBldmVudFxuICAgICAgICAgICAgICAvLyB0aGF0IHdhcyBqdXN0IGNvbXBsZXRlZCBieSB0aGUgd3JhcHBlciB0aGF0IGNhbGxlZCBgbmV4dCgpYFxuICAgICAgICAgICAgICBlbnRyeS5yZXNvbHZlKHJlc3VsdClcbiAgICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlLnB1c2goeyBhcmdzLCByZXNvbHZlIH0pXG4gICAgICAgICAgLy8gRm9yIG5ldyBxdWV1ZXMgKD0gb25seSBvbmUgZW50cnkpIGVtaXQgdGhlIGZpcnN0IGV2ZW50IGltbWVkaWF0ZWx5LFxuICAgICAgICAgIC8vIHRvIGdldCB0aGUgcXVldWUgcnVubmluZy5cbiAgICAgICAgICBpZiAocXVldWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIENoZWNrcyBpZiB0aGUgY29tcG9uZW50IGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQgdHlwZTpcbiAgICBoYXNMaXN0ZW5lcnMoZXZlbnQpIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycyhldikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnQubGVuZ3RoID4gMFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy4kZXZlbnRzPy5bZXZlbnRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGVnYXRlKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZShldiwgdGFyZ2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uKGV2ZW50LCAoLi4uYXJncykgPT4gdGFyZ2V0LmVtaXQoZXZlbnQsIC4uLmFyZ3MpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNBcnJheSwgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0Jvb2xlYW4sIGlzTnVtYmVyLCBpc0Z1bmN0aW9uLCBpc0RhdGUsXG4gIGlzUmVnRXhwLCBhc0FycmF5XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVDaGVja2VycyA9IHtcbiAgQm9vbGVhbjogaXNCb29sZWFuLFxuICBOdW1iZXI6IGlzTnVtYmVyLFxuICBTdHJpbmc6IGlzU3RyaW5nLFxuICBEYXRlOiBpc0RhdGUsXG4gIEFycmF5OiBpc0FycmF5LFxuICBPYmplY3Q6IGlzT2JqZWN0LFxuICBSZWdFeHA6IGlzUmVnRXhwLFxuICBGdW5jdGlvbjogaXNGdW5jdGlvblxufVxuXG4vLyBEZWNsYXJlIHRoZXNlIHNlcGFyYXRlbHkgZnJvbSB0aGUgYHR5cGVDb252ZXJ0ZXJzYCBvYmplY3QsIHRvIHByZXZlbnRcbi8vIEJhYmVsIGlzc3VlcyB3aXRoIGBPYmplY3RgIG92ZXJyaWRpbmcgdGhlIGdsb2JhbCBgT2JqZWN0YDpcbmNvbnN0IHRvQm9vbGVhbiA9IHZhbHVlID0+ICEhdmFsdWVcbmNvbnN0IHRvTnVtYmVyID0gdmFsdWUgPT4gK3ZhbHVlXG5jb25zdCB0b1N0cmluZyA9IHZhbHVlID0+IFN0cmluZyh2YWx1ZSlcblxuY29uc3QgdG9EYXRlID0gdmFsdWUgPT4gaXNEYXRlKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IERhdGUodmFsdWUpXG5cbmNvbnN0IHRvQXJyYXkgPSB2YWx1ZSA9PiBpc0FycmF5KHZhbHVlKVxuICA/IHZhbHVlXG4gIDogaXNTdHJpbmcodmFsdWUpXG4gICAgPyB2YWx1ZS5zcGxpdCgnLCcpXG4gICAgOiBhc0FycmF5KHZhbHVlKVxuXG5jb25zdCB0b09iamVjdCA9IHZhbHVlID0+IGlzT2JqZWN0KHZhbHVlKVxuICA/IHZhbHVlXG4gIC8vIElmIGEgT2JqZWN0IGlzIGV4cGVjdGVkIGJ1dCBhIEJvb2xlYW4gcHJvdmlkZSwgY29udmVydCB0byBhbiBlbXB0eVxuICAvLyBvYmplY3QuIFVzZWQgYnkgYGNyZWF0YWJsZWAgJiBjbywgdGhhdCBjYW4gYmUgYm90aC5cbiAgOiB2YWx1ZSA9PT0gdHJ1ZVxuICAgID8ge31cbiAgICA6IG51bGxcblxuY29uc3QgdG9SZWdFeHAgPSB2YWx1ZSA9PiBpc1JlZ0V4cCh2YWx1ZSlcbiAgPyB2YWx1ZVxuICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBwaWNrQnkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzUmVzb3VyY2Uoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFJlc291cmNlKHNjaGVtYS5yZXNvdXJjZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlc291cmNlKHJlc291cmNlLCBkZWZhdWx0cyA9IHt9KSB7XG4gIGNvbnN0IHsgcGFyZW50LCAuLi5kZWZzIH0gPSBkZWZhdWx0c1xuICByZXNvdXJjZSA9IGlzT2JqZWN0KHJlc291cmNlKSA/IHsgLi4uZGVmcywgLi4ucmVzb3VyY2UgfVxuICAgIDogaXNTdHJpbmcocmVzb3VyY2UpID8geyAuLi5kZWZzLCBwYXRoOiByZXNvdXJjZSB9XG4gICAgOiBudWxsXG4gIC8vIE9ubHkgc2V0IHBhcmVudCBpZiBwYXRoIGRvZXNuJ3Qgc3RhcnQgd2l0aCAnLycsIHNvIHJlbGF0aXZlIFVSTHMgYXJlXG4gIC8vIGRlYWx0IHdpdGggY29ycmVjdGx5LlxuICBpZiAoXG4gICAgcmVzb3VyY2UgJiZcbiAgICBwYXJlbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgIHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkICYmXG4gICAgIXJlc291cmNlLnBhdGg/LnN0YXJ0c1dpdGgoJy8nKVxuICApIHtcbiAgICByZXNvdXJjZS5wYXJlbnQgPSBwYXJlbnRcbiAgICBpZiAoIXJlc291cmNlLnBhdGgpIHtcbiAgICAgIHJlc291cmNlLnBhdGggPSAnLidcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc291cmNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW1iZXJSZXNvdXJjZShpZCwgcmVzb3VyY2UpIHtcbiAgcmV0dXJuIGlkICE9IG51bGwgJiYgcmVzb3VyY2U/LnR5cGUgPT09ICdjb2xsZWN0aW9uJ1xuICAgID8ge1xuICAgICAgdHlwZTogJ21lbWJlcicsXG4gICAgICAuLi5waWNrQnkoXG4gICAgICAgIHJlc291cmNlLFxuICAgICAgICAodmFsdWUsIGtleSkgPT4gWydtZXRob2QnLCAncGF0aCcsICdwYXJlbnQnXS5pbmNsdWRlcyhrZXkpXG4gICAgICApLFxuICAgICAgaWQ6IGAke2lkfWBcbiAgICB9XG4gICAgOiBudWxsXG59XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcsIGlzRnVuY3Rpb24sIGFzQXJyYXksIGVxdWFscyxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoLCBsYWJlbGl6ZSwgaHlwaGVuYXRlLCBmb3JtYXRcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBhcHBTdGF0ZSBmcm9tICcuLi9hcHBTdGF0ZS5qcydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtFbWl0dGVyTWl4aW5dLFxuXG4gIGluamVjdDogW1xuICAgICdhcGknLFxuICAgICckdmVyYnMnLFxuICAgICckdmlld3MnLFxuICAgICckaXNQb3B1bGF0ZWQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8geyAkZGF0YUNvbXBvbmVudDogKCkgPT4gdGhpcyB9XG4gICAgICA6IHt9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGUsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRjaGlsZHJlblswXVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBVc2UgY29tcHV0ZWQgcHJvcGVydGllcyBhcyBsaW5rcyB0byBpbmplY3RzLCBzbyBEaXRvU2NoZW1hIGNhblxuICAgICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICAgIHJldHVybiB0aGlzLiRzY2hlbWFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIFJvdXRlTWl4aW4gY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzRm9ybSA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlld0NvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzVmlldyA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIGN1cnJlbnQgY29tcG9uZW50LCB0aGF0IGlzIGxpbmtlZCB0byBhIHJlc291cmNlIChhbmQgdGh1cyBsb2FkcyBpdHNcbiAgICAvLyBvd24gZGF0YSBhbmQgZG9lc24ndCBob2xkIG5lc3RlZCBkYXRhKS5cbiAgICBkYXRhQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhID8gdGhpcyA6IHRoaXMuJGRhdGFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZGlhbG9nQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFuZWxDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50Py4kcGFyZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50Py4kcGFyZW50LnJvdXRlQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudEZvcm1Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py4kcGFyZW50LmZvcm1Db21wb25lbnRcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlQ3JlYXRlKCkge1xuICAgIHRoaXMuJHVpZCA9ICsrdWlkXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2V0KHRoaXMuc3RvcmUsIGtleSwgdmFsdWUpXG4gICAgfSxcblxuICAgIGdldENoaWxkU3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdG9yZShrZXkpIHx8IHRoaXMuc2V0U3RvcmUoa2V5LCB7fSlcbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hVmFsdWUoXG4gICAgICBrZXlPckRhdGFQYXRoLFxuICAgICAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIHNjaGVtYSA9IHRoaXMuc2NoZW1hLCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4gICAgKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IHR5cGUgJiYgYXNBcnJheSh0eXBlKVxuICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gICAgICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgICAgIGxldCB2YWx1ZSA9IHNjaGVtYVxuICAgICAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgICAgICA6IHNjaGVtYVtrZXlPckRhdGFQYXRoXVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihkZWYpICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgZGVmKSkge1xuICAgICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgICAgICBkZWYgPSBkZWYuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH1cbiAgICAgIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAgICAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgICAgIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydGVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0TGFiZWwoc2NoZW1hLCBuYW1lKSB7XG4gICAgICByZXR1cm4gc2NoZW1hXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnbGFiZWwnLCB7IHR5cGU6IFN0cmluZywgc2NoZW1hIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBsYWJlbGl6ZSxcblxuICAgIGdldEJ1dHRvbkF0dHJpYnV0ZXMobmFtZSwgYnV0dG9uKSB7XG4gICAgICBjb25zdCB2ZXJiID0gdGhpcy52ZXJic1tuYW1lXSB8fCBuYW1lXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzczogYGRpdG8tYnV0dG9uLSR7dmVyYn1gLFxuICAgICAgICB0aXRsZTogYnV0dG9uPy50ZXh0IHx8IGxhYmVsaXplKHZlcmIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldERyYWdPcHRpb25zKGRyYWdnYWJsZSwgZmFsbGJhY2sgPSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGRpc2FibGVkOiAhZHJhZ2dhYmxlLFxuICAgICAgICBoYW5kbGU6ICcuZGl0by1idXR0b24tZHJhZycsXG4gICAgICAgIGRyYWdDbGFzczogJ2RpdG8tZHJhZy1hY3RpdmUnLFxuICAgICAgICBjaG9zZW5DbGFzczogJ2RpdG8tZHJhZy1jaG9zZW4nLFxuICAgICAgICBnaG9zdENsYXNzOiAnZGl0by1kcmFnLWdob3N0JyxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogJ2RpdG8tZHJhZy1mYWxsYmFjaycsXG4gICAgICAgIGZvcmNlRmFsbGJhY2s6IGZhbGxiYWNrXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFF1ZXJ5TGluayhxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiAhIXNjaGVtYSAmJiB0aGlzLmdldFNjaGVtYVZhbHVlKCdpZicsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHtcbiAgICAgIGNvbXBvbmVudHMsXG4gICAgICBidXR0b25zLFxuICAgICAgZGF0YSxcbiAgICAgIHNldHRpbmdzID0ge1xuICAgICAgICB3aWR0aDogNDgwLFxuICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfVxuICAgIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IHRocm91Z2ggdnVlLWpzLW1vZGFsLCBhbmQgd3JhcHMgaXQgaW4gYVxuICAgICAgLy8gcHJvbWlzZSBzbyB0aGF0IHRoZSBidXR0b25zIGluIHRoZSBkaWFsb2cgY2FuIHVzZSBgZGlhbG9nLnJlc29sdmUoKWBcbiAgICAgIC8vIGFuZCBgZGlhbG9nLnJlamVjdCgpYCB0byBjbG9zZSB0aGUgbW9kYWwgZGlhbG9nIGFuZCByZXNvbHZlIC8gcmVqZWN0XG4gICAgICAvLyB0aGUgcHJvbWlzZSBhdCBvbmNlLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy4kbW9kYWwuc2hvdyhEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1kaWFsb2cnKSwge1xuICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgfSwgc2V0dGluZ3MpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UpXG4gICAgICAvLyBSZXNvdXJjZXMgd2l0aG91dCBhIHBhcmVudCBpbmhlcml0IHRoZSBvbmUgZnJvbSBgZGF0YUNvbXBvbmVudGBcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICBpZiAocmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb3VyY2UucGFyZW50ID0gdGhpcy5kYXRhQ29tcG9uZW50Py5yZXNvdXJjZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkoZ2V0UmVzb3VyY2UocmVzb3VyY2UpKVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVVybChyZXNvdXJjZSkge1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpXG4gICAgICByZXR1cm4gdXJsID8gdGhpcy5hcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeTogcmVzb3VyY2UucXVlcnkgfSkgOiBudWxsXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIHJlc291cmNlLCBxdWVyeSwgZGF0YSwgaW50ZXJuYWwgfSkge1xuICAgICAgdXJsIHx8PSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCB8fD0gcmVzb3VyY2U/Lm1ldGhvZFxuICAgICAgY29uc3QgY2hlY2tVc2VyID0gIWludGVybmFsICYmIHRoaXMuYXBpLmlzQXBpVXJsKHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIGRhdGEsIHF1ZXJ5IH0pXG4gICAgICAvLyBEZXRlY3QgY2hhbmdlIG9mIHRoZSBvd24gdXNlciwgYW5kIGZldGNoIGl0IGFnYWluIGlmIGl0IHdhcyBjaGFuZ2VkLlxuICAgICAgaWYgKFxuICAgICAgICBjaGVja1VzZXIgJiZcbiAgICAgICAgbWV0aG9kID09PSAncGF0Y2gnICYmXG4gICAgICAgIGVxdWFscyhyZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy51c2VyLmlkLCB0aGlzLmFwaS51c2VycykpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmZldGNoVXNlcigpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9LFxuXG4gICAgcmVxdWVzdCh7IGNhY2hlLCAuLi5vcHRpb25zIH0pIHtcbiAgICAgIC8vIEFsbG93IGNhY2hpbmcgb2YgbG9hZGVkIGRhdGEgb24gdHdvIGxldmVsczpcbiAgICAgIC8vIC0gJ2dsb2JhbCc6IGNhY2hlIGdsb2JhbGx5LCBmb3IgdGhlIGVudGlyZSBhZG1pbiBzZXNzaW9uXG4gICAgICAvLyAtICdsb2NhbCc6IGNhY2hlIGxvY2FsbHkgd2l0aGluIHRoZSBjbG9zZXN0IHJvdXRlIGNvbXBvbmVudCB0aGF0IGlzXG4gICAgICAvLyAgICBhc3NvY2lhdGVkIHdpdGggYSByZXNvdXJjZSBhbmQgbG9hZHMgaXRzIG93biBkYXRhLlxuICAgICAgY29uc3QgY2FjaGVQYXJlbnQgPSBjYWNoZSAmJiB7XG4gICAgICAgIGdsb2JhbDogdGhpcy5hcHBTdGF0ZSxcbiAgICAgICAgbG9jYWw6IHRoaXMuZGF0YUNvbXBvbmVudFxuICAgICAgfVtjYWNoZV1cbiAgICAgIGNvbnN0IGxvYWRDYWNoZSA9IGNhY2hlUGFyZW50Py5sb2FkQ2FjaGVcbiAgICAgIC8vIEJ1aWxkIGEgY2FjaGUga2V5IGZyb20gdGhlIGNvbmZpZzpcbiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gbG9hZENhY2hlICYmIGAke1xuICAgICAgICBvcHRpb25zLm1ldGhvZCB8fCAnZ2V0J30gJHtcbiAgICAgICAgb3B0aW9ucy51cmx9ICR7XG4gICAgICAgIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYHF1ZXJ5YCBvblxuICAgICAgICAvLyAyMDIyLTExLTAxLCByZW1vdmUgb25jZSBub3QgaW4gdXNlIGFueXdoZXJlIGFueW1vcmUuXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucXVlcnkgfHwgb3B0aW9ucy5wYXJhbXMgfHwgJycpfSAke1xuICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLmRhdGEgfHwgJycpXG4gICAgICB9YFxuICAgICAgaWYgKGxvYWRDYWNoZSAmJiAoY2FjaGVLZXkgaW4gbG9hZENhY2hlKSkge1xuICAgICAgICByZXR1cm4gbG9hZENhY2hlW2NhY2hlS2V5XVxuICAgICAgfVxuICAgICAgLy8gTk9URTogTm8gYXdhaXQgaGVyZSwgcmVzIGlzIGEgcHJvbWlzZSB0aGF0IHdlIGNhbiBlYXNpbHkgY2FjaGUuXG4gICAgICAvLyBUaGF0J3MgZmluZSBiZWNhdXNlIHByb21pc2VzIGNhbiBiZSByZXNvbHZlZCBvdmVyIGFuZCBvdmVyIGFnYWluLlxuICAgICAgY29uc3QgcmVzID0gdGhpcy5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIENvbnZlcnQgYXhpb3MgZXJyb3JzIHRvIG5vcm1hbCBlcnJvcnNcbiAgICAgICAgICBjb25zdCBkYXRhID0gZXJyb3IucmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICB0aHJvdyBkYXRhXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGRhdGEubWVzc2FnZSksIGRhdGEpXG4gICAgICAgICAgICA6IGVycm9yXG4gICAgICAgIH0pXG4gICAgICBpZiAobG9hZENhY2hlKSB7XG4gICAgICAgIGxvYWRDYWNoZVtjYWNoZUtleV0gPSByZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9LFxuXG4gICAgZm9ybWF0KHZhbHVlLCB7XG4gICAgICBsb2NhbGUgPSB0aGlzLmFwaS5sb2NhbGUsXG4gICAgICBkZWZhdWx0cyA9IHRoaXMuYXBpLmZvcm1hdHMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCB7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlKGxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICgpID0+IHJlc29sdmUodHJ1ZSksXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZG93bmxvYWQob3B0aW9ucyA9IHt9KSB7XG4gICAgICBpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcbiAgICAgICAgb3B0aW9ucyA9IHsgdXJsOiBvcHRpb25zIH1cbiAgICAgIH1cbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ5OTE3MDY2LzExNjM3MDhcbiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgIGEuaHJlZiA9IHRoaXMuYXBpLmdldEFwaVVybChvcHRpb25zKVxuICAgICAgYS5kb3dubG9hZCA9IG9wdGlvbnMuZmlsZW5hbWUgPz8gbnVsbFxuICAgICAgY29uc3QgeyBib2R5IH0gPSBkb2N1bWVudFxuICAgICAgYm9keS5hcHBlbmRDaGlsZChhKVxuICAgICAgYS5jbGljaygpXG4gICAgICBib2R5LnJlbW92ZUNoaWxkKGEpXG4gICAgfSxcblxuICAgIG5vdGlmeShvcHRpb25zKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5jbG9zZU5vdGlmaWNhdGlvbnMoKVxuICAgIH0sXG5cbiAgICBzZXR1cFNjaGVtYUZpZWxkcygpIHtcbiAgICAgIHRoaXMuc2V0dXBNZXRob2RzKClcbiAgICAgIHRoaXMuc2V0dXBDb21wdXRlZCgpXG4gICAgICB0aGlzLnNldHVwRXZlbnRzKClcbiAgICB9LFxuXG4gICAgc2V0dXBNZXRob2RzKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEubWV0aG9kcyB8fCB7fSkpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdGhpc1trZXldID0gdmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIG1ldGhvZCBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cENvbXB1dGVkKCkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEuY29tcHV0ZWQgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc29yID0gaXNGdW5jdGlvbih2YWx1ZSlcbiAgICAgICAgICA/IHsgZ2V0OiB2YWx1ZSB9XG4gICAgICAgICAgOiBpc09iamVjdCh2YWx1ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5nZXQpXG4gICAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGFjY2Vzc29yKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgYWNjZXNzb3IpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIGNvbXB1dGVkIHByb3BlcnR5IGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwRXZlbnRzKCkge1xuICAgICAgY29uc3QgeyB3YXRjaCwgZXZlbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKHdhdGNoKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gaXNGdW5jdGlvbih3YXRjaCkgPyB3YXRjaC5jYWxsKHRoaXMpIDogd2F0Y2hcbiAgICAgICAgaWYgKGlzT2JqZWN0KGhhbmRsZXJzKSkge1xuICAgICAgICAgIC8vIEluc3RhbGwgdGhlIHdhdGNoIGhhbmRsZXJzIGluIHRoZSBuZXh0IHRpY2ssIHNvIGFsbCBjb21wb25lbnRzIGFyZVxuICAgICAgICAgIC8vIGluaXRpYWxpemVkIGFuZCB3ZSBjYW4gY2hlY2sgYWdhaW5zdCB0aGVpciBuYW1lcy5cbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGNhbGxiYWNrXSBvZiBPYmplY3QuZW50cmllcyhoYW5kbGVycykpIHtcbiAgICAgICAgICAgICAgLy8gRXhwYW5kIHByb3BlcnR5IG5hbWVzIHRvICdkYXRhLnByb3BlcnR5JzpcbiAgICAgICAgICAgICAgY29uc3QgZXhwciA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5TmFtZShrZXkpXG4gICAgICAgICAgICAgICAgPyBgZGF0YS4ke2tleX1gXG4gICAgICAgICAgICAgICAgOiBrZXlcbiAgICAgICAgICAgICAgdGhpcy4kd2F0Y2goZXhwciwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBhZGRFdmVudCA9IChrZXksIGV2ZW50LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgICAgICB0aGlzLm9uKGh5cGhlbmF0ZShldmVudCksIGNhbGxiYWNrKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgZXZlbnQgZGVmaW5pdGlvbjogJHtrZXl9OiAke2NhbGxiYWNrfWApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhldmVudHMpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBbHNvIHNjYW4gc2NoZW1hIGZvciBgb25bQS1aXWAtc3R5bGUgY2FsbGJhY2tzIGFuZCBhZGQgdGhlbVxuICAgICAgLy8gVE9ETzogRGVwZXJlY2F0ZSBvbmUgZm9ybWF0IG9yIHRoZSBvdGhlciwgaW4gZmF2b3VyIG9mIG9ubHkgb25lIHdheSBvZlxuICAgICAgLy8gZG9pbmcgdGhpbmdzLiBEZWNpZGUgd2hpY2ggb25lIHRvIHJlbW92ZS5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hKSkge1xuICAgICAgICBpZiAoL15vbltBLVpdLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleS5zbGljZSgyKSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEV2ZW50KGV2ZW50LCB7XG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIHBhcmVudCA9IG51bGxcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IGhhc0xpc3RlbmVycyA9IHRoaXMuaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgY29uc3QgcGFyZW50SGFzTGlzdGVuZXJzID0gcGFyZW50Py5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBpZiAoaGFzTGlzdGVuZXJzIHx8IHBhcmVudEhhc0xpc3RlbmVycykge1xuICAgICAgICAvLyBUaGUgZWZmZWN0cyBvZiBzb21lIGV2ZW50cyBuZWVkIHNvbWUgdGltZSB0byBwcm9wYWdhdGUgdGhyb3VnaCBWdWUuXG4gICAgICAgIC8vIFVzZSAkbmV4dFRpY2soKSB0byBtYWtlIHN1cmUgb3VyIGhhbmRsZXJzIHNlZSB0aGVzZSBjaGFuZ2VzLlxuICAgICAgICAvLyBGb3IgZXhhbXBsZSwgYHByb2Nlc3NlZEl0ZW1gIGlzIG9ubHkgY29ycmVjdCBhZnRlciBjb21wb25lbnRzIHRoYXRcbiAgICAgICAgLy8gYXJlIG5ld2x5IHJlbmRlcmVkIGR1ZSB0byBkYXRhIGNoYW5nZXMgaGF2ZSByZWdpc3RlcmVkIHRoZW1zZWx2ZXMuXG4gICAgICAgIGlmIChbJ2xvYWQnLCAnY2hhbmdlJ10uaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+IChjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KHRoaXMsIGNvbnRleHQpKVxuICAgICAgICBjb25zdCByZXMgPSBoYXNMaXN0ZW5lcnNcbiAgICAgICAgICA/IGF3YWl0IHRoaXMuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIC8vIERvbid0IGJ1YmJsZSB0byBwYXJlbnQgaWYgaGFuZGxlZCBldmVudCByZXR1cm5lZCBgZmFsc2VgXG4gICAgICAgIGlmIChwYXJlbnRIYXNMaXN0ZW5lcnMgJiYgcmVzICE9PSBmYWxzZSkge1xuICAgICAgICAgIHBhcmVudC5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH1cbiAgfVxufVxuXG5sZXQgdWlkID0gMFxuIiwiaW1wb3J0IHsgaXNDcmVkaXRDYXJkIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGNyZWRpdGNhcmQgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0NyZWRpdENhcmQodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgaW52YWxpZCdcbn1cbiIsImV4cG9ydCBjb25zdCBkZWNpbWFscyA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IHtcbiAgICBjb25zdCBtYXRjaCA9IGRlY2ltYWxzID09PSAnKicgPyAnKycgOiBgezEsJHtkZWNpbWFsc319YFxuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeWy0rXT9cXFxcZCooXFxcXC5cXFxcZCR7bWF0Y2h9KT8kYCkudGVzdCh2YWx1ZSlcbiAgfSxcblxuICBtZXNzYWdlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiAoXG4gICAgYG11c3QgYmUgbnVtZXJpYyBhbmQgbWF5IGNvbnRhaW4gJHtcbiAgICAgICFkZWNpbWFscyB8fCBkZWNpbWFscyA9PT0gJyonID8gJycgOiBkZWNpbWFsc1xuICAgIH0gZGVjaW1hbCBwb2ludHNgXG4gIClcbn1cbiIsImltcG9ydCB7IGlzRW1haWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZW1haWwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0VtYWlsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgYSB2YWxpZCBlbWFpbCdcbn1cbiIsImltcG9ydCB7IGlzSG9zdG5hbWUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0hvc3RuYW1lKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGhvc3QgbmFtZSdcbn1cbiIsImltcG9ydCB7IGlzRG9tYWluIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRG9tYWluKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGRvbWFpbidcbn1cbiIsImltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpbnRlZ2VyID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNJbnRlZ2VyKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgd2hvbGUgbnVtYmVyJ1xufVxuIiwiZXhwb3J0IGNvbnN0IG1heCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWF4KSA9PiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIG1heCkge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21heH0gb3IgbGVzc2BcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IG1pbiA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWluKSA9PiB2YWx1ZSA+PSBtaW4sXG4gIG1lc3NhZ2UodmFsdWUsIG1pbikge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21pbn0gb3IgbW9yZWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHBhc3N3b3JkID0ge1xuICAvLyBBbGxvdyBhbnkgdmFsdWUuIEZvciBub3cgdGhpcyBpcyBvbmx5IHVzZWQgYXMgYSBtYXJrZXIsIHRvIGFsbG93IHRoZVxuICAvLyByZXF1aXJlZCB2YWxpZGF0aW9uIHRvIGhhbmRsZSB1bmNoYW5nZWQgcGFzc3dvcmRzIHNlcGFyYXRlbHkuXG4gIHZhbGlkYXRlOiAoKSA9PiB0cnVlXG59XG4iLCJleHBvcnQgY29uc3QgcmFuZ2UgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIFttaW4sIG1heF0pID0+IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIFttaW4sIG1heF0pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJlcXVpcmVkID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBzZXR0aW5ncywgeyBwYXNzd29yZCB9KSA9PiAoXG4gICAgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKSB8fFxuICAgIC8vIFBhc3N3b3JkIGZpZWxkcyB1c2UgYHVuZGVmaW5lZGAgYXMgb3Bwb3NlZCB0byBgbnVsbGAgd2hlbiB0aGV5J3JlIHNldFxuICAgIC8vIGJ1dCB1bmNoYW5nZWQsIGFsbG93IHRoaXMgdG8gcGFzcyB0aHJvdWdoOlxuICAgIChwYXNzd29yZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICApLFxuICBtZXNzYWdlOiAnaXMgcmVxdWlyZWQnLFxuICBudWxsaXNoOiB0cnVlXG59XG4iLCJpbXBvcnQgeyBpc1VybCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCB1cmwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc1VybCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSB2YWxpZCBVUkwnXG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIHZhbGlkYXRpb25zIGZyb20gJy4uL3ZhbGlkYXRpb25zL2luZGV4LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1RvdWNoZWQ6IGZhbHNlLFxuICAgICAgaXNEaXJ0eTogZmFsc2UsXG4gICAgICBpc1ZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGV2ZW50cygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlKClcbiAgICAgICAgfSxcbiAgICAgICAgY2hhbmdlOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgICB9LFxuICAgICAgICBpbnB1dDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZShub3RpZnkgPSB0cnVlKSB7XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAvLyBjb25zb2xlLmxvZygndmFsaWRhdGUnLCB0aGlzLmRhdGFQYXRoLCB2YWx1ZSwgdGhpcy52YWxpZGF0aW9ucylcbiAgICAgIGZvciAoY29uc3QgW3J1bGUsIHNldHRpbmddIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IHZhbGlkYXRpb25zW3J1bGVdXG4gICAgICAgIGlmICh2YWxpZGF0b3IgJiYgKHZhbGlkYXRvci5udWxsaXNoIHx8IHZhbHVlICE9IG51bGwpKSB7XG4gICAgICAgICAgY29uc3QgeyB2YWxpZGF0ZSwgbWVzc2FnZSB9ID0gdmFsaWRhdG9yXG4gICAgICAgICAgaWYgKCF2YWxpZGF0ZSh2YWx1ZSwgc2V0dGluZywgdGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzRnVuY3Rpb24obWVzc2FnZSlcbiAgICAgICAgICAgICAgICA/IG1lc3NhZ2UodmFsdWUsIHNldHRpbmcsIHRoaXMpXG4gICAgICAgICAgICAgICAgOiBtZXNzYWdlXG4gICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IsIHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuaXNWYWxpZCA9IGlzVmFsaWRcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlKGZhbHNlKVxuICAgIH0sXG5cbiAgICBtYXJrRGlydHkoKSB7XG4gICAgICB0aGlzLmlzRGlydHkgPSB0cnVlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICAvLyBDbGVhciBjdXJyZW50bHkgZGlzcGxheWVkIGVycm9ycyBvbiBuZXcgaW5wdXQuXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgYWRkRXJyb3IoZXJyb3IsIGFkZExhYmVsID0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZXJyb3JzIHx8PSBbXVxuICAgICAgaWYgKGFkZExhYmVsKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5sYWJlbCB8fCB0aGlzLnBsYWNlaG9sZGVyIHx8IHRoaXMubmFtZVxuICAgICAgICBlcnJvciA9IGBUaGUgJHtsYWJlbH0gZmllbGQgJHtlcnJvcn0uYFxuICAgICAgfVxuICAgICAgdGhpcy5lcnJvcnMucHVzaChlcnJvcilcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICAvLyBDb252ZXJ0IGZyb20gQUpWIGVycm9ycyBvYmplY3RzIHRvIGFuIGFycmF5IG9mIGVycm9yIG1lc3NhZ2VzXG4gICAgICB0aGlzLmVycm9ycyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IHsgbWVzc2FnZSB9IG9mIGVycm9ycykge1xuICAgICAgICB0aGlzLmFkZEVycm9yKG1lc3NhZ2UsIHRydWUpXG4gICAgICB9XG4gICAgICBpZiAoZm9jdXMpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBnZXRFcnJvcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lcnJvcnMgPyBbLi4udGhpcy5lcnJvcnNdIDogbnVsbFxuICAgIH0sXG5cbiAgICBjbGVhckVycm9ycygpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gbnVsbFxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0Z1bmN0aW9uLCBpc1N0cmluZywgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYUFjY2Vzc29yKFxuICBrZXlPckRhdGFQYXRoLFxuICB7IHR5cGUsIGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQsIGNhbGxiYWNrID0gdHJ1ZSB9ID0ge31cbikge1xuICAvLyBga2V5T3JEYXRhUGF0aGAgY2FuIGJlIGEgc2ltcGxlIHByb3BlcnR5IGtleSxcbiAgLy8gb3IgYSBkYXRhLXBhdGggaW50byBzdWItcHJvcGVydGllcywgYm90aCBpbiBhcnJheSBvciBzdHJpbmcgZm9ybWF0LlxuICBpZiAoaXNTdHJpbmcoa2V5T3JEYXRhUGF0aCkgJiYga2V5T3JEYXRhUGF0aC5pbmNsdWRlcygnLicpKSB7XG4gICAga2V5T3JEYXRhUGF0aCA9IHBhcnNlRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgfVxuICAvLyBVc2UgdGhlIG5vcm1hbGl6ZWQgZGF0YSBwYXRoIGZvciB0aGUgaGFuZGxpbmcgb3ZlcnJpZGVzXG4gIGNvbnN0IG5hbWUgPSBub3JtYWxpemVEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIC8vIE9ubHkgZGV0ZXJtaW5lIHNjaGVtYSB2YWx1ZSBpZiB3ZSBoYXZlIG5vIGdldHRlciwgb3IgdGhlIGdldHRlclxuICAgICAgLy8gd2FudHMgdG8gcmVjZWl2ZSB0aGUgdmFsdWUgYW5kIHByb2Nlc3MgaXQgZnVydGhlcjpcbiAgICAgIGNvbnN0IHZhbHVlID0gIWdldCB8fCBnZXQubGVuZ3RoID4gMFxuICAgICAgICAvLyBOT1RFOiBCZWNhdXNlIGBzY2hlbWFgIG9iamVjdHMgYXJlIHJldHJpZXZlZCBmcm9tIGBtZXRhYCBvYmplY3QsIHRoZXlcbiAgICAgICAgLy8gZG9uJ3Qgc2VlbSB0byBiZSByZWFjdGl2ZS4gVG8gYWxsb3cgY2hhbmdlZCBpbiBgc2NoZW1hYCB2YWx1ZXMsXG4gICAgICAgIC8vIGBzZXQoKWAgc3RvcmVzIGNoYW5nZWQgdmFsdWVzIGluIHRoZSBzZXBhcmF0ZSBgb3ZlcnJpZGVzYCBvYmplY3QuXG4gICAgICAgID8gdGhpcy5vdmVycmlkZXMgJiYgbmFtZSBpbiB0aGlzLm92ZXJyaWRlc1xuICAgICAgICAgID8gdGhpcy5vdmVycmlkZXNbbmFtZV1cbiAgICAgICAgICA6IHRoaXMuZ2V0U2NoZW1hVmFsdWUoa2V5T3JEYXRhUGF0aCwgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIGNhbGxiYWNrIH0pXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBpZiAoc2V0KSB7XG4gICAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdmVycmlkZXMgfHw9IHt9XG4gICAgICAgIHRoaXMuJHNldCh0aGlzLm92ZXJyaWRlcywgbmFtZSwgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdG9yZUFjY2Vzc29yKG5hbWUsIHsgZGVmYXVsdDogZGVmLCBnZXQsIHNldCB9ID0ge30pIHtcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9uczpcbiAgICAgICAgdmFsdWUgPSBpc0Z1bmN0aW9uKGRlZikgPyBkZWYuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpIDogZGVmXG4gICAgICAgIC8vIFRyaWdnZXIgc2V0dGVyIGJ5IHNldHRpbmcgdmFsdWUgYW5kIGFjY2Vzc29yIHRvIGRlZmF1bHQ6XG4gICAgICAgIHRoaXNbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAvLyBOb3cgYWNjZXNzIHN0b3JlIGFnYWluLCBmb3IgcmVhY3Rpdml0eSB0cmFja2luZ1xuICAgICAgICB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgZ2V0dGVyIHRvIGZ1cnRoZXIgY2hhbmdlIG9yIHByb2Nlc3MgdGhlIHZhbHVlXG4gICAgICAvLyByZXRyaWV2ZWQgZnJvbSB0aGUgc3RvcmU6XG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgc2V0dGVyIHRvIHJldHVybiBhIG5ldyB2YWx1ZSB0byBzZXQsIG9yIGRvIHRoZVxuICAgICAgLy8gc2V0dGluZyBpdHNlbGYsIGFuZCB0aGVuIHJldHVybiBgdW5kZWZpbmVkYDpcbiAgICAgIGlmICghc2V0IHx8ICh2YWx1ZSA9IHNldC5jYWxsKHRoaXMsIHZhbHVlKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNldFN0b3JlKG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiY29uc3QgdWlkTWFwID0gbmV3IFdlYWtNYXAoKVxuXG4vLyBHZW5lcmF0ZWQgYW5kIHJlbWVtYmVycyB1bmlxdWUgaWRzIHBlciBwYXNzZWQgb2JqZWN0IHVzaW5nIGEgd2VhayBtYXAuXG5sZXQgdWlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIGdldFVpZChvYmplY3QsIGl0ZW1JZCkge1xuICBsZXQgaWQgPSB1aWRNYXAuZ2V0KG9iamVjdClcbiAgaWYgKCFpZCkge1xuICAgIGlkID0gaXRlbUlkIHx8IGBAJHsrK3VpZH1gXG4gICAgdWlkTWFwLnNldChvYmplY3QsIGlkKVxuICB9XG4gIHJldHVybiBpZFxufVxuIiwiaW1wb3J0IHsgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzSW50ZWdlciwgYXNBcnJheSwgcGFyc2VEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnXG5cbi8vIFNjaGVtYUdyYXBoIGlzIGEgY2xhc3MgdG8gY29sbGVjdCBzY2hlbWEgZ3JhcGggbWV0YSBpbmZvcm1hdGlvbiBpbiBvcmRlciB0b1xuLy8gcHJvY2VzcyBzb3VyY2VzIGFuZCByZWxhdGlvbnMgZm9yIHRoZSBnaXZlbiB0YXJnZXRzICdzZXJ2ZXInIGFuZCAnY2xpcGJvYXJkJyxcbi8vIGFjY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSAoc3ViR3JhcGhba2V5XSA/Pz0ge30pXG4gICAgfVxuICAgIHN1YkdyYXBoLiRzZXR0aW5ncyA9IHtcbiAgICAgIC4uLmRlZmF1bHRzLCAvLyBTZWUgYGFkZFNvdXJjZShkYXRhUGF0aClgXG4gICAgICAuLi5zdWJHcmFwaC4kc2V0dGluZ3MsXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgLy8gT25seSBzZXQgYHJlbGF0ZWQ6IGZhbHNlYCB0aHJvdWdoIHRoZSBkZWZhdWx0cywgYXMgYHNldFNvdXJjZVJlbGF0ZWQoKWBcbiAgICAvLyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBgYWRkU291cmNlKClgLCBkZXBlbmRpbmcgb24gdGhlIGdyYXBoIHN0cnVjdHVyZS5cbiAgICB0aGlzLnNldChkYXRhUGF0aCwgeyB0eXBlOiAnc291cmNlJywgc2NoZW1hIH0sIHsgcmVsYXRlZDogZmFsc2UgfSlcbiAgfVxuXG4gIHNldFNvdXJjZVJlbGF0ZWQoZGF0YVBhdGgpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgcmVsYXRlZDogdHJ1ZSxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgc2NoZW1hLFxuICAgICAgaW50ZXJuYWw6ICEhcmVsYXRlZERhdGFQYXRoLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChyZWxhdGVkRGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aCkge1xuICAgIHJldHVybiBkYXRhUGF0aFxuICAgICAgPyAodGhpcy5yZWZlcmVuY2VzW2RhdGFQYXRoXSA/Pz0gbmFub2lkKDYpKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBmbGF0dGVuKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSBncmFwaCA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGZvciAoY29uc3QgW2tleSwgeyAkc2V0dGluZ3MsIC4uLnN1YkdyYXBoIH1dIG9mIE9iamVjdC5lbnRyaWVzKGdyYXBoKSkge1xuICAgICAgICBpZiAoJHNldHRpbmdzKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksICRzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbc3ViS2V5LCBzZXR0aW5nc10gb2YgZmxhdHRlbihzdWJHcmFwaCkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2Ake2tleX0vJHtzdWJLZXl9YCwgc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllc1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKHRoaXMuZ3JhcGgpXG4gIH1cblxuICBwcm9jZXNzKHNvdXJjZVNjaGVtYSwgZGF0YSwgeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGNsaXBib2FyZCA9IHRhcmdldCA9PT0gJ2NsaXBib2FyZCdcbiAgICBpZiAoY2xpcGJvYXJkKSB7XG4gICAgICBkZWxldGUgZGF0YVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIHNldHRpbmdzXSBvZiB0aGlzLmZsYXR0ZW4oKSkge1xuICAgICAgY29uc3QgeyB0eXBlLCBzY2hlbWEsIGludGVybmFsLCByZWxhdGVkLCByZWZlcmVuY2UgfSA9IHNldHRpbmdzXG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlID09PSAnc291cmNlJ1xuICAgICAgY29uc3QgcmVsYXRpb24gPSB0eXBlID09PSAncmVsYXRpb24nXG4gICAgICBpZiAoc291cmNlIHx8IHJlbGF0aW9uICYmIGludGVybmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlQXREYXRhUGF0aChkYXRhLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgY29uc3QgcmVtb3ZlSWQgPSBjbGlwYm9hcmQgJiYgc291cmNlICYmICFyZWxhdGVkXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gY2xpcGJvYXJkICYmIChcbiAgICAgICAgICByZWxhdGlvbiAmJiBpbnRlcm5hbCB8fFxuICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhc0FycmF5KHZhbHVlcykuZmxhdCgpKSB7XG4gICAgICAgICAgY29uc3QgaWRLZXkgPSAoXG4gICAgICAgICAgICBzb3VyY2UgJiYgc2NoZW1hLmlkS2V5IHx8XG4gICAgICAgICAgICByZWxhdGlvbiAmJiBzY2hlbWEucmVsYXRlQnkgfHxcbiAgICAgICAgICAgICdpZCdcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWU/LltpZEtleV1cbiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZUlkKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgIH0gaWYgKHJlZmVyZW5jZUlkIHx8IGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgIGlmIChpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICAgIGlkID0gaWQuc2xpY2UoMSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZWZLZXkgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICAvLyBDbGlwYm9hcmQganVzdCBuZWVkcyB0ZW1wb3JhcnkgaWRzIHVuZGVyIHRoZSBhY3R1YWwgYGlkS2V5YC5cbiAgICAgICAgICAgICAgICA/IGlkS2V5XG4gICAgICAgICAgICAgICAgLy8gU2VydmVyIHdhbnRzIE9iamVjdGlvbi1zdHlsZSAnI2lkJyAvICcjcmVmJyBwYWlycy5cbiAgICAgICAgICAgICAgICA6IHNvdXJjZSA/ICcjaWQnIDogJyNyZWYnXG4gICAgICAgICAgICAgIGNvbnN0IHJldlZhbHVlID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyBgQCR7aWR9YFxuICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleSByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAvLyBhY2Nyb3NzIHRoZSBmdWxsIGdyYXBoLlxuICAgICAgICAgICAgICAgIDogcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICA/IGAke3JlZmVyZW5jZX0tJHtpZH1gXG4gICAgICAgICAgICAgICAgICA6IGlkIC8vIEEgdGVtcG9yYXJ5IGlkIHdpdGhvdXQgYSByZWxhdGVkLCBqdXN0IHByZXNlcnZlIGl0LlxuICAgICAgICAgICAgICB2YWx1ZVtyZWZLZXldID0gcmV2VmFsdWVcbiAgICAgICAgICAgICAgaWYgKHJlZktleSAhPT0gaWRLZXkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRVaWQgfSBmcm9tICcuL3VpZC5qcydcbmltcG9ydCB7IFNjaGVtYUdyYXBoIH0gZnJvbSAnLi9TY2hlbWFHcmFwaC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIGNsb25lLCBjYW1lbGl6ZSwgaXNNb2R1bGVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNvbXBvbmVudHMgPSB7fVxuY29uc3QgdW5rbm93blR5cGVSZXBvcnRlZCA9IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KSB7XG4gIHR5cGVDb21wb25lbnRzW3R5cGVdID0gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29tcG9uZW50KHR5cGUsIGFsbG93TnVsbCA9IGZhbHNlKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVDb21wb25lbnRzW3R5cGVdIHx8IG51bGxcbiAgaWYgKCFjb21wb25lbnQgJiYgIWFsbG93TnVsbCAmJiAhdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSkge1xuICAgIC8vIFJlcG9ydCBlYWNoIG1pc3NpbmcgdHlwZSBvbmx5IG9uY2UsIHRvIGF2b2lkIGZsb29kaW5nIHRoZSBjb25zb2xlOlxuICAgIHVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0gPSB0cnVlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERpdG8gY29tcG9uZW50IHR5cGU6ICcke3R5cGV9J2ApXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaFNjaGVtYShzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHNjaGVtYXMgPSBbXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhzY2hlbWE/LnRhYnMgfHwge30pLFxuICAgIHNjaGVtYVxuICBdXG4gIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICBpZiAoc2NoZW1hKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEpXG4gICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgc2NoZW1hID0+IHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKVxuICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBjb21wb25lbnQgOiB1bmRlZmluZWRcbiAgKSB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyB0cnVlIDogdW5kZWZpbmVkXG4gICkgPT09IHRydWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5U2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+ICFjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gZmFsc2UgOiB1bmRlZmluZWRcbiAgKSAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWEoc2NoZW1hLCB1bndyYXBNb2R1bGUgPSBmYWxzZSkge1xuICBpZiAoaXNGdW5jdGlvbihzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gc2NoZW1hKClcbiAgfVxuICBpZiAoaXNQcm9taXNlKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBhd2FpdCBzY2hlbWFcbiAgfVxuICBpZiAoaXNNb2R1bGUoc2NoZW1hKSkge1xuICAgIC8vIENvcHkgdG8gY29udmVydCBmcm9tIG1vZHVsZSB0byBvYmplY3Q6XG4gICAgc2NoZW1hID0geyAuLi5zY2hlbWEgfVxuICAgIC8vIFVud3JhcCBkZWZhdWx0IG9yIG5hbWVkIHNjaGVtYVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgKHVud3JhcE1vZHVsZSB8fCBzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGtleXNbMF1cbiAgICAgICAgc2NoZW1hID0gc2NoZW1hW25hbWVdXG4gICAgICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hcyhcbiAgdW5yZXNvbHZlZFNjaGVtYXMsXG4gIHJlc29sdmVJdGVtID0gcmVzb2x2ZVNjaGVtYVxuKSB7XG4gIGxldCBzY2hlbWFzID0gaXNGdW5jdGlvbih1bnJlc29sdmVkU2NoZW1hcylcbiAgICA/IHVucmVzb2x2ZWRTY2hlbWFzKClcbiAgICA6IHVucmVzb2x2ZWRTY2hlbWFzXG4gIHNjaGVtYXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYXMsIGZhbHNlKVxuICBpZiAoaXNBcnJheShzY2hlbWFzKSkge1xuICAgIC8vIFRyYW5zbGF0ZSBhbiBhcnJheSBvZiBkeW5hbWljIGltcG9ydCwgZWFjaCBpbXBvcnRpbmcgb25lIG5hbWVkIHNjaGVtYVxuICAgIC8vIG1vZHVsZSB0byBhbiBvYmplY3Qgd2l0aCBuYW1lZCBlbnRyaWVzLlxuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoYXdhaXQgUHJvbWlzZS5hbGwoc2NoZW1hcy5tYXAoXG4gICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZUl0ZW0oaXRlbSwgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIFtzY2hlbWEubmFtZSwgc2NoZW1hXVxuICAgICAgfVxuICAgICkpKVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNjaGVtYXMpKSB7XG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhhd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhzY2hlbWFzKS5tYXAoXG4gICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZUl0ZW0oaXRlbSwgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgIH1cbiAgICApKSlcbiAgfVxuICByZXR1cm4gc2NoZW1hc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVBhbmVscyhzY2hlbWEpIHtcbiAgY29uc3QgeyBwYW5lbHMgfSA9IHNjaGVtYVxuICBpZiAoc2NoZW1hLnBhbmVscykge1xuICAgIHNjaGVtYS5wYW5lbHMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhwYW5lbHMpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcykge1xuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgYXdhaXQgcmVzb2x2ZVBhbmVscyhzY2hlbWEpXG4gIGlmIChpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSkge1xuICAgIGF3YWl0IHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEsIG5hbWUsIGNoaWxkcmVuLCAwKVxuICB9IGVsc2Uge1xuICAgIC8vIEEgbXVsdGktY29tcG9uZW50IHZpZXcsIHN0YXJ0IGF0IGxldmVsIDFcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4sIDEpXG4gIH1cbiAgcm91dGVzLnB1c2goe1xuICAgIHBhdGg6IGAvJHtzY2hlbWEucGF0aH1gLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbXBvbmVudCxcbiAgICBtZXRhOiB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzQ29tcG9uZW50KGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gIHNjaGVtYS5sZXZlbCA9IGxldmVsXG4gIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICByZXR1cm4gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ucHJvY2Vzc1NjaGVtYT8uKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSkge1xuICAvLyBVc2VkIGZvciB2aWV3IGFuZCBzb3VyY2Ugc2NoZW1hcywgc2VlIFNvdXJjZU1peGluXG4gIHNjaGVtYS5uYW1lID0gbmFtZVxuICBzY2hlbWEucGF0aCA9IHNjaGVtYS5wYXRoIHx8IGFwaS5ub3JtYWxpemVQYXRoKG5hbWUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbCkge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGZvckVhY2hTY2hlbWFDb21wb25lbnQoc2NoZW1hLCAoY29tcG9uZW50LCBuYW1lKSA9PiB7XG4gICAgcHJvbWlzZXMucHVzaChwcm9jZXNzQ29tcG9uZW50KGFwaSwgY29tcG9uZW50LCBuYW1lLCByb3V0ZXMsIGxldmVsKSlcbiAgfSlcbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKSB7XG4gIC8vIEZpcnN0IHJlc29sdmUgdGhlIGZvcm1zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBiYWNrIG9uIHRoZSBzY2hlbWEuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzIH0gPSBzY2hlbWFcbiAgaWYgKGZvcm1zKSB7XG4gICAgZm9ybXMgPSBzY2hlbWEuZm9ybXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhmb3JtcywgcmVzb2x2ZUZvcm0pXG4gIH0gZWxzZSBpZiAoZm9ybSkge1xuICAgIGZvcm0gPSBzY2hlbWEuZm9ybSA9IGF3YWl0IHJlc29sdmVGb3JtKGZvcm0pXG4gIH0gZWxzZSBpZiAoY29tcG9uZW50cykge1xuICAgIC8vIE5PVEU6IFByb2Nlc3NpbmcgZm9ybXMgaW4gY29tcHV0ZWQgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSBpdFxuICAgIC8vIG9ubHkgY2FuIGJlIGNvbXB1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggYWN0dWFsIGRhdGEuXG4gICAgaWYgKGlzT2JqZWN0KGNvbXBvbmVudHMpKSB7XG4gICAgICBmb3JtID0geyBjb21wb25lbnRzIH1cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9IC8vIE9ubHkgdXNlZCBmb3IgcHJvY2VzcyBsb29wIGJlbG93LlxuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIGZvciAoY29uc3QgZm9ybSBvZiBPYmplY3QudmFsdWVzKGZvcm1zKSkge1xuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgZm9ybSwgY2hpbGRyZW4sIGxldmVsICsgMSlcbiAgfVxuICByZXR1cm4gY2hpbGRyZW5cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGb3JtKGZvcm0pIHtcbiAgZm9ybSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoZm9ybSwgdHJ1ZSlcbiAgaWYgKGZvcm0pIHtcbiAgICBhd2FpdCByZXNvbHZlUGFuZWxzKGZvcm0pXG4gIH1cbiAgcmV0dXJuIGZvcm1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgLy8gSWYgdGhlIHNjaGVtYSBoYXMgYSB0eXBlLCBpdCBpcyBhIHNpbmdsZS1jb21wb25lbnQgdmlldy5cbiAgcmV0dXJuICEhc2NoZW1hLnR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgYm90aCBzaW5nbGUgZm9ybSBhbmQgbXVsdGlwbGUgZm9ybXMgbm90YXRpb24sIGFzIHdlbGwgYXMgaW5saW5lZFxuICAvLyBjb21wb25lbnRzLlxuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hKSAmJiAhIShcbiAgICBzY2hlbWEuZm9ybSB8fFxuICAgIHNjaGVtYS5mb3JtcyB8fFxuICAgIHNjaGVtYS5jb21wb25lbnRzXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB7IHZpZXcgfSA9IHNjaGVtYVxuICBjb25zdCB2aWV3U2NoZW1hID0gdmlldyAmJiBjb250ZXh0LnZpZXdzW3ZpZXddXG4gIHJldHVybiB2aWV3U2NoZW1hXG4gICAgPyBoYXNGb3JtU2NoZW1hKHZpZXdTY2hlbWEpXG4gICAgICA/IHZpZXdTY2hlbWFcbiAgICAgIC8vIE5PVEU6IFZpZXdzIGNhbiBoYXZlIHRhYnMsIGluIHdoaWNoIGNhc2UgdGhlIHZpZXcgY29tcG9uZW50IGlzIG5lc3RlZFxuICAgICAgLy8gaW4gb25lIG9mIHRoZSB0YWJzLCBnbyBmaW5kIGl0LlxuICAgICAgOiBmb3JFYWNoU2NoZW1hKHZpZXdTY2hlbWEsIHNjaGVtYSA9PiB7XG4gICAgICAgIGNvbnN0IHZpZXdDb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50cz8uW3ZpZXddXG4gICAgICAgIGlmIChoYXNGb3JtU2NoZW1hKHZpZXdDb21wb25lbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHZpZXdDb21wb25lbnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICByZXR1cm4gdmlld1xuICAgID8gdmlldy5sZXZlbCA9PT0gMFxuICAgICAgPyBgLyR7dmlldy5wYXRofWAgLy8gQSBzaW5nbGUtY29tcG9uZW50IHZpZXdcbiAgICAgIDogYC8ke3ZpZXcucGF0aH0vJHt2aWV3LnBhdGh9YCAvLyBBIG11bHRpLWNvbXBvbmVudCB2aWV3XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIG1vZGlmeUZvcm0pIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlldykge1xuICAgIHNjaGVtYSA9IHZpZXdcbiAgfSBlbHNlIGlmIChzY2hlbWEudmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB2aWV3OiAnJHtzY2hlbWEudmlld30nYClcbiAgfVxuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzLCBjb21wYWN0IH0gPSBzY2hlbWFcbiAgaWYgKCFmb3JtICYmICFmb3Jtcykge1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAvLyBDb252ZXJ0IGlubGluZWQgY29tcG9uZW50cyB0byBmb3Jtcywgc3VwcG9ydGluZyBgY29tcGFjdGAgc2V0dGluZy5cbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMsIGNvbXBhY3QgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBgZm9ybXNgLCBgZm9ybWAgb3IgYGNvbXBvbmVudHNgLCByZXR1cm4gYW5kIGVtcHR5IGBmb3Jtc2Agb2JqZWN0LlxuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZvcm1zKS5tYXAoKFt0eXBlLCBmb3JtXSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBgc2NoZW1hLmNvbXBvbmVudHNgIGNhbGxiYWNrcyB0byBjcmVhdGUgY29tcG9uZW50cyBvbiB0aGUgZmx5LlxuICAgICAgaWYgKGlzRnVuY3Rpb24oZm9ybS5jb21wb25lbnRzKSkge1xuICAgICAgICBmb3JtID0ge1xuICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgY29tcG9uZW50czogZm9ybS5jb21wb25lbnRzKGNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbdHlwZSwgbW9kaWZ5Rm9ybT8uKGZvcm0pID8/IGZvcm1dXG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pIHtcbiAgcmV0dXJuIGZvcm1zW2l0ZW0/LnR5cGVdIHx8IGZvcm1zLmRlZmF1bHQgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KSB7XG4gIHJldHVybiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyhnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQpLCBpdGVtKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWwoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEubGFiZWwgIT09IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhY3Qoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5jb21wYWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEuaW5saW5lZCB8fCBzY2hlbWEuY29tcG9uZW50cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoXG4gICAgc2NoZW1hLm5lc3RlZCB8fFxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHROZXN0ZWQgPT09IHRydWVcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkT21pdFBhZGRpbmcoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lm9taXRQYWRkaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMgYm90aCBvbiBzY2hlbWEgYW5kIG9uIGNvbXBvbmVudCBsZXZlbC5cbiAgLy8gTk9URTogQXQgdGhlIHRpbWUgb2YgY3JlYXRpb24sIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQsIChlLmcuIGlmXG4gIC8vIGVudHJpZXMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBuZXN0ZWQgZm9ybXMsIHRoZSBwYXJlbnQgZm9ybSBpc24ndCBtb3VudGVkKSBzb1xuICAvLyB3ZSBjYW4ndCB1c2UgYGRhdGFQYXRoYCB0byBnZXQgdG8gY29tcG9uZW50cywgYW5kIHRoZSBgZGVmYXVsdFZhbHVlYCBmcm9tXG4gIC8vIHRoZXJlLiBUaGF0J3Mgd2h5IGBkZWZhdWx0VmFsdWVgIGlzIGRlZmluZWQgc3RhdGljYWxseSBpbiB0aGUgY29tcG9uZW50czpcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gc2NoZW1hLmRlZmF1bHRcbiAgY29uc3QgdmFsdWUgPSBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgID8gZGVmYXVsdFZhbHVlXG4gICAgOiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0VmFsdWVcbiAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUpXG4gICAgPyB2YWx1ZShzY2hlbWEpXG4gICAgOiBjbG9uZSh2YWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpIHtcbiAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG4gIHJldHVybiAhIShcbiAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgdHlwZU9wdGlvbnM/Lmlnbm9yZU1pc3NpbmdWYWx1ZT8uKHNjaGVtYSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWxzKHNjaGVtYSkge1xuICBjb25zdCBjaGVja0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+XG4gICAgT2JqZWN0LnZhbHVlcyhjb21wb25lbnRzIHx8IHt9KS5zb21lKGhhc0xhYmVsKVxuXG4gIHJldHVybiAoXG4gICAgY2hlY2tDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKSB8fFxuICAgIE9iamVjdC52YWx1ZXMoc2NoZW1hLnRhYnMgfHwge30pLnNvbWUoY2hlY2tDb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0cyhzY2hlbWEsIGRhdGEgPSB7fSwgY29tcG9uZW50KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgcm9vdERhdGE6IGRhdGEgfVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lKSA9PiB7XG4gICAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNldHMgdXAgYSBkYXRhIG9iamVjdCB0aGF0IGhhcyBrZXlzIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbFxuICAvLyBmb3JtIGZpZWxkcywgc28gdGhleSBjYW4gYmUgY29ycmVjdGx5IHdhdGNoZWQgZm9yIGNoYW5nZXMuXG4gIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsIGRhdGEsIG51bGwsIG51bGwsIHByb2Nlc3NCZWZvcmUsIG51bGwsIG9wdGlvbnNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50ID0gbnVsbCxcbiAgcm9vdERhdGEgPSBjb21wb25lbnQ/LnJvb3REYXRhXG59ID0ge30pIHtcbiAgY29uc3QgeyBjb21wdXRlIH0gPSBzY2hlbWFcbiAgaWYgKGNvbXB1dGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGUoRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgLy8gT3ZlcnJpZGUgdmFsdWUgdG8gcHJldmVudCBlbmRsZXNzIHJlY3Vyc2lvbiB0aHJvdWdoIGNhbGxpbmcgdGhlXG4gICAgICAvLyBnZXR0ZXIgZm9yIGB0aGlzLnZhbHVlYCBpbiBgRGl0b0NvbnRleHRgOlxuICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGFcbiAgICB9KSlcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVXNlIGAkc2V0KClgIGRpcmVjdGx5IGluc3RlYWQgb2YgYHRoaXMudmFsdWUgPSDigKZgIHRvIHVwZGF0ZSB0aGVcbiAgICAgIC8vIHZhbHVlIHdpdGhvdXQgY2FsbGluZyBwYXJzZSgpOlxuICAgICAgVnVlLnNldChkYXRhLCBuYW1lLCB2YWx1ZSlcbiAgICB9XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIHN0aWxsIG1pc3NpbmcgYWZ0ZXIgY29tcHV0ZSwgc2V0IHRoZSBkZWZhdWx0IGZvciBpdDpcbiAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICBWdWUuc2V0KGRhdGEsIG5hbWUsIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpKVxuICB9XG4gIC8vIE5vdyBhY2Nlc3MgdGhlIHZhbHVlLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgcmVhY3Rpdml0eSBhbmQgbmVlZHMgdG9cbiAgLy8gaGFwcGVuIGFmdGVyIGFsbCBwcmlvciBtYW5pcHVsYXRpb24gdGhyb3VnaCBgJHNldCgpYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHNjaGVtYU9ubHksIC8vIHdoZXRoZXIgdG8gb25seSBpbmNsdWRlIGRhdGEgY292ZXJlZCBieSB0aGUgc2NoZW1hLCBvciBhbGwgZGF0YVxuICB0YXJnZXRcbn0gPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHNjaGVtYU9ubHksIHRhcmdldCwgcm9vdERhdGE6IGRhdGEgfVxuICBjb25zdCBwcm9jZXNzZWREYXRhID0gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgZGF0YSwgb3B0aW9ucylcbiAgY29uc3QgZ3JhcGggPSBuZXcgU2NoZW1hR3JhcGgoKVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBvcHRpb25zKVxuICAgIC8vIFRoZSBzY2hlbWEgZXhwZWN0cyB0aGUgYHdyYXBQcmltaXRpdmVzYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgcHJlc2VudCBvblxuICAgIC8vIHRoZSBkYXRhIHRoYXQgaXQgaXMgYXBwbGllZCBvbiwgc28gd2FycCBiZWZvcmUgYW5kIHVud3JhcCBhZnRlci5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIG9yZGVyS2V5LCBpZEtleSA9ICdpZCcgfSA9IHNjaGVtYVxuICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGVudHJ5ID0+ICh7XG4gICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogZW50cnlcbiAgICAgICAgfSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbHdheXMgc2hhbGxvdy1jbG9uZSBhcnJheSB2YWx1ZXM6XG4gICAgICAgIHZhbHVlID0gWy4uLnZhbHVlXVxuICAgICAgfVxuICAgICAgaWYgKG9yZGVyS2V5ICYmIHRhcmdldCA9PT0gJ2NsaXBib2FyZCcpIHtcbiAgICAgICAgLy8gU29ydCB0aGUgZGF0YSBiYWNrIGludG8gdGhlIG5hdHVyYWwgc2VxdWVuY2UgYXMgZGVmaW5lZCBieSB0aGVpciBpZHMsXG4gICAgICAgIC8vIHNvIGNvcHktcGFzdGluZyBiZXR3ZWVuIHNlcnZlcnMgKGUuZy4gbmVzdGVkIGZvbnQtY3V0cyBvbiBMaW5ldG8pXG4gICAgICAgIC8vIG5hdHVyYWxseSBnZXRzIG1hcHBlZCB0byB0aGUgc2FtZSBlbnRyaWVzIGluIHRoZSBncmFwaC5cbiAgICAgICAgdmFsdWUuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkMSA9IGE/LltpZEtleV1cbiAgICAgICAgICBjb25zdCBpZDIgPSBiPy5baWRLZXldXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlkMSA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQxKSA/IDFcbiAgICAgICAgICAgIDogaWQyID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDIpID8gLTFcbiAgICAgICAgICAgIDogaWQxIC0gaWQyXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgZXhjbHVkZSwgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG5cbiAgICAvLyBOT1RFOiBXZSBkb24ndCBjYWNoZSB0aGlzIGNvbnRleHQsIHNpbmNlIGB2YWx1ZWAgaXMgY2hhbmdpbmcuXG4gICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+IERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgIHZhbHVlLFxuICAgICAgbmFtZSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhLFxuICAgICAgLy8gUGFzcyB0aGUgYWxyZWFkeSBwcm9jZXNzZWQgZGF0YSB0byBgcHJvY2VzcygpYCwgc28gaXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICAvLyB0aHJvdWdoIGBwcm9jZXNzZWRJdGVtYCBmcm9tIHRoZXJlLlxuICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgIH0pXG5cbiAgICAvLyBGaXJzdCB1bndyYXAgdGhlIHdyYXBwZWQgcHJpbWl0aXZlcyBhZ2FpbiwgdG8gYnJpbmcgdGhlIGRhdGEgYmFjayBpbnRvXG4gICAgLy8gaXRzIG5hdGl2ZSBmb3JtLiBTZSBgcHJvY2Vzc0JlZm9yZSgpYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSB1c2VyJ3MgYHByb2Nlc3MoKWAgY2FsbGJhY2sgZmlyc3QsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoKSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgICAvLyBTdXBwb3J0IGZ1bmN0aW9ucyBuZXh0IHRvIGJvb2xlYW5zIGZvciBgc2NoZW1hLmV4Y2x1ZGVgOlxuICAgICAgZXhjbHVkZSA9PT0gdHJ1ZSB8fFxuICAgICAgaXNGdW5jdGlvbihleGNsdWRlKSAmJiBleGNsdWRlKGdldENvbnRleHQoKSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzZWREYXRhW25hbWVdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVhY2ggY29tcG9uZW50IHR5cGUgY2FuIHByb3ZpZGUgaXRzIG93biBzdGF0aWMgYHByb2Nlc3NWYWx1ZSgpYCBtZXRob2RcbiAgICAgIC8vIHRvIGNvbnZlcnQgdGhlIGRhdGEgZm9yIHN0b3JhZ2UuXG4gICAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSB0eXBlT3B0aW9ucz8ucHJvY2Vzc1ZhbHVlXG4gICAgICBpZiAocHJvY2Vzc1ZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaClcbiAgICAgIH1cbiAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIGRhdGFQYXRoLFxuICAgIHByb2Nlc3NlZERhdGEsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgb3B0aW9uc1xuICApXG5cbiAgcmV0dXJuIGdyYXBoLnByb2Nlc3Moc291cmNlU2NoZW1hLCBwcm9jZXNzZWREYXRhLCBvcHRpb25zKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURhdGEoXG4gIHNjaGVtYSxcbiAgZGF0YSxcbiAgZGF0YVBhdGgsXG4gIHByb2Nlc3NlZERhdGEsXG4gIHByb2Nlc3NCZWZvcmUsXG4gIHByb2Nlc3NBZnRlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IHByb2Nlc3NDb21wb25lbnRzID0gY29tcG9uZW50cyA9PiB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoZGF0YVBhdGgsIHRva2VuKSA9PiBkYXRhUGF0aCAhPSBudWxsXG4gICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbilcbiAgICAgIDogbnVsbFxuXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKCFpc05lc3RlZChjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIHVubmVzdGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhLFxuICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RGF0YVBhdGggPSBnZXREYXRhUGF0aChkYXRhUGF0aCwgbmFtZSlcblxuICAgICAgICAgIGNvbnN0IHByb2Nlc3NJdGVtID0gKGl0ZW0sIGluZGV4ID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVBhdGggPSBpbmRleCAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgOiBjb21wb25lbnREYXRhUGF0aFxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IERpdG9Db250ZXh0LmdldChvcHRpb25zLmNvbXBvbmVudCwge1xuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGNvbnN0IGdldEZvcm1zID0gKFxuICAgICAgICAgICAgICBnZXRUeXBlT3B0aW9ucyhjb21wb25lbnRTY2hlbWEpPy5nZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcgfHxcbiAgICAgICAgICAgICAgIGdldEZvcm1TY2hlbWFzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1zKGNvbXBvbmVudFNjaGVtYSwgY29udGV4dClcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSlcbiAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW0gPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyBjbG9uZUl0ZW0oY29tcG9uZW50U2NoZW1hLCBpdGVtLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZEl0ZW0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJdGVtcyB3aXRob3V0IGZvcm1zIHN0aWxsIGdldCBmdWxseSAoYnV0IHNoYWxsb3dseSkgY2xvbmVkLlxuICAgICAgICAgICAgICAvLyBUT0RPOiBGaW5kIG91dCBvZiB0aGlzIGlzIGFjdHVhbGx5IG5lZWRlZCAvIHVzZWQgYXQgYWxsP1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcm9jZXNzQmVmb3JlPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsIGRhdGEsIG5hbWUsIGNvbXBvbmVudERhdGFQYXRoLCBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCB2YWx1ZSA9IHByb2Nlc3NlZERhdGEgPyBwcm9jZXNzZWREYXRhW25hbWVdIDogZGF0YVtuYW1lXVxuICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIGhhc0Zvcm1TY2hlbWEoY29tcG9uZW50U2NoZW1hKSkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIG5lc3RlZCBmb3JtIGl0ZW1zLlxuICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIC8vIE9wdGltaXphdGlvbjogTm8gbmVlZCB0byBjb2xsZWN0IHZhbHVlcyBpZiB3ZSdyZSBub3QgY2xvbmluZyFcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICAgICAgOiB2YWx1ZS5mb3JFYWNoKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzSXRlbSh2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9jZXNzZWREYXRhKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzQWZ0ZXI/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm9jZXNzQ29tcG9uZW50cyhzY2hlbWEuY29tcG9uZW50cylcbiAgaWYgKHNjaGVtYS50YWJzKSB7XG4gICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykpIHtcbiAgICAgIHByb2Nlc3NDb21wb25lbnRzKHRhYi5jb21wb25lbnRzKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldEFsbFBhbmVsU2NoZW1hcyhzY2hlbWEsIGRhdGFQYXRoKSkge1xuICAgIHByb2Nlc3NDb21wb25lbnRzKHBhbmVsLnNjaGVtYS5jb21wb25lbnRzKVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZERhdGEgfHwgZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRTY2hlbWFzKGRlc2NyaXB0aW9ucywgZGVmYXVsdHMpIHtcbiAgY29uc3QgdG9PYmplY3QgPSAoYXJyYXksIHRvU2NoZW1hKSA9PiB7XG4gICAgcmV0dXJuIGFycmF5Lmxlbmd0aCA+IDBcbiAgICAgID8gYXJyYXkucmVkdWNlKChvYmplY3QsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRvU2NoZW1hKHZhbHVlKVxuICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgb2JqZWN0W3NjaGVtYS5uYW1lXSA9IHNjaGVtYSAmJiBkZWZhdWx0c1xuICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgOiBzY2hlbWFcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0XG4gICAgICB9LCB7fSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIGlzQXJyYXkoZGVzY3JpcHRpb25zKVxuICAgID8gdG9PYmplY3QoZGVzY3JpcHRpb25zLCB2YWx1ZSA9PiAoXG4gICAgICBpc09iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IHtcbiAgICAgICAgbmFtZTogY2FtZWxpemUodmFsdWUsIGZhbHNlKVxuICAgICAgfVxuICAgICkpXG4gICAgOiBpc09iamVjdChkZXNjcmlwdGlvbnMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpLFxuICAgICAgICAoW25hbWUsIHZhbHVlXSkgPT5cbiAgICAgICAgICBpc09iamVjdCh2YWx1ZSkgPyB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBpc1N0cmluZyh2YWx1ZSkgPyB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgbGFiZWw6IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpPy5vcHRpb25zID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpPy5nZXRTb3VyY2VUeXBlPy4oXG4gICAgZ2V0VHlwZShzY2hlbWFPclR5cGUpXG4gICkgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWEoc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gIHJldHVybiBzY2hlbWFcbiAgICA/IHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAvLyBUaGlzIGlzIHVzZWQgZS5nLiBmb3IgJGZpbHRlcnMgcGFuZWxzLlxuICAgICAgZGF0YVBhdGg6IHNjaGVtYS5uYW1lXG4gICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGRhdGFQYXRoLFxuICAgICAgdGFiQ29tcG9uZW50XG4gICAgfVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYXMsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQsIHBhbmVscyA9IFtdKSB7XG4gIGlmIChzY2hlbWFzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsU2NoZW1hKFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBrZXkpLFxuICAgICAgICB0YWJDb21wb25lbnRcbiAgICAgIClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbHMucHVzaChwYW5lbClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhbmVsc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsUGFuZWxTY2hlbWFzKFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoLFxuICBzY2hlbWFDb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWwgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhUGF0aCxcbiAgICBzY2hlbWFDb21wb25lbnRcbiAgKVxuICBjb25zdCBwYW5lbHMgPSBwYW5lbCA/IFtnZXRQYW5lbFNjaGVtYShwYW5lbCwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCldIDogW11cbiAgLy8gQWxsb3cgZWFjaCBjb21wb25lbnQgdG8gcHJvdmlkZSBpdHMgb3duIHNldCBvZiBwYW5lbHMsIGluXG4gIC8vIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IG9uZSAoZS5nLiAkZmlsdGVyKTpcbiAgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYS5wYW5lbHMsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQsIHBhbmVscylcbiAgcmV0dXJuIHBhbmVsc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdvYmplY3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xpc3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdsaXN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICBjb25zdCBpZCA9IGl0ZW1bc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gIHJldHVybiBpZCAhPSBudWxsID8gU3RyaW5nKGlkKSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgLy8gVHJ5IHRvIHVzZSB0aGUgaXRlbSBpZCBhcyB0aGUgdWlkLCBmYWxsaW5nIGJhY2sgb24gYXV0by1nZW5lcmF0ZWQgaWRzLCBidXRcbiAgLy8gZWl0aGVyIHdheSwgcGFzcyB0aHJvdWdoIGBnZXRVaWQoKWAgc28gdGhhdCB0aGUgaWRzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlXG4gIC8vIGl0ZW0gdGhyb3VnaCBhIHdlYWsgbWFwLCBhcyB0aGUgaWRzIGNhbiBiZSBmaWx0ZXJlZCBvdXQgaW4gYHByb2Nlc3NEYXRhKClgXG4gIC8vIHdoaWxlIHRoZSBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSB1aWRzIGFzIGtleSBhcmUgc3RpbGwgdmlzaWJsZS5cbiAgcmV0dXJuIGdldFVpZChpdGVtLCBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSlcbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBWYWxpZGF0aW9uTWl4aW4gZnJvbSAnLi9WYWxpZGF0aW9uTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgY29tcHV0ZVZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbSwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRpb25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIE5PVEU6IFdoaWxlIGBkYXRhUGF0aGAgcG9pbnRzIHRvIHRoZSBhY3R1YWwgYHZhbHVlYCwgYGRhdGFgIHJlcHJlc2VudHNcbiAgICAvLyB0aGUgYGl0ZW1gIGluIHdoaWNoIHRoZSBgdmFsdWVgIGlzIGNvbnRhaW5lZCwgdW5kZXIgdGhlIGtleSBgbmFtZWAuXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZWRWYWx1ZTogbnVsbCxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudHlwZVxuICAgIH0sXG5cbiAgICBjb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVHlwZUNvbXBvbmVudCh0aGlzLnNjaGVtYS5jb21wb25lbnQpXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShcbiAgICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgeyBjb21wb25lbnQ6IHRoaXMgfVxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHsgZm9ybWF0IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICAvLyBgc2NoZW1hLmZvcm1hdGAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgcmV0dXJuIGZvcm1hdFxuICAgICAgICAgID8gZm9ybWF0LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgcGFyc2UgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEucGFyc2VgIGlzIG9ubHkgZXZlciBjYWxsZWQgaW4gdGhlIGxpZmUtY3ljbGVcbiAgICAgICAgLy8gb2YgdGhlIGNvbXBvbmVudCBhbmQgdGh1cyBpdCdzIG9rIHRvIGJpbmQgaXQgdG8gYHRoaXNgXG4gICAgICAgIHRoaXMucGFyc2VkVmFsdWUgPSBwYXJzZVxuICAgICAgICAgID8gcGFyc2UuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIHRoaXMubmFtZSwgdGhpcy5wYXJzZWRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIC8vIFdlIGNhbiBvbmx5IGdldCB0aGUgcHJvY2Vzc2VkIGl0ZW1zIHRocm91Z2ggdGhlIHNjaGVtYUNvbXBvbmVudCwgYnV0XG4gICAgICAvLyB0aGF0J3Mgbm90IG5lY2Vzc2FyaWx5IHRoZSBpdGVtIHJlcHJlc2VudGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAgICAgLy8gU29sdXRpb246IEZpbmQgdGhlIHJlbGF0aXZlIHBhdGggYW5kIHRoZSBwcm9jZXNzZWQgc3ViLWl0ZW0gZnJvbSB0aGVyZTpcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gZ2V0SXRlbShcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50LnByb2Nlc3NlZEl0ZW0sXG4gICAgICAgIC8vIEdldCB0aGUgZGF0YVBhdGggcmVsYXRpdmUgdG8gdGhlIHNjaGVtYUNvbXBvbmVudCdzIGRhdGE6XG4gICAgICAgIHRoaXMuZGF0YVBhdGguc2xpY2Uoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCksXG4gICAgICAgIHRoaXMubmVzdGVkXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsOiBnZXRTY2hlbWFBY2Nlc3NvcignbGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcobGFiZWwpXG4gICAgICAgICAgPyBsYWJlbFxuICAgICAgICAgIDogbGFiZWwgIT09IGZhbHNlICYmIHRoaXMuJG9wdGlvbnMuZ2VuZXJhdGVMYWJlbFxuICAgICAgICAgICAgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXVxuICAgIH0pLFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZ1xuICAgIGV4Y2x1ZGU6IGdldFNjaGVtYUFjY2Vzc29yKCdleGNsdWRlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICByZXF1aXJlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlcXVpcmVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIHRvIGEgc3ViLWNsYXNzIGNvbXBvbmVudCB1c2VkIGZvciBhbGwgaW5wdXQgY29tcG9uZW50cz9cbiAgICByZWFkb25seTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlYWRvbmx5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBhdXRvZm9jdXM6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvZm9jdXMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRvIGJlIHVzZWQgZm9yIHNlbGVjdHMgYW5kIGlucHV0cyBvbmx5P1xuICAgIGNsZWFyYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NsZWFyYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdwbGFjZWhvbGRlcicsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgYXV0b2NvbXBsZXRlOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2NvbXBsZXRlJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChuYXRpdmVGaWVsZCkge1xuICAgICAgICBhdHRyaWJ1dGVzLm5hbWUgPSB0aGlzLm5hbWVcbiAgICAgICAgaWYgKHRoaXMubGFiZWwpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnRpdGxlID0gdGhpcy5sYWJlbFxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZXMucmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5XG4gICAgICAgIGF0dHJpYnV0ZXMuYXV0b2ZvY3VzID0gdGhpcy5hdXRvZm9jdXNcbiAgICAgICAgaWYgKHRleHRGaWVsZCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyXG4gICAgICAgICAgYXR0cmlidXRlcy5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICBsaXN0ZW5lcnMoKSB7XG4gICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmdldExpc3RlbmVycygpXG4gICAgICBjb25zdCB7IGV2ZW50cyA9IHt9IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICAvLyBSZWdpc3RlciBjYWxsYmFja3MgZm9yIGFsbCBwcm92aWRlcyBub24tcmVjb2duaXplZCBldmVudHMsXG4gICAgICAgIC8vIGFzc3VtaW5nIHRoZXkgYXJlIG5hdGl2ZSBldmVudHMuXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgT2JqZWN0LmtleXMoZXZlbnRzKSkge1xuICAgICAgICAgIGxpc3RlbmVyc1tldmVudF0gfHw9ICgpID0+IHRoaXMuZW1pdEV2ZW50KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdGVuZXJzXG4gICAgfSxcblxuICAgIHZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7IC4uLnRoaXMuZ2V0VmFsaWRhdGlvbnMoKSB9XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBkZWZhdWx0IHJ1bGVzIGFuZCBhZGQgYW55IG5ldyBvbmVzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEucnVsZXMgfHwge30pKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHZhbGlkYXRpb25zW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uc1trZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBSZXNvdXJjZU1peGluLCB1c2VkIGJ5IGxpc3RzLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHNob3dDbGVhckJ1dHRvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLnZhbHVlICE9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFByZXZlbnQgdW5uZXN0ZWQgdHlwZSBjb21wb25lbnRzIGZyb20gb3ZlcnJpZGluZyBwYXJlbnQgZGF0YSBwYXRoc1xuICAgICAgaWYgKHRoaXMubmVzdGVkKSB7XG4gICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlckNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgICAgIC8vIEluc3RhbGwgLyByZW1vdmUgdGhlIGZpZWxkIGV2ZW50cyB0byB3YXRjaCBvZiBjaGFuZ2VzIGFuZCBoYW5kbGVcbiAgICAgICAgLy8gdmFsaWRhdGlvbiBmbGFncy4gYGV2ZW50c2AgaXMgcHJvdmlkZWQgYnkgYFZhbGlkYXRpb25NaXhpbi5ldmVudHMoKWBcbiAgICAgICAgdGhpc1thZGQgPyAnb24nIDogJ29mZiddKHRoaXMuZXZlbnRzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgaW5wdXQ6IHRoaXMub25JbnB1dCxcbiAgICAgICAgY2hhbmdlOiB0aGlzLm9uQ2hhbmdlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgY29uc3QgW2VsZW1lbnRdID0gYXNBcnJheSh0aGlzLiRyZWZzLmVsZW1lbnQpXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgZWxlbWVudC5mb2N1cygpXG4gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgZGlzYWJsZWQsIGBmb2N1cygpYCB3aWxsIGxpa2VseSBub3QgaGF2ZSB0aGVcbiAgICAgICAgICAvLyBkZXNpcmVkIGVmZmVjdC4gVXNlIGBzY3JvbGxJbnRvVmlldygpYCBpZiBhdmFpbGFibGU6XG4gICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIChlbGVtZW50LiRlbCB8fCBlbGVtZW50KS5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgLy8gQWxzbyBmb2N1cyB0aGlzIGNvbXBvbmVudCdzIHNjaGVtYSBhbmQgcGFuZWwgaW4gY2FzZSBpdCdzIGEgdGFiLlxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuZm9jdXMoKVxuICAgICAgdGhpcy50YWJDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgY2xlYXIoKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgfSxcblxuICAgIG9uRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlXG4gICAgICB0aGlzLmVtaXRFdmVudCgnZm9jdXMnKVxuICAgIH0sXG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2JsdXInKVxuICAgIH0sXG5cbiAgICBvbklucHV0KCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywge1xuICAgICAgICBjb250ZXh0OiB0aGlzLnBhcnNlZFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHsgdmFsdWU6IHRoaXMucGFyc2VkVmFsdWUgfVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgLy8gUGFzcyBgc2NoZW1hQ29tcG9uZW50YCBhcyBwYXJlbnQsIHNvIGNoYW5nZSBldmVudHMgY2FuIHByb3BhZ2F0ZSB1cC5cbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNQcm9taXNlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvTWl4aW4gZnJvbSAnLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG5jb25zdCBEaXRvQ29tcG9uZW50ID0gVnVlLmV4dGVuZCh7XG4gIC8vIE1ha2Ugc3VyZSB0aGF0IHJlZ2lzdGVyZWQgY29tcG9uZW50cyBhcmUgcHJlc2VudCBpbiBhbGwgRGl0b0NvbXBvbmVudC5cbiAgY29tcG9uZW50cyxcbiAgbWl4aW5zOiBbRGl0b01peGluXSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VHlwZUNvbXBvbmVudCxcblxuICAgIHJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBtaXhpbnMgPSBbXSkge1xuICAgICAgLy8gQSBoZWxwZXIgbWV0aG9kIHRvIGFsbG93IHRocmVlIHRoaW5nczpcbiAgICAgIC8vIC0gV2hlbiB1c2VkIGluIGEgY29tcHV0ZWQgcHJvcGVydHksIGl0IHJlbW92ZXMgdGhlIG5lZWQgdG8gaGF2ZSB0b1xuICAgICAgLy8gICBsb2FkIGNvbXBvbmVudHMgd2l0aCBhc3luYyBmdW5jdGlvbnMgYGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KC4uLilgLlxuICAgICAgLy8gICBpbnN0ZWFkLCB0aGV5IGNhbiBiZSBkaXJlY3RseSBwcm92aWRlZDogYGNvbXBvbmVudDogaW1wb3J0KC4uLilgXG4gICAgICAvLyAtIFRoZSBwcm9wZXJ0aWVzIHBhc3NlZCB0byBzdWNoIGNvbXBvbmVudHMgZG9uJ3QgbmVlZCB0byBiZSBkZWZpbmVkLlxuICAgICAgLy8gICBJbnN0ZWFkLCB0aGUgcHJvdmlkZWQgbWl4aW5zIGFyZSBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZC5cbiAgICAgIC8vIC0gVGhlIGNvbXBvbmVudCBjYW4gdXNlIGFsbCBpbnRlcm5hbCBjb21wb25lbnRzIGtub3duIHRvIERpdG8uanMgQWRtaW4uXG4gICAgICByZXR1cm4gY29tcG9uZW50XG4gICAgICAgID8gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIC8vIEF0IGZpcnN0LCByZXNvbHZlIGNvbXBvbmVudCBpcyBpdCBpcyBsb2FkZWQgYXN5bmNocm9ub3VzbHkuXG4gICAgICAgICAgbGV0IGNvbXAgPSBpc0Z1bmN0aW9uKGNvbXBvbmVudCkgPyBhd2FpdCBjb21wb25lbnQoKVxuICAgICAgICAgICAgOiBpc1Byb21pc2UoY29tcG9uZW50KSA/IGF3YWl0IGNvbXBvbmVudFxuICAgICAgICAgICAgOiBjb21wb25lbnRcbiAgICAgICAgICBjb21wID0gY29tcD8uZGVmYXVsdCB8fCBjb21wXG4gICAgICAgICAgY29tcC5taXhpbnMgPSBtaXhpbnNcbiAgICAgICAgICBjb21wLmNvbXBvbmVudHMgPSBjb21wb25lbnRzXG4gICAgICAgICAgcmV0dXJuIGNvbXBcbiAgICAgICAgfVxuICAgICAgICA6IGNvbXBvbmVudFxuICAgIH0sXG5cbiAgICByZXNvbHZlRGl0b0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBbRGl0b01peGluXSlcbiAgICB9LFxuXG4gICAgcmVzb2x2ZVR5cGVDb21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ29tcG9uZW50KGNvbXBvbmVudCwgW0RpdG9NaXhpbiwgVHlwZU1peGluXSlcbiAgICB9XG4gIH1cbn0pXG5cbkRpdG9Db21wb25lbnQuY29tcG9uZW50ID0gZnVuY3Rpb24obmFtZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH1cbiAgICBjb25zdCBjdG9yID0gdGhpcy5leHRlbmQob3B0aW9ucylcbiAgICBjb21wb25lbnRzW25hbWVdID0gY3RvclxuICAgIHJldHVybiBjdG9yXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudHNbbmFtZV0gfHwgVnVlLmNvbXBvbmVudChuYW1lKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnRcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Vc2VyIHtcbiAgaGFzUm9sZSguLi5yb2xlcykge1xuICAgIGlmICh0aGlzLnJvbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICAgICAgaWYgKHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtYUNvbXBvbmVudHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWFpblNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHNbMF1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBgRGl0b1NjaGVtYS5jcmVhdGVkKCkvZGVzdHJveWVkKClgIG9uIGl0c1xuICAgIC8vICRwYXJlbnQsIGlmIHRoZSBwYXJlbnQgdXNlcyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICBfcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQoc2NoZW1hQ29tcG9uZW50LCBhZGQpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgaWYgKGFkZCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnB1c2goc2NoZW1hQ29tcG9uZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5zcGxpY2Uoc2NoZW1hQ29tcG9uZW50cy5pbmRleE9mKHNjaGVtYUNvbXBvbmVudCksIDEpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi9TY2hlbWFQYXJlbnRNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIHsgZXJyb3JzIH0pID0+XG4gICAgICAgICAgZXJyb3JzICYmIHJlc3VsdCA/IHJlc3VsdC5jb25jYXQoZXJyb3JzKSA6IGVycm9ycyxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSkpXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52ZXJpZnlBbGwobWF0Y2gpKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5yZXNldFZhbGlkYXRpb24oKSlcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5jbGVhckVycm9ycygpKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChcbiAgICAgICAgaXQgPT4gaXQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cylcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRDb21tb25QcmVmaXggfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlVXBkYXRlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBiZWZvcmVSb3V0ZUxlYXZlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZWxvYWQ6IGZhbHNlLFxuICAgICAgLy8gRWFjaCByb3V0ZS1jb21wb25lbnQgZGVmaW5lcyBhIHN0b3JlIHRoYXQgZ2V0cyBwYXNzZWQgb24gdG8gaXRzXG4gICAgICAvLyBjaGlsZCBjb21wb25lbnRzLCBzbyB0aGV5IGNhbiBzdG9yZSB2YWx1ZXMgaW4gdGhlbSB0aGF0IGxpdmUgYmV5b25kXG4gICAgICAvLyB0aGVpciBsaWZlLWN5Y2xlLiBTZWU6IERpdG9QYW5lLCBTb3VyY2VNaXhpblxuICAgICAgc3RvcmU6IHt9LFxuICAgICAgbG9hZENhY2hlOiB7fSAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgcm91dGVDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJvdXRlUmVjb3JkKCkge1xuICAgICAgLy8gVE9ETzogQ2FuIHRoaXMuJHJvdXRlLmN1cnJlbnRSb3V0ZSBiZSBvZiB1c2Ugc29tZXdoZXJlIGhlcmU/XG4gICAgICAvLyBSZXRyaWV2ZSB0aGUgcm91dGUtcmVjb3JkIHRvIHdoaWNoIHRoaXMgY29tcG9uZW50IHdhcyBtYXBwZWQgdG86XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTMzOCNpc3N1ZWNvbW1lbnQtMjk2MzgxNDU5XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUubWF0Y2hlZFt0aGlzLiR2bm9kZS5kYXRhLnJvdXRlclZpZXdEZXB0aF1cbiAgICB9LFxuXG4gICAgaXNMYXN0Um91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJvdXRlciBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV1cbiAgICB9LFxuXG4gICAgaXNMYXN0VW5uZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlIHRoYXRcbiAgICAgIC8vIG5lZWRzIGl0cyBvd24gcm91dGVyLXZpZXcgKD0gaXMgbm90IG5lc3RlZCkuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICBmb3IgKGxldCBpID0gbWF0Y2hlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBtYXRjaGVkW2ldXG4gICAgICAgIGlmICghcmVjb3JkLm1ldGEubmVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IHJlY29yZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNOZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEubmVzdGVkXG4gICAgfSxcblxuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZD8ubWV0YVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Um91dGVQYXRoKHRoaXMucm91dGVSZWNvcmQucGF0aClcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYigpIHtcbiAgICAgIGNvbnN0IHsgYnJlYWRjcnVtYiB9ID0gdGhpcy5zY2hlbWEgfHwge31cbiAgICAgIHJldHVybiBicmVhZGNydW1iIHx8IGAke3RoaXMuYnJlYWRjcnVtYlByZWZpeH0gJHt0aGlzLmxhYmVsfWBcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH0sXG5cbiAgICBwYXJhbSgpIHtcbiAgICAgIC8vIFdvcmthcm91bmQgZm9yIHZ1ZS1yb3V0ZXIgbm90IGJlaW5nIGFibGUgdG8gbWFwIG11bHRpcGxlIHVybCBwYXJhbWV0ZXJzXG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gbXVsdGlwbGUgY29tcG9uZW50cywgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXJhbXNbdGhpcy5tZXRhPy5wYXJhbV0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGUsIHNlZSBEaXRvRm9ybVxuICAgIGRvZXNNdXRhdGUoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBLZWVwIGEgc2hhcmVkIHN0YWNrIG9mIHJvb3QgY29tcG9uZW50cyBmb3IgRGl0b1RyYWlsIHRvIHVzZSB0byByZW5kZXJcbiAgICAvLyBsYWJlbHMuIENhbid0IHJlbHkgb24gJHJvdXRlLm1hdGNoZWRbaV0uaW5zdGFuY2VzLmRlZmF1bHQgdW5mb3J0dW5hdGVseSxcbiAgICAvLyBhcyBpbnN0YW5jZXMgYXJlbid0IGltbWVkaWF0ZWx5IHJlYWR5LCBhbmQgaW5zdGFuY2VzIGlzIG5vdCByZWFjdGl2ZS5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5wdXNoKHRoaXMpXG4gIH0sXG5cbiAgZGVzdHJveWVkKCkge1xuICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgcm91dGVDb21wb25lbnRzLnNwbGljZShyb3V0ZUNvbXBvbmVudHMuaW5kZXhPZih0aGlzKSwgMSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpIHtcbiAgICAgIGxldCBvayA9IHRydWVcbiAgICAgIGNvbnN0IGlzQ2xvc2luZyA9IChcbiAgICAgICAgLy8gT25seSBoYW5kbGUgdGhpcyByb3V0ZSBjaGFuZ2UgaWYgdGhlIGZvcm0gaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZVxuICAgICAgICAvLyBgZnJvbWAgcm91dGUsIGJ1dCBpbmNsdWRlIHBhcmVudCBmb3JtcyBvZiBjbG9zaW5nIG5lc3RlZCBmb3JtcyBhcyBhc1xuICAgICAgICAvLyB3ZWxsLCBieSBtYXRjaGluZyB0aGUgdGhlIHN0YXJ0IG9mIGZyb20vdG8gcGF0aCBhZ2FpbnN0IGB0aGlzLnBhdGhgOlxuICAgICAgICBmcm9tLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgICF0by5wYXRoLnN0YXJ0c1dpdGgodGhpcy5wYXRoKSAmJlxuICAgICAgICAvLyBFeGNsdWRlIGhhc2ggY2hhbmdlcyBvbmx5ICg9IHRhYiBjaGFuZ2VzKTpcbiAgICAgICAgZnJvbS5wYXRoICE9PSB0by5wYXRoICYmIChcbiAgICAgICAgICB0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSB8fFxuICAgICAgICAgIC8vIERlY2lkZSBpZiB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhIG5ldyBuZXN0ZWQgZm9ybSwgb3IgY2xvc2luZyAvXG4gICAgICAgICAgLy8gcmVwbGFjaW5nIGFuIGFscmVhZHkgb3BlbiBvbmUgYnkgY29tcGFyaW5nIHBhdGggbGVuZ3Rocy5cbiAgICAgICAgICAvLyBUaGUgY2FzZSBvZiBgPWAgbWF0Y2hlcyB0aGUgcmVwbGFjaW5nIG9mIGFuIGFscmVhZHkgb3BlbiBvbmUuXG4gICAgICAgICAgdG8ucGF0aC5sZW5ndGggPD0gZnJvbS5wYXRoLmxlbmd0aFxuICAgICAgICApXG4gICAgICApXG4gICAgICBpZiAoaXNDbG9zaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmRvZXNNdXRhdGUpIHtcbiAgICAgICAgICAvLyBGb3IgYWN0aXZlIGRpcmVjdGx5IG11dGF0aW5nIChuZXN0ZWQpIGZvcm1zIHRoYXQgd2VyZSBub3QgdmFsaWRhdGVkXG4gICAgICAgICAgLy8geWV0LCB2YWxpZGF0ZSB0aGVtIG9uY2UuIElmIHRoZSB1c2VyIHRoZW4gc3RpbGwgd2FudHMgdG8gbGVhdmVcbiAgICAgICAgICAvLyB0aGVtLCB0aGV5IGNhbiBjbGljayBjbG9zZSAvIG5hdmlnYXRlIGF3YXkgYWdhaW4uXG4gICAgICAgICAgb2sgPSAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRhdGVkIHx8XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlQWxsKClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhlIGZvcm0gZG9lc24ndCBkaXJlY3RseSBtdXRhdGUgZGF0YS4gSWYgaXQgaXMgZGlydHksIGFzayBpZiB1c2VyXG4gICAgICAgICAgLy8gd2FudHMgdG8gcGVyc2lzdCBkYXRhIGZpcnN0LlxuICAgICAgICAgIGlmICh0aGlzLmlzRGlydHkpIHtcbiAgICAgICAgICAgIG9rID0gd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgICAgIGBZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIERvIHlvdSByZWFsbHkgd2FudCB0byAke1xuICAgICAgICAgICAgICAgIHRoaXMudmVyYnMuY2FuY2VsXG4gICAgICAgICAgICAgIH0/YFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV4dChvaylcbiAgICB9LFxuXG4gICAgZ2V0Um91dGVQYXRoKHRlbXBsYXRlUGF0aCkge1xuICAgICAgLy8gTWFwcyB0aGUgcm91dGUncyBhY3R1YWwgcGF0aCB0byB0aGUgbWF0Y2hlZCByb3V0ZXMgYnkgY291bnRpbmcgaXRzXG4gICAgICAvLyBwYXJ0cyBzZXBhcmF0ZWQgYnkgJy8nLCBzcGxpdHRpbmcgdGhlIHBhdGggaW50byB0aGUgbWFwcGVkIHBhcnRzXG4gICAgICAvLyBjb250YWluaW5nIGFjdHVhbCBwYXJhbWV0ZXJzLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGhcbiAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgLnNsaWNlKDAsIHRlbXBsYXRlUGF0aC5zcGxpdCgnLycpLmxlbmd0aClcbiAgICAgICAgLmpvaW4oJy8nKVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiXG4vLyBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4vLyBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbi8vIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuLy8gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG5yb3V0ZXItdmlldyhcbiAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gIDprZXk9XCJuYW1lXCJcbilcbi5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICB2LWVsc2UtaWY9XCJzaG91bGRSZW5kZXIodmlld1NjaGVtYSlcIlxuKVxuICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbiAgLy8gaW5zdGVhZCwgdG8gbmVzdCBmdXJ0aGVyIHJvdXRlIGNvbXBvbmVudHMuXG4gIC8vIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuICAvLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4gIClcbiAgICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IHsgc29tZVNjaGVtYUNvbXBvbmVudCwgaXNTaW5nbGVDb21wb25lbnRWaWV3IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZpZXcnLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgLy8gUmVkaXJlY3QgJHNvdXJjZUNvbXBvbmVudCBhbmQgJHJlc291cmNlQ29tcG9uZW50IHRvIHRoZSBtYWluIGNvbXBvbmVudDpcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5zb3VyY2VDb21wb25lbnQgfHwgbnVsbCxcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5yZXNvdXJjZUNvbXBvbmVudCB8fCBudWxsXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmlldzogdHJ1ZSxcbiAgICAgIC8vIFVwZGF0ZWQgZnJvbSBMb2FkaW5nTWl4aW4gdGhyb3VnaCBgc2V0TG9hZGluZyhpc0xvYWRpbmcpYDpcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAvLyBOT1RFOiBEYXRhIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIHZpZXdzIGJlY2F1c2UgdGhlIHJvdXRlciByZWN5Y2xlcyB0aGVcbiAgICAgIC8vIERpdG9WaWV3IGNvbXBvbmVudC5cbiAgICAgIGRhdGE6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5zY2hlbWFcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50VmlldygpIHtcbiAgICAgIHJldHVybiBpc1NpbmdsZUNvbXBvbmVudFZpZXcodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIG1haW5Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgIFtzY2hlbWEubmFtZV06IHtcbiAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICBsYWJlbDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiBzY2hlbWFcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHNvbWVTY2hlbWFDb21wb25lbnQoXG4gICAgICAgIHRoaXMudmlld1NjaGVtYSxcbiAgICAgICAgY29tcG9uZW50ID0+IGhhc1Jlc291cmNlKGNvbXBvbmVudClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIC8vIFNlZSBpZiB0aGUgcm91dGUgY2hhbmdlcyBjb21wbGV0ZWx5LCBhbmQgY2xlYXIgdGhlIGRhdGEgaWYgaXQgZG9lcy5cbiAgICAgIGlmICh0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSkge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGF0YSA9IHt9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIC8vIExpc3RzIGluc2lkZSBzaW5nbGUtY29tcG9uZW50IHZpZXdzIHVzZSB0aGUgdmlldydzIHBhdGggZm9yIHN1Yi1wYXRoczpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHRoaXMucGF0aFxuICAgICAgICA6IGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWknXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbUhhbmRsZXJzOiBbXVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIGZvciAoY29uc3QgeyByZW1vdmUgfSBvZiB0aGlzLmRvbUhhbmRsZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgICB0aGlzLmRvbUhhbmRsZXJzID0gW11cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZG9tT24oZWxlbWVudCwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkRXZlbnRzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpc09iamVjdCh0eXBlKSA/IHR5cGUgOiB7IFt0eXBlXTogaGFuZGxlciB9XG4gICAgICApXG4gICAgICB0aGlzLmRvbUhhbmRsZXJzLnB1c2gocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1yb290XG4gIG5vdGlmaWNhdGlvbnMuZGl0by1ub3RpZmljYXRpb25zKFxuICAgIHJlZj1cIm5vdGlmaWNhdGlvbnNcIlxuICAgIHBvc2l0aW9uPVwidG9wIHJpZ2h0XCJcbiAgICBjbGFzc2VzPVwiZGl0by1ub3RpZmljYXRpb25cIlxuICApXG4gIGRpdG8tbWVudVxuICBtYWluLmRpdG8tcGFnZS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgICBkaXRvLWhlYWRlcihcbiAgICAgIDpzcGlubmVyPVwib3B0aW9ucy5zcGlubmVyXCJcbiAgICAgIDppc0xvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgIClcbiAgICAgIGRpdG8tYWNjb3VudChcbiAgICAgICAgdi1pZj1cInVzZXJcIlxuICAgICAgKVxuICAgICAgYS5kaXRvLWxvZ2luKFxuICAgICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICAgIClcbiAgICAgICAgc3BhbiBMb2dpblxuICAgIHJvdXRlci12aWV3XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1yb290XG4gICAgbm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICAgIHBvc2l0aW9uPVwidG9wIHJpZ2h0XCJcbiAgICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gICAgKVxuICAgIGRpdG8tbWVudVxuICAgIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgICAgZGl0by1oZWFkZXIoXG4gICAgICAgIDpzcGlubmVyPVwib3B0aW9ucy5zcGlubmVyXCJcbiAgICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICApXG4gICAgICAgIGRpdG8tYWNjb3VudChcbiAgICAgICAgICB2LWlmPVwidXNlclwiXG4gICAgICAgIClcbiAgICAgICAgYS5kaXRvLWxvZ2luKFxuICAgICAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgICAgIClcbiAgICAgICAgICBzcGFuIExvZ2luXG4gICAgICByb3V0ZXItdmlld1xuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9zdHlsZS5zYXNzJ1xuXG4gIC5kaXRvLXJvb3RcbiAgICBoZWlnaHQ6IDEwMCVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcGFnZVxuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgLy8gVGhlIHJvb3QtbGV2ZWwgdmlld3MgYW5kIGZvcm1zIG1heSBoYXZlIGEgYC5kaXRvLXNjaGVtYS1oZWFkZXJgIHRoYXRcbiAgICAgIC8vIHNob3VsZCBhcHBlYXIgbGF5ZXJlZCBvdmVyIGAuZGl0by1tZW51YCwgd2hpbGUgaGF2aW5nIGBvdmVybGF5OiBoaWRkZW5gXG4gICAgICAvLyBzZXQgYnkgYC5kaXRvLXNjcm9sbC1wYXJlbnRgIHRvIGRlbGVnYXRlIHNjcm9sbGluZyB0byBgLmRpdG8tc2Nyb2xsYC5cbiAgICAgIC8vIEluIG9yZGVyIHRvIG5vdCBoYXZlIHRoZSBoZWFkZXIgY2xpcHBlZCwgYWRqdXN0IHRoZSB0b3AgaGVyZTpcbiAgICAgID4gLmRpdG8tZm9ybSxcbiAgICAgID4gLmRpdG8tdmlld1xuICAgICAgICBtYXJnaW4tdG9wOiAtJG1lbnUtaGVpZ2h0XG4gICAgICAgIHBhZGRpbmctdG9wOiAkbWVudS1oZWlnaHRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBhc0FycmF5LCBzdHJpcFRhZ3MgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvVXNlciBmcm9tICcuLi9EaXRvVXNlci5qcydcbmltcG9ydCBEaXRvVmlldyBmcm9tICcuLi9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBwcm9jZXNzVmlldywgcmVzb2x2ZVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1yb290Jywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHZpZXdzOiAoKSA9PiB0aGlzLnJlc29sdmVkVmlld3NcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB1bnJlc29sdmVkVmlld3M6IHsgdHlwZTogW09iamVjdCwgRnVuY3Rpb24sIFByb21pc2VdLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG9wdGlvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZXNvbHZlZFZpZXdzOiB7fSxcbiAgICAgIGFsbG93TG9naW46IGZhbHNlLFxuICAgICAgbG9hZGluZ0NvdW50OiAwXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLm5vdGlmaWNhdGlvbnNcbiAgICB9LFxuXG4gICAgaXNMb2FkaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGluZ0NvdW50ID4gMFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYXBwU3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZSB8fCAnRGl0by5qcyBBZG1pbidcbiAgICAvLyBXaXRoIGhvdC1yZWxvYWRpbmcsIGl0IGxvb2tzIGxpa2UgZGVzdHJveWVkIGhvb2tzIGFyZW4ndCBhbHdheXMgY2FsbGVkXG4gICAgLy8gZm9yIHJvdXRlIGNvbXBvbmVudHMgc28gcmVzZXQgdGhlIGFycmF5IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzID0gW11cbiAgfSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIC8vIENsZWFyIHRoZSBsYWJlbCBtYXJrZWQgYXMgYWN0aXZlIG9uIGFsbCBtb3VzZSBhbmQga2V5Ym9hcmQgZXZlbnRzLCBleGNlcHRcbiAgICAvLyB0aGUgb25lcyB0aGF0IERpdG9MYWJlbCBpdHNlbGYgaW50ZXJjZXB0cy5cbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjbGljazogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZGl0by1sYWJlbCcpKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IGZhbHNlXG4gICAgICBpZiAoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0IH0gPSB7fSkge1xuICAgICAgdGl0bGUgfHw9IHtcbiAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICBlcnJvcjogJ0Vycm9yJyxcbiAgICAgICAgaW5mbzogJ0luZm9ybWF0aW9uJyxcbiAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICB9W3R5cGVdIHx8ICdOb3RpZmljYXRpb24nXG4gICAgICB0ZXh0ID0gYDxwPiR7XG4gICAgICAgIGFzQXJyYXkodGV4dCkuam9pbignPC9wPiA8cD4nKVxuICAgICAgfTwvcD5gLnJlcGxhY2UoL1xcbnxcXHJcXG58XFxyL2csICc8YnI+JylcbiAgICAgIGNvbnN0IGxvZyA9IHtcbiAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICAgICAgaW5mbzogJ2xvZycsXG4gICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICB9W3R5cGVdIHx8ICdlcnJvcidcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlW2xvZ10oc3RyaXBUYWdzKHRleHQpKVxuICAgICAgY29uc3QgeyBub3RpZmljYXRpb25zID0gdHJ1ZSB9ID0gdGhpcy5hcGlcbiAgICAgIGlmIChub3RpZmljYXRpb25zKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBkaXNwbGF5LWR1cmF0aW9uIGZvciB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGl0cyBjb250ZW50XG4gICAgICAgIC8vIGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgYGR1cmF0aW9uRmFjdG9yYCBjb25maWd1cmF0aW9uLiBJdCBkZWZpbmVzIHRoZVxuICAgICAgICAvLyBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIG11bHRpcGxpZWQgd2l0aCB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnNcbiAgICAgICAgLy8gZGlzcGxheWVkIGluIHRoZSBub3RpZmljYXRpb24sIHBsdXMgNDAgKDQwICsgdGl0bGUgKyBtZXNzYWdlKTpcbiAgICAgICAgY29uc3QgeyBkdXJhdGlvbkZhY3RvciA9IDIwIH0gPSBub3RpZmljYXRpb25zXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKDQwICsgdGV4dC5sZW5ndGggKyB0aXRsZS5sZW5ndGgpICogZHVyYXRpb25GYWN0b3JcbiAgICAgICAgdGhpcy4kbm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQsIGR1cmF0aW9uIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9LFxuXG4gICAgcmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5sb2FkaW5nQ291bnQgKz0gaXNMb2FkaW5nID8gMSA6IC0xXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ2luKCkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICAgICAgY29uc3Qge1xuICAgICAgICBhZGRpdGlvbmFsQ29tcG9uZW50cyxcbiAgICAgICAgcmVkaXJlY3RBZnRlckxvZ2luXG4gICAgICB9ID0gdGhpcy5vcHRpb25zLmxvZ2luIHx8IHt9XG4gICAgICBjb25zdCBsb2dpbkRhdGEgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxDb21wb25lbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGxvZ2luOiB7IHR5cGU6ICdzdWJtaXQnIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChsb2dpbkRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ2luLFxuICAgICAgICAgICAgZGF0YTogbG9naW5EYXRhLFxuICAgICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChyZWRpcmVjdEFmdGVyTG9naW4pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RBZnRlckxvZ2luKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgICAgdGV4dDogZXJyb3IgfHwgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLnJlc3BvbnNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2luKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZUhvbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSgnLycpXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ291dCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ291dCxcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zZXRVc2VyKG51bGwpXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVXNlcigpIHtcbiAgICAgIGxldCB1c2VyID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMuc2Vzc2lvbixcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICB1c2VyID0gcmVzcG9uc2UuZGF0YS51c2VyIHx8IG51bGxcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBlcnJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VXNlcih1c2VyKVxuICAgICAgcmV0dXJuIHVzZXJcbiAgICB9LFxuXG4gICAgc2V0VXNlcih1c2VyKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnVzZXIgPSAoXG4gICAgICAgIHVzZXIgJiZcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHVzZXIsIERpdG9Vc2VyLnByb3RvdHlwZSlcbiAgICAgIClcbiAgICAgIC8vIENsZWFyIHJlc29sdmVkIHZpZXdzIHdoZW4gdXNlciBpcyBsb2dnZWQgb3V0LlxuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IHt9XG4gICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW5zdXJlVXNlcigpIHtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlVmlld3MoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IFtdXG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb2x2ZWRWaWV3cykpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzKSlcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5uYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICBoMSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICB1bC5kaXRvLXNjcm9sbFxuICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHZpZXcpXCJcbiAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgICAgKSB7eyBnZXRMYWJlbCh2aWV3KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8tbWVudS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgICBoMSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICAgIHVsLmRpdG8tc2Nyb2xsXG4gICAgICBsaSh2LWZvcj1cInZpZXcgaW4gdmlld3NcIilcbiAgICAgICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICAgIDp0bz1cImAvJHt2aWV3LnBhdGh9YFwiXG4gICAgICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbWVudVxuICAgIGZsZXg6IGluaXRpYWxcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB1bFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZVxuICAgIGEsXG4gICAgaDFcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgaDFcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdFxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLWxpbmtcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgLmRpdG8tbGlua1xuICAgICY6Zm9jdXM6bm90KDphY3RpdmUpOm5vdCguZGl0by1hY3RpdmUpXG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLW1lbnUnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG48ZGl2IGNsYXNzPVwidi1zcGlubmVyXCIgdi1zaG93PVwibG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UxXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkxXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UyXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkyXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UzXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkzXVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiIsIjx0ZW1wbGF0ZT5cbjxkaXYgY2xhc3M9XCJ2LXNwaW5uZXJcIiB2LXNob3c9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTFcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTFdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTJcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTJdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTNcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTNdXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXG4gIG5hbWU6ICdQdWxzZUxvYWRlcicsXG5cbiAgcHJvcHM6IHtcbiAgICBsb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHsgXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIzVkYzU5NidcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxNXB4J1xuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMnB4J1xuICAgIH0sXG4gICAgcmFkaXVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTAwJSdcbiAgICB9XG4gIH0sXG4gIGRhdGEgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzcGlubmVyU3R5bGU6IHtcbiAgICAgIFx0YmFja2dyb3VuZENvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgXHR3aWR0aDogdGhpcy5zaXplLFxuICAgICAgICBoZWlnaHQ6IHRoaXMuc2l6ZSxcbiAgICAgIFx0bWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgIFx0Ym9yZGVyUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgIGFuaW1hdGlvbk5hbWU6ICd2LXB1bHNlU3RyZXRjaERlbGF5JyxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICcwLjc1cycsXG4gICAgICAgIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAnaW5maW5pdGUnLFxuICAgICAgICBhbmltYXRpb25UaW1pbmdGdW5jdGlvbjogJ2N1YmljLWJlemllciguMiwuNjgsLjE4LDEuMDgpJyxcbiAgICAgICAgYW5pbWF0aW9uRmlsbE1vZGU6ICdib3RoJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTE6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjEycydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkyOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4yNHMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mzoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMzZzJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuLyoudi1zcGlubmVyXG57XG4gICAgbWFyZ2luOiAxMDBweCBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbiovXG5cbkAtd2Via2l0LWtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5XG57XG4gICAgMCUsXG4gICAgODAlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAxOyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA0NSVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAwLjc7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheVxue1xuICAgIDAlLFxuICAgIDgwJVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMTsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNDUlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMC43OyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxufVxuPC9zdHlsZT4iLCJcbm5hdi5kaXRvLWhlYWRlclxuICAuZGl0by10cmFpbFxuICAgIHVsXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoY29tcG9uZW50LCBpbmRleCkgaW4gdHJhaWxcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5kZXggPT09IHRyYWlsLmxlbmd0aCAtIDFcIilcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgIHJvdXRlci1saW5rLmRpdG8tYnJlYWRjcnVtYih2LWVsc2UsIDp0bz1cImNvbXBvbmVudC5wYXRoXCIpXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgIHNwaW5uZXIuZGl0by1zcGlubmVyKHYtaWY9XCJpc0xvYWRpbmdcIilcbiAgc2xvdFxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIHVsXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiKVxuICAgICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgICAgcm91dGVyLWxpbmsuZGl0by1icmVhZGNydW1iKHYtZWxzZSwgOnRvPVwiY29tcG9uZW50LnBhdGhcIilcbiAgICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgc3Bpbm5lci5kaXRvLXNwaW5uZXIodi1pZj1cImlzTG9hZGluZ1wiKVxuICAgIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1oZWFkZXJcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYmxhY2tcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgIHotaW5kZXg6ICRtZW51LXotaW5kZXhcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICBzcGFuXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by10cmFpbFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgaGVpZ2h0OiAzZW1cbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZ1xuICAgICAgdWxcbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYVxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgcGFkZGluZy1yaWdodDogMC40ZW1cbiAgICAgICAgJGFuZ2xlOiAzM2RlZ1xuICAgICAgICAmOmhvdmVyXG4gICAgICAgICAgY29sb3I6ICM5OTlcbiAgICAgICAgJjo6YmVmb3JlLFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgICAgd2lkdGg6IDFweFxuICAgICAgICAgIGhlaWdodDogMS4yZW1cbiAgICAgICAgICByaWdodDogLTFweFxuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrXG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIHRvcDogNTAlXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGFuZ2xlKVxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGJvdHRvbTogNTAlXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLSRhbmdsZSlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b21cbiAgICAuZGl0by1zcGlubmVyXG4gICAgICBtYXJnaW4tdG9wOiAkbWVudS1wYWRkaW5nLXZlclxuICAgIC5kaXRvLWRpcnR5XG4gICAgICAmOmFmdGVyXG4gICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgd2lkdGg6IDhweFxuICAgICAgICBoZWlnaHQ6IDhweFxuICAgICAgICBtYXJnaW46IDJweFxuICAgICAgICBtYXJnaW4tbGVmdDogMC41ZW1cbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJVxuICAgIC5kaXRvLWFjY291bnQsXG4gICAgLmRpdG8tbG9naW5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiAwXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by1hY2NvdW50XG4gICAgICBsZWZ0OiAkY29udGVudC13aWR0aCArICRjb250ZW50LXBhZGRpbmcgKiAyXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxzZUxvYWRlciBmcm9tICd2dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlJ1xuXG5jb25zdCBTcGlubmVyID0gRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ3NwaW5uZXInLCBQdWxzZUxvYWRlcilcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWhlYWRlcicsIHtcbiAgY29tcG9uZW50czogeyBTcGlubmVyIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzcGlubmVyOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBpc0xvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyYWlsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLmZpbHRlcihcbiAgICAgICAgY29tcG9uZW50ID0+ICEhY29tcG9uZW50LnJvdXRlUmVjb3JkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc2l6ZSA9ICc4cHgnLFxuICAgICAgY29sb3IgPSAnIzk5OSdcbiAgICB9ID0gdGhpcy5zcGlubmVyIHx8IHt9XG4gICAgY29uc3QgeyBwcm9wcyB9ID0gU3Bpbm5lci5vcHRpb25zXG4gICAgcHJvcHMuc2l6ZS5kZWZhdWx0ID0gc2l6ZVxuICAgIHByb3BzLmNvbG9yLmRlZmF1bHQgPSBjb2xvclxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1kaXJ0eSc6IGNvbXBvbmVudC5pc0RpcnR5XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1bGxkb3duOiB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBzdGFydFRpbWU6IDAsXG4gICAgICAgIGNoZWNrVGltZTogdHJ1ZSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgbW91c2Vkb3duOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub25QdWxsZG93bk1vdXNlVXAobnVsbCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlcnM6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4odHJ1ZSlcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0VGltZSB9ID0gdGhpcy5wdWxsZG93blxuICAgICAgaWYgKCF0aGlzLmNoZWNrVGltZSB8fCBzdGFydFRpbWUgJiYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiAyNTApKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm9uUHVsbGRvd25TZWxlY3QodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCgvKiB2YWx1ZSAqLykge1xuICAgICAgLy8gTk9URTogVG8gYmUgb3ZlcnJpZGRlbi5cbiAgICB9LFxuXG4gICAgc2V0UHVsbGRvd25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMucHVsbGRvd24ub3BlbiA9IG9wZW5cbiAgICAgIHRoaXMucHVsbGRvd24uc3RhcnRUaW1lID0gb3BlbiA/IERhdGUubm93KCkgOiAwXG4gICAgICBpZiAob3Blbikge1xuICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwgdGhpcy5wdWxsZG93bi5ldmVudHMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLWFjY291bnRcbiAgYShcbiAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICApXG4gICAgc3BhbiB7eyB1c2VyLnVzZXJuYW1lIH19XG4gIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgKVxuICAgIGxpKFxuICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgKVxuICAgICAgYShcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICApIHt7IGxhYmVsIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1hY2NvdW50XG4gICAgYShcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgKVxuICAgICAgc3BhbiB7eyB1c2VyLnVzZXJuYW1lIH19XG4gICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgKVxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgICAgKVxuICAgICAgICBhKFxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICAgICkge3sgbGFiZWwgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1hY2NvdW50XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHRvcDogJHB1bGxkb3duLXBhZGRpbmctdmVyXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYWNjb3VudCcsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHtcbiAgICAgICAgc2V0dGluZ3M6ICdTZXR0aW5ncycsXG4gICAgICAgIGxvZ291dDogJ0xvZ291dCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25TZWxlY3QodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgIGNhc2UgJ2xvZ291dCc6XG4gICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc2V0dGluZ3MnOlxuICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmZvcm0uZGl0by1kaWFsb2coQHN1Ym1pdC5wcmV2ZW50PVwic3VibWl0XCIpXG4gIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gIClcbiAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIilcbiAgICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLnYtLW1vZGFsLW92ZXJsYXlcbiAgICB6LWluZGV4OiAyMDAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZGlhbG9nJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gTWFrZSBzdXJlIGRpYWxvZyBkYXRhIGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQga2V5c1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBjbG9uZSh0aGlzLmRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGlhbG9nRGF0YSkpIHtcbiAgICAgICAgZGlhbG9nRGF0YVtrZXldID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgd2luZG93RXZlbnRzOiBudWxsLFxuICAgICAgZGlhbG9nRGF0YVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Lm5hbWVcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICBrZXl1cDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5oYXNDYW5jZWwgJiYgZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIGRlc3Ryb3llZCgpIHtcbiAgICB0aGlzLndpbmRvd0V2ZW50cy5yZW1vdmUoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoaWRlKCkge1xuICAgICAgdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgcmVqZWN0KHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVqZWN0KHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgdGhpcy5yZXNvbHZlKG51bGwpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgdi1pZj1cImNvbnRlbnRcIlxuICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNvbnRlbnRcIlxuICAgIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gICAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKSB7eyBvcHRpb25zLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWVsZW1lbnQnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFnOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NwYW4nIH0sXG4gICAgY29udGVudDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChjb250ZW50KSA/IGNvbnRlbnQgOiB7IHRleHQ6IGNvbnRlbnQgfVxuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuY2xhc3MsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5jbGFzcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuc3R5bGUsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5zdHlsZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBhc0FycmF5KHZhbHVlKS5yZWR1Y2UoKG9iamVjdCwgZW50cnkpID0+IHtcbiAgICBpZiAoaXNTdHJpbmcoZW50cnkpKSB7XG4gICAgICBvYmplY3RbZW50cnldID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZW50cnkpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKG9iamVjdCwgZW50cnkpXG4gICAgfVxuICAgIHJldHVybiBvYmplY3RcbiAgfSwge30pXG59XG5cbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQuZGl0by1sYWJlbChcbiAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICA6aXM9XCJ0YWdcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbilcbiAgLmRpdG8tY2hldnJvbihcbiAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgKVxuICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICApXG4gIGxhYmVsKDpmb3I9XCJkYXRhUGF0aFwiIHYtaHRtbD1cInRleHRcIilcbiAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgKVxuICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICAgIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgICA6aXM9XCJ0YWdcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4gIClcbiAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgICApXG4gICAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6a2V5PVwiYHByZWZpeC0ke2luZGV4fWBcIlxuICAgICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICAgIClcbiAgICBsYWJlbCg6Zm9yPVwiZGF0YVBhdGhcIiB2LWh0bWw9XCJ0ZXh0XCIpXG4gICAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICAgIClcbiAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1sYWJlbFxuICAgIC0tbGFiZWwtcGFkZGluZzogMFxuICAgIC8vIEZvciBidXR0b25zIGFuZCBjaGV2cm9uIHRvIGFsaWduIHJpZ2h0OlxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBhbGwgaXRlbXMgaW4gdGhlIGxhYmVsLCBlLmcuIGNoZXZyb24sIGVkaXQtYnV0dG9ucy5cbiAgICBhbGlnbi1pdGVtczogY2VudGVyXG4gICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZylcbiAgICBtYXJnaW46IDAgMCAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuXG4gICAgbGFiZWxcbiAgICAgIGRpc3BsYXk6IGlubGluZVxuICAgICAgY3Vyc29yOiBpbmhlcml0XG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuXG4gICAgbGFiZWwsXG4gICAgLmRpdG8tbGFiZWwtcHJlZml4LFxuICAgIC5kaXRvLWxhYmVsLXN1ZmZpeFxuICAgICAgJjpudGgtbGFzdC1jaGlsZCgyKVxuICAgICAgICAvLyBUbyBzdHJldGNoIGVpdGhlciBsYWJlbCBvciAuZGl0by1sYWJlbC1zdWZmaXggdG8gZnVsbCBhdmFpbGFibGUgd2lkdGhcbiAgICAgICAgLy8gc28gdGhhdCBidXR0b25zIGFsd2F5cyBhcHBlYXIgcmlnaHQtYWxpZ25lZDpcbiAgICAgICAgZmxleDogMSAxIGF1dG9cbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGNvbnRlbnQ6ICdcXGEwJyAvLyAmbmJwcztcblxuICAgIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgICAuZGl0by1sYWJlbC1zdWZmaXhcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgK2VsbGlwc2lzXG5cbiAgICAuZGl0by1idXR0b25zXG4gICAgICAvLyBNb3ZlIHRoZSBsYWJlbCBwYWRkaW5nIGluc2lkZSAuZGl0by1idXR0b25zLCBzbyB0aGF0IGl0IGNhcHR1cmVzIGFsbFxuICAgICAgLy8gbmVhciBtb3VzZSBldmVudHM6XG4gICAgICBtYXJnaW46IGNhbGMoLTEgKiB2YXIoLS1sYWJlbC1wYWRkaW5nKSlcbiAgICAgIG1hcmdpbi1sZWZ0OiAwXG4gICAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKVxuXG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAvLyBJbiBvcmRlciBmb3IgZWxsaXBzaXMgdG8gd29yayBvbiBsYWJlbHMgd2l0aG91dCBhZmZlY3Rpbmcgb3RoZXIgbGF5b3V0LFxuICAgICAgLy8gd2UgbmVlZCB0byBwb3NpdGlvbiBpdCBhYnNvbHV0ZWx5IGluc2lkZSBpdHMgY29udGFpbmVyLlxuICAgICAgbGFiZWxcbiAgICAgICAgK2VsbGlwc2lzXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBtYXgtd2lkdGg6IDEwMCVcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIFNpbmNlIDxsYWJlbD4gdXNlcyBgcG9zaXRpb246IGFic29sdXRlYCwgc2V0IGNvbnRlbnQgdG8gYSB6ZXJvLXdpZHRoXG4gICAgICAgIC8vIHNwYWNlIG9uIGl0cyBwYXJlbnQgdG8gZW5mb3JjZSB0aGUgcmlnaHQgdGV4dCBoZWlnaHQgaW4gdGhlIGNvbnRhaW5lclxuICAgICAgICBjb250ZW50OiAnXFwyMDBiJyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG5cbiAgYS5kaXRvLWxhYmVsXG4gICAgJjpob3ZlclxuICAgICAgLmRpdG8tY2hldnJvblxuICAgICAgICBjb2xvcjogJGNvbG9yLWRhcmtlclxuICAgICY6Zm9jdXM6bm90KDphY3RpdmUpOm5vdCguZGl0by1hY3RpdmUpXG4gICAgICAuZGl0by1jaGV2cm9uXG4gICAgICAgIC13ZWJraXQtdGV4dC1zdHJva2U6ICRib3JkZXItd2lkdGggJGNvbG9yLWFjdGl2ZVxuXG4gIC8vIERpc3BsYXkgbGFiZWxzIGluIGNvbXBhY3Qgc2NoZW1hIGFzIGlubGluZS1ibG9ja3MsIHRvIGFsbG93IGNvbXBhY3QgbGF5b3V0c1xuICAvLyB3aXRoIGB3aWR0aDogJ2F1dG8nYCBlbGVtZW50czpcbiAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gY29udHJvbCB0aGlzIGJlaGF2aW9yLlxuICAuZGl0by1zY2hlbWEtY29tcGFjdFxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgID4gLmRpdG8tcGFuZVxuICAgICAgICA+IC5kaXRvLWNvbnRhaW5lclxuICAgICAgICAgID4gLmRpdG8tbGFiZWw6bm90KC5kaXRvLWxhYmVsLWNvbXBvbmVudClcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1sYWJlbCcsIHtcbiAgcHJvcHM6IHtcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdGFnKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGUgPyAnYScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICB0ZXh0KCkge1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGxhYmVsKSA/IGxhYmVsPy50ZXh0IDogbGFiZWxcbiAgICB9LFxuXG4gICAgcHJlZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5wcmVmaXgpXG4gICAgfSxcblxuICAgIHN1ZmZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8uc3VmZml4KVxuICAgIH0sXG5cbiAgICBsaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi4odGhpcy5jb2xsYXBzaWJsZSAmJiB7XG4gICAgICAgICAgY2xpY2s6IHRoaXMub25DbGlja1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID09PSB0aGlzXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrKCkge1xuICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IHRoaXNcbiAgICAgIHRoaXMuJGVtaXQoJ2V4cGFuZCcsIHRoaXMuY29sbGFwc2VkKVxuICAgIH1cbiAgfVxufSlcblxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQge1xuICBnZXRJdGVtRm9ybVNjaGVtYSwgZ2V0SXRlbUlkLCBnZXRJdGVtVWlkLCBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hLFxuXG4gICAgZ2V0SXRlbVVpZCxcblxuICAgIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4ID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnQgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgPyBTdHJpbmcoaW5kZXgpXG4gICAgICAgIDogZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSlcbiAgICB9LFxuXG4gICAgZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpIHtcbiAgICAgIGxldCB7IGRhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBpZiAoc291cmNlU2NoZW1hICE9PSB0aGlzLnNjaGVtYSkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBzb3VyY2VTY2hlbWEubmFtZSlcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGluZGV4KVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgfSxcblxuICAgIGZpbmRJdGVtSWRJbmRleChzb3VyY2VTY2hlbWEsIGRhdGEsIGl0ZW1JZCkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmlzVHJhbnNpZW50XG4gICAgICAgIC8vIEZvciB0cmFuc2llbnQgZGF0YSwgdGhlIGluZGV4IGlzIHVzZWQgYXMgdGhlIGlkXG4gICAgICAgID8gaXRlbUlkXG4gICAgICAgIDogZGF0YT8uZmluZEluZGV4KFxuICAgICAgICAgIChpdGVtLCBpbmRleCkgPT5cbiAgICAgICAgICAgIHRoaXMuZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXgpID09PSBpdGVtSWRcbiAgICAgICAgKVxuICAgICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IGluZGV4IDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRJdGVtTGFiZWwoc291cmNlU2NoZW1hLCBpdGVtLCB7XG4gICAgICBpbmRleCA9IG51bGwsXG4gICAgICBleHRlbmRlZCA9IGZhbHNlLFxuICAgICAgYXNPYmplY3QgPSBmYWxzZVxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgeyBpdGVtTGFiZWwgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKCFpdGVtIHx8ICFleHRlbmRlZCAmJiBpdGVtTGFiZWwgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhUGF0aFxuICAgICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoKSA9PlxuICAgICAgICAoZGF0YVBhdGggfHw9IHRoaXMuZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpKVxuXG4gICAgICBsZXQgZm9ybUxhYmVsXG4gICAgICBjb25zdCBnZXRGb3JtTGFiZWwgPSAoKSA9PlxuICAgICAgICAoZm9ybUxhYmVsIHx8PSB0aGlzLmdldExhYmVsKFxuICAgICAgICAgIGdldEl0ZW1Gb3JtU2NoZW1hKHNvdXJjZVNjaGVtYSwgaXRlbSwgdGhpcy5jb250ZXh0KVxuICAgICAgICApKVxuXG4gICAgICBsZXQgdGV4dFxuICAgICAgbGV0IHByZWZpeFxuICAgICAgbGV0IHN1ZmZpeFxuICAgICAgaWYgKGlzRnVuY3Rpb24oaXRlbUxhYmVsKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1MYWJlbC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICBpbmRleCxcblxuICAgICAgICAgICAgZ2V0IGRhdGFQYXRoKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RGF0YVBhdGgoKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1MYWJlbCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBpZiAoaXNPYmplY3QobGFiZWwpKSB7XG4gICAgICAgICAgKHsgdGV4dCwgcHJlZml4LCBzdWZmaXggfSA9IGxhYmVsKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHQgPSBsYWJlbFxuICAgICAgICB9XG4gICAgICAgIC8vIEl0J3MgdXAgdG8gYGl0ZW1MYWJlbCgpYCBlbnRpcmVseSB0byBwcm9kdWNlIHRoZSBsYWJlbDpcbiAgICAgICAgZXh0ZW5kZWQgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTG9vayB1cCB0aGUgbmFtZSBvbiB0aGUgaXRlbSwgYnkgdGhlc2UgcnVsZXM6XG4gICAgICAgIC8vIDEuIElmIGBpdGVtTGFiZWxgIGlzIGEgc3RyaW5nLCB1c2UgaXQgYXMgdGhlIHByb3BlcnR5IGtleVxuICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZXJlIGFyZSBjb2x1bW5zLCB1c2UgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdFxuICAgICAgICAvLyAzLiBPdGhlcndpc2UsIHNlZSBpZiB0aGUgaXRlbSBoYXMgYSBwcm9wZXJ0eSBuYW1lZCAnbmFtZSdcbiAgICAgICAgY29uc3QgeyBjb2x1bW5zIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgICAgY29uc3Qga2V5ID0gKFxuICAgICAgICAgIGlzU3RyaW5nKGl0ZW1MYWJlbCkgJiYgaXRlbUxhYmVsIHx8XG4gICAgICAgICAgaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgY29sdW1ucyAmJiBPYmplY3Qua2V5cyhjb2x1bW5zKVswXSB8fFxuICAgICAgICAgICduYW1lJ1xuICAgICAgICApXG4gICAgICAgIHRleHQgPSBpdGVtW2tleV1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhZExhYmVsID0gISF0ZXh0XG4gICAgICB0ZXh0IHx8PSAnJ1xuICAgICAgLy8gSWYgbm8gbGFiZWwgd2FzIGZvdW5kIHNvIGZhciwgdHJ5IHRvIHByb2R1Y2Ugb25lIGZyb20gdGhlaW5kZXguXG4gICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgLy8gQWx3YXlzIHVzZSBleHRlbmRlZCBzdHlsZSB3aGVuIGF1dG8tZ2VuZXJhdGluZyBsYWJlbHMgZnJvbSBpbmRleC9pZDpcbiAgICAgICAgZXh0ZW5kZWQgPSB0cnVlXG4gICAgICAgIGlmIChpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBpbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRleHQgPSBgJHtpbmRleCArIDF9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXh0ZW5kZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybUxhYmVsID0gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgaWYgKGZvcm1MYWJlbCkge1xuICAgICAgICAgIC8vIElmIGEgbGFiZWwgd2FzIHByb3ZpZGVkLCBwdXQgaW4gcXVvdGVzIHdoZW4gcHJlZml4ZWQgd2l0aCB0aGVcbiAgICAgICAgICAvLyBmb3JtIGxhYmVsIGZvciB0aGUgZXh0ZW5kZWQgc3R5bGU6XG4gICAgICAgICAgdGV4dCA9IGAke2Zvcm1MYWJlbH0gJHtoYWRMYWJlbCA/IGAnJHt0ZXh0fSdgIDogdGV4dH1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhc09iamVjdCA/IHsgdGV4dCwgcHJlZml4LCBzdWZmaXggfSA6IHRleHRcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tc2NoZW1hXG4gIC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgLmRpdG8tc2NoZW1hLWhlYWRlcihcbiAgICAgIHYtaWY9XCJoYXNMYWJlbCB8fCBoYXNUYWJzIHx8IGNsaXBib2FyZFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1tZW51LWhlYWRlcic6IG1lbnVIZWFkZXIgfVwiXG4gICAgKVxuICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgOmNvbGxhcHNlZD1cIiFvcGVuZWRcIlxuICAgICAgICBAZXhwYW5kPVwib25FeHBhbmRcIlxuICAgICAgKVxuICAgICAgICAvLyBQYXNzIGVkaXQtYnV0dG9ucyB0aHJvdWdoIHRvIGRpdG8tbGFiZWwncyBvd24gZWRpdC1idXR0b25zIHNsb3Q6XG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICNlZGl0LWJ1dHRvbnNcbiAgICAgICAgICB2LWlmPVwiaW5saW5lZFwiXG4gICAgICAgIClcbiAgICAgICAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiAgICAgIGRpdG8tdGFicyhcbiAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICA6c2VsZWN0ZWRUYWI9XCJzZWxlY3RlZFRhYlwiXG4gICAgICApXG4gICAgICBkaXRvLWNsaXBib2FyZChcbiAgICAgICAgOmNsaXBib2FyZD1cImNsaXBib2FyZFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIClcbiAgICBkaXRvLXBhbmUuZGl0by1wYW5lLXRhYihcbiAgICAgIHYtaWY9XCJoYXNUYWJzXCJcbiAgICAgIHYtZm9yPVwiKHNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgOmtleT1cInRhYlwiXG4gICAgICA6dmlzaWJsZT1cInNlbGVjdGVkVGFiID09PSB0YWJcIlxuICAgICAgOnRhYj1cInRhYlwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNNYWluUGFuZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgKVxuICAgIHRyYW5zaXRpb24taGVpZ2h0KFxuICAgICAgOmVuYWJsZWQ9XCJpbmxpbmVkXCJcbiAgICApXG4gICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLW1haW4oXG4gICAgICAgIHYtaWY9XCJoYXNNYWluUGFuZSAmJiBvcGVuZWRcIlxuICAgICAgICByZWY9XCJjb21wb25lbnRzXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc1RhYnNcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIClcbiAgICBzbG90KFxuICAgICAgbmFtZT1cImJ1dHRvbnNcIlxuICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICApXG4gIHRlbXBsYXRlKHYtaWY9XCJpbmxpbmVkXCIpXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIhaGFzTGFiZWxcIlxuICAgICAgbmFtZT1cImVkaXQtYnV0dG9uc1wiXG4gICAgKVxuICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJpc1BvcHVsYXRlZFwiKVxuICAgIGRpdG8tcGFuZWxzKFxuICAgICAgOnBhbmVscz1cInBhbmVsU2NoZW1hc1wiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zY2hlbWFcbiAgICAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgLmRpdG8tc2NoZW1hLWhlYWRlcihcbiAgICAgICAgdi1pZj1cImhhc0xhYmVsIHx8IGhhc1RhYnMgfHwgY2xpcGJvYXJkXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtbWVudS1oZWFkZXInOiBtZW51SGVhZGVyIH1cIlxuICAgICAgKVxuICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgOmNvbGxhcHNlZD1cIiFvcGVuZWRcIlxuICAgICAgICAgIEBleHBhbmQ9XCJvbkV4cGFuZFwiXG4gICAgICAgIClcbiAgICAgICAgICAvLyBQYXNzIGVkaXQtYnV0dG9ucyB0aHJvdWdoIHRvIGRpdG8tbGFiZWwncyBvd24gZWRpdC1idXR0b25zIHNsb3Q6XG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAjZWRpdC1idXR0b25zXG4gICAgICAgICAgICB2LWlmPVwiaW5saW5lZFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gICAgICAgIGRpdG8tdGFicyhcbiAgICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgICA6c2VsZWN0ZWRUYWI9XCJzZWxlY3RlZFRhYlwiXG4gICAgICAgIClcbiAgICAgICAgZGl0by1jbGlwYm9hcmQoXG4gICAgICAgICAgOmNsaXBib2FyZD1cImNsaXBib2FyZFwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIClcbiAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtdGFiKFxuICAgICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICAgIHYtZm9yPVwiKHNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgICAgcmVmPVwidGFic1wiXG4gICAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgICA6dmlzaWJsZT1cInNlbGVjdGVkVGFiID09PSB0YWJcIlxuICAgICAgICA6dGFiPVwidGFiXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgICB0cmFuc2l0aW9uLWhlaWdodChcbiAgICAgICAgOmVuYWJsZWQ9XCJpbmxpbmVkXCJcbiAgICAgIClcbiAgICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS1tYWluKFxuICAgICAgICAgIHYtaWY9XCJoYXNNYWluUGFuZSAmJiBvcGVuZWRcIlxuICAgICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgbmFtZT1cImJ1dHRvbnNcIlxuICAgICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgICAgKVxuICAgIHRlbXBsYXRlKHYtaWY9XCJpbmxpbmVkXCIpXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwiIWhhc0xhYmVsXCJcbiAgICAgICAgbmFtZT1cImVkaXQtYnV0dG9uc1wiXG4gICAgICApXG4gICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiaXNQb3B1bGF0ZWRcIilcbiAgICAgIGRpdG8tcGFuZWxzKFxuICAgICAgICA6cGFuZWxzPVwicGFuZWxTY2hlbWFzXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2NoZW1hXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC8vIFRvIGRpc3BsYXkgc2NoZW1hIG5leHQgdG8gcGFuZWxzOlxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBtaW4taGVpZ2h0OiAxMDAlXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgZmxleDogMSAxIDEwMCVcbiAgICAgIC8vIFNvIHRoYXQgc2NoZW1hIGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgICAgZGlzcGxheTogZ3JpZFxuICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudFxuICAgICAgPiAqOm9ubHktY2hpbGRcbiAgICAgICAgZ3JpZC1yb3ctZW5kOiBub25lXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nXG4gICAgPiAuZGl0by1idXR0b25zLFxuICAgID4gLmRpdG8tcGFuZWxzXG4gICAgICBmbGV4OiAxIDEgMCVcbiAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nXG4gICAgPiAuZGl0by1wYW5lbHNcbiAgICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmcgJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nIDBcbiAgICAvLyBEaXNwbGF5IGEgcnVsZXIgYmV0d2VlbiB0YWJiZWQgY29tcG9uZW50cyBhbmQgdG93YXJkcyB0aGUgLmRpdG8tYnV0dG9uc1xuICAgIC5kaXRvLXBhbmUtdGFiICsgLmRpdG8tcGFuZS1tYWluXG4gICAgICAmOjpiZWZvcmVcbiAgICAgICAgLy8gVXNlIGEgcHNldWRvIGVsZW1lbnQgdG8gZGlzcGxheSBhIHJ1bGVyIHdpdGggcHJvcGVyIG1hcmdpbnNcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgY29udGVudDogJydcbiAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZVxuICAgICAgICAvLyBBZGQgcmVtb3ZlZCAkZm9ybS1zcGFjaW5nIGFnYWluIHRvIHRoZSBydWxlclxuICAgICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmcgJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmctaGFsZlxuICAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgZGlzcGxheTogZmxleFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgIC5kaXRvLXRhYnMsXG4gICAgLmRpdG8tY2xpcGJvYXJkXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZFxuICAgIC5kaXRvLWNsaXBib2FyZFxuICAgICAgJjpvbmx5LWNoaWxkXG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgICAuZGl0by1idXR0b25cbiAgICAgICAgbWFyZ2luOiAwIDAgJHRhYi1tYXJnaW4gJHRhYi1tYXJnaW5cbiAgICAmLmRpdG8tc2NoZW1hLW1lbnUtaGVhZGVyXG4gICAgICAvLyBCcmluZyB0aGUgdGFicyB1cCB0byB0aGUgbWVudS5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgaGVpZ2h0OiAkbWVudS1oZWlnaHRcbiAgICAgIHBhZGRpbmc6IDAgJG1lbnUtcGFkZGluZy1ob3JcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgIHRvcDogMFxuICAgICAgbGVmdDogMFxuICAgICAgcmlnaHQ6IDBcbiAgICAgIHotaW5kZXg6ICRtZW51LXotaW5kZXhcbiAgICAgIC8vIFR1cm4gb2ZmIHBvaW50ZXIgZXZlbnRzIHNvIHRoYXQgRGl0b1RyYWlsIGtlZXBzIHJlY2VpdmluZyBldmVudHMuLi5cbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lXG4gICAgICAvLyAuLi5idXQgYWxsb3cgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdGFicyBhbmQgYnV0dG9ucyAoZS5nLiBjbGlwYm9hcmQpXG4gICAgICAvLyBsYXllcmVkIG9uIHRvcCBvZiBEaXRvVHJhaWwuXG4gICAgICAuZGl0by10YWJzLFxuICAgICAgLmRpdG8tYnV0dG9uc1xuICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0b1xuICAgICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICAgICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICBidXR0b24uZGl0by1sYWJlbFxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC8vIENhdGNoIGFsbCBjbGlja3MsIGV2ZW4gd2hlbiBpdCB3b3VsZCBiZSBwYXJ0aWFsbHkgY292ZXJlZCBieSBzY2hlbWEuXG4gICAgICB6LWluZGV4OiAxXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzUmVnRXhwLFxuICBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aCwgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGdldE5hbWVkU2NoZW1hcywgZ2V0UGFuZWxTY2hlbWFzLCBzZXREZWZhdWx0cywgcHJvY2Vzc0RhdGFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NoZW1hJywge1xuICBjb21wb25lbnRzOiB7IFRyYW5zaXRpb25IZWlnaHQgfSxcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGluamVjdDogW1xuICAgICckc2NoZW1hUGFyZW50Q29tcG9uZW50J1xuICBdLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpbmxpbmVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoYXNPd25EYXRhOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbWVudUhlYWRlcjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBwcm92aWRlIG1vcmUgZGF0YSB0aHJvdWdoIGBzY2hlbWEuZGF0YWAsIHZ1ZS1zdHlsZTpcbiAgICAgIC4uLihcbiAgICAgICAgZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgICAgPyBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgIDogZGF0YVxuICAgICAgKSxcbiAgICAgIGNvbXBvbmVudHNSZWdpc3RyeToge30sXG4gICAgICBwYW5lc1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVsc1JlZ2lzdHJ5OiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHNjaGVtYUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFyZW50IHNjaGVtYSBpcyB0aGlzIHNjaGVtYSBoYW5kbGVzIGl0cyBvd25cbiAgICAgIC8vIGRhdGEuIFRoaXMgcHJldmVudHMgZGVsZWdhdGluZyBldmVudHMgdG8gdGhlIHBhcmVudCwgYW5kIHJlZ2lzdGVyaW5nXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggdGhlIHBhcmVudCB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIHNldCBpc0RpcnR5IGZsYWdzLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IG51bGwgOiB0aGlzLiRwYXJlbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hcygpIHtcbiAgICAgIGNvbnN0IHBhbmVscyA9IGdldFBhbmVsU2NoZW1hcyh0aGlzLnNjaGVtYS5wYW5lbHMsICcnKVxuICAgICAgZm9yIChjb25zdCBwYW5lIG9mIHRoaXMucGFuZXMpIHtcbiAgICAgICAgcGFuZWxzLnB1c2goLi4ucGFuZS5wYW5lbFNjaGVtYXMpXG4gICAgICB9XG4gICAgICByZXR1cm4gcGFuZWxzXG4gICAgfSxcblxuICAgIHRhYnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnRhYnMpXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgY29uc3QgY3VycmVudFRhYiA9IHRoaXMuJHJvdXRlLmhhc2g/LnNsaWNlKDEpIHx8IG51bGxcbiAgICAgIGNvbnN0IHRhYiA9IGN1cnJlbnRUYWIgJiYgdGhpcy5zaG91bGRSZW5kZXIodGhpcy50YWJzW2N1cnJlbnRUYWJdKVxuICAgICAgICA/IGN1cnJlbnRUYWJcbiAgICAgICAgOiB0aGlzLmRlZmF1bHRUYWI/Lm5hbWUgfHwgbnVsbFxuICAgICAgaWYgKHRhYiAhPT0gY3VycmVudFRhYikge1xuICAgICAgICAvLyBBbnkgdGFiIGNoYW5nZSBuZWVkcyB0byBiZSByZWZsZWN0ZWQgaW4gdGhlIHJvdXRlciBhbHNvLlxuICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IGhhc2g6IHRhYiB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRhYlxuICAgIH0sXG5cbiAgICBkZWZhdWx0VGFiKCkge1xuICAgICAgaWYgKHRoaXMudGFicykge1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICAgIGZvciAoY29uc3QgdGFiIG9mIE9iamVjdC52YWx1ZXModGhpcy50YWJzKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFRhYiB9ID0gdGFiXG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdFRhYilcbiAgICAgICAgICAgID8gZGVmYXVsdFRhYi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAgIDogZGVmYXVsdFRhYlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hPy5jbGlwYm9hcmRcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnc2VydmVyJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmREYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJHNjaGVtYTogdGhpcy5zY2hlbWEubmFtZSxcbiAgICAgICAgLi4udGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0cy5cbiAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGFzOlxuICAgIC8vIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZERhdGFcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsaXBib2FyZERhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkYXRlZClcbiAgICB9LFxuXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMubGFiZWwgfHwgdGhpcy5jb2xsYXBzaWJsZVxuICAgIH0sXG5cbiAgICBoYXNUYWJzKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlubGluZWQgJiYgISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaGFzTWFpblBhbmUoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gISFjb21wb25lbnRzICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgb3BlbmVkOiBnZXRTdG9yZUFjY2Vzc29yKCdvcGVuZWQnLCB7XG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sbGFwc2VkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gICAgLy8gRGVsZWdhdGUgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIHBhcmVudCBzY2hlbWE6XG4gICAgdGhpcy5kZWxlZ2F0ZSgnY2hhbmdlJywgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQpXG4gICAgdGhpcy5lbWl0RXZlbnQoJ2luaXRpYWxpemUnKSAvLyBOb3QgYCdjcmVhdGUnYCwgc2luY2UgdGhhdCdzIGZvciBkYXRhLlxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lbWl0RXZlbnQoJ2Rlc3Ryb3knKVxuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChcbiAgICAgICAgdGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5TmFtZShkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlOYW1lKG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgc29tZUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLnNvbWUoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIGV2ZXJ5Q29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuZXZlcnkoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIG9uRXhwYW5kKGV4cGFuZCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2V4cGFuZCcsIHtcbiAgICAgICAgLy8gVE9ETzogQWN0dWFsbHkgZXhwb3NlIHRoaXMgb24gRGl0b0NvbnRleHQ/XG4gICAgICAgIGNvbnRleHQ6IHsgZXhwYW5kIH1cbiAgICAgIH0pXG4gICAgICAvLyBQcmV2ZW50IGNsb3NpbmcgdGhlIHNjaGVtYSB3aXRoIGludmFsaWQgZGF0YSwgc2luY2UgdGhlIGluLWNvbXBvbmVudFxuICAgICAgLy8gdmFsaWRhdGlvbiB3aWxsIG5vdCBiZSBleGVjdXRlZCBvbmNlIGl0J3MgY2xvc2VkLlxuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHZhbGlkYXRpb24gb3V0IG9mIGNvbXBvbmVudHMsIHRvIHNjaGVtYSwganVzdCBsaWtlXG4gICAgICAvLyBwcm9jZXNzaW5nLCBhbmQgdXNlIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCBmb3IgdGhlIHJlc3VsdGluZyBlcnJvcnMsXG4gICAgICAvLyB0aGVuIHJlbW92ZSB0aGlzIHJlcXVpcmVtZW50LCBzaW5jZSB3ZSBjYW4gdmFsaWRhdGUgY2xvc2VkIGZvcm1zIGFuZFxuICAgICAgLy8gc2NoZW1hcyB0aGVuLlxuICAgICAgaWYgKCF0aGlzLm9wZW5lZCB8fCBleHBhbmQgfHwgdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHRoaXMub3BlbmVkID0gZXhwYW5kXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlXG4gICAgfSxcblxuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHNCeURhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBsZXQgZGF0YVBhdGhzXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSBpc0Z1bmN0aW9uKG1hdGNoKVxuICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICA6IGlzUmVnRXhwKG1hdGNoKVxuICAgICAgICAgICAgPyBmaWVsZCA9PiBtYXRjaC50ZXN0KGZpZWxkKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGRhdGFQYXRocyA9IGNoZWNrXG4gICAgICAgICAgPyBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aCkuZmlsdGVyKGNoZWNrKVxuICAgICAgICAgIDogaXNBcnJheShtYXRjaClcbiAgICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICAgIDogW21hdGNoXVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgZGF0YVBhdGhzIHx8PSBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aClcbiAgICAgIGZvciAoY29uc3QgZGF0YVBhdGggb2YgZGF0YVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKCFjb21wb25lbnQudmFsaWRhdGUobm90aWZ5KSkge1xuICAgICAgICAgICAgLy8gRm9jdXMgZmlyc3QgZXJyb3IgZmllbGRcbiAgICAgICAgICAgIGlmIChub3RpZnkgJiYgZmlyc3QpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LmZvY3VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSAmJiAhaXNWYWxpZCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycygpXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsKG1hdGNoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBjb25zdCB1bm1hdGNoZWQgPSBbXVxuICAgICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIGVycnNdIG9mIE9iamVjdC5lbnRyaWVzKGVycm9ycykpIHtcbiAgICAgICAgLy8gSWYgdGhlIHNjaGVtYSBpcyBhIGRhdGEtcm9vdCwgcHJlZml4IGl0cyBvd24gZGF0YVBhdGggdG8gYWxsIGVycm9ycyxcbiAgICAgICAgLy8gc2luY2UgdGhlIGRhdGEgdGhhdCBpdCBzZW5kcyBhbmQgdmFsaWRhdGVzIHdpbGwgYmUgdW5wcmVmaXhlZC5cbiAgICAgICAgY29uc3QgZnVsbERhdGFQYXRoID0gdGhpcy5oYXNPd25EYXRhXG4gICAgICAgICAgPyBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgICA6IGRhdGFQYXRoXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMsIHRoaXMuZGF0YVBhdGgsIHRoaXMuaGFzT3duRGF0YSwgZnVsbERhdGFQYXRoKVxuICAgICAgICAvLyBDb252ZXJ0IGZyb20gSmF2YVNjcmlwdCBwcm9wZXJ0eSBhY2Nlc3Mgbm90YXRpb24sIHRvIG91ciBvd24gZm9ybVxuICAgICAgICAvLyBvZiByZWxhdGl2ZSBKU09OIHBvaW50ZXJzIGFzIGRhdGEtcGF0aHM6XG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGZ1bGxEYXRhUGF0aClcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmIChjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIC8vIENvdWxkbid0IGZpbmQgYSBjb21wb25lbnQgaW4gYW4gYWN0aXZlIGZvcm0gZm9yIHRoZSBnaXZlbiBkYXRhUGF0aC5cbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjb21wb25lbnQgc2VydmluZyBhIHBhcnQgb2YgdGhlIGRhdGFQYXRoLFxuICAgICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgaWYgKGF3YWl0IGNvbXBvbmVudC5uYXZpZ2F0ZVRvQ29tcG9uZW50Py4oXG4gICAgICAgICAgICAgICAgZnVsbERhdGFQYXRoLFxuICAgICAgICAgICAgICAgIHN1YkNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHN1YkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJycyA9IGVycm9yc1tjb21wb25lbnQuZGF0YVBhdGhdXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBlcnJzICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgbmVzdGVkIGZvcm0gdG8gZGlzcGxheSBhdCBsZWFzdCBwYXJ0cyBmbyB0aGUgZXJyb3JzLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHNob3cgYWxsIGVycm9ycyBhdCBvbmNlLCBzbyB3ZSdyZSBkb25lLiBEb24ndCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYG5vdGlmeUVycm9ycygpYCB5ZXQsIGFzIHdlIGNhbiBvbmx5IGRpc3BsYXkgaXQgb25jZVxuICAgICAgICAgICAgICAgIC8vIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCB3YXMgY2FsbGVkIGZyb20gYERpdG9Gb3JtLm1vdW50ZWQoKWBcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RpbGwgaGVyZSwgc28ga2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2hlbiB0aGUgZXJyb3IgY2FuJ3QgYmUgbWF0Y2hlZCwgYWRkIGl0IHRvIGEgbGlzdCBvZiB1bm1hdGNoZWRcbiAgICAgICAgICAvLyBlcnJvcnMgd2l0aCBkZWNlbnQgbWVzc2FnZSwgdG8gcmVwb3J0IGF0IHRoZSBlbmQuXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBsYWJlbGl6ZShwcm9wZXJ0eSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBmaWVsZFxuICAgICAgICAgICAgICA/IGBUaGUgZmllbGQgJHtmaWVsZH1gXG4gICAgICAgICAgICAgIDogYFRoZSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKGAke3ByZWZpeH0gJHtlcnIubWVzc2FnZX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKHVubWF0Y2hlZC5qb2luKCdcXG4nKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbm90aWZ5RXJyb3JzKG1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdWYWxpZGF0aW9uIEVycm9ycycsXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UgfHwgJ1BsZWFzZSBjb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBlcnJvcnMuJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVzZXREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGB0aGlzLmRhdGEgPSAuLi5gIGJlY2F1c2UgaXQncyBhIHByb3BlcnR5LCBidXQgd2UgY2FuXG4gICAgICAvLyBzZXQgYWxsIGtub3duIHByb3BlcnRpZXMgb24gaXQgdG8gdGhlIHZhbHVlcyByZXR1cm5lZCBieVxuICAgICAgLy8gYHNldERlZmF1bHRzKClgLCBhcyB0aGV5IGFyZSBhbGwgcmVhY3RpdmUgYWxyZWFkeSBmcm9tIHRoZSBzdGFydHM6XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGF0YSwgc2V0RGVmYXVsdHModGhpcy5zY2hlbWEsIHt9LCB0aGlzKSlcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIG5hbWUsIGRhdGFbbmFtZV0pXG4gICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpKSB7XG4gICAgICAgICAgICBjb21wb25lbnQubWFya0RpcnR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZmlsdGVyRGF0YShkYXRhKSB7XG4gICAgICAvLyBGaWx0ZXJzIG91dCBhcnJheXMgYW5kIG9iamVjdHMgdGhhdCBhcmUgYmFjayBieSBkYXRhIHJlc291cmNlc1xuICAgICAgLy8gdGhlbXNlbHZlcywgYXMgdGhvc2UgYXJlIGFscmVhZHkgdGFraW5nIGNhcmUgb2YgdGhyb3VnaCB0aGVpciBvd24gQVBJXG4gICAgICAvLyByZXNvdXJjZSBlbmQtcG9pbnRzIGFuZCBzaG91bGRuJ3QgYmUgc2V0LlxuICAgICAgY29uc3QgY29weSA9IHt9XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSlcbiAgICAgICAgICBpZiAoY29tcG9uZW50cy5zb21lKGNvbXBvbmVudCA9PiBjb21wb25lbnQucHJvdmlkZXNEYXRhKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29weVtuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY29weVxuICAgIH0sXG5cbiAgICBwcm9jZXNzRGF0YSh7IHRhcmdldCA9ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5ID0gdHJ1ZSB9ID0ge30pIHtcbiAgICAgIHJldHVybiBwcm9jZXNzRGF0YShcbiAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsIHtcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIERpdG9Db250ZXh0IGhhbmRsaW5nIGluc2lkZSBgcHJvY2Vzc0RhdGFgIGFuZFxuICAgICAgICAgIC8vIGBwcm9jZXNzU2NoZW1hRGF0YSgpYDpcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgc2NoZW1hT25seSxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBgJHNjaGVtYVBhcmVudENvbXBvbmVudCgpYCBpcyBvbmx5IHNldCBpZiBvbmUgb2YgdGhlIGFuY2VzdG9ycyB1c2VzXG4gICAgICAvLyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICAgIHRoaXMuJHNjaGVtYVBhcmVudENvbXBvbmVudCgpPy5fcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5jb21wb25lbnRzUmVnaXN0cnksIGNvbXBvbmVudCwgYWRkKVxuICAgICAgLy8gT25seSByZWdpc3RlciB3aXRoIHRoZSBwYXJlbnQgaWYgc2NoZW1hIHNoYXJlcyBkYXRhIHdpdGggaXQuXG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lKHBhbmUsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVzUmVnaXN0cnksIHBhbmUsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZWwocGFuZWwsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVsc1JlZ2lzdHJ5LCBwYW5lbCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJFbnRyeShyZWdpc3RyeSwgZW50cnksIGFkZCkge1xuICAgICAgY29uc3QgdWlkID0gZW50cnkuJHVpZFxuICAgICAgaWYgKGFkZCkge1xuICAgICAgICB0aGlzLiRzZXQocmVnaXN0cnksIHVpZCwgZW50cnkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRkZWxldGUocmVnaXN0cnksIHVpZClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2xpc3RFbnRyaWVzQnlEYXRhUGF0aChyZWdpc3RyeSkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVnaXN0cnkpLnJlZHVjZSgoZW50cmllc0J5RGF0YVBhdGgsIGVudHJ5KSA9PiB7XG4gICAgICAgIC8vIE11bHRpcGxlIGVudHJpZXMgY2FuIGJlIGxpbmtlZCB0byB0aGUgc2FtZSBkYXRhLXBhdGgsIGUuZy4gd2hlblxuICAgICAgICAvLyB0aGVyZSBhcmUgdGFicy4gTGluayBlYWNoIGRhdGEtcGF0aCB0byBhbiBhcnJheSBvZiBlbnRyaWVzLlxuICAgICAgICBjb25zdCB7IGRhdGFQYXRoIH0gPSBlbnRyeVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gZW50cmllc0J5RGF0YVBhdGhbZGF0YVBhdGhdIHx8PSBbXVxuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFxuICAgICAgfSwge30pXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCkuc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICA/IHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgICAgIDogdGhpcy5fZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW25vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW2FwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2ZpbHRlckVudHJpZXMoZW50cmllcywgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaCA/IGVudHJpZXMuZmlsdGVyKG1hdGNoKSA6IGVudHJpZXNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1zY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgOnNjaGVtYT1cInNjaGVtYVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICA6aW5saW5lZD1cInRydWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4pXG4gIC8vIFJlbmRlciBkaXRvLWVkaXQtYnV0dG9ucyBmb3IgaW5saW5lZCBzaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAvLyBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1zY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICAgIDppbmxpbmVkPVwidHJ1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuICApXG4gICAgLy8gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gICAgLy8gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gICAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2NoZW1hLWlubGluZWRcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+IC5kaXRvLXNjaGVtYS1oZWFkZXJcbiAgICAgICAgLy8gQ2hhbmdlIHNwYWNpbmcgc28gLmRpdG8tbGFiZWwgY292ZXJzIHRoZSBmdWxsIC5kaXRvLXNjaGVtYS1oZWFkZXIuXG4gICAgICAgIG1hcmdpbjogLSRmb3JtLXNwYWNpbmdcbiAgICAgICAgLmRpdG8tbGFiZWxcbiAgICAgICAgICAvLyBBZGQgcmVtb3ZlZCAkZm9ybS1zcGFjaW5nIGFnYWluXG4gICAgICAgICAgLS1sYWJlbC1wYWRkaW5nOiAjeyRmb3JtLXNwYWNpbmd9XG4gICAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICAgICAgLy8gQmVjYXVzZSB0YWJsZXMgaGF2ZSBhIGZ1bm55IHdheSBvZiBhbGxvd2luZyB0b28gbXVjaCB3aWR0aCBncm93dGg6XG4gICAgICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgICAmICsuZGl0by1wYW5lXG4gICAgICAgICAgLy8gTmVlZGVkIGZvciB0cmFuc2l0aW9uLWhlaWdodCBpbiBEaXRvU2NoZW1hOlxuICAgICAgICAgIG1pbi1oZWlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNDb21wYWN0IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjaGVtYS1pbmxpbmVkJywge1xuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzQ29tcGFjdCgpIHtcbiAgICAgIHJldHVybiBpc0NvbXBhY3QodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzQ29tcGFjdCAmJiAhIXRoaXMubGFiZWxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tcGFuZShcbiAgdi1pZj1cImlzUG9wdWxhdGVkICYmIGNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID4gMFwiXG4gIHYtc2hvdz1cInZpc2libGVcIlxuKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1ge1xuICAgICAgc2NoZW1hLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgIG5lc3RlZCxcbiAgICAgIHN0b3JlXG4gICAgfSBpbiBjb21wb25lbnRTY2hlbWFzYFxuICApXG4gICAgLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgKVxuICAgIGRpdG8tY29udGFpbmVyKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgIClcbiAgICAuZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXBhbmUoXG4gICAgdi1pZj1cImlzUG9wdWxhdGVkICYmIGNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID4gMFwiXG4gICAgdi1zaG93PVwidmlzaWJsZVwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZm9yPWB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIHN0b3JlXG4gICAgICB9IGluIGNvbXBvbmVudFNjaGVtYXNgXG4gICAgKVxuICAgICAgLmRpdG8tYnJlYWsoXG4gICAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdiZWZvcmUnXCJcbiAgICAgIClcbiAgICAgIGRpdG8tY29udGFpbmVyKFxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgICA6a2V5PVwibmVzdGVkRGF0YVBhdGhcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLWJyZWFrKFxuICAgICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1wYW5lXG4gICAgZGlzcGxheTogZmxleFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIGZsZXgtZmxvdzogcm93IHdyYXBcbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lXG4gICAgLy8gUmVtb3ZlIHBhZGRpbmcgYWRkZWQgYnkgYC5kaXRvLWNvbnRhaW5lcmBcbiAgICBtYXJnaW46ICgtJGZvcm0tc3BhY2luZykgKC0kZm9ybS1zcGFjaW5nLWhhbGYpXG4gICAgLy8gQWRkIHJlbW92ZWQgaG9yaXpvbnRhbCBtYXJnaW4gYWdhaW4gdG8gbWF4LXdpZHRoOlxuICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAyICogJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgLy8gVXNlIGBmbGV4OiAwJWAgZm9yIGFsbCBgLmRpdG8tcGFuZWAgZXhjZXB0IGAuZGl0by1wYW5lLW1haW5gLFxuICAgIC8vIHNvIHRoYXQgdGhlIGAuZGl0by1idXR0b25zLW1haW5gIGNhbiBiZSBtb3ZlZCBhbGwgdGhlIHdheSB0byB0aGUgYm90dG9tLlxuICAgIGZsZXg6IDAlXG5cbiAgICAmLmRpdG8tcGFuZS1tYWluXG4gICAgICBmbGV4OiAxMDAlXG5cbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyOm5vdCguZGl0by1zY2hlbWEtbWVudS1oZWFkZXIpICsgJlxuICAgICAgLy8gQ2xlYXIgdG9wLW1hcmdpbiBpZiB0aGUgY29tcG9uZW50cyBhcmUgcHJlY2VkZWQgYnkgYSBzY2hlbWEgaGVhZGVyLlxuICAgICAgbWFyZ2luLXRvcDogMFxuXG4gICAgLmRpdG8tY29udGFpbmVyLmRpdG8tb21pdC1wYWRkaW5nID4gJlxuICAgICAgLy8gQ2xlYXIgbWFyZ2lucyBzZXQgYWJvdmUgYWdhaW4gaWYgcGFyZW50IGlzIG9taXR0aW5nIHBhZGRpbmcuXG4gICAgICBtYXJnaW46IDBcbiAgICAgIG1heC13aWR0aDogdW5zZXRcblxuICAgIC5kaXRvLWJyZWFrXG4gICAgICBmbGV4OiAxMDAlXG4gICAgICBoZWlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0QWxsUGFuZWxTY2hlbWFzLCBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmUnLCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMudGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHZpc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWIgPyB0aGlzIDogdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgY29tcG9uZW50U2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBjb21wb25lbnRzIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzXG4gICAgICAvLyBhbmQgYWRkcyB0aGUga2V5IGFzIHRoZSBuYW1lIHRvIGVhY2ggY29tcG9uZW50LCB1c2VkIGZvciBsYWJlbHMsIGV0Yy5cbiAgICAgIC8vIE5PVEU6IHNjaGVtYSBjYW4gYmUgbnVsbCB3aGlsZSBtdWx0aS1mb3JtIGxpc3RzIGxvYWQgdGhlaXIgZGF0YSxcbiAgICAgIC8vIGJlY2F1c2Ugb25seSB0aGUgYXZhaWxhYmxlIGRhdGEgd2lsbCBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgZm9ybS5cbiAgICAgIC8vIFdoZW4gZWRpdGluZyBwcmltaXRpdmUgdmFsdWVzIHRocm91Z2ggYSBmb3JtLCBkbyBub3QgYXBwZW5kICduYW1lJyB0b1xuICAgICAgLy8gdGhlIGNvbXBvbmVudCdzIGRhdGFQYXRoIHNvIGl0IGNhbiBiZSBtYXBwZWQgdG8gZnJvbSB2YWxpZGF0aW9uIGVycm9ycy5cbiAgICAgIC8vIE5PVEU6IE5vdCBhbGwgc2NoZW1hcyAvIGNvbXBvbmVudHMgaGF2ZSBhIHNvdXJjZVNjaGVtYSwgZS5nLiBkaWFsb2dzLlxuICAgICAgY29uc3Qgd3JhcFByaW1pdGl2ZXMgPSB0aGlzLnNvdXJjZVNjaGVtYT8ud3JhcFByaW1pdGl2ZXNcbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYT8uY29tcG9uZW50cyB8fCB7fSkubWFwKFxuICAgICAgICAoW25hbWUsIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAvLyBBbHdheXMgYWRkIG5hbWUgdG8gY29tcG9uZW50IHNjaGVtYS5cbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgICAvLyBTaGFyZSBkYXRhUGF0aCBhbmQgc3RvcmUgd2l0aCBwYXJlbnQgaWYgbm90IG5lc3RlZDpcbiAgICAgICAgICBjb25zdCBuZXN0ZWQgPSBpc05lc3RlZChzY2hlbWEpXG4gICAgICAgICAgY29uc3QgbmVzdGVkRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBkYXRhUGF0aDogbmVzdGVkICYmICF3cmFwUHJpbWl0aXZlc1xuICAgICAgICAgICAgICA/IG5lc3RlZERhdGFQYXRoXG4gICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IG5lc3RlZCA/IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKSA6IHRoaXMuc3RvcmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgLy8gR2F0aGVyIGFsbCBwYW5lbCBzY2hlbWFzIGZyb20gYWxsIGNvbXBvbmVudCBzY2hlbWFzLCBieSBmaW5kaW5nIHRob3NlXG4gICAgICAvLyB0aGF0IHdhbnQgdG8gcHJvdmlkZSBhIHBhbmVsLiBTZWUgYGdldEFsbFBhbmVsU2NoZW1hcygpYCBmb3IgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFNjaGVtYXMuZmxhdE1hcChcbiAgICAgICAgKHsgc2NoZW1hLCBuZXN0ZWREYXRhUGF0aDogZGF0YVBhdGggfSkgPT4gZ2V0QWxsUGFuZWxTY2hlbWFzKFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudCxcbiAgICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlICYmIHRoaXMuY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPT09IDFcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmUodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIGlmICh0aGlzLnRhYikge1xuICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IGhhc2g6IHRoaXMudGFiIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyYWN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IG1hdGNoID0gKFxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJlxuICAgIHZhbHVlLm1hdGNoKC9eXFxzKihbKy1dP1xcZCspXFxzKlxcL1xccyooWystXT9cXGQrKVxccyokLylcbiAgKVxuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBkaXZpZGVuZCwgZGl2aXNvcl0gPSBtYXRjaFxuICAgIHJldHVybiBwYXJzZUZsb2F0KGRpdmlkZW5kKSAvIHBhcnNlRmxvYXQoZGl2aXNvcilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgfVxufVxuIiwiXG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbilcbiAgZGl0by1sYWJlbChcbiAgICB2LWlmPVwibGFiZWxcIlxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gIClcbiAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgIDppcz1cImdldFR5cGVDb21wb25lbnQoc2NoZW1hLnR5cGUpXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gIClcbiAgZGl0by1lcnJvcnMoXG4gICAgOmVycm9ycz1cImVycm9yc1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvbnRhaW5lcihcbiAgICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gICAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuICApXG4gICAgZGl0by1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbFwiXG4gICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICApXG4gICAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgICAgOmlzPVwiZ2V0VHlwZUNvbXBvbmVudChzY2hlbWEudHlwZSlcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICAgIClcbiAgICBkaXRvLWVycm9ycyhcbiAgICAgIDplcnJvcnM9XCJlcnJvcnNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jb250YWluZXJcbiAgICAvLyBOZWVkZWQgZm9yIGJldHRlciB2ZXJ0aWNhbCBhbGlnbm1lbnQ6XG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaFxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAvLyBUbyBwcmV2ZW50IGxpc3QgdGFibGVzIGZyb20gYmxvd2luZyBvdXQgb2YgdGhlaXIgZmxleCBib3ggY29udGFpbmVycy5cbiAgICBtYXgtd2lkdGg6IDEwMCVcbiAgICAvLyBDYW5ub3QgdXNlIG1hcmdpbiBoZXJlIGFzIGl0IG5lZWRzIHRvIGJlIHBhcnQgb2YgYm94LXNpemluZyBmb3JcbiAgICAvLyBwZXJjZW50YWdlcyBpbiBmbGV4LWJhc2lzIHRvIHdvcmsuXG4gICAgcGFkZGluZzogJGZvcm0tc3BhY2luZyAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgICAmOmVtcHR5XG4gICAgICBwYWRkaW5nOiAwXG4gICAgJi5kaXRvLW9taXQtcGFkZGluZ1xuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAuZGl0by1sYWJlbFxuICAgICAgICBtYXJnaW46ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmIDBcbiAgICAmLmRpdG8tc2luZ2xlXG4gICAgICBoZWlnaHQ6IDEwMCUgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSBhdCB0aGUgYm90dG9tXG4gIC8vIE5PVEU6IFRoaXMgaXMgbm90IG5lc3RlZCBpbnNpZGUgYC5kaXRvLWNvbnRhaW5lcmAgc28gdGhhdCBvdGhlclxuICAvLyB0eXBlIGNvbXBvbmVudHMgY2FuIG92ZXJyaWRlIGAuZGl0by13aWR0aC1maWxsYCBjbGFzcyAoZmlsdGVyIHByZWNlZGVuY2UpLlxuICAuZGl0by1jb21wb25lbnRcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICYuZGl0by1jaGVja2JveCxcbiAgICAgICYuZGl0by1yYWRpby1idXR0b25cbiAgICAgICAgLy8gV2ViS2l0IGRvZXNuJ3QgbGlrZSBjaGFuZ2VkIHdpZHRoIG9uIGNoZWNrYm94ZXMgYW5kIHJhZGlvcywgb3ZlcnJpZGU6XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICB3aWR0aDogYXV0b1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBpc051bWJlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldFR5cGVPcHRpb25zLCBzaG91bGRPbWl0UGFkZGluZyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHBhcnNlRnJhY3Rpb24gfSBmcm9tICcuLi91dGlscy9tYXRoLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY29udGFpbmVyJywge1xuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHR5cGVPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHRoaXMuc2NoZW1hKSB8fCB7fVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSBzY2hlbWFcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGxhYmVsICE9PSBmYWxzZSAmJlxuICAgICAgICAoISFsYWJlbCB8fCB0aGlzLnR5cGVPcHRpb25zLmdlbmVyYXRlTGFiZWwgJiYgdGhpcy5nZW5lcmF0ZUxhYmVscylcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNMYWJlbCA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpIDogbnVsbFxuICAgIH0sXG5cbiAgICBsYWJlbERhdGFQYXRoKCkge1xuICAgICAgLy8gVW5uZXN0ZWQgdHlwZXMgZG9uJ3QgaGF2ZSBhIGRhdGFQYXRoIGZvciB0aGVtc2VsdmVzLCBkb24ndCB1c2UgaXQ6XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLmRhdGFQYXRoIDogbnVsbFxuICAgIH0sXG5cbiAgICBjb21wb25lbnRXaWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVPcHRpb25zLmRlZmF1bHRXaWR0aFxuICAgICAgfSxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICAvLyBVc2UgMTAwJSA9PSAxLjAgYXMgZGVmYXVsdCB3aWR0aCB3aGVuIG5vdGhpbmcgaXMgc2V0OlxuICAgICAgICByZXR1cm4gd2lkdGggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gMS4wXG4gICAgICAgICAgOiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqWzw+XT9cXHMqKC4qKSQvKVsxXSAvLyBSZW1vdmUgd2lkdGggb3BlcmF0b3JcbiAgICAgICAgICAgIDogd2lkdGhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFdpZHRoT3BlcmF0b3I6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccyooWzw+XT8pLylbMV0gfHwgbnVsbFxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50VmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudERpc2FibGVkOiBnZXRTY2hlbWFBY2Nlc3NvcignZGlzYWJsZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIGRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbnRhaW5lckNsYXNzKCkge1xuICAgICAgY29uc3QgeyBjbGFzczogY29udGFpbmVyQ2xhc3MgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tb21pdC1wYWRkaW5nJzogc2hvdWxkT21pdFBhZGRpbmcodGhpcy5zY2hlbWEpLFxuICAgICAgICAuLi4oXG4gICAgICAgICAgaXNTdHJpbmcoY29udGFpbmVyQ2xhc3MpXG4gICAgICAgICAgICA/IHsgW2NvbnRhaW5lckNsYXNzXTogdHJ1ZSB9XG4gICAgICAgICAgICA6IGNvbnRhaW5lckNsYXNzXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50QmFzaXMoKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMuY29tcG9uZW50V2lkdGhcbiAgICAgIC8vICdhdXRvJyA9IG5vIGZpdHRpbmc6XG4gICAgICBjb25zdCBiYXNpcyA9IChcbiAgICAgICAgW251bGwsICdhdXRvJywgJ2ZpbGwnXS5pbmNsdWRlcyh3aWR0aCkgPyAnYXV0bydcbiAgICAgICAgOiAvJSQvLnRlc3Qod2lkdGgpID8gcGFyc2VGbG9hdCh3aWR0aCkgLy8gcGVyY2VudGFnZVxuICAgICAgICA6IC9bYS16XS8udGVzdCh3aWR0aCkgPyB3aWR0aCAvLyBuYXRpdmUgdW5pdHNcbiAgICAgICAgOiBwYXJzZUZyYWN0aW9uKHdpZHRoKSAqIDEwMCAvLyBmcmFjdGlvblxuICAgICAgKVxuICAgICAgcmV0dXJuIGlzTnVtYmVyKGJhc2lzKSA/IGAke2Jhc2lzfSVgIDogYmFzaXNcbiAgICB9LFxuXG4gICAgY29udGFpbmVyU3R5bGUoKSB7XG4gICAgICAvLyBJbnRlcnByZXQgJz41MCUnIGFzICc1MCUsIGZsZXgtZ3JvdzogMWBcbiAgICAgIGNvbnN0IGdyb3cgPSAoXG4gICAgICAgIHRoaXMuY29tcG9uZW50V2lkdGhPcGVyYXRvciA9PT0gJz4nIHx8XG4gICAgICAgIHRoaXMuY29tcG9uZW50V2lkdGggPT09ICdmaWxsJ1xuICAgICAgKVxuICAgICAgLy8gSW50ZXJwcmV0ICc8NTAlJyBhcyAnNTAlLCBmbGV4LXNocmluazogMWBcbiAgICAgIGNvbnN0IHNocmluayA9IHRoaXMuY29tcG9uZW50V2lkdGhPcGVyYXRvciA9PT0gJzwnXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmbGV4OiBgJHtncm93ID8gMSA6IDB9ICR7c2hyaW5rID8gMSA6IDB9ICR7dGhpcy5jb21wb25lbnRCYXNpc31gXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudENsYXNzKCkge1xuICAgICAgY29uc3QgYmFzaXNJc0F1dG8gPSB0aGlzLmNvbXBvbmVudEJhc2lzID09PSAnYXV0bydcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXNpbmdsZSc6IHRoaXMuc2luZ2xlLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IHRoaXMuY29tcG9uZW50RGlzYWJsZWQsXG4gICAgICAgICdkaXRvLXdpZHRoLWZpbGwnOiAhYmFzaXNJc0F1dG8gfHwgdGhpcy5jb21wb25lbnRXaWR0aCA9PT0gJ2ZpbGwnLFxuICAgICAgICAnZGl0by13aWR0aC1hdXRvJzogYmFzaXNJc0F1dG8sXG4gICAgICAgICdkaXRvLWhhcy1lcnJvcnMnOiAhIXRoaXMuZXJyb3JzXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkVycm9ycyhlcnJvcnMpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXRhYnNcbiAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHRhYlNjaGVtYSlcIlxuICAgIDprZXk9XCJrZXlcIlxuICAgIDp0bz1cInsgaGFzaDoga2V5IH1cIlxuICAgIGFjdGl2ZS1jbGFzcz1cImRpdG8tYWN0aXZlXCJcbiAgKVxuICAgIHwge3sgZ2V0TGFiZWwodGFiU2NoZW1hLCBrZXkpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by10YWJzXG4gICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih0YWJTY2hlbWEpXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOnRvPVwieyBoYXNoOiBrZXkgfVwiXG4gICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAkdGFiLWNvbG9yLWJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdFxuICAkdGFiLWNvbG9yLWluYWN0aXZlOiAkY29sb3ItbGlnaHRcbiAgJHRhYi1jb2xvci1hY3RpdmU6ICRjb2xvci1saWdodGVzdFxuICAkdGFiLWNvbG9yLWhvdmVyOiAkY29sb3Itd2hpdGVcblxuICAuZGl0by10YWJzXG4gICAgLy8gU2VlOiBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgICBtYXJnaW4tbGVmdDogYXV0b1xuICAgIGFcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItaW5hY3RpdmVcbiAgICAgIHBhZGRpbmc6ICR0YWItcGFkZGluZy12ZXIgJHRhYi1wYWRkaW5nLWhvclxuICAgICAgbWFyZ2luLWxlZnQ6ICR0YWItbWFyZ2luXG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1c1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzXG4gICAgICAmOmhvdmVyXG4gICAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItaG92ZXJcbiAgICAgICY6YWN0aXZlXG4gICAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItYWN0aXZlXG4gICAgICAmLmRpdG8tYWN0aXZlXG4gICAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItYmFja2dyb3VuZFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJzJywge1xuICBwcm9wczoge1xuICAgIHRhYnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2VsZWN0ZWRUYWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLyBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuY29tcG9uZW50LmRpdG8tcGFuZWwoXG4gIDppcz1cInBhbmVsVGFnXCJcbiAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgQHN1Ym1pdC5wcmV2ZW50XG4pXG4gIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICBkaXRvLXNjaGVtYS5kaXRvLXBhbmVsLXNjaGVtYShcbiAgICA6c2NoZW1hPVwicGFuZWxTY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmhhc093bkRhdGE9XCJoYXNPd25EYXRhXCJcbiAgKVxuICAgIGRpdG8tYnV0dG9ucyhcbiAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8gT25seSBzaG93IHBhbmVscyBpbiB0YWJzIHdoZW4gdGhlIHRhYnMgYXJlIGFsc28gdmlzaWJsZS5cbiAgY29tcG9uZW50LmRpdG8tcGFuZWwoXG4gICAgOmlzPVwicGFuZWxUYWdcIlxuICAgIHYtc2hvdz1cInZpc2libGUgJiYgKCFwYW5lbFRhYkNvbXBvbmVudCB8fCBwYW5lbFRhYkNvbXBvbmVudC52aXNpYmxlKVwiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICBsYWJlbC5kaXRvLXBhbmVsLXRpdGxlIHt7IGdldExhYmVsKHNjaGVtYSkgfX1cbiAgICBkaXRvLXNjaGVtYS5kaXRvLXBhbmVsLXNjaGVtYShcbiAgICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucyhcbiAgICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1wYW5lbFxuICAgIG1hcmdpbi1ib3R0b206ICRjb250ZW50LXBhZGRpbmdcbiAgICAuZGl0by1wYW5lbC10aXRsZVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWNvbG9yXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAuZGl0by1wYW5lbC1zY2hlbWFcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbFxuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItdG9wOiAwXG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nXG4gICAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICAgIC0tYnV0dG9uLW1hcmdpbjogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgICAuZGl0by1vYmplY3RcbiAgICAgICAgYm9yZGVyOiAwXG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICBsYWJlbFxuICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgIC5kaXRvLXBhbmVcbiAgICAgICAgbWFyZ2luOiAwICgtJGZvcm0tc3BhY2luZy1oYWxmKVxuICAgICAgLmRpdG8tY29udGFpbmVyXG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZlxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmVsJywge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhbmVsVGFiQ29tcG9uZW50OiB7IHR5cGU6IERpdG9Db21wb25lbnQsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bkRhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICB0YXJnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudGFyZ2V0IHx8IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgaGFzT3duRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMub3duRGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25EYXRhIHx8IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYSgpIHtcbiAgICAgIGlmICh0aGlzLmhhc093bkRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgYGRhdGFgIGZyb20gdGhlIHNjaGVtYSwgc28gdGhhdCBEaXRvU2NoZW1hIGlzbid0IHVzaW5nIGl0IHRvXG4gICAgICAgIC8vIHByb2R1Y2UgaXRzIG93biBkYXRhLiBTZWUgJGZpbHRlcnMgcGFuZWwgZm9yIG1vcmUgZGV0YWlscyBvbiBkYXRhLlxuICAgICAgICBjb25zdCB7IGRhdGEsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbFRhZygpIHtcbiAgICAgIC8vIFBhbmVscyB0aGF0IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEgbmVlZCB0aGVpciBvd24gZm9ybS5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyAnZm9ybScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICBwYW5lbERhdGFQYXRoKCkge1xuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gZGF0YSwgdGhlbiBpdCBuZWVkcyB0byBwcmVmaXggYWxsXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggaXRzIGRhdGEtcGF0aCwgYnV0IGlmIGl0IHNoYXJlcyBkYXRhIHdpdGggdGhlIHNjaGVtYVxuICAgICAgLy8gY29tcG9uZW50LCB0aGVuIGl0IHNob3VsZCBzaGFyZSB0aGUgZGF0YS1wYXRoIG5hbWUgc3BhY2UgdG9vLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IHRoaXMuZGF0YVBhdGggOiB0aGlzLnNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYHNjaGVtYS5kYXRhYCBoYW5kbGluZyBpbiBEaXRvU2NoZW1hLFxuICAgIC8vIHdoZXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBhY3R1YWwgY29tcG9uZW50LlxuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5vd25EYXRhID0gaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIDogZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWxzIHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gZmluZCB0aGVtIGJ5IHRoZWlyXG4gICAgICAvLyBkYXRhLXBhdGgsIGUuZy4gaW4gVHlwZUxpc3Qub25GaWx0ZXJFcnJvcnMoKVxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZWwodGhpcywgYWRkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYW5lbHMoXG4gIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4pXG4gIGRpdG8tcGFuZWwoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCAhPSBudWxsID8gc2NoZW1hLmRpc2FibGVkIDogZGlzYWJsZWRcIlxuICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXBhbmVscyhcbiAgICB2LWlmPVwicGFuZWxzLmxlbmd0aCA+IDBcIlxuICApXG4gICAgZGl0by1wYW5lbChcbiAgICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkICE9IG51bGwgPyBzY2hlbWEuZGlzYWJsZWQgOiBkaXNhYmxlZFwiXG4gICAgICA6cGFuZWxUYWJDb21wb25lbnQ9XCJ0YWJDb21wb25lbnRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1wYW5lbHNcbiAgICBtYXgtd2lkdGg6ICRjb250ZW50LXNpZGViYXItd2lkdGhcbiAgICBtaW4td2lkdGg6IGNhbGMoJGNvbnRlbnQtc2lkZWJhci13aWR0aCAvIDIpXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmVscycsIHtcbiAgcHJvcHM6IHtcbiAgICBwYW5lbHM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gICAgICAvLyBBbGxvdyBzZXBhcmF0ZSB0YWJzIHRvIHVzZSBwYW5lbHMgb2YgdGhlIHNhbWUgbmFtZSwgYnlcbiAgICAgIC8vIHByZWZpeGluZyB0aGVpciBrZXkgd2l0aCB0aGUgdGFiIG5hbWUuXG4gICAgICByZXR1cm4gdGFiQ29tcG9uZW50ID8gYCR7dGFiQ29tcG9uZW50LnRhYn1fJHtkYXRhUGF0aH1gIDogZGF0YVBhdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tYnV0dG9ucyhcbiAgdi1pZj1cImJ1dHRvblNjaGVtYXMgfHwgJHNsb3RzLmRlZmF1bHRcIlxuICAvKiBQYXNzIG9uICRsaXN0ZW5lcnMgc28gdGhhdCBkaXRvLWVkaXQtYnV0dG9ucyBjYW4gcGFzcyBldmVudHMuICovXG4gIHYtb249XCIkbGlzdGVuZXJzXCJcbilcbiAgZGl0by1jb250YWluZXIoXG4gICAgdi1mb3I9XCIoYnV0dG9uU2NoZW1hLCBidXR0b25EYXRhUGF0aCkgaW4gYnV0dG9uU2NoZW1hc1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcihidXR0b25TY2hlbWEpXCJcbiAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShidXR0b25TY2hlbWEubmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gIClcbiAgLy8gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLCBzbyBpdCBjYW4gYmVcbiAgLy8gd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAuZGl0by1jb250YWluZXIoXG4gICAgdi1mb3I9XCJub2RlIGluICRzbG90cy5kZWZhdWx0XCJcbiAgICB2LWlmPVwibm9kZS50YWdcIlxuICApXG4gICAgZGl0by12bm9kZSg6bm9kZT1cIm5vZGVcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWJ1dHRvbnMoXG4gICAgdi1pZj1cImJ1dHRvblNjaGVtYXMgfHwgJHNsb3RzLmRlZmF1bHRcIlxuICAgIC8qIFBhc3Mgb24gJGxpc3RlbmVycyBzbyB0aGF0IGRpdG8tZWRpdC1idXR0b25zIGNhbiBwYXNzIGV2ZW50cy4gKi9cbiAgICB2LW9uPVwiJGxpc3RlbmVyc1wiXG4gIClcbiAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihidXR0b25TY2hlbWEpXCJcbiAgICAgIDprZXk9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6c2NoZW1hPVwiYnV0dG9uU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShidXR0b25TY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgIClcbiAgICAvLyBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsIHNvIGl0IGNhbiBiZVxuICAgIC8vIHdyYXBwZWQgaW4gYSBgLmRpdG8tY29udGFpbmVyYCBjbGFzcy5cbiAgICAuZGl0by1jb250YWluZXIoXG4gICAgICB2LWZvcj1cIm5vZGUgaW4gJHNsb3RzLmRlZmF1bHRcIlxuICAgICAgdi1pZj1cIm5vZGUudGFnXCJcbiAgICApXG4gICAgICBkaXRvLXZub2RlKDpub2RlPVwibm9kZVwiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4uZGl0by1idXR0b25zXG4gID4gLmRpdG8tY29udGFpbmVyXG4gICAgcGFkZGluZzogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1idXR0b25zJywge1xuICBwcm92aWRlOiB7XG4gICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgYnV0dG9ucyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5cy5cbiAgICAgIGNvbnN0IHsgZGF0YVBhdGgsIGJ1dHRvbnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgICAgID8gT2JqZWN0LnZhbHVlcyhidXR0b25zKS5yZWR1Y2UoKHNjaGVtYXMsIGJ1dHRvbikgPT4ge1xuICAgICAgICAgIHNjaGVtYXNbYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGJ1dHRvbi5uYW1lKV0gPSBidXR0b25cbiAgICAgICAgICByZXR1cm4gc2NoZW1hc1xuICAgICAgICB9LCB7fSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmRpdG8tYnV0dG9ucy5kaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICAvKiBQcmV2ZW50IGNsaWNrIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIGRpdG8tbGFiZWw6ICovXG4gIEBjbGljay5zdG9wXG4pXG4gIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gIGEuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRHJhZ2dhYmxlXCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgKVxuICByb3V0ZXItbGluay5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNFZGl0YWJsZVwiXG4gICAgOnRvPVwieyBwYXRoOiBlZGl0UGF0aCB9XCIgYXBwZW5kXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gIClcbiAgZGl0by1jcmVhdGUtYnV0dG9uKFxuICAgIHYtaWY9XCJpc0NyZWF0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgOnRleHQ9XCJjcmVhdGVCdXR0b25UZXh0XCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRGVsZXRhYmxlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgIEBjbGljaz1cIiRlbWl0KCdkZWxldGUnKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGRpdG8tYnV0dG9ucy5kaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gICAgOmJ1dHRvbnM9XCJidXR0b25zXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAvKiBQcmV2ZW50IGNsaWNrIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIGRpdG8tbGFiZWw6ICovXG4gICAgQGNsaWNrLnN0b3BcbiAgKVxuICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0RyYWdnYWJsZVwiXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICApXG4gICAgcm91dGVyLWxpbmsuZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNFZGl0YWJsZVwiXG4gICAgICA6dG89XCJ7IHBhdGg6IGVkaXRQYXRoIH1cIiBhcHBlbmRcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgIClcbiAgICBkaXRvLWNyZWF0ZS1idXR0b24oXG4gICAgICB2LWlmPVwiaXNDcmVhdGFibGVcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6cGF0aD1cImNyZWF0ZVBhdGhcIlxuICAgICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgICAgOnRleHQ9XCJjcmVhdGVCdXR0b25UZXh0XCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRGVsZXRhYmxlXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgIEBjbGljaz1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWVkaXQtYnV0dG9uc1xuICAgIC8vIE92ZXJyaWRlIGN1cnNvciBmcm9tIGNvbGxhcHNpYmxlIGRpdG8tbGFiZWw6XG4gICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgZmxleDogbm9uZVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWVkaXQtYnV0dG9ucycsIHtcbiAgcHJvcHM6IHtcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNyZWF0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNyZWF0ZVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEuZm9ybSlcbiAgICB9LFxuXG4gICAgaXNEcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RyYWdnYWJsZScpXG4gICAgfSxcblxuICAgIGlzRWRpdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2VkaXRhYmxlJykgJiYgISF0aGlzLmVkaXRQYXRoXG4gICAgfSxcblxuICAgIGlzQ3JlYXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdjcmVhdGFibGUnKSAmJiAhIXRoaXMuY3JlYXRlUGF0aFxuICAgIH0sXG5cbiAgICBpc0RlbGV0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZGVsZXRhYmxlJylcbiAgICB9LFxuXG4gICAgY3JlYXRlQnV0dG9uVGV4dCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBjcmVhdGUgYnV0dG9uIHRocm91Z2ggY3JlYXRhYmxlIG9iamVjdDpcbiAgICAgICAgdGhpcy5zY2hlbWEuY3JlYXRhYmxlPy5sYWJlbCB8fFxuICAgICAgICAoXG4gICAgICAgICAgLy8gQXV0by1nZW5lcmF0ZSBjcmVhdGUgYnV0dG9uIGxhYmVscyBmcm9tIGZyb20gbGFiZWxzIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcyB3aXRoIG9ubHkgb25lIGZvcm06XG4gICAgICAgICAgdGhpcy5mb3JtTGFiZWwgJiZcbiAgICAgICAgICBgJHtjYXBpdGFsaXplKHRoaXMudmVyYnMuY3JlYXRlKX0gJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICkgfHxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzT3B0aW9uKG5hbWUpIHtcbiAgICAgIC8vIFRoZSBvcHRpb25zIG9mIHRoZSBvdXRlciBjb21wb25lbnQgYXJlIHBhc3NlZCB0byB0aGUgYnV0dG9ucyBjb21wb25lbnRcbiAgICAgIC8vIHRocm91Z2ggcHJvcGVydGllcyBgdGhpc1tuYW1lXWAsIGJ1dCBjYW4gYmUgZGlzYWJsZWQgb24gYSBwZXItZm9ybVxuICAgICAgLy8gYmFzaXMgYnkgc2V0dGluZyBgc2NoZW1hW25hbWVdYCB0byBgZmFsc2VgLlxuICAgICAgcmV0dXJuICEhKHRoaXNbbmFtZV0gJiYgdGhpcy5zY2hlbWFbbmFtZV0gIT09IGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1jcmVhdGUtYnV0dG9uXG4gIHRlbXBsYXRlKHYtaWY9XCJzaG93UHVsbGRvd25cIilcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICAgICkge3sgdGV4dCB9fVxuICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICAgIClcbiAgICAgIGxpKHYtZm9yPVwiKGZvcm0sIHR5cGUpIGluIGZvcm1zXCIpXG4gICAgICAgIGEoXG4gICAgICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlKGZvcm0pXCJcbiAgICAgICAgICA6Y2xhc3M9XCJgZGl0by10eXBlLSR7dHlwZX1gXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHR5cGUpXCJcbiAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1lbHNlXG4gICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICBAY2xpY2s9XCJjcmVhdGVJdGVtKGZvcm1zLmRlZmF1bHQpXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgKSB7eyB0ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jcmVhdGUtYnV0dG9uXG4gICAgdGVtcGxhdGUodi1pZj1cInNob3dQdWxsZG93blwiKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICAgICAgKSB7eyB0ZXh0IH19XG4gICAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICAgICAgKVxuICAgICAgICBsaSh2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiKVxuICAgICAgICAgIGEoXG4gICAgICAgICAgICB2LWlmPVwiaXNDcmVhdGFibGUoZm9ybSlcIlxuICAgICAgICAgICAgOmNsYXNzPVwiYGRpdG8tdHlwZS0ke3R5cGV9YFwiXG4gICAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHR5cGUpXCJcbiAgICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWVsc2VcbiAgICAgIDp0eXBlPVwiaXNJbmxpbmVkID8gJ2J1dHRvbicgOiAnc3VibWl0J1wiXG4gICAgICBAY2xpY2s9XCJjcmVhdGVJdGVtKGZvcm1zLmRlZmF1bHQpXCJcbiAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY3JlYXRlLWJ1dHRvblxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLXB1bGxkb3duXG4gICAgICByaWdodDogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsbGRvd25NaXhpbiBmcm9tICcuLi9taXhpbnMvUHVsbGRvd25NaXhpbi5qcydcbmltcG9ydCB7IGdldEZvcm1TY2hlbWFzLCBpc0lubGluZWQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1jcmVhdGUtYnV0dG9uJywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdmVyYjogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGV4dDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgaXNJbmxpbmVkKCkge1xuICAgICAgcmV0dXJuIGlzSW5saW5lZCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgc2hvd1B1bGxkb3duKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZm9ybXMpLmxlbmd0aCA+IDEgfHwgIXRoaXMuZm9ybXMuZGVmYXVsdFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaXNDcmVhdGFibGUoZm9ybSkge1xuICAgICAgLy8gRm9ybXMgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGxpc3QgYnkgcHJvdmlkaW5nIGBjcmVhdGFibGU6IGZhbHNlYFxuICAgICAgcmV0dXJuIGZvcm0uY3JlYXRhYmxlICE9PSBmYWxzZVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKGZvcm0sIHR5cGUgPSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5pc0NyZWF0YWJsZShmb3JtKSkge1xuICAgICAgICBpZiAodGhpcy5pc0lubGluZWQpIHtcbiAgICAgICAgICB0aGlzLnNvdXJjZUNvbXBvbmVudC5jcmVhdGVJdGVtKGZvcm0sIHR5cGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICAgICAgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgLFxuICAgICAgICAgICAgcXVlcnk6IHsgdHlwZSB9LFxuICAgICAgICAgICAgYXBwZW5kOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYWxsb3dlZCB0byBjcmVhdGUgaXRlbSBmb3IgZ2l2ZW4gZm9ybScpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QodHlwZSkge1xuICAgICAgdGhpcy5jcmVhdGVJdGVtKHRoaXMuZm9ybXNbdHlwZV0sIHR5cGUpXG4gICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tY2xpcGJvYXJkLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIHYtaWY9XCJjbGlwYm9hcmRcIlxuKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tY29weShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgdGl0bGU9XCJDb3B5IERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25Db3B5XCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJQYXN0ZSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY2xpcGJvYXJkLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gICAgdi1pZj1cImNsaXBib2FyZFwiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tY29weShcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgcmVmPVwiY29weURhdGFcIlxuICAgICAgdGl0bGU9XCJDb3B5IERhdGFcIlxuICAgICAgOmRpc2FibGVkPVwiIWNvcHlFbmFibGVkXCJcbiAgICAgIEBjbGljaz1cIm9uQ29weVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1wYXN0ZShcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgdGl0bGU9XCJQYXN0ZSBEYXRhXCJcbiAgICAgIDpkaXNhYmxlZD1cIiFwYXN0ZUVuYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzT2JqZWN0LCBjbG9uZSwgZGVpbmRlbnQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1jbGlwYm9hcmQnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm9wczoge1xuICAgIGNsaXBib2FyZDogeyB0eXBlOiBbQm9vbGVhbiwgT2JqZWN0XSwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvcHlFbmFibGVkOiBmYWxzZSxcbiAgICAgIHBhc3RlRW5hYmxlZDogZmFsc2UsXG4gICAgICBmaXhDbGlwYm9hcmQ6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGlwYm9hcmRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KHRoaXMuY2xpcGJvYXJkKSA/IHRoaXMuY2xpcGJvYXJkIDoge31cbiAgICB9LFxuXG4gICAgY29weURhdGEoKSB7XG4gICAgICBjb25zdCB7IGNvcHkgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIGNvcHlcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+IGNvcHkuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgIGNsaXBib2FyZERhdGFcbiAgICAgICAgfSkpXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbG9uZShjbGlwYm9hcmREYXRhKVxuICAgIH0sXG5cbiAgICBwYXN0ZURhdGEoKSB7XG4gICAgICBjb25zdCB7IHBhc3RlIH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBwYXN0ZVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT4gcGFzdGUuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgIGNsaXBib2FyZERhdGFcbiAgICAgICAgfSkpXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbGlwYm9hcmREYXRhXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2hlY2sgY2xpcGJvYXJkIGNvbnRlbnQgd2hlbmV2ZXIgc29tZXRoaW5nIGdldHMgY29waWVkIG9yIHRoZSB3aW5kb3cgZ2V0c1xuICAgIC8vIChyZSlhY3RpdmF0ZWQsIGFzIHRob3NlIGFyZSB0aGUgbW9tZW50cyB3aGVuIHRoZSBjbGlwYm9hcmQgY2FuIGNoYW5nZTpcbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjb3B5OiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLmRvbU9uKHdpbmRvdywge1xuICAgICAgZm9jdXM6IHRoaXMuY2hlY2tDbGlwYm9hcmRcbiAgICB9KVxuICAgIHRoaXMuJHdhdGNoKCdkYXRhJywge1xuICAgICAgLy8gQ2hlY2sgcmlnaHQgYXdheSBhbHNvIGluIGNhc2UgdGhlcmUncyBhbHJlYWR5IGRhdGEgKGUuZy4gY3JlYXRlIGZvcm0pLlxuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogKHRvLCBmcm9tKSA9PiB7XG4gICAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICAgIHRoaXMuY2hlY2tDbGlwYm9hcmQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYXN5bmMgZ2V0Q2xpcGJvYXJkRGF0YShyZXBvcnQpIHtcbiAgICAgIC8vIFVzZSB0aGUgaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgbGV0IHsgY2xpcGJvYXJkRGF0YSB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LnJlYWRUZXh0Py4oKVxuICAgICAgICBpZiAodGhpcy5maXhDbGlwYm9hcmQgJiYganNvbikge1xuICAgICAgICAgIC8vIFRoaXMgYXBwZWFycyB0byBiZSBuZWVkZWQgb24gU2FmYXJpIHRvIHByZXZlbnQgYSBzdHJhbmdlIFwiUGFzdGVcIlxuICAgICAgICAgIC8vIGJ1dHRvbiBmcm9tIGFwcGVhcmluZyB3aGVuIHRoZSBjbGlwYm9hcmQgaXMgYWNjZXNzZWQgKHdoeT8hKS5cbiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQ/Lihqc29uKVxuICAgICAgICAgIHRoaXMuZml4Q2xpcGJvYXJkID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBpZiAoanNvbikge1xuICAgICAgICAgIGNsaXBib2FyZERhdGEgPSBKU09OLnBhcnNlKGpzb24pXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAocmVwb3J0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgICBpZiAoZXJyLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIGFsZXJ0KGRlaW5kZW50YFxuICAgICAgICAgICAgICBUaGUgZGF0YSBpbiB0aGUgY2xpcGJvYXJkIGFwcGVhcnMgdG8gYmUgbWFsZm9ybWVkOlxuICAgICAgICAgICAgICAke2Vyci5tZXNzYWdlfVxuICAgICAgICAgICAgYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgJHNjaGVtYSwgLi4uZGF0YSB9ID0gY2xpcGJvYXJkRGF0YSB8fCB7fVxuICAgICAgcmV0dXJuICRzY2hlbWEgPT09IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5zY2hlbWEubmFtZSA/IGRhdGEgOiBudWxsXG4gICAgfSxcblxuICAgIGFzeW5jIGNoZWNrQ2xpcGJvYXJkKCkge1xuICAgICAgdGhpcy5jb3B5RW5hYmxlZCA9ICEhdGhpcy5kYXRhXG4gICAgICAvLyBTZWUgaWYgdGhlIGNsaXBib2FyZCBjb250ZW50IGlzIHZhbGlkIEpTT04gZGF0YSB0aGF0IGlzIGNvbXBhdGlibGVcbiAgICAgIC8vIHdpdGggdGhlIGN1cnJlbnQgdGFyZ2V0IHNjaGVtYSwgYW5kIG9ubHkgdGhlbiBhY3RpdmF0ZSB0aGUgcGFzdGluZzpcbiAgICAgIHRoaXMucGFzdGVFbmFibGVkID0gISEoYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKGZhbHNlKSkgLy8gZG9uJ3QgcmVwb3J0XG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ29weSgpIHtcbiAgICAgIGxldCBkYXRhID0gdGhpcy5zY2hlbWFDb21wb25lbnQ/LmNsaXBib2FyZERhdGFcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBkYXRhICYmIHRoaXMuY29weURhdGEoZGF0YSlcbiAgICAgICAgLy8gS2VlcCBhbiBpbnRlcm5hbCBjbGlwYm9hcmQgYXMgZmFsbGJhY2suXG4gICAgICAgIHRoaXMuYXBwU3RhdGUuY2xpcGJvYXJkRGF0YSA9IGRhdGFcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMilcbiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQ/Lihqc29uKVxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gYWN0aXZhdGUgdGhlIHBhc3RlIGJ1dHRvbiwgZGVwZW5kZGluZyBvbiBicm93c2VyczpcbiAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25QYXN0ZSgpIHtcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKHRydWUpIC8vIHJlcG9ydFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5wYXN0ZURhdGEoZGF0YSlcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZywgeyB1cGRhdGVSb290ID0gZmFsc2UsIHVwZGF0ZVZpZXcgPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICghdGhpcy5pc0xvYWRpbmcgXiAhaXNMb2FkaW5nKSB7IC8vIEJvb2xlYW4geG9yXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICAgICAgaWYgKHVwZGF0ZVJvb3QpIHtcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQucmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlVmlldykge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXRMb2FkaW5nKHRoaXMuaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcbmltcG9ydCB7IHNldERlZmF1bHRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIExvYWRpbmdNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgLy8gUGFzcyBsb2NhbCB2ZXJicyBvdmVycmlkZXMgb24gdG8gY2hpbGRyZW4sIHNlZSB2ZXJicygpIGNvbXB1dGVkIHByb3AuXG4gICAgICAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMsXG4gICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRoaXMuaGFzRGF0YVxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsb2FkZWREYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByZXNvdXJjZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdGhlIHJlc291cmNlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlc291cmNlIGZvciB0aGVcbiAgICAgIC8vIGFzc29jaWF0ZWQgc291cmNlIHNjaGVtYS5cbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlKClcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gVGhpcyBjb21wb25lbnQgaXMgYSBkYXRhLXNvdXJjZSBpZiBpdCBoYXMgYW4gYXNzb2NpYXRlZCBBUEkgcmVzb3VyY2U6XG4gICAgICByZXR1cm4gISF0aGlzLnJlc291cmNlXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgLy8gUmV0dXJucyBgZmFsc2VgaGVyZSwgYnV0IGlzIG92ZXJyaWRkZW4gdG8gcmV0dXJuIGB0cnVlYCBpblxuICAgICAgLy8gYFNvdXJjZU1peGluYCBmb3IgY29tcG9uZW50IHRoYXQgZG8gbm90IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEsIGJ1dFxuICAgICAgLy8gZWRpdCB0aGVpciBpdGVtcyB0aHJvdWdoIGEgbGlua2VkIHZpZXcuICBJbiB0aGlzIGNhc2UsIHJlYWwgaWRzIG5lZWQgdG9cbiAgICAgIC8vIGJlIHVzZWQuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNUcmFuc2llbnQoKSB7XG4gICAgICAvLyBDaGVjayB0aGUgZm9ybSB0aGF0IHRoaXMgY29tcG9uZW50IGJlbG9uZ3MgdG8gYXMgd2VsbCwgc2luY2UgaXQgbWF5IGJlXG4gICAgICAvLyBpbiBjcmVhdGlvbiBtb2RlLCB3aGljaCBtYWtlcyBpdCB0cmFuc2llbnQuXG4gICAgICAvLyBOT1RFOiBUaGlzIGRvZXMgbm90IGxvb3AgZW5kbGVzc2x5IGJlY2F1c2UgRGl0b0Zvcm0gcmVkZWZpbmVzXG4gICAgICAvLyBgaXNUcmFuc2llbnQoKWAgdG8gb25seSByZXR1cm4gYCF0aGlzLnByb3ZpZGVzRGF0YWAuXG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQ29tcG9uZW50XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5wcm92aWRlc0RhdGEgJiZcbiAgICAgICAgIXRoaXMubGlua3NUb1ZpZXcgfHxcbiAgICAgICAgZm9ybSAmJiAoXG4gICAgICAgICAgZm9ybS5pc1RyYW5zaWVudCB8fFxuICAgICAgICAgIGZvcm0uaXNDcmVhdGluZ1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIHRyYW5zaWVudE5vdGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICc8Yj5Ob3RlPC9iPjogdGhlIHBhcmVudCBzdGlsbCBuZWVkcyB0byBiZSBzYXZlZCAnICtcbiAgICAgICAgJ2luIG9yZGVyIHRvIHBlcnNpc3QgdGhpcyBjaGFuZ2UuJ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICBzaG91bGRMb2FkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgIXRoaXMuaXNMb2FkaW5nXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICAvLyBCYXNlIGRlZmluaXRpb24sIHdpbGwgYmUgb3ZlcnJpZGRlbiBieSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW5cbiAgICAgIHJldHVybiAhIXRoaXMubG9hZGVkRGF0YVxuICAgIH0sXG5cbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIFRoZSBhY3R1YWwgY29kZSBpcyB0aGUgYGdldFZlcmJzKClgIG1ldGhvZCwgZm9yIGVhc2llciBvdmVycmlkaW5nIG9mXG4gICAgICAvLyB0aGlzIGNvbXB1dGVkIHByb3BlcnR5IGluIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIFJlc291cmNlTWl4aW4uXG4gICAgICByZXR1cm4gdGhpcy5nZXRWZXJicygpXG4gICAgfSxcblxuICAgIHBhZ2luYXRpb25SYW5nZSgpIHtcbiAgICAgIC8vIE9ubHkgYXBwbHkgcGFnaW5hdGlvbiB0byBsaXN0cy5cbiAgICAgIGNvbnN0IHsgcGFnaW5hdGU6IGFtb3VudCB9ID0gdGhpcy5zb3VyY2VTY2hlbWFcbiAgICAgIGlmICh0aGlzLmlzTGlzdFNvdXJjZSAmJiBhbW91bnQpIHtcbiAgICAgICAgY29uc3QgeyBwYWdlID0gMCB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgICBjb25zdCBzdGFydCA9IHBhZ2UgKiBhbW91bnRcbiAgICAgICAgcmV0dXJuIFtzdGFydCwgc3RhcnQgKyBhbW91bnQgLSAxXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBxdWVyeVBhcmFtcygpIHtcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5wYWdpbmF0aW9uUmFuZ2VcbiAgICAgIGNvbnN0IHsgcGFnZSwgLi4ucXVlcnkgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnF1ZXJ5LCAvLyBRdWVyeSBtYXkgb3ZlcnJpZGUgc2NvcGUuXG4gICAgICAgIC4uLihyYW5nZSAmJiB7XG4gICAgICAgICAgLy8gUGFzcyBwYWdpbmF0aW9uIGFzIHJhbmdlLCBzbyB0aGF0IHdlIGF1dG9tYXRpY2FsbHkgZ2V0IE9iamVjdGlvbidzXG4gICAgICAgICAgLy8gcmVzdWx0cyBjb3VudGluZzpcbiAgICAgICAgICByYW5nZTogcmFuZ2Uuam9pbignLCcpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgLy8gV2hlbiBjcmVhdGluZyBuZXN0ZWQgZGF0YSwgd2Ugc3RpbGwgbmVlZCB0byBjYWxsIHNldHVwRGF0YSgpXG4gICAgaWYgKHRoaXMucHJvdmlkZXNEYXRhIHx8IHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgdGhpcy5zZXR1cERhdGEoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UmVzb3VyY2UoKSB7XG4gICAgICAvLyBUaGlzIGlzIGRlZmluZWQgYXMgYSBtZXRob2Qgc28gdGhlIGNvbXB1dGVkIGByZXNvdXJjZWAgZ2V0dGVyIGNhblxuICAgICAgLy8gYmUgb3ZlcnJpZGRlbiBhbmQgYHN1cGVyYCBmdW5jdGlvbmFsaXR5IGNhbiBzdGlsbCBiZSBhY2Nlc3NlZC5cbiAgICAgIHJldHVybiBnZXRSZXNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYT8ucmVzb3VyY2UsIHtcbiAgICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICBwYXJlbnQ6IHRoaXMucGFyZW50Rm9ybUNvbXBvbmVudD8ucmVzb3VyY2UgPz8gbnVsbFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0VmVyYnMoKSB7XG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuJHZlcmJzKClcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50XG4gICAgICAgID8ge1xuICAgICAgICAgIC4uLnZlcmJzLFxuICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgdmVyYnMgd2l0aCB0aGVpciB0cmFuc2llbnQgdmVyc2lvbnM6XG4gICAgICAgICAgY3JlYXRlOiAnYWRkJyxcbiAgICAgICAgICBjcmVhdGVkOiAnYWRkZWQnLFxuICAgICAgICAgIHNhdmU6ICdhcHBseScsXG4gICAgICAgICAgc2F2ZWQ6ICdhcHBsaWVkJyxcbiAgICAgICAgICBkZWxldGU6ICdyZW1vdmUnLFxuICAgICAgICAgIGRlbGV0ZWQ6ICdyZW1vdmVkJ1xuICAgICAgICB9XG4gICAgICAgIDogdmVyYnNcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgLy8gQWN0dWFsIGNvZGUgaXMgaW4gc2VwYXJhdGUgZnVuY3Rpb24gc28gaXQncyBlYXNlciB0byBvdmVycmlkZVxuICAgICAgLy8gYHNldHVwRGF0YSgpYCBhbmQgYW5kIGNhbGwgYGVuc3VyZURhdGEoKWAgZnJvbSB0aGUgb3ZlcnJpZGVzLFxuICAgICAgLy8gc2VlIERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpbi5cbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIGVuc3VyZURhdGEoKSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRMb2FkKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0RhdGEpIHtcbiAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9hZERhdGEodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZWxvYWREYXRhKCkge1xuICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICB9LFxuXG4gICAgbG9hZERhdGEoY2xlYXIpIHtcbiAgICAgIGlmICghdGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICBpZiAoY2xlYXIpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyRGF0YSgpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXF1ZXN0RGF0YSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKSB7XG4gICAgICByZXR1cm4gc2V0RGVmYXVsdHMoc2NoZW1hLCB0eXBlID8geyB0eXBlIH0gOiB7fSwgdGhpcylcbiAgICB9LFxuXG4gICAgcmVxdWVzdERhdGEoKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMucXVlcnlQYXJhbXNcbiAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2dldCcsIHF1ZXJ5IH0sIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2VcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZGF0YT8udHlwZSA9PT0gJ0ZpbHRlclZhbGlkYXRpb24nICYmXG4gICAgICAgICAgICAgIHRoaXMub25GaWx0ZXJFcnJvcnM/LihkYXRhLmVycm9ycykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdCh7XG4gICAgICBtZXRob2QsXG4gICAgICByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UsXG4gICAgICBxdWVyeSxcbiAgICAgIGRhdGFcbiAgICB9LCBjYWxsYmFjaykge1xuICAgICAgY29uc3QgbG9hZGluZ09wdGlvbnMgPSB7XG4gICAgICAgIHVwZGF0ZVJvb3Q6IHRydWUsIC8vIERpc3BsYXkgc3Bpbm5lciBpbiBoZWFkZXIgd2hlbiBsb2FkaW5nIGluIHJlc291cmNlc1xuICAgICAgICB1cGRhdGVWaWV3OiB0aGlzLmlzSW5WaWV3IC8vIE5vdGlmeSB2aWV3IG9mIGxvYWRpbmcgZm9yIHZpZXcgY29tcG9uZW50c1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgY29uc3QgcmVxdWVzdCA9IHsgbWV0aG9kLCByZXNvdXJjZSwgZGF0YSwgcXVlcnkgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICAgIC8vIFBhc3MgYm90aCByZXF1ZXN0IGFuZCByZXNwb25zZSB0byB0aGUgY2FsbGJhY2ssIHNvIHRoZXkgY2FuIGJlXG4gICAgICAgIC8vIGV4cG9zZWQgdG8gZnVydGhlciBjYWxsYmFja3MgdGhyb3VnaCBEaXRvQ29udGV4dC5cbiAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBjYWxsYmFjayByZXR1cm5zIHRydWUsIGVycm9ycyB3ZXJlIGFscmVhZHkgaGFuZGxlZC5cbiAgICAgICAgY29uc3QgeyByZXNwb25zZSB9ID0gZXJyb3JcbiAgICAgICAgaWYgKCFjYWxsYmFjayhlcnJvciwgcmVzcG9uc2UpKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgaWYgKGRhdGEgJiYgaXNTdHJpbmcoZGF0YS50eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogbGFiZWxpemUoZGF0YS50eXBlKSxcbiAgICAgICAgICAgICAgdGV4dDogZGF0YS5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGVycm9yXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICB9LFxuXG4gICAgZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpIHtcbiAgICAgIC8vIENvbnZlbnRpb246IG9ubHkgcG9zdCwgcHV0IGFuZCBwYXRjaCByZXF1ZXN0cyBwYXNzIHRoZSBkYXRhIGFzIHBheWxvYWQuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5jbHVkZXMobWV0aG9kKSAmJiAoXG4gICAgICAgICAgLy8gVE9ETzogVXNlIGBoYW5kbGVEYXRhU2NoZW1hKClgIGFzeW5jaHJvbm91c2x5IGhlcmUgaW5zdGVhZCwgdG9cbiAgICAgICAgICAvLyBvZmZlciB0aGUgc2FtZSBhbW91bnQgb2YgcG9zc2liaWxpdGllcyBmb3IgZGF0YSBsb2FkaW5nLlxuICAgICAgICAgIGJ1dHRvbi5nZXRTY2hlbWFWYWx1ZShbJ3Jlc291cmNlJywgJ2RhdGEnXSkgfHxcbiAgICAgICAgICBidXR0b24ucHJvY2Vzc2VkSXRlbVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24pIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgeyBtZXRob2QgfSA9IHJlc291cmNlXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEpXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICBzZXREYXRhID0gZmFsc2UsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyA9ICgpID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aXRsZTogJ1JlcXVlc3QgU3VjY2Vzc2Z1bCcsXG4gICAgICAgIHRleHQ6ICdSZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgc2VudC4nXG4gICAgICB9KSxcbiAgICAgIG5vdGlmeUVycm9yID0gZXJyb3IgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgYFVuYWJsZSB0byBzZW5kIHJlcXVlc3Qke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICBdXG4gICAgICB9KVxuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoXG4gICAgICAgICAgeyBtZXRob2QsIHJlc291cmNlLCBkYXRhIH0sXG4gICAgICAgICAgYXN5bmMgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAvLyBTZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgRGl0byB2YWxpZGF0aW9uIGVycm9yOlxuICAgICAgICAgICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSAmJiBkYXRhLmVycm9yc1xuICAgICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc09iamVjdChkYXRhKSA/IGRhdGEgOiBlcnJcbiAgICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHVuZGVybHlpbmcgZGF0YSBiZWZvcmUgY2FsbGluZyBgbm90aWZ5KClgIG9yXG4gICAgICAgICAgICAgIC8vIGB0aGlzLml0ZW1MYWJlbGAsIHNvIGlkIGlzIHNldCBhZnRlciBjcmVhdGluZyBuZXcgaXRlbXMuXG4gICAgICAgICAgICAgIGlmIChzZXREYXRhICYmIGRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGEoZGF0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRCdXR0b25FdmVudChidXR0b24sIGV2ZW50LCB7IG5vdGlmeSwgZXJyb3IgfSkge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBjb250ZXh0IG91dHNpZGUgb2YgYGVtaXRFdmVudCgpYCwgc28gdGhhdFxuICAgICAgLy8gYGNvbnRleHQud2FzTm90aWZpZWRgIGNhbiBiZSBjaGVja2VkIGFmdGVyLlxuICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBEaXRvQ29udGV4dChidXR0b24sIHtcbiAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICBpdGVtTGFiZWw6IHRoaXMuaXRlbUxhYmVsLFxuICAgICAgICBlcnJvclxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJ1dHRvbi5lbWl0RXZlbnQoZXZlbnQsIHsgY29udGV4dCB9KVxuICAgICAgaWYgKFxuICAgICAgICBub3RpZnkgJiZcbiAgICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGlmIGFueXRoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAvLyBEbyBub3QgZGlzcGxheSBkZWZhdWx0IG5vdGlmaWNhdGlvbiBpZiB0aGUgZXZlbnQgaGFuZGxlciBhbHJlYWR5XG4gICAgICAgIC8vIGRpc3BsYXllZCBhIG5vdGlmaWNhdGlvbi5cbiAgICAgICAgIWNvbnRleHQud2FzTm90aWZpZWRcbiAgICAgICkge1xuICAgICAgICBub3RpZnkoZXJyb3IpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLWZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICA6Y2xhc3M9XCJ7ICdkaXRvLWZvcm0tbmVzdGVkJzogaXNOZXN0ZWRSb3V0ZSB9XCJcbilcbiAgLy8gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLyBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIHJvdXRlci12aWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50LmRpdG8tc2Nyb2xsKFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIGRpdG8tc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICA6Y2xhc3M9XCJ7ICdkaXRvLWZvcm0tbmVzdGVkJzogaXNOZXN0ZWRSb3V0ZSB9XCJcbilcbiAgLy8gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLyBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIHJvdXRlci12aWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50LmRpdG8tc2Nyb2xsKFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgLy8gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIGRpdG8tc2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6bWVudUhlYWRlcj1cInRydWVcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lLCBjYXBpdGFsaXplLCBwYXJzZURhdGFQYXRoLCBtZXJnZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcywgaXNPYmplY3RTb3VyY2UgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1mb3JtJywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluLCBSZXNvdXJjZU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVkRGF0YTogbnVsbCxcbiAgICAgIGNsb25lZERhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHNvdXJjZUtleTogbnVsbCxcbiAgICAgIGlzRm9ybTogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmJzKCkge1xuICAgICAgLy8gQWRkIHN1Ym1pdCAvIHN1Ym1pdHRlZCB0byB0aGUgdmVyYnMgcmV0dXJuZWQgYnkgUmVzb3VyY2VNaXhpblxuICAgICAgLy8gTk9URTogVGhlc2UgZ2V0IHBhc3NlZCBvbiB0byBjaGlsZHJlbiB0aHJvdWdoOlxuICAgICAgLy8gYHByb3ZpZGUoKSAuLi4geyAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMgfWAgaW4gUmVzb3VyY2VNaXhpblxuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLmdldFZlcmJzKClcbiAgICAgIGNvbnN0IHsgaXNDcmVhdGluZywgcHJvdmlkZXNEYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgc3VibWl0OiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlIDogdmVyYnMuc2F2ZSxcbiAgICAgICAgc3VibWl0dGVkOiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlZCA6IHZlcmJzLnNhdmVkLFxuICAgICAgICBjYW5jZWw6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbCA6IHZlcmJzLmNsb3NlLFxuICAgICAgICBjYW5jZWxsZWQ6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbGxlZCA6IHZlcmJzLmNsb3NlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgdGhpcy5zb3VyY2VTY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgeWV0LCBwcm92aWRlIGFuIGVtcHR5IG9iamVjdCB3aXRoIGp1c3QgdGhlIHJpZ2h0XG4gICAgICAgIC8vIHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgIHRoaXMuZGF0YSB8fCB7IHR5cGU6IHRoaXMudHlwZSB9LFxuICAgICAgICB0aGlzLmNvbnRleHRcbiAgICAgICkgfHwge30gLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmRvZXNNdXRhdGUgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZG9lc011dGF0ZSAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LnNlbGVjdGVkVGFiIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZG9lc011dGF0ZSgpIHtcbiAgICAgIC8vIFdoZW4gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIHRoZSBmb3JtIGVkaXRzIHRoZSBpbmhlcml0ZWQgZGF0YVxuICAgICAgLy8gZGlyZWN0bHkgaW5zdGVhZCBvZiBtYWtpbmcgYSBjb3B5IGZvciBhcHBsaWNhdGlvbiB1cG9uIHN1Ym1pdC5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuIHRoaXMuc291cmNlU2NoZW1hLm11dGF0ZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogKHRoaXMucGFyYW0gPz8gbnVsbClcbiAgICB9LFxuXG4gICAgbWV0aG9kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZyA/ICdwb3N0JyA6ICdwYXRjaCdcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgICAgcmV0dXJuIGdldE1lbWJlclJlc291cmNlKHRoaXMuaXRlbUlkLCByZXNvdXJjZSkgfHwgcmVzb3VyY2VcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiBjYXBpdGFsaXplKHRoaXMuaXNDcmVhdGluZyA/IHRoaXMudmVyYnMuY3JlYXRlIDogdGhpcy52ZXJicy5lZGl0KVxuICAgIH0sXG5cbiAgICBkYXRhKCkge1xuICAgICAgLy8gUmV0dXJuIGRpZmZlcmVudCBkYXRhIFwiY29udGFpbmVyc1wiIGJhc2VkIG9uIGRpZmZlcmVudCBzY2VuYXJpb3M6XG4gICAgICAvLyAxLiBjcmVhdGVkRGF0YSwgaWYgd2UncmUgaW4gYSBmb3JtIGZvciBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuICAgICAgLy8gMi4gbG9hZGVkRGF0YSwgaWYgdGhlIGZvcm0gaXRzZWxmIGlzIHRoZSByb290IG9mIHRoZSBkYXRhIChlLmcuIHdoZW5cbiAgICAgIC8vICAgIGRpcmVjdGx5IGxvYWRpbmcgYW4gZWRpdGluZyByb290KS5cbiAgICAgIC8vIDMuIFRoZSBkYXRhIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdoaWNoIGl0c2VsZiBtYXkgYmUgZWl0aGVyIGFcbiAgICAgIC8vICAgIHZpZXcgdGhhdCBsb2FkZWQgdGhlIGRhdGEsIG9yIGEgZm9ybSB0aGF0IGVpdGhlciBsb2FkZWQgdGhlIGRhdGEsIG9yXG4gICAgICAvLyAgICBhbHNvIGluaGVyaXRlZCBpdCBmcm9tIGl0cyBwYXJlbnQuIE5vdGUgdGhhdCB3ZSB1c2UgYSBjbG9uZSBvZiBpdCxcbiAgICAgIC8vICAgIHNvLCBkYXRhIGNoYW5nZXMgYXJlbid0IGFwcGxpZWQgdW50aWwgc2V0U291cmNlRGF0YSgpIGlzIGNhbGxlZC5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZWREYXRhIHx8IHRoaXMubG9hZGVkRGF0YSB8fCB0aGlzLmluaGVyaXRlZERhdGEgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLmRhdGFDb21wb25lbnQpXG4gICAgfSxcblxuICAgIHNvdXJjZURhdGEoKSB7XG4gICAgICAvLyBQb3NzaWJsZSBwYXJlbnRzIGFyZSBEaXRvRm9ybSBmb3IgZm9ybXMsIG9yIERpdG9WaWV3IGZvciByb290IGxpc3RzLlxuICAgICAgLy8gQm90aCBoYXZlIGEgZGF0YSBwcm9wZXJ0eSB3aGljaCBhYnN0cmFjdHMgYXdheSBsb2FkaW5nIGFuZCBpbmhlcml0aW5nXG4gICAgICAvLyBvZiBkYXRhLlxuICAgICAgbGV0IHsgZGF0YSB9ID0gdGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudFxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5lc3RlZCBkYXRhIGJ5IHNwbGl0dGluZyB0aGUgZGF0YVBhdGgsIGl0ZXJhdGUgdGhyb3VnaCB0aGVcbiAgICAgICAgLy8gYWN0dWFsIGRhdGEgYW5kIGxvb2sgbmVzdCBjaGlsZC1kYXRhIHVwLlxuICAgICAgICBjb25zdCBkYXRhUGFydHMgPSBwYXJzZURhdGFQYXRoKFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQpXG4gICAgICAgIClcbiAgICAgICAgLy8gQ29tcGFyZSBkYXRhUGFydHMgYWdhaW5zdCBtYXRjaGVkIHJvdXRlUGF0aCBwYXJ0cywgdG8gaWRlbnRpZnkgdGhvc2VcbiAgICAgICAgLy8gcGFydHMgdGhhdCBuZWVkIHRvIGJlIHRyZWF0ZWQgbGlrZSBpZHMgYW5kIG1hcHBlZCB0byBpbmRpY2VzIGluIGRhdGEuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHRoaXMucm91dGVSZWNvcmQucGF0aC5zcGxpdCgnLycpXG4gICAgICAgIGNvbnN0IHJvdXRlUGFydHMgPSBwYXRoUGFydHMuc2xpY2UocGF0aFBhcnRzLmxlbmd0aCAtIGRhdGFQYXJ0cy5sZW5ndGgpXG4gICAgICAgIHRoaXMuc291cmNlS2V5ID0gbnVsbFxuICAgICAgICBjb25zdCBsYXN0RGF0YVBhcnQgPSBkYXRhUGFydHNbZGF0YVBhcnRzLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmIChpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSkgJiYgbGFzdERhdGFQYXJ0ID09PSAnY3JlYXRlJykge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb2JqZWN0IHNvdXJjZSBhbmQgYXJlIGNyZWF0aW5nLCB0aGUgZGF0YVBhdGggbmVlZHMgdG9cbiAgICAgICAgICAvLyBiZSBzaG9ydGVuZWQgYnkgdGhlICdjcmVhdGUnIGVudHJ5LiBUaGlzIGlzbid0IG5lZWRlZCBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMsIGFzIHRoZXJlIHRoZSBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZSBpdGVtIGlkLlxuICAgICAgICAgIGRhdGFQYXJ0cy5sZW5ndGgtLVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZGF0YVBhcnRzLmxlbmd0aDsgaSA8IGwgJiYgZGF0YTsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVBhcnQgPSBkYXRhUGFydHNbaV1cbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIDppZCBwYXJ0LCBmaW5kIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aXRoIGdpdmVuIGlkLlxuICAgICAgICAgIGNvbnN0IGtleSA9IC9eOmlkLy50ZXN0KHJvdXRlUGFydHNbaV0pXG4gICAgICAgICAgICA/IGRhdGFQYXJ0ID09PSAnY3JlYXRlJ1xuICAgICAgICAgICAgICA/IG51bGwgLy8gVGhlcmUncyBubyBpbmRleCBmb3IgZW50cmllcyBhYm91dCB0byBiZSBjcmVhdGVkXG4gICAgICAgICAgICAgIDogdGhpcy5maW5kSXRlbUlkSW5kZXgodGhpcy5zb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXJ0KVxuICAgICAgICAgICAgOiBkYXRhUGFydFxuICAgICAgICAgIC8vIFNraXAgdGhlIGZpbmFsIGxvb2t1cCBidXQgcmVtZW1iZXIgYHNvdXJjZUtleWAsIGFzIHdlIHdhbnQgdGhlXG4gICAgICAgICAgLy8gcGFyZW50IGRhdGEgc28gd2UgY2FuIHJlcGxhY2UgdGhlIGVudHJ5IGF0IGBzb3VyY2VLZXlgIG9uIGl0LlxuICAgICAgICAgIGlmIChpID09PSBsIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBrZXlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgaW5oZXJpdGVkRGF0YSgpIHtcbiAgICAgIC8vIERhdGEgaW5oZXJpdGVkIGZyb20gcGFyZW50LCBhbmQgY2xvbmVkIHRvIHByb3RlY3QgYWdhaW5zdCByZWFjdGl2ZVxuICAgICAgLy8gY2hhbmdlcyB1bnRpbCBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRocm91Z2ggc2V0U291cmNlRGF0YSgpLCB1bmxlc3NcbiAgICAgIC8vIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGRhdGEgaXMgbXV0YXRlZCBkaXJlY3RseS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICB0aGlzLmNsb25lZERhdGEgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLnNvdXJjZURhdGEgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV1cbiAgICAgICAgaWYgKCF0aGlzLmRvZXNNdXRhdGUpIHtcbiAgICAgICAgICAvLyBVc2UgYSB0cmljayB0byBzdG9yZSBjbG9uZWQgaW5oZXJpdGVkIGRhdGEgaW4gY2xvbmVkRGF0YSwgdG8gbWFrZVxuICAgICAgICAgIC8vIGl0IHJlYWN0aXZlIGFuZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2xvbmVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGg6ICdjcmVhdGUnLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmVkRGF0YVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGl0ZW1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB7IGV4dGVuZGVkOiB0cnVlIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc291cmNlRGF0YTogJ2NsZWFyQ2xvbmVkRGF0YScsXG4gICAgLy8gTmVlZGVkIGZvciB0aGUgJ2NyZWF0ZScgcmVkaXJlY3QgaW4gYGluaGVyaXRlZERhdGEoKWAgdG8gd29yazpcbiAgICBjcmVhdGU6ICdzZXR1cERhdGEnXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGUpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aCh0aGlzLnBhdGhcbiAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgIC5zbGljZSgocm91dGUuaXNWaWV3ID8gMCA6IHJvdXRlLnBhdGgubGVuZ3RoKSArIDEpKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXR1cERhdGEoKVxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSA9IHRoaXMuY3JlYXRlZERhdGEgfHxcbiAgICAgICAgICB0aGlzLmNyZWF0ZURhdGEodGhpcy5zY2hlbWEsIHRoaXMudHlwZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgaWYgKHRoaXMuc291cmNlRGF0YSAmJiB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IG1haW5TY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgICAgdGhpcy4kc2V0KFxuICAgICAgICAgIHRoaXMuc291cmNlRGF0YSxcbiAgICAgICAgICB0aGlzLnNvdXJjZUtleSxcbiAgICAgICAgICBtYWluU2NoZW1hQ29tcG9uZW50LmZpbHRlckRhdGEoZGF0YSlcbiAgICAgICAgKVxuICAgICAgICBtYWluU2NoZW1hQ29tcG9uZW50Lm9uQ2hhbmdlKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhZGRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSlcbiAgICAgICAgPyB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiAhIXRoaXMuc291cmNlRGF0YT8ucHVzaChkYXRhKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5jbGVhckRhdGEoKVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMuc2V0RGF0YShudWxsKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXREYXRhKClcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIC8vIHNldERhdGEoKSBpcyBjYWxsZWQgYWZ0ZXIgc3VibWl0IHdoZW4gZGF0YSBoYXMgY2hhbmdlZC5cbiAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIC8vIEZvciBjb21wb25lbnRzIHdpdGggdHJhbnNpZW50IGRhdGEsIG1vZGlmeSB0aGlzLnNvdXJjZURhdGEuXG4gICAgICAgIHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckNsb25lZERhdGEobmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICAvLyBPbmx5IGNsZWFyIGlmIHRoZSB3YXRjaGVkIHNvdXJjZURhdGEgaXRzZWxmIGNoYW5nZXMgaW4gdGhlIGZvcm0uXG4gICAgICBpZiAobmV3VmFsdWUgIT09IG9sZFZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zZSgpXG4gICAgfSxcblxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUodGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudC5wYXRoKVxuICAgIH0sXG5cbiAgICBnZXRTdWJtaXRWZXJiKHByZXNlbnQgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gcHJlc2VudCA/ICdjcmVhdGUnIDogJ2NyZWF0ZWQnXG4gICAgICAgIDogcHJlc2VudCA/ICdzdWJtaXQnIDogJ3N1Ym1pdHRlZCdcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbiwgeyB2YWxpZGF0ZSA9IHRydWUsIGNsb3NlRm9ybSA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKHZhbGlkYXRlICYmICF0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdldFZlcmIgPSBwcmVzZW50ID0+IHRoaXMudmVyYnNbdGhpcy5nZXRTdWJtaXRWZXJiKHByZXNlbnQpXVxuXG4gICAgICAvLyBBbGxvdyBidXR0b25zIHRvIG92ZXJyaWRlIGJvdGggbWV0aG9kIGFuZCByZXNvdXJjZSBwYXRoIHRvIHN1Ym1pdCB0bzpcbiAgICAgIGNvbnN0IGJ1dHR0b25SZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzb3VyY2UgPSBidXR0dG9uUmVzb3VyY2UgfHwgdGhpcy5yZXNvdXJjZVxuICAgICAgY29uc3QgbWV0aG9kID0gcmVzb3VyY2U/Lm1ldGhvZCB8fCB0aGlzLm1ldGhvZFxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICBsZXQgc3VjY2Vzc1xuICAgICAgaWYgKCFidXR0dG9uUmVzb3VyY2UgJiYgdGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2llbnQoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgID8gYEl0ZW0gJHtjYXBpdGFsaXplKHZlcmIpfWBcbiAgICAgICAgICAgICAgICA6IGBDaGFuZ2UgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICAgID8gYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgICAgICAgIDogYENoYW5nZXMgdG8gJHt0aGlzLml0ZW1MYWJlbH0gd2VyZSAke3ZlcmJ9LmAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgc2V0RGF0YTogdHJ1ZSxcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICB0aXRsZTogYFN1Y2Nlc3NmdWxseSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfSR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgICBpZiAoY2xvc2VGb3JtIHx8IGJ1dHRvbi5jbG9zZUZvcm0pIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgICAvLyBSZWRpcmVjdCB0byB0aGUgZm9ybSBlZGl0aW5nIHRoZSBuZXdseSBjcmVhdGVkIGl0ZW06XG4gICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcGF0aDogYC4uLyR7aWR9YCwgYXBwZW5kOiB0cnVlIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFRyYW5zaWVudChidXR0b24sIF9yZXNvdXJjZSwgX21ldGhvZCwgZGF0YSwge1xuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MsXG4gICAgICBub3RpZnlFcnJvclxuICAgIH0pIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgZGVmYXVsdCBcInN1Ym1pdHRpbmdcIiBvZiB0cmFuc2llbnQsIG5lc3RlZCBkYXRhOlxuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHRoaXMuYWRkU291cmNlRGF0YShkYXRhKVxuICAgICAgICA6IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnQ291bGQgbm90IHN1Ym1pdCB0cmFuc2llbnQgaXRlbSdcbiAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWZvcm0tbmVzdGVkXG4gICAgJixcbiAgICAuZGl0by1zY3JvbGxcbiAgICAgIC8vIE5vIHNjcm9sbGluZyBpbnNpZGUgbmVzdGVkIGZvcm1zLCBhbmQgcHJldmVudCBvcGVuIC5tdWx0aXNlbGVjdCBmcm9tXG4gICAgICAvLyBiZWluZyBjcm9wcGVkLlxuICAgICAgb3ZlcmZsb3c6IHZpc2libGVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0Zvcm0gZnJvbSAnLi9EaXRvRm9ybS52dWUnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Gb3JtLmNvbXBvbmVudCgnZGl0by1mb3JtLW5lc3RlZCcsIHt9KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWVycm9ycyhcbiAgdi1pZj1cImVycm9yc1wiXG4pXG4gIHVsXG4gICAgbGkodi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIilcbiAgICAgIHwge3sgZXJyb3IgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWVycm9ycyhcbiAgICB2LWlmPVwiZXJyb3JzXCJcbiAgKVxuICAgIHVsXG4gICAgICBsaSh2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiKVxuICAgICAgICB8IHt7IGVycm9yIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZXJyb3JzXG4gICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgei1pbmRleDogMVxuICAgIHVsXG4gICAgICBtYXJnaW4tdG9wOiAxcHhcbiAgICAgIGNvbG9yOiAkY29sb3ItZXJyb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZXJyb3JzJywge1xuICBwcm9wczoge1xuICAgIGVycm9yczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc2NvcGVzXG4gIHJvdXRlci1saW5rKFxuICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgOmtleT1cImtleVwiXG4gICAgOnRvPVwiZ2V0U2NvcGVMaW5rKHNjb3BlKVwiXG4gICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgIDp0aXRsZT1cInNjb3BlLmhpbnQgfHwgZ2V0TGFiZWwoc2NvcGUpXCJcbiAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2NvcGVzXG4gICAgcm91dGVyLWxpbmsoXG4gICAgICB2LWZvcj1cIihzY29wZSwga2V5KSBpbiBzY29wZXNcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICAgIGN1c3RvbSB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNjb3Blc1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tYnV0dG9uXG4gICAgICArZWxsaXBzaXNcbiAgICAgIGJvcmRlci1yYWRpdXM6IDBcbiAgICAgIC8vIEEgYml0IG1vcmUgdGhhbiB0aGUgd2lkdGggb2YgZWxsaXBzaXMsIHRvIHByZXZlbnQgcmVwbGFjaW5nIHNob3J0IHdvcmRzXG4gICAgICAvLyB3aXRoIGVsbGlwc2lzLlxuICAgICAgbWluLXdpZHRoOiAzZW1cbiAgICAgIGZsZXg6IDAgMSBhdXRvXG4gICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxZW1cbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMWVtXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW1cbiAgICAgICAgcGFkZGluZy1yaWdodDogMWVtXG4gICAgICAmICsgLmRpdG8tYnV0dG9uXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4XG4gICAgICAvLyBEb24ndCBjb3ZlciB0aGUgZm9jdXNlZCBib3JkZXIgb2YgYnV0dG9uczpcbiAgICAgICY6Zm9jdXNcbiAgICAgICAgei1pbmRleDogMVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY29wZXMnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjb3BlczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0U2NvcGVMaW5rKHNjb3BlKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHsgLi4udGhpcy5xdWVyeSwgc2NvcGU6IHNjb3BlLm5hbWUgfVxuICAgICAgaWYgKHF1ZXJ5LnBhZ2UpIHtcbiAgICAgICAgcXVlcnkucGFnZSA9IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayhxdWVyeSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucGFnaW5hdGlvbihcbiAgOnBhZ2VTaXplPVwibGltaXRcIlxuICA6dG90YWw9XCJ0b3RhbFwiXG4gIDpwYWdlLnN5bmM9XCJwYWdlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHBhZ2luYXRpb24oXG4gICAgOnBhZ2VTaXplPVwibGltaXRcIlxuICAgIDp0b3RhbD1cInRvdGFsXCJcbiAgICA6cGFnZS5zeW5jPVwicGFnZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYWdpbmF0aW9uJywge1xuICBjb21wb25lbnRzOiB7IFBhZ2luYXRpb24gfSxcblxuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsaW1pdDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdG90YWw6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYWdlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoK3RoaXMucXVlcnkucGFnZSB8fCAwKSArIDFcbiAgICAgIH0sXG5cbiAgICAgIHNldChwYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLnBhZ2UgIT09IHBhZ2UpIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnZTogKHBhZ2UgLSAxKVxuICAgICAgICAgIH0pKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZHJhZ2dpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblN0YXJ0RHJhZygpIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uRW5kRHJhZyh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2VcbiAgICAgIGlmIChvbGRJbmRleCAhPT0gbmV3SW5kZXgpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdCwgcGFnaW5hdGlvblJhbmdlKSB7XG4gICAgICBjb25zdCB7IG9yZGVyS2V5IH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmIChvcmRlcktleSkge1xuICAgICAgICAvLyBSZW9yZGVyIHRoZSBjaGFuZ2VkIGVudHJpZXMgYnkgdGhlaXIgb3JkZXIga2V5LCB0YWtpbmcgcGFnaW5hdGlvblxuICAgICAgICAvLyBvZmZzZXRzIGludG8gYWNjb3VudDpcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFnaW5hdGlvblJhbmdlPy5bMF0gfHwgMFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsaXN0W2ldW29yZGVyS2V5XSA9IGkgKyBvZmZzZXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tdHJlZS1pdGVtKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gIH1gXG4gIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4pXG4gIC5kaXRvLXRyZWUtaGVhZGVyKHYtaWY9XCJsYWJlbFwiKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJvcGVuZWQgPSAhb3BlbmVkXCJcbiAgICApXG4gICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogb3BlbmVkIH1cIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbCh2LWh0bWw9XCJsYWJlbFwiKVxuICAgICAgLmRpdG8tdHJlZS1pbmZvKHYtaWY9XCJkZXRhaWxzXCIpIHt7IGRldGFpbHMgfX1cbiAgICAuZGl0by10cmVlLWxlYWYodi1lbHNlKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbCh2LWh0bWw9XCJsYWJlbFwiKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgIClcbiAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICApXG4gICAgdHIoXG4gICAgICB2LWZvcj1cInByb3BlcnR5IGluIHByb3BlcnRpZXNcIlxuICAgIClcbiAgICAgIHRkXG4gICAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpsYWJlbD1cImdldExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgIClcbiAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgOmNlbGw9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gIHZ1ZS1kcmFnZ2FibGUoXG4gICAgdi1pZj1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGNoaWxkcmVuRHJhZ2dhYmxlLCB0cnVlKVwiXG4gICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0KVwiXG4gICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgIEBlbmQ9XCJvbkVuZERyYWcoJGV2ZW50LCBjaGlsZHJlblNjaGVtYSlcIlxuICApXG4gICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICA6a2V5PVwiZ2V0SXRlbVVpZChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhKVwiXG4gICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgOmRhdGE9XCJpdGVtLmRhdGFcIlxuICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgOmFjdGl2ZT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICA6bGV2ZWw9XCJsZXZlbCArIDFcIlxuICAgIClcbiAgICAvLyBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgLy8gcGFzcyBgYXNPYmplY3Q6IHRydWVgIGluIHRoZSBgZ2V0SXRlbUxhYmVsKClgIGNhbGwgYWJvdmUuXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by10cmVlLWl0ZW0oXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tZHJhZ2dpbmcnOiBkcmFnZ2luZyxcbiAgICAgICdkaXRvLWFjdGl2ZSc6IGFjdGl2ZVxuICAgIH1gXG4gICAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbiAgKVxuICAgIC5kaXRvLXRyZWUtaGVhZGVyKHYtaWY9XCJsYWJlbFwiKVxuICAgICAgLmRpdG8tdHJlZS1icmFuY2goXG4gICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJvcGVuZWQgPSAhb3BlbmVkXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiBvcGVuZWQgfVwiXG4gICAgICAgIClcbiAgICAgICAgLmRpdG8tdHJlZS1sYWJlbCh2LWh0bWw9XCJsYWJlbFwiKVxuICAgICAgICAuZGl0by10cmVlLWluZm8odi1pZj1cImRldGFpbHNcIikge3sgZGV0YWlscyB9fVxuICAgICAgLmRpdG8tdHJlZS1sZWFmKHYtZWxzZSlcbiAgICAgICAgLmRpdG8tdHJlZS1sYWJlbCh2LWh0bWw9XCJsYWJlbFwiKVxuICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgIClcbiAgICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgICB2LWlmPVwicHJvcGVydGllc1wiXG4gICAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cInByb3BlcnR5IGluIHByb3BlcnRpZXNcIlxuICAgICAgKVxuICAgICAgICB0ZFxuICAgICAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICAgIDpsYWJlbD1cImdldExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgICAgKVxuICAgICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgICAgOmNlbGw9XCJwcm9wZXJ0eVwiXG4gICAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIClcbiAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgdi1pZj1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhjaGlsZHJlbkRyYWdnYWJsZSwgdHJ1ZSlcIlxuICAgICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0KVwiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnKCRldmVudCwgY2hpbGRyZW5TY2hlbWEpXCJcbiAgICApXG4gICAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhKVwiXG4gICAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgICAgOmRhdGE9XCJpdGVtLmRhdGFcIlxuICAgICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgICAgOmFjdGl2ZT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgICA6bGV2ZWw9XCJsZXZlbCArIDFcIlxuICAgICAgKVxuICAgICAgLy8gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgICAgLy8gcGFzcyBgYXNPYmplY3Q6IHRydWVgIGluIHRoZSBgZ2V0SXRlbUxhYmVsKClgIGNhbGwgYWJvdmUuXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdHJlZS1pdGVtXG4gICAgLS1jaGV2cm9uLWluZGVudDogI3skY2hldnJvbi1pbmRlbnR9XG4gICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgPiAuZGl0by10cmVlLWJyYW5jaCxcbiAgICAgID4gLmRpdG8tdHJlZS1sZWFmXG4gICAgICAgIC8vIFVzZSBgLS1sZXZlbGAgQ1NTIHZhcmlhYmxlIHRvIGNhbGN1bGF0ZWQgdGhlIGFjY3VtdWxhdGVkIGluZGVudFxuICAgICAgICAvLyBwYWRkaW5nIGRpcmVjdGx5IGluc3RlYWQgb2YgaGF2aW5nIGl0IGFjY3VtdWxhdGUgaW4gbmVzdGVkIENTUy5cbiAgICAgICAgLy8gVGhpcyB3YXksIHdlIGNhbiBrZWVwIHRoZSAuZGl0by1hY3RpdmUgYXJlYSBjb3ZlciB0aGUgZnVsbCB3aWR0aDpcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBjYWxjKHZhcigtLWNoZXZyb24taW5kZW50KSAqICh2YXIoLS1sZXZlbCwgMSkgLSAxKSlcbiAgICAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgIC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgIC5kaXRvLXRyZWUtbGVhZlxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgZmxleDogYXV0b1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICBtYXJnaW46IDFweCAwXG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAuZGl0by10cmVlLWxhYmVsLFxuICAgIC5kaXRvLXRyZWUtaW5mb1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgIC5kaXRvLXRyZWUtaW5mb1xuICAgICAgcGFkZGluZy1sZWZ0OiAwLjM1ZW1cbiAgICAgIGNvbG9yOiByZ2JhKCRjb2xvci1ibGFjaywgLjIpXG4gICAgLmRpdG8tYnV0dG9uc1xuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIG1hcmdpbi1sZWZ0OiAxZW1cbiAgICAgIG1hcmdpbjogMXB4IDAgMXB4IDFlbVxuICAgIC5kaXRvLXRyZWUtaGVhZGVyOmhvdmVyXG4gICAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZVxuICAgIC8vIEhpZGUgYnV0dG9ucyBkdXJpbmcgZHJhZ2dpbmdcbiAgICAmLmRpdG8tZHJhZ2dpbmdcbiAgICAgIC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuICAgICYuZGl0by1hY3RpdmVcbiAgICAgID4gLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBwYWRkaW5nOiAwICRpbnB1dC1wYWRkaW5nLWhvclxuICAgICAgICBtYXJnaW46IDAgKC0kaW5wdXQtcGFkZGluZy1ob3IpXG4gICAgICAgID4gLmRpdG8tdHJlZS1icmFuY2hcbiAgICAgICAgICA+IC5kaXRvLWNoZXZyb246OmJlZm9yZVxuICAgICAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgID4gKiA+IC5kaXRvLXRyZWUtbGFiZWxcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLmRpdG8tcHJvcGVydGllc1xuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIG1hcmdpbi1sZWZ0OiAkY2hldnJvbi1pbmRlbnRcbiAgICAgID4gdHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lXG4gICAgICAuZGl0by1sYWJlbFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgICBjb250ZW50OiAnOiAnXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9yZGVyZWRNaXhpbiBmcm9tICcuLi9taXhpbnMvT3JkZXJlZE1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgaGFzRm9ybVNjaGVtYSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRyZWUtaXRlbScsIHtcbiAgY29tcG9uZW50czogeyBWdWVEcmFnZ2FibGUgfSxcbiAgbWl4aW5zOiBbT3JkZXJlZE1peGluXSxcbiAgaW5qZWN0OiBbJ2NvbnRhaW5lciddLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbQXJyYXksIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBvcGVuOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWN0aXZlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGV2ZWw6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuZWQ6IHRoaXMub3BlbiB8fCB0aGlzLnNjaGVtYS5vcGVuXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5tZXRhXG4gICAgfSxcblxuICAgIHN0b3JlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLnN0b3JlXG4gICAgfSxcblxuICAgIGRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLmRpc2FibGVkXG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEucHJvcGVydGllcylcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU2hvdWxkIHRoaXMgYmUgbmFtZWQgYHNvdXJjZVNjaGVtYWAgaW5zdGVhZD8gVXNlIFNvdXJjZU1peGluP1xuICAgIGNoaWxkcmVuU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuTGlzdCgpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNoaWxkcmVuU2NoZW1hPy5uYW1lXG4gICAgICByZXR1cm4gbmFtZSAmJiB0aGlzLmRhdGFbbmFtZV1cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5EcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoID4gMSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdkcmFnZ2FibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICBzY2hlbWE6IHRoaXMuY2hpbGRyZW5TY2hlbWFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbnVtQ2hpbGRyZW4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bVByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzPy5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1FbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMubnVtUHJvcGVydGllcyArIHRoaXMubnVtQ2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5JdGVtcygpIHtcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW5TY2hlbWEgfSA9IHRoaXNcbiAgICAgIGlmIChjaGlsZHJlblNjaGVtYSkge1xuICAgICAgICBjb25zdCB7IGVkaXRQYXRoIH0gPSB0aGlzLmNvbnRhaW5lclxuICAgICAgICBjb25zdCBjaGlsZHJlbk9wZW4gPSAhdGhpcy5wYXRoICYmIGNoaWxkcmVuU2NoZW1hLm9wZW5cbiAgICAgICAgLy8gQnVpbGQgYSBjaGlsZHJlbiBsaXN0IHdpdGggY2hpbGQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlbXBsYXRlLlxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lm1hcCgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gKFxuICAgICAgICAgICAgY2hpbGRyZW5TY2hlbWEucGF0aCAmJlxuICAgICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2NoaWxkcmVuU2NoZW1hLnBhdGh9LyR7aW5kZXh9YFxuICAgICAgICAgIClcbiAgICAgICAgICBjb25zdCBvcGVuID0gY2hpbGRyZW5PcGVuIHx8XG4gICAgICAgICAgICAvLyBPbmx5IGNvdW50IGFzIFwiaW4gZWRpdCBwYXRoXCIgd2hlbiBpdCdzIG5vdCB0aGUgZnVsbCBlZGl0IHBhdGguXG4gICAgICAgICAgICBlZGl0UGF0aC5zdGFydHNXaXRoKHBhdGgpICYmIHBhdGgubGVuZ3RoIDwgZWRpdFBhdGgubGVuZ3RoXG4gICAgICAgICAgY29uc3QgYWN0aXZlID0gZWRpdFBhdGggPT09IHBhdGhcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICBvcGVuLFxuICAgICAgICAgICAgYWN0aXZlXG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBbXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZXRhaWxzKCkge1xuICAgICAgY29uc3QgeyBudW1DaGlsZHJlbiB9ID0gdGhpc1xuICAgICAgcmV0dXJuIG51bUNoaWxkcmVuICYmIGAke251bUNoaWxkcmVufSAke1xuICAgICAgICBudW1DaGlsZHJlbiA9PT0gMSA/ICdpdGVtJyA6ICdpdGVtcydcbiAgICAgIH1gXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZHJhZ2dhYmxlIHx8IHRoaXMuZWRpdGFibGUgfHwgdGhpcy5kZWxldGFibGVcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU3VwcG9ydCBjcmVhdGFibGUhXG4gICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNyZWF0YWJsZSwgZWRpdGFibGUgYW5kIGRlbGV0YWJsZSBvdmVycmlkZXMgb24gdGhlXG4gICAgLy8gYXNzb2NpYXRlZCBmb3JtcywganVzdCBsaWtlIGluIGBUeXBlTGlzdGAgYW5kIGBUeXBlT2JqZWN0YCwgdGhyb3VnaFxuICAgIC8vIGBEaXRvRWRpdEJ1dHRvbnNgLiBJdCB3b3VsZCBiZSBiZXN0IHRvIHVzZSBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIHRvby5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgcHJvcGVydHkubmFtZSlcbiAgICB9LFxuXG4gICAgb25FZGl0KCkge1xuICAgICAgLy8gQWxsIHdlIGdvdCB0byBkbyBpcyBwdXNoIHRoZSByaWdodCBlZGl0IHBhdGggdG8gdGhlIHJvdXRlciwgdGhlIHJlc3RcbiAgICAgIC8vIGlzIGhhbmRsZWQgYnkgb3VyIHJvdXRlcywgYWxsb3dpbmcgcmVsb2FkcyBhcyB3ZWxsLlxuICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICBwYXRoOiBgJHt0aGlzLmNvbnRhaW5lci5wYXRofSR7dGhpcy5wYXRofWAsXG4gICAgICAgIC8vIFByZXNlcnZlIGN1cnJlbnQgcXVlcnlcbiAgICAgICAgcXVlcnk6IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkRlbGV0ZSgpIHtcbiAgICAgIC8vIFRPRE86IEltcGxlbWVudCFcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5vbkNoYW5nZSgpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICB0clxuICAgIHRoKFxuICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgOmNsYXNzPVwiZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKVwiXG4gICAgKVxuICAgICAgcm91dGVyLWxpbmsoXG4gICAgICAgIHYtaWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICA6Y2xhc3M9XCJnZXRTb3J0Q2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICApXG4gICAgICAgICAgLmRpdG8tb3JkZXItYXJyb3dzXG4gICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICBzcGFuKFxuICAgICAgICB2LWVsc2VcbiAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgIHRoKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgLy8gRW1wdHkgPHNwYW4+IGlzIG5lZWRlZCBmb3Igc3R5bGluZywgc2VlIF90YWJsZS5zYXNzXG4gICAgICBzcGFuXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICB0clxuICAgICAgdGgoXG4gICAgICAgIHYtZm9yPVwiKGNvbHVtbiwgaW5kZXgpIGluIGNvbHVtbnNcIlxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICAgIClcbiAgICAgICAgcm91dGVyLWxpbmsoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgOnRvPVwiZ2V0U29ydExpbmsoY29sdW1uKVwiXG4gICAgICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHRoKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgICAgc3BhblxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXRhYmxlLWhlYWRcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB0clxuICAgICAgdGhcbiAgICAgICAgcGFkZGluZzogMFxuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAgIHRleHQtYWxpZ246IGxlZnRcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgICAgICAuZGl0by1idXR0b25cbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmcsIHNlZSBiZWxvd1xuICAgICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgICB3aWR0aDogMTAwJVxuICAgICAgICAgIHRleHQtYWxpZ246IGluaGVyaXRcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgICAgIHNwYW5cbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmdcbiAgICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICAgICY6ZW1wdHk6OmFmdGVyXG4gICAgICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IDx0aD4gZnJvbSBjb2xsYXBzaW5nXG4gICAgICAgICAgICBjb250ZW50OiAnXFwyMDBiJyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG4gICAgICAgID4gc3BhblxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJsZS1oZWFkJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2x1bW5zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBoYXNFZGl0QnV0dG9uczogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3J0KCkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAodGhpcy5xdWVyeS5vcmRlciB8fCAnJykuc3BsaXQoL1xccysvKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogb3JkZXJbMF0sXG4gICAgICAgIG9yZGVyOiBvcmRlclsxXVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY29sdW1uLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldFNvcnRDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWVcbiAgICAgICAgPyBgZGl0by1zZWxlY3RlZCBkaXRvLW9yZGVyLSR7dGhpcy5zb3J0Lm9yZGVyfWBcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFNvcnRMaW5rKGNvbHVtbikge1xuICAgICAgLy8gVG9nZ2xlIG9yZGVyIGlmIHRoZSBzYW1lIGNvbHVtbiBpcyBjbGlja2VkIGFnYWluLlxuICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgJiYgdGhpcy5zb3J0Lm9yZGVyID09PSAnYXNjJ1xuICAgICAgICA/ICdkZXNjJ1xuICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGQoXG4gIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbilcbiAgLy8gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY29tcG9uZW50XCJcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuICBzcGFuKFxuICAgIHYtZWxzZVxuICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0ZChcbiAgICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbiAgKVxuICAgIC8vIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYmxlLWNlbGwnLCB7XG4gIHByb3BzOiB7XG4gICAgY2VsbDogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZVR5cGVDb21wb25lbnQodGhpcy5jZWxsLmNvbXBvbmVudClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKHZhbHVlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEEgY29tcG9uZW50IHRvIHNpbXBseSBwYXNzIHRocm91Z2ggYW4gZXhpc3RpbmcgdnVlIHZub2RlLlxuLy8gU2VlOiBodHRwczovL2ZvcnVtLnZ1ZWpzLm9yZy90LzI4MTYyLzRcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZub2RlJywge1xuICBmdW5jdGlvbmFsOiB0cnVlLFxuICByZW5kZXI6IChoLCBjb250ZXh0KSA9PiBjb250ZXh0LnByb3BzLm5vZGVcbn0pXG48L3NjcmlwdD5cbiIsIi8vIFR5cGVDb21wb25lbnQgaXMgdGhlIGFic3RyYWN0IGJhc2UgY29tcG9uZW50IGZvciBhbGwgb3RoZXIgdHlwZSBjb21wb25lbnRzXG4vLyBpbnNpZGUgdGhlIHR5cGVzLyBmb2xkZXIuIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIGNvbmNyZXRlXG4vLyBgVHlwZUNvbXBvbmVudC52dWVgIGNvbXBvbmVudCwgdXNlIHRvIHJlbmRlciB0aGUgYHR5cGU6ICdjb21wb25lbnQnYCB0eXBlcy5cbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyByZWdpc3RlclR5cGVDb21wb25lbnQsIGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuY29uc3QgVHlwZUNvbXBvbmVudCA9IERpdG9Db21wb25lbnQuZXh0ZW5kKHtcbiAgbWl4aW5zOiBbVHlwZU1peGluXSxcblxuICBuYXRpdmVGaWVsZDogZmFsc2UsXG4gIHRleHRGaWVsZDogZmFsc2UsXG4gIC8vIFNldCByZWFzb25hYmxlIGRlZmF1bHRzIGZvciBhbGwgb2YgdGhlc2UgdGhhdCBhcmUgdXNlZCBieSBtb3N0IHR5cGVcbiAgLy8gY29tcG9uZW50cy4gVGhlc2Ugb25seSBuZWVkIGRlZmluaW5nIGluIHN1Yi1jbGFzc2VzIHdoZW4gdGhleSBkaWZmZXIuXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGVmYXVsdE5lc3RlZDogdHJ1ZSxcbiAgZGVmYXVsdFZpc2libGU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IHRydWUsXG4gIGV4Y2x1ZGVWYWx1ZTogZmFsc2UsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogbnVsbCxcbiAgb21pdFBhZGRpbmc6IGZhbHNlXG59KVxuXG5UeXBlQ29tcG9uZW50LnJlZ2lzdGVyID0gZnVuY3Rpb24odHlwZXMsIGRlZmluaXRpb24gPSB7fSkge1xuICB0eXBlcyA9IGFzQXJyYXkodHlwZXMpXG4gIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KGBkaXRvLXR5cGUtJHt0eXBlc1swXX1gLCBkZWZpbml0aW9uKVxuICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICB9XG4gIHJldHVybiBjb21wb25lbnRcbn1cblxuVHlwZUNvbXBvbmVudC5nZXQgPSBnZXRUeXBlQ29tcG9uZW50XG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnRcbiIsIlxuYnV0dG9uLmRpdG8tYnV0dG9uKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cInR5cGVcIlxuICA6dGl0bGU9XCJ0ZXh0XCJcbiAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKSB7eyB0ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOnRpdGxlPVwidGV4dFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ2J1dHRvbicsICdzdWJtaXQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG4gIC8vIFRPRE86IENvbnNpZGVyIG1ha2luZyB0aGlzIHdvcmsgbmljZWx5OlxuICAvLyBvbWl0RmxleEdyb3c6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJiKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmVyYnNbdGhpcy5uYW1lXSB8fCB0aGlzLm5hbWVcbiAgICB9LFxuXG4gICAgdGV4dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RleHQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQodGV4dCkge1xuICAgICAgICByZXR1cm4gdGV4dCB8fCBsYWJlbGl6ZSh0aGlzLnZlcmIpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgY2xpY2s6IHRoaXMub25DbGlja1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VDb21wb25lbnQ/LnN1Ym1pdCh0aGlzLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrKCkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5lbWl0RXZlbnQoJ2NsaWNrJywge1xuICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICB9KVxuICAgICAgLy8gSGF2ZSBidXR0b25zIHRoYXQgZGVmaW5lIHJlc291cmNlcyBjYWxsIGB0aGlzLnN1Ym1pdCgpYCBieSBkZWZhdWx0OlxuICAgICAgaWYgKFxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJiAvLyBNZWFuaW5nOiBkb24ndCBwcmV2ZW50IGRlZmF1bHQuXG4gICAgICAgIGhhc1Jlc291cmNlKHRoaXMuc2NoZW1hKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3VibWl0KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQuZGl0by1jaGVja2JveChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdHlwZT1cImNoZWNrYm94XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY2hlY2tib3hcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94Jywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzRnVuY3Rpb24sIGlzUHJvbWlzZSwgbm9ybWFsaXplRGF0YVBhdGgsIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbTG9hZGluZ01peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgYXN5bmNEYXRhRW50cmllczoge31cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCBuYW1lLCB7XG4gICAgICByZXNvbHZlQ291bnRlciA9IDEsXG4gICAgICAuLi5sb2FkaW5nT3B0aW9uc1xuICAgIH0gPSB7fSkge1xuICAgICAgaWYgKCFpc09iamVjdChzY2hlbWEpKSB7XG4gICAgICAgIHNjaGVtYSA9IHsgZGF0YTogc2NoZW1hIH1cbiAgICAgIH1cbiAgICAgIGxldCB7IGRhdGEgPSB1bmRlZmluZWQsIGRhdGFQYXRoID0gbnVsbCB9ID0gc2NoZW1hXG4gICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYXN5bmMgZGF0YSBsb2FkaW5nIGFscmVhZHkgaW4gcHJvY2Vzcy5cbiAgICAgIGNvbnN0IGFzeW5jRW50cnkgPSAoXG4gICAgICAgIHRoaXMuYXN5bmNEYXRhRW50cmllc1tuYW1lXSB8fFxuICAgICAgICB0aGlzLiRzZXQodGhpcy5hc3luY0RhdGFFbnRyaWVzLCBuYW1lLCB7XG4gICAgICAgICAgZGVwZW5kZW5jeUZ1bmN0aW9uOiBudWxsLFxuICAgICAgICAgIHJlc29sdmVDb3VudGVyOiAwLFxuICAgICAgICAgIHJlc29sdmVkRGF0YTogbnVsbCxcbiAgICAgICAgICByZXNvbHZpbmc6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAvLyBJZiB0aGUgZGF0YSBjYWxsYmFjayBwcm92aWRlZCBhIGRlcGVuZGVuY3kgZnVuY3Rpb24gd2hlbiBpdCB3YXMgY2FsbGVkLFxuICAgICAgLy8gY2FsIGl0IGluIGV2ZXJ5IGNhbGwgb2YgYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8gZm9yY2UgVnVlIHRvIGtlZXAgdHJhY2tcbiAgICAgIC8vIG9mIHRoZSBhc3luYyBkZXBlbmRlbmNpZXMuXG4gICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbj8uY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG5cbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID4gMCkge1xuICAgICAgICAvLyBJZiB0aGUgZGF0YSB3YXMgcmVzb2x2ZWQgYWxyZWFkeSwgcmV0dXJuIGl0IGFuZCBjbGVhciB0aGUgdmFsdWUgb25jZVxuICAgICAgICAvLyBgcmVzb2x2ZUNvdW50ZXJgIHJlYWNoZXMgemVyby4gQ291bnRpbmcgaXMgbmVlZGVkIGJlY2F1c2UgZGVwZW5kaW5nXG4gICAgICAgIC8vIG9uIHRoZSB1c2Ugb2YgZGF0YSBhbmQgcmVhY3Rpdml0eSwgbXVsdGlwbGUgY2FsbHMgdG8gdGhlIGNvbXB1dGVkXG4gICAgICAgIC8vIGdldHRlciBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGRhdGEgaXMgY2hhbmdpbmcuIENsZWFyaW5nIHRoZSByZXNvbHZlZFxuICAgICAgICAvLyBkYXRhIHdvcmtzIGJlY2F1c2UgVnVlIGNhY2hlcyB0aGUgcmVzdWx0IG9mIGNvbXB1dGVkIGdldHRlcnMgYW5kIG9ubHlcbiAgICAgICAgLy8gcmVldmFsdWF0ZXMgaWYgb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlZC4gVGhpcyBpcyB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCBhIGNhY2hlZCB2YWx1ZSBoZXJlIGRvZXNuJ3QgYmxvY2sgLyBvdmVycmlkZSByZWV2YWx1YXRpb246XG4gICAgICAgIGNvbnN0IHsgcmVzb2x2ZWREYXRhIH0gPSBhc3luY0VudHJ5XG4gICAgICAgIGlmICgtLWFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPT09IDApIHtcbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWREYXRhXG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIHRoZSBkYXRhIGZ1bmN0aW9uIHR3aWNlOlxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2aW5nKSB7XG4gICAgICAgIGRhdGEgPSBudWxsXG4gICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgIC8vIElmIHRoZSByZXN1bHQgb2YgdGhlIGRhdGEgZnVuY3Rpb24gaXMgYW5vdGhlciBmdW5jdGlvbiwgdGhlbiB0aGVcbiAgICAgICAgICAvLyBmaXJzdCBkYXRhIGZ1bmN0aW9uIGlzIHRoZXJlIHRvIHRyYWNrIGRlcGVuZGVuY2llcyBhbmQgdGhlIHJlYWxcbiAgICAgICAgICAvLyBkYXRhIGxvYWRpbmcgaGFwcGVucyBpbiB0aGUgZnVuY3Rpb24gdGhhdCBpdCByZXR1cm5lZC4gS2VlcCB0cmFja1xuICAgICAgICAgIC8vIGl0IGluIGBkZXBlbmRlbmN5RnVuY3Rpb25gIHNvIGl0IGNhbiBiZSBjYWxsZWQgb24gZWFjaCBjYWxsIG9mXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8ga2VlcCB0aGUgZGVwZW5kZW5jaWVzIGludGFjdCwgYW5kIGNhbGxcbiAgICAgICAgICAvLyB0aGUgZnVuY3Rpb24gdGhhdCBpdCByZXR1cm5lZCBvbmNlIHRvIGdldCB0aGUgYWN0dWFsIGRhdGE6XG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVzdWx0KSkge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24gPSBkYXRhXG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0LmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoZGF0YSkpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGF0YSBpcyBhc3luY2hyb25vdXMsIGl0IGNhbid0IGJlIHJldHVybmVkIHN0cmFpZ2h0IGF3YXkuXG4gICAgICAgICAgLy8gQnV0IHdlIGNhbiBjaGVhdCB1c2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFuZCBgcmVzb2x2ZWREYXRhYCxcbiAgICAgICAgICAvLyB3aGljaCBpcyBnb2luZyB0byByZWNlaXZlIHRoZSBsb2FkZWQgZGF0YSBhc3luY2hyb25vdXNseSxcbiAgICAgICAgICAvLyB0cmlnZ2VyaW5nIGEgcmVjb21wdXRlIG9mIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IGNhbGxzXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAuXG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSB0cnVlXG4gICAgICAgICAgdGhpcy5yZXNvbHZlRGF0YShkYXRhLCBsb2FkaW5nT3B0aW9ucykudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPSByZXNvbHZlQ291bnRlclxuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBkYXRhXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgICAvLyBDbGVhciBkYXRhIHVudGlsIHByb21pc2UgaXMgcmVzb2x2ZWQgYW5kIGByZXNvbHZlZERhdGFgIGlzIHNldFxuICAgICAgICAgIGRhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YVBhdGgpIHtcbiAgICAgICAgZGF0YSA9IGdldFZhbHVlQXREYXRhUGF0aChcbiAgICAgICAgICB0aGlzLnJvb3REYXRhLFxuICAgICAgICAgIG5vcm1hbGl6ZURhdGFQYXRoKGAke3RoaXMuZGF0YVBhdGh9LyR7ZGF0YVBhdGh9YClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZURhdGEobG9hZCwgbG9hZGluZ09wdGlvbnMgPSB7fSkge1xuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgbGV0IGRhdGEgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gYXdhaXQgKGlzRnVuY3Rpb24obG9hZCkgPyBsb2FkKCkgOiBsb2FkKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvci5tZXNzYWdlIHx8IGVycm9yKVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4vRGF0YU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IHNldFRlbXBvcmFyeUlkLCBpc1JlZmVyZW5jZSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcsIGlzRnVuY3Rpb24sXG4gIG5vcm1hbGl6ZURhdGFQYXRoLCBsYWJlbGl6ZSwgZGVib3VuY2VBc3luY1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc09wdGlvbnM6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCBjb252ZXJ0VmFsdWUgPSB2YWx1ZSA9PiB0aGlzLnJlbGF0ZVxuICAgICAgICAgID8gdGhpcy5oYXNPcHRpb24odmFsdWUpXG4gICAgICAgICAgICA/IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXNBcnJheSh0aGlzLnZhbHVlKVxuICAgICAgICAgID8gdGhpcy52YWx1ZS5tYXAoY29udmVydFZhbHVlKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpXG4gICAgICAgICAgOiBjb252ZXJ0VmFsdWUodGhpcy52YWx1ZSlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIC8vIFdoZW4gcmVsYXRpbmcgYW5kIGFzIHNvb24gYXMgdGhlIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4uLlxuICAgICAgICAgIHRoaXMucmVsYXRlICYmIHRoaXMuaGFzT3B0aW9ucyAmJiAoXG4gICAgICAgICAgICAvLyAuLi5pZiB0aGUgdmFsdWUgaXMgZm9yY2VkIHRvIG51bGwgYmVjYXVzZSBhIGRpc2FwcGVhcmVkIG9wdGlvbi4uLlxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgLy8gLi4ub3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVmZXJlbmNlLCByZXBsYWNlIGl0IHdpdGggaXRzIG9wdGlvblxuICAgICAgICAgICAgLy8gdmFsdWUsIHNvIHRoYXQgaXQnbGwgaG9sZCBhY3R1YWwgZGF0YSwgbm90IGp1c3QgYSByZWZlcmVuY2UgaWQuXG4gICAgICAgICAgICBpc1JlZmVyZW5jZSh0aGlzLnZhbHVlKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjb252ZXJ0ID0gdmFsdWUgPT4gdGhpcy5yZWxhdGVcbiAgICAgICAgICA/IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlLm1hcChjb252ZXJ0KVxuICAgICAgICAgIDogY29udmVydCh2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRPcHRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpXG4gICAgfSxcblxuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHRoaXMuc2NoZW1hLm9wdGlvbnMsICdvcHRpb25zJywge1xuICAgICAgICByZXNvbHZlQ291bnRlcjogMVxuICAgICAgfSkgPz8gW11cbiAgICAgIGlmICghaXNBcnJheShkYXRhKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb3B0aW9ucyBkYXRhLCBzaG91bGQgYmUgYXJyYXk6ICR7ZGF0YX1gKVxuICAgICAgfVxuICAgICAgdGhpcy5oYXNPcHRpb25zID0gZGF0YS5sZW5ndGggPiAwXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzT3B0aW9ucyhkYXRhKVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgLy8gVGhpcyBpcyBvdmVycmlkZGVuIGluIGBUeXBlTXVsdGlzZWxlY3RgIHRvIHJldHVybiB0aGUgYHNlYXJjaGVkT3B0aW9uc2BcbiAgICAgIC8vIHdoZW4gYSBzZWFyY2ggZmlsdGVyIHdhcyBhcHBsaWVkLlxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICByZWxhdGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWxhdGUnLCB7XG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIGByZWxhdGVCeTogJ2lkJ2BcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIFdlIGNhbm5vdCB1c2Ugc2NoZW1hIGFjY2Vzc29yIGNhbGxiYWNrIG1hZ2ljIGZvciBgcmVsYXRlYCBhcyB3ZSBuZWVkXG4gICAgICAvLyB0aGlzIG91dHNpZGUgb2YgdGhlIGNvbXBvbmVudCdzIGxpZmUtc3Bhbiwgc2VlIGBwcm9jZXNzRGF0YSgpYCBiZWxvdy5cbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZ3JvdXBCeTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2dyb3VwQnknLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICBvcHRpb25MYWJlbDogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMubGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAnbGFiZWwnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGxhYmVsIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ2xhYmVsJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG9wdGlvblZhbHVlOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy52YWx1ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQodmFsdWUpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICd2YWx1ZSc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdmFsdWUgfHxcbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJiAnaWQnIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ3ZhbHVlJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IENvbnNpZGVyIG1vdmluZyBzZWFyY2ggdG8gYG9wdGlvbnMuc2VhcmNoYD9cbiAgICBzZWFyY2hGaWx0ZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2gnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHNlYXJjaCkge1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgY29uc3QgeyBmaWx0ZXIsIGRlYm91bmNlIH0gPSBpc0Z1bmN0aW9uKHNlYXJjaClcbiAgICAgICAgICAgID8geyBmaWx0ZXI6IHNlYXJjaCB9XG4gICAgICAgICAgICA6IHNlYXJjaFxuICAgICAgICAgIHJldHVybiBkZWJvdW5jZSA/IGRlYm91bmNlQXN5bmMoZmlsdGVyLCBkZWJvdW5jZSkgOiBmaWx0ZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZ3JvdXBCeUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSA/ICdsYWJlbCcgOiBudWxsXG4gICAgfSxcblxuICAgIGdyb3VwQnlPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSA/ICdvcHRpb25zJyA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE9wdGlvbktleShrZXkpIHtcbiAgICAgIGNvbnN0IFtvcHRpb25dID0gdGhpcy5hY3RpdmVPcHRpb25zXG4gICAgICByZXR1cm4gaXNPYmplY3Qob3B0aW9uKSAmJiBrZXkgaW4gb3B0aW9uID8ga2V5IDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVsYXRlKSB7XG4gICAgICAgICAgLy8gSWYgaWRzIGFyZSBtaXNzaW5nIGFuZCB3ZSB3YW50IHRvIHJlbGF0ZSwgc2V0IHRlbXBvcmFyeSBpZHMuXG4gICAgICAgICAgLy8gTk9URTogV2UgbmVlZCB0byBtb2RpZnkgdGhlIGFjdHVhbCBkYXRhLCBtYWtpbmcgYSBjb3B5IHdvbid0IHdvcmtcbiAgICAgICAgICAvLyBhcyBpdCB3b24ndCBwcm9wYWdhdGUuXG4gICAgICAgICAgLy8gTk9URTogVGhpcyBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSBkYXRhIGlzIGZyb20gdGhlIGdyYXBoIHRoYXRcbiAgICAgICAgICAvLyB3ZSdyZSBjdXJyZW50bHkgZWRpdGluZy5cbiAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoISgnaWQnIGluIG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgc2V0VGVtcG9yYXJ5SWQob3B0aW9uLCAnaWQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cEJ5KSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBlZCA9IHt9XG4gICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMucmVkdWNlKFxuICAgICAgICAgICAgKHJlc3VsdHMsIG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBncm91cCA9IG9wdGlvblt0aGlzLmdyb3VwQnldXG4gICAgICAgICAgICAgIGxldCBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdXG4gICAgICAgICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdID0ge1xuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeUxhYmVsXTogZ3JvdXAsXG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5T3B0aW9uc106IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChlbnRyeSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbnRyeS5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH0sXG5cbiAgICBoYXNPcHRpb24ob3B0aW9uKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICB9LFxuXG4gICAgZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgIGNvbnN0IGZpbmRPcHRpb24gPSAob3B0aW9ucywgdmFsdWUsIGdyb3VwQnkpID0+IHtcbiAgICAgICAgLy8gU2VhcmNoIGZvciB0aGUgb3B0aW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBhbmQgcmV0dXJuIHRoZVxuICAgICAgICAvLyB3aG9sZSBvYmplY3QuXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXBCeSkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kT3B0aW9uKG9wdGlvbi5vcHRpb25zLCB2YWx1ZSwgbnVsbClcbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uVmFsdWVcbiAgICAgICAgPyBmaW5kT3B0aW9uKHRoaXMuYWN0aXZlT3B0aW9ucywgdmFsdWUsIHRoaXMuZ3JvdXBCeSlcbiAgICAgICAgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25WYWx1ZSlcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25WYWx1ZV1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvblZhbHVlKVxuICAgICAgICAgID8gb3B0aW9uVmFsdWUuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBvcHRpb25cbiAgICB9LFxuXG4gICAgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvbkxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uTGFiZWwpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uTGFiZWxdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25MYWJlbClcbiAgICAgICAgICA/IG9wdGlvbkxhYmVsLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogbGFiZWxpemUoYCR7b3B0aW9ufWApXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBpZiAoc2NoZW1hLnJlbGF0ZSkge1xuICAgICAgLy8gRm9yIGludGVybmFsbHkgcmVsYXRpbmcgZGF0YSAoYHNjaGVtYS5vcHRpb25zLmRhdGFQYXRoYCksIHdlIG5lZWQgdG9cbiAgICAgIC8vIHByb2Nlc3MgYm90aCB0aGUgb3B0aW9ucyAoZm9yICcjcmVmJykgYW5kIHRoZSB2YWx1ZSAoJyNpZCcpLlxuICAgICAgLy8gU2VlIGBEYXRhTWl4aW4uaGFuZGxlRGF0YVNjaGVtYSgpYDpcbiAgICAgIGNvbnN0IHBhdGggPSBzY2hlbWEub3B0aW9ucz8uZGF0YVBhdGhcbiAgICAgIGNvbnN0IHJlbGF0ZWREYXRhUGF0aCA9IHBhdGhcbiAgICAgICAgPyBub3JtYWxpemVEYXRhUGF0aChgJHtkYXRhUGF0aH0vJHtwYXRofWApXG4gICAgICAgIDogbnVsbFxuICAgICAgZ3JhcGguYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKVxuICAgICAgaWYgKHJlbGF0ZWREYXRhUGF0aCkge1xuICAgICAgICBncmFwaC5zZXRTb3VyY2VSZWxhdGVkKHJlbGF0ZWREYXRhUGF0aClcbiAgICAgIH1cbiAgICAgIC8vIENvbnZlcnQgcmVsYXRpbmcgb2JqZWN0cyB0byBhIHNoYWxsb3cgY29weSB3aXRoIG9ubHkgdGhlIGlkIGxlZnQuXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIHVzaW5nIGByZWxhdGVCeWA6XG4gICAgICBjb25zdCBwcm9jZXNzUmVsYXRlID0gdmFsdWUgPT4gdmFsdWUgPyB7IGlkOiB2YWx1ZS5pZCB9IDogdmFsdWVcbiAgICAgIC8vIFNlbGVjdGVkIG9wdGlvbnMgY2FuIGJlIGJvdGggb2JqZWN0cyAmIGFycmF5cywgZS5nLiAnY2hlY2tib3hlcyc6XG4gICAgICB2YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NSZWxhdGUpXG4gICAgICAgIDogcHJvY2Vzc1JlbGF0ZSh2YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsIlxudWwuZGl0by1jaGVja2JveGVzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgIGxhYmVsXG4gICAgICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHVsLmRpdG8tY2hlY2tib3hlcyhcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuICApXG4gICAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgICAgbGFiZWxcbiAgICAgICAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgICApXG4gICAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNoZWNrYm94ZXNcbiAgICBsYWJlbFxuICAgICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuICAgIC5kaXRvLWNoZWNrYm94XG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3hlcycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFZhbHVlOiBbXSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSAob3B0aW9uIHx8IFtdKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1jb2RlKFxuICByZWY9XCJjb2RlXCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6c3R5bGU9XCJzdHlsZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jb2RlKFxuICAgIHJlZj1cImNvZGVcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6c3R5bGU9XCJzdHlsZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jb2RlXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAvLyBGb3IgcHJvcHBlciBzaXppbmcgb2YgY29udGVudCBhbG9uZyB3aXRoIDpzdHlsZT1cInN0eWxlXCIgc2V0dGluZyBhYm92ZSxcbiAgICAvLyBmb3IgcHJvcGVyIGxpbmUtaGVpZ2h0IGNhbGN1bGF0aW9uLlxuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiBhdXRvXG4gICAgLmNvZGVmbGFza1xuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgLy8gSWdub3JlIHRoZXBhcmVudCBwYWRkaW5nIGRlZmluZWQgYWJvdmUgd2hpY2ggaXMgb25seSBuZWVkZWQgdG8gc2V0XG4gICAgICAvLyB0aGUgZGVzaXJlZCBoZWlnaHQgd2l0aCA6c3R5bGU9XCJzdHlsZVwiLlxuICAgICAgdG9wOiAwXG4gICAgICBsZWZ0OiAwXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fcHJlXG4gICAgICAvLyBVc2Ugc2FtZSBwYWRkaW5nIGFzIC5kaXRvLWNvZGVcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gICAgLmNvZGVmbGFza19fY29kZSxcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vXG4gICAgICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZSlcbiAgICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodClcbiAgICAuY29kZWZsYXNrX19saW5lc1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBDb2RlRmxhc2sgZnJvbSAnY29kZWZsYXNrJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29kZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgM1xuICAgIH0sXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiBgaGVpZ2h0OiBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgZmxhc2sgPSBuZXcgQ29kZUZsYXNrKHRoaXMuJHJlZnMuY29kZSwge1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMuc2NoZW1hLmxhbmd1YWdlIHx8ICdqYXZhc2NyaXB0JyxcbiAgICAgIHRhYlNpemU6IHRoaXMuc2NoZW1hLmluZGVudFNpemUgfHwgMixcbiAgICAgIGxpbmVOdW1iZXJzOiBmYWxzZVxuICAgIH0pXG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICBsZXQgaWdub3JlVXBkYXRlID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgdGhpcy5kb21Pbih0aGlzLiRyZWZzLmNvZGUucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSwge1xuICAgICAgZm9jdXM6IG9uRm9jdXMsXG4gICAgICBibHVyOiBvbkJsdXJcbiAgICB9KVxuXG4gICAgY29uc3Qgc2V0Q29kZSA9IGNvZGUgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IGZsYXNrLmNvZGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gdHJ1ZVxuICAgICAgICBmbGFzay51cGRhdGVDb2RlKGNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICBvbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxhc2sub25VcGRhdGUodmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVVwZGF0ZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2RlKHZhbHVlIHx8ICcnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRDb2RlKHRoaXMudmFsdWUgfHwgJycpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudHJpZ2dlci5kaXRvLWNvbG9yKFxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbilcbiAgLmRpdG8taW5wdXQoXG4gICAgc2xvdD1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gIClcbiAgICBpbnB1dChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgIHNpemU9XCI4XCJcbiAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIClcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgKVxuICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgc2tldGNoLXBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICBzbG90PVwicG9wdXBcIlxuICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICA6ZGlzYWJsZS1hbHBoYT1cIiFhbHBoYVwiXG4gICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgOnByZXNldC1jb2xvcnM9XCJwcmVzZXRzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdHJpZ2dlci5kaXRvLWNvbG9yKFxuICAgIHRyaWdnZXI9XCJjbGlja1wiXG4gICAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4gIClcbiAgICAuZGl0by1pbnB1dChcbiAgICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgKVxuICAgICAgaW5wdXQoXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICAgIHNpemU9XCI4XCJcbiAgICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tY29sb3ItcHJldmlldy5kaXRvLWluaGVyaXQtZm9jdXMoXG4gICAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgICApXG4gICAgICAgIGRpdig6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGAjJHtoZXhWYWx1ZSB8fCAnMDAwMDAwMDAnfWAgfVwiKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICAgIHNrZXRjaC1waWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgICBzbG90PVwicG9wdXBcIlxuICAgICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgICAgOmRpc2FibGUtYWxwaGE9XCIhYWxwaGFcIlxuICAgICAgOmRpc2FibGUtZmllbGRzPVwiIWlucHV0c1wiXG4gICAgICA6cHJlc2V0LWNvbG9ycz1cInByZXNldHNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAkY29sb3Itc3dhdGNoLXdpZHRoOiAkcGF0dGVybi10cmFuc3BhcmVuY3ktc2l6ZVxuICAkY29sb3Itc3dhdGNoLXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAkYm9yZGVyLXdpZHRoXG4gIC5kaXRvLWNvbG9yXG4gICAgLmRpdG8taW5wdXRcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIGlucHV0XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoXG4gICAgLmRpdG8tYnV0dG9uLWNsZWFyXG4gICAgICBtYXJnaW4tcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAuZGl0by1jb2xvci1waWNrZXJcbiAgICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpblxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlXG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvd1xuICAgIC5kaXRvLWNvbG9yLXByZXZpZXdcbiAgICAgIGJhY2tncm91bmQ6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeVxuICAgICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGVcbiAgICAgICYsXG4gICAgICBkaXZcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIHdpZHRoOiAkY29sb3Itc3dhdGNoLXdpZHRoXG4gICAgICAgIHRvcDogMFxuICAgICAgICByaWdodDogMFxuICAgICAgICBib3R0b206IDBcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1c1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aW55Y29sb3IgZnJvbSAndGlueWNvbG9yMidcbmltcG9ydCB7IFNrZXRjaCBhcyBTa2V0Y2hQaWNrZXIgfSBmcm9tICd2dWUtY29sb3InXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgVHJpZ2dlciB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29sb3InLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgU2tldGNoUGlja2VyIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiBmYWxzZSxcbiAgICAgIGNvbnZlcnRlZEhleFZhbHVlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29sb3JWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCB7fVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuY29sb3JGb3JtYXRcbiAgICAgICAgY29uc3Qga2V5ID0ge1xuICAgICAgICAgIC8vIE5PVEU6IHZ1ZS1jb2xvciBjYWxscyBpdCAnaGV4Jywgd2hpbGUgdGlueWNvbG9yIGNhbGxzIGl0ICdoZXg2J1xuICAgICAgICAgIGhleDogdmFsdWU/LmEgPCAxID8gJ2hleDgnIDogJ2hleCcsXG4gICAgICAgICAgcmdiOiAncmdiYSdcbiAgICAgICAgfVtmb3JtYXRdIHx8IGZvcm1hdFxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGlueWNvbG9yKHZhbHVlKS50b1N0cmluZyhmb3JtYXQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGhleFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gbnVsbFxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcih0aGlzLnZhbHVlKVxuICAgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBjb2xvclxuICAgICAgICAgICAgICAudG9TdHJpbmcoY29sb3IuZ2V0QWxwaGEoKSA8IDEgPyAnaGV4OCcgOiAnaGV4NicpXG4gICAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgICAudG9VcHBlckNhc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBgZm9ybWF0YCBjbGFzaGVzIHdpdGggVHlwZU1peGluLmZvcm1hdCgpYCwgd2hpY2ggc2hhbGwgYmUgcmVuYW1lZFxuICAgIC8vIHNvb24gdG8gYGZvcm1hdFZhbHVlKClgLiBSZW5hbWUgYGNvbG9yRm9ybWF0YCBiYWNrIHRvIGBmb3JtYXRgIGFmdGVyLlxuICAgIGNvbG9yRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZm9ybWF0Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2hleCdcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0FscGhhYD9cbiAgICBhbHBoYTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FscGhhJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dHNgP1xuICAgIGlucHV0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSksXG5cbiAgICBwcmVzZXRzOiBnZXRTY2hlbWFBY2Nlc3NvcigncHJlc2V0cycsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogW1xuICAgICAgICAnI2ZmZmZmZicsXG4gICAgICAgICcjYzNjM2MzJyxcbiAgICAgICAgJyM3ZjdmN2YnLFxuICAgICAgICAnIzAwMDAwMCcsXG4gICAgICAgICcjODgwMDE1JyxcbiAgICAgICAgJyNlZDFjMjQnLFxuICAgICAgICAnI2ZmN2YyNycsXG4gICAgICAgICcjZmZmMjAwJyxcblxuICAgICAgICAnIzIyYjE0YycsXG4gICAgICAgICcjMDBhMmU4JyxcbiAgICAgICAgJyMzZjQ4Y2MnLFxuICAgICAgICAnI2EzNDlhNCcsXG4gICAgICAgICcjYjk3YTU3JyxcbiAgICAgICAgJyNmZmFlYzknLFxuICAgICAgICAnI2ZmYzkwZScsXG4gICAgICAgICcjMDAwMDAwMDAnXG4gICAgICBdXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGZvY3VzZWQoZm9jdXNlZCkge1xuICAgICAgaWYgKCFmb2N1c2VkICYmIHRoaXMuY29udmVydGVkSGV4VmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29sb3IgPSB0aW55Y29sb3IoYCMke3RoaXMuY29udmVydGVkSGV4VmFsdWV9YClcbiAgICAgICAgaWYgKGNvbG9yPy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gY29sb3IudG9TdHJpbmcodGhpcy5jb2xvckZvcm1hdClcbiAgICAgICAgICAvLyBUT0RPOiBFbWl0ICdpbnB1dCcgaGVyZSBpbnN0ZWFkLCBhbmQgJ2NoYW5nZScgaW4gYmx1ciwgbGlrZSBvdGhlcnMuXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQoXG4gIDppcz1cImNvbXBvbmVudFwiXG4gIHYtYmluZD1cIiRwcm9wc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQoXG4gICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICB2LWJpbmQ9XCIkcHJvcHNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuLy8gVGhpcyBpcyB0aGUgZ2VuZXJhbCBwdXJwb3NlICdjb21wb25lbnQnIHR5cGUsIHdoaWNoIGNhbiByZXNvbHZlIHRvIGFueSBjdXN0b21cbi8vIGNvbXBvbmVudCB0aHJvdWdoIGBzY2hlbWEuY29tcG9uZW50YCwgc2VlIGByZXNvbHZlVHlwZUNvbXBvbmVudCgpYC4gVGhpcyBjYW5cbi8vIGJlIHVzZWQgdG8gbmVzdCBhcmJpdHJhcnkgdnVlIGNvbXBvbmVudHMgaW4gc2NoZW1hOlxuLy8ge1xuLy8gICB0eXBlOiAnY29tcG9uZW50Jyxcbi8vICAgY29tcG9uZW50OiBpbXBvcnQoJy4vY29tcG9uZW50Jylcbi8vIH1cblxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbXBvbmVudCcsIHtcbiAgLy8gT3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGBkZWZhdWx0VmFsdWU6IG51bGxgIHRvIG5vdCBzZXQgYW55IGRhdGEgZm9yIGN1c3RvbVxuICAvLyBjb21wb25lbnRzLCB1bmxlc3MgdGhleSBwcm92aWRlIGEgZGVmYXVsdCB2YWx1ZS5cbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICEoJ2RlZmF1bHQnIGluIHNjaGVtYSlcbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8tIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHRyaWdnZXIgZXZhbHVhdGlvbiBvZiBgdmFsdWVgIHRoYXQgZG9zZSBub3Rcbi8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG5pbnB1dC5kaXRvLXRleHQuZGl0by1pbnB1dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOm5hbWU9XCJuYW1lXCJcbiAgdHlwZT1cInRleHRcIlxuICA6dmFsdWU9XCJ2YWx1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOnJlYWRvbmx5PVwidHJ1ZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuICAvLyAgaW52b2x2ZSBhY3R1YWxseSByZW5kZXJpbmcgaXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCB2aXNpYmxlLlxuICBpbnB1dC5kaXRvLXRleHQuZGl0by1pbnB1dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOm5hbWU9XCJuYW1lXCJcbiAgICB0eXBlPVwidGV4dFwiXG4gICAgOnZhbHVlPVwidmFsdWVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cmVhZG9ubHk9XCJ0cnVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4uL21peGlucy9EYXRhTWl4aW4uanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnY29tcHV0ZWQnLCAnZGF0YScsICdoaWRkZW4nXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZGVmYXVsdFZpc2libGU6IGZhbHNlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgICAgaWYgKHNjaGVtYS5kYXRhIHx8IHNjaGVtYS5kYXRhUGF0aCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgJ3NjaGVtYScsIHtcbiAgICAgICAgICAgIC8vIE1vZGlmeWluZyBgdGhpcy5kYXRhYCBiZWxvdyB0cmlnZ2VycyBhbm90aGVyIGNhbGwgb2YgdGhlIGB2YWx1ZWBcbiAgICAgICAgICAgIC8vIGdldHRlciwgc28gdXNlIGEgdmFsdWUgb2YgMiBmb3IgYHJlc29sdmVDb3VudGVyYCB0byByZXR1cm4gdGhlXG4gICAgICAgICAgICAvLyByZXNvbHZlZCBkYXRhIHR3aWNlLlxuICAgICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDJcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIHRoaXMubmFtZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5nZXQuY2FsbCh0aGlzKVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZGF0ZVxuICBjb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0Q29tcG9uZW50KHR5cGUpXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmxvY2FsZT1cImxvY2FsZVwiXG4gICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgdi1tb2RlbD1cImRhdGVWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWRhdGVcbiAgICBjb21wb25lbnQoXG4gICAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICAgIDpkYXRlRm9ybWF0PVwieyAuLi5hcGkuZm9ybWF0cy5kYXRlLCAuLi5kYXRlRm9ybWF0IH1cIlxuICAgICAgdi1tb2RlbD1cImRhdGVWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnZGF0ZScsICdkYXRldGltZScsICd0aW1lJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGhlcmUgc28gd2UgZ2V0IHBsYWNlaG9sZGVyIGFkZGVkLiBDb21lIHVwIHdpdGggYSBiZXR0ZXJcbiAgLy8gd2F5IHRvIHN1cHBvcnQgYXR0cmlidXRlcyBwZXIgY29tcG9uZW50IChhIGxpc3Qgb2YgYWN0dWFsbHkgc3VwcG9ydGVkXG4gIC8vIGF0dHJpYnV0ZXMpXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkYXRlVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRlRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZGF0ZUZvcm1hdCcsIHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnQodHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZTogJ2RhdGUtcGlja2VyJyxcbiAgICAgICAgdGltZTogJ3RpbWUtcGlja2VyJyxcbiAgICAgICAgZGF0ZXRpbWU6ICdkYXRlLXRpbWUtcGlja2VyJ1xuICAgICAgfVt0eXBlXVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIHJldHVybiBpc0RhdGUodmFsdWUpID8gdmFsdWUudG9JU09TdHJpbmcoKSA6IHZhbHVlXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsIHByb2Nlc3NGb3JtcywgZ2V0TmFtZWRTY2hlbWFzLCBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLCBnZXRGb3JtU2NoZW1hcywgZ2V0Vmlld1NjaGVtYSxcbiAgaGFzTGFiZWxzLCBpc0NvbXBhY3QsIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzTnVtYmVyLCBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1Jlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gICAgcmV0dXJuIGlzTGlzdFNvdXJjZShzY2hlbWEpID8gW10gOiBudWxsXG4gIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cmFwcGVkUHJpbWl0aXZlczogbnVsbCxcbiAgICAgIHVud3JhcHBpbmdQcmltaXRpdmVzOiBmYWxzZSxcbiAgICAgIGlnbm9yZVJvdXRlQ2hhbmdlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAvLyBMaXN0cyB0aGF0IGhhdmUgbm8gZGF0YSBhbmQgbm8gYXNzb2NpYXRlZCByZXNvdXJjZSBzaG91bGQgc3RpbGwgcmVuZGVyLFxuICAgICAgLy8gYXMgdGhleSBtYXkgYmUgZ2V0dGluZyB0aGVpciBkYXRhIGVsc2V3aGVyZSwgZS5nLiBgY29tcHV0ZSgpYC5cbiAgICAgIHJldHVybiB0aGlzLmhhc0RhdGEgfHwgIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzSW5WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3Q29tcG9uZW50XG4gICAgfSxcblxuICAgIHdyYXBQcmltaXRpdmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLndyYXBQcmltaXRpdmVzXG4gICAgfSxcblxuICAgIGxpc3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy52YWx1ZVxuICAgICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gbGlzdCBhcnJheS5cbiAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8gW2RhdGFdIDogW11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIGdldHMgaW5oZXJpdGVkIGZyb20gcGFyZW50LCB1bndyYXBwaW5nIGlzIG5vdCBoYXBwZW5pbmdcbiAgICAgICAgICAvLyBhdCB0aGUgcm9vdCBpbiBgc2V0RGF0YSgpYCwgYnV0IGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICBkYXRhID0gdGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSB8fCBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgZGF0YSB8fD0gW11cbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICBpZiAodGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcykge1xuICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB1bndyYXBwaW5nIG9uY2UgYGxpc3REYXRhYCBpcyByZWV2YWx1YXRlZCwgc28gc2V0XG4gICAgICAgICAgICAvLyB0aGlzIHRvIGBmYWxzZWAgYWdhaW4uIFNlZSBgd3JhcHBlZFByaW1pdGl2ZXNgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YS5tYXAodmFsdWUgPT4gKHtcbiAgICAgICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogdmFsdWVcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkUHJpbWl0aXZlc1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy53cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwID8gZGF0YVswXSA6IG51bGwpXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvYmplY3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBnbyB0aHJvdWdoIGBsaXN0RGF0YWAgaW50ZXJuYWxseSwgd2hpY2ggZG9lcyBhbGwgdGhlXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgb2YgYHdyYXBQcmltaXRpdmVzYCwgZXRjLlxuICAgICAgICByZXR1cm4gdGhpcy5saXN0RGF0YVswXSB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gZGF0YSA/IFtkYXRhXSA6IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIC8vIFRoZSBzb3VyY2VTY2hlbWEgb2YgYSBsaXN0IGlzIHRoZSBsaXN0J3Mgc2NoZW1hIGl0c2VsZi5cbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBUZWxsIHRoZSBgJHJvdXRlYCB3YXRjaGVyIHRvIGlnbm9yZSB0aGUgY2hhbmdlZCB0cmlnZ2VyZWQgaGVyZTpcbiAgICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcXVlcnksIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2ggfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnkgLy8gTGV0IGdldFN0b3JlQWNjZXNzb3IoKSBkbyB0aGUgYWN0dWFsIHNldHRpbmdcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHRvdGFsOiBnZXRTdG9yZUFjY2Vzc29yKCd0b3RhbCcpLFxuXG4gICAgY29sdW1ucygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuY29sdW1ucylcbiAgICB9LFxuXG4gICAgc2NvcGVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5zY29wZXMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRTY29wZSgpIHtcbiAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICAgIGZvciAoY29uc3Qgc2NvcGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnNjb3BlcykpIHtcbiAgICAgICAgICBpZiAoc2NvcGUuZGVmYXVsdFNjb3BlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkpXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGxpbmtlZCB2aWV3IHNjaGVtYSBpZiB0aGlzIHNvdXJjZSBlZGl0cyBpdCBpdHMgaXRlbXMgdGhyb3VnaFxuICAgIC8vIGEgbGlua2VkIHZpZXcuXG4gICAgdmlldygpIHtcbiAgICAgIHJldHVybiBnZXRWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5zb21lKGhhc0xhYmVscylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVkICYmICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSkge1xuICAgICAgICB0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZnJvbS5wYXRoID09PSB0by5wYXRoICYmIGZyb20uaGFzaCA9PT0gdG8uaGFzaCkge1xuICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcihuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICAvLyBTa2lwIHRoZSBpbml0aWFsIHNldHRpbmcgb2Ygd3JhcHBlZFByaW1pdGl2ZXMgYXJyYXlcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIG9sZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gdGhlIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZWAsIHNvIHRoZSBgbGlzdERhdGFgIGNvbXB1dGVkXG4gICAgICAgICAgLy8gcHJvcGVydHkga25vd3MgYWJvdXQgaXQsIHdoaWNoIHNldHMgaXQgdG8gYGZhbHNlYCBhZ2Fpbi5cbiAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZVxuICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnRvdGFsID0gMFxuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBXaGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgd2UgY2FuIHN0b3JlIGl0IHJpZ2h0IGJhY2sgaW4gdGhlIGRhdGEgb2YgdGhlXG4gICAgICAvLyB2aWV3IG9yIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgbGlzdCBjb21wb25lbnQuXG4gICAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIGZvciBsaXN0IGRhdGE6XG4gICAgICAvLyAtIEFycmF5OiBgWy4uLl1gXG4gICAgICAvLyAtIE9iamVjdDogYHsgcmVzdWx0czogWy4uLl0sIHRvdGFsIH1gLCBzZWUgYHVud3JhcExpc3REYXRhKClgXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhIHx8XG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmIGlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgdGhpcy5pc09iamVjdFNvdXJjZSAmJiBpc09iamVjdChkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkpIHtcbiAgICAgICAgLy8gVGhlIGZvcm1hdCBkaWRuJ3QgbWF0Y2gsIHNlZSBpZiB3ZSByZWNlaXZlZCBhIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBgdGhpcy52YWx1ZWAgd2FzIGFscmVhZHkgc2V0IGJ5XG4gICAgICAgIC8vIGB1bndyYXBMaXN0RGF0YSgpYCBhbmQgd2UncmUgZG9uZSBub3cuXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRhdGEpICYmIHRoaXMuaXNJblZpZXcpIHtcbiAgICAgICAgLy8gVGhlIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBkYXRhIGZvciBhIGZ1bGwgbXVsdGktY29tcG9uZW50IHZpZXcsXG4gICAgICAgIC8vIGluY2x1ZGluZyB0aGUgbmVzdGVkIGxpc3QgZGF0YS5cbiAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW53cmFwTGlzdERhdGEoZGF0YSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJlxuICAgICAgICBpc09iamVjdChkYXRhKSAmJlxuICAgICAgICBpc051bWJlcihkYXRhLnRvdGFsKSAmJlxuICAgICAgICBpc0FycmF5KGRhdGEucmVzdWx0cylcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBAZGl0b2pzL3NlcnZlciBzZW5kcyBkYXRhIGluIHRoZSBmb3JtIG9mIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggcmVzdWx0LCBidXQgcmVtZW1iZXIgdGhlIHRvdGFsIGluIHRoZSBzdG9yZS5cbiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWxcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEucmVzdWx0c1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKHNjaGVtYSwgdHlwZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub3BlblNjaGVtYUNvbXBvbmVudCgtMSkpXG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW0oaXRlbSkge1xuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gbnVsbFxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0RGF0YSAmJiBsaXN0RGF0YS5pbmRleE9mKGl0ZW0pXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gaXRlbSAmJiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgaXRlbSwge1xuICAgICAgICBpbmRleCxcbiAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IG5vdGlmeSA9ICgpID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogdGhpcy5pc1RyYW5zaWVudCA/ICdpbmZvJyA6ICdzdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgJHtsYWJlbH0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gLFxuICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICBdXG4gICAgICB9KVxuXG4gICAgICBpZiAoaXRlbSAmJiB3aW5kb3cuY29uZmlybShcbiAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMuZGVsZXRlfSAke2xhYmVsfT9gKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSlcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5tYXRjaChwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgdGhlcmUsIHNvIGp1c3QgY2FsbCBgb25Db21wbGV0ZSgpYDpcbiAgICAgICAgICAgICAgY2FsbE9uQ29tcGxldGUoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjb21wb25lbnQncyBwYXRoLCB0aGVuIGNhbGwgYG9uQ29tcGxldGUoKWBfOlxuICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaChcbiAgICAgICAgICAgICAgICB7IHBhdGggfSxcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlamVjdFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgLy8gZW5kIG9mIGBtZXRob2RzYFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gICAgY29uc3QgaW5saW5lZCA9IGlzSW5saW5lZChzY2hlbWEpXG4gICAgaWYgKGlubGluZWQgJiYgc2NoZW1hLnJlc291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdMaXN0cyB3aXRoIG5lc3RlZCBmb3JtcyBjYW5ub3QgbG9hZCBkYXRhIGZyb20gdGhlaXIgb3duIHJlc291cmNlcydcbiAgICAgIClcbiAgICB9XG4gICAgLy8gVXNlIGRpZmZlcmVudGx5IG5hbWVkIHVybCBwYXJhbWV0ZXJzIG9uIGVhY2ggbmVzdGVkIGxldmVsIGZvciBpZCBhc1xuICAgIC8vIG90aGVyd2lzZSB0aGV5IHdvdWxkIGNsYXNoIGFuZCBvdmVycmlkZSBlYWNoIG90aGVyIGluc2lkZSAkcm91dGUucGFyYW1zXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgIGNvbnN0IHBhcmFtID0gYGlkJHtsZXZlbCArIDF9YFxuICAgIGNvbnN0IG1ldGEgPSB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gICAgY29uc3QgZm9ybU1ldGEgPSB7XG4gICAgICAuLi5tZXRhLFxuICAgICAgLy8gV2hlbiBjaGlsZHJlbiBhcmUgZmxhdHRlbmVkIChlLmcuIHRyZWUtbGlzdHMpLCBpbmNsdWRlIHRoZSBgZmxhdHRlbmBcbiAgICAgIC8vIHNldHRpbmcgYWxzbywgZm9yIGZsYXR0ZW5pbmcgYmVsb3cuXG4gICAgICBmbGF0dGVuLFxuICAgICAgbmVzdGVkLFxuICAgICAgcGFyYW1cbiAgICB9XG4gICAgY29uc3QgY2hpbGRSb3V0ZXMgPSBhd2FpdCBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKVxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICBhd2FpdCBwcm9jZXNzKGNoaWxkUm91dGVzLCBsZXZlbCArIDEpXG4gICAgfVxuICAgIC8vIElubGluZWQgZm9ybXMgZG9uJ3QgbmVlZCB0byBhY3R1YWxseSBhZGQgcm91dGVzLlxuICAgIGlmIChoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgIWlubGluZWQpIHtcbiAgICAgIGNvbnN0IGdldFBhdGhXaXRoUGFyYW0gPSAocGF0aCwgcGFyYW0pID0+IHBhcmFtXG4gICAgICAgID8gcGF0aFxuICAgICAgICAgID8gYCR7cGF0aH0vOiR7cGFyYW19YFxuICAgICAgICAgIDogYDoke3BhcmFtfWBcbiAgICAgICAgOiBwYXRoXG5cbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICAvLyBPYmplY3Qgc291cmNlcyBkb24ndCBuZWVkIGlkIHBhcmFtcyBpbiB0aGVpciBmb3JtIHBhdGhzLCBhcyB0aGV5XG4gICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBpc0xpc3RTb3VyY2Uoc2NoZW1hKSAmJiBwYXJhbSksXG4gICAgICAgIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQoXG4gICAgICAgICAgbmVzdGVkID8gJ2RpdG8tZm9ybS1uZXN0ZWQnIDogJ2RpdG8tZm9ybSdcbiAgICAgICAgKSxcbiAgICAgICAgbWV0YTogZm9ybU1ldGFcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdFNvdXJjZShzY2hlbWEpKSB7XG4gICAgICAgIC8vIEFsc28gYWRkIGEgcGFyYW0gcm91dGUsIHNpbXBseSB0byBoYW5kbGUgJy9jcmVhdGUnIGxpbmtzIHRoZSBzYW1lXG4gICAgICAgIC8vIHdheSB0aGF0IGxpc3RzIGRvLCB3aGVyZSBpdCBvdmVybGFwcyB3aXRoIDppZCBmb3IgaXRlbSBpZHMuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAuLi5mb3JtUm91dGUsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBwYXJhbSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2VQYXRoKSB7XG4gICAgICAgIC8vIEp1c3QgcmVkaXJlY3QgYmFjayB0byB0aGUgcGFyZW50IHdoZW4gYSBuZXN0ZWQgc291cmNlIHJvdXRlIGlzIGhpdC5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IHNvdXJjZVBhdGgsXG4gICAgICAgICAgcmVkaXJlY3Q6ICcuJyxcbiAgICAgICAgICBtZXRhXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAvLyBQYXJ0aXRpb24gY2hpbGRSb3V0ZXMgaW50byB0aG9zZSB0aGF0IG5lZWQgZmxhdHRlbmluZyAoZS5nLiB0cmVlLWxpc3RzKVxuICAgICAgLy8gYW5kIHRob3NlIHRoYXQgZG9uJ3QsIGFuZCBwcm9jZXNzIGVhY2ggZ3JvdXAgc2VwYXJhdGVseSBhZnRlci5cbiAgICAgIGNvbnN0IFtmbGF0Um91dGVzLCBzdWJSb3V0ZXNdID0gY2hpbGRSb3V0ZXMucmVkdWNlKFxuICAgICAgICAocmVzLCByb3V0ZSkgPT4ge1xuICAgICAgICAgIHJlc1tyb3V0ZS5tZXRhLmZsYXR0ZW4gPyAwIDogMV0ucHVzaChyb3V0ZSlcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0sXG4gICAgICAgIFtbXSwgW11dXG4gICAgICApXG4gICAgICBpZiAoc3ViUm91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3JtUm91dGUuY2hpbGRyZW4gPSBzdWJSb3V0ZXNcbiAgICAgIH1cbiAgICAgIHJvdXRlcy5wdXNoKGZvcm1Sb3V0ZSlcbiAgICAgIC8vIEFkZCB0aGUgcHJlZml4ZWQgZm9ybVJvdXRlcyB3aXRoIHRoZWlyIGNoaWxkcmVuIGZvciBuZXN0ZWQgbGlzdHMuXG4gICAgICBpZiAoZmxhdFJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZFJvdXRlIG9mIGZsYXRSb3V0ZXMpIHtcbiAgICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgICAuLi4oY2hpbGRSb3V0ZS5yZWRpcmVjdCA/IGNoaWxkUm91dGUgOiBmb3JtUm91dGUpLFxuICAgICAgICAgICAgcGF0aDogYCR7Zm9ybVJvdXRlLnBhdGh9LyR7Y2hpbGRSb3V0ZS5wYXRofWAsXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgIC4uLmNoaWxkUm91dGUubWV0YSxcbiAgICAgICAgICAgICAgZmxhdHRlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGdyYXBoLmFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJDb21wb25lbnRzID0ge1xuICB0ZXh0KGZpbHRlcikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY29udGFpbnMnLFxuICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlcXVhbHMnLFxuICAgICAgICB2YWx1ZTogJ2VxdWFscydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ3N0YXJ0cy13aXRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlbmRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ2VuZHMtd2l0aCdcbiAgICAgIH1cbiAgICBdXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3JzXG4gICAgICAgID8ge1xuICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgIG9wdGlvbnM6XG4gICAgICAgICAgICBpc0FycmF5KGZpbHRlci5vcGVyYXRvcnMpXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgb3B0aW9uID0+IGZpbHRlci5vcGVyYXRvcnMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogb3B0aW9ucyxcbiAgICAgICAgICB3aWR0aDogJzQwJSdcbiAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICB0ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgd2lkdGg6IGZpbHRlci5vcGVyYXRvcnMgPyAnNjAlJyA6ICdmaWxsJ1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAnZGF0ZS1yYW5nZScoKSB7XG4gICAgLy8gVXNlIHNob3J0ZXIgZGF0ZSBmb3JtYXQgaW4gZGF0ZS1yYW5nZSBmaWx0ZXJzOlxuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSB7XG4gICAgICBkYXk6ICcyLWRpZ2l0JyxcbiAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb206IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9LFxuICAgICAgdG86IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICc1MCUnLFxuICAgICAgICBkYXRlRm9ybWF0XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWx0ZXJzUGFuZWwoZmlsdGVycywgZGF0YVBhdGgsIHByb3h5KSB7XG4gIGNvbnN0IHBhbmVsID0ge1xuICAgIGxhYmVsOiAnRmlsdGVycycsXG4gICAgbmFtZTogJyRmaWx0ZXJzJyxcbiAgICB0YXJnZXQ6IGRhdGFQYXRoLFxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIC8vIE5PVEU6IE9uIHBhbmVscywgdGhlIGRhdGEoKSBjYWxsYmFjayBkb2VzIHNvbWV0aGluZyBlbHNlIHRoYW4gb24gbm9ybWFsXG4gICAgLy8gc2NoZW1hOiBJdCBwcm9kdWNlcyB0aGUgYGRhdGFgIHByb3BlcnR5IHRvIGJlIHBhc3NlZCB0byB0aGUgcGFuZWwnc1xuICAgIC8vIHNjaGVtYSwgbm90IHRoZSBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBwYW5lbCBjb21wb25lbnQgZGlyZWN0bHkuXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiBwYXJzZUZpbHRlcnNEYXRhKFxuICAgICAgICBwYW5lbCxcbiAgICAgICAgcHJveHkucXVlcnlcbiAgICAgIClcbiAgICB9LFxuICAgIGNvbXBvbmVudHM6IGdldEZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpLFxuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGNsZWFyOiB7XG4gICAgICAgIHRleHQ6ICdDbGVhcicsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5yZXNldERhdGEoKVxuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBmaWx0ZXI6IHtcbiAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgIHRleHQ6ICdGaWx0ZXInLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFwcGx5RmlsdGVycygpIHtcbiAgICAgICAgcHJveHkucXVlcnkgPSB7XG4gICAgICAgICAgLi4ucHJveHkucXVlcnksXG4gICAgICAgICAgZmlsdGVyOiBmb3JtYXRGaWx0ZXJzRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKSxcbiAgICAgICAgICAvLyBDbGVhciBwYWdpbmF0aW9uIHdoZW4gYXBwbHlpbmcgb3IgY2xlYXJpbmcgZmlsdGVyczpcbiAgICAgICAgICBwYWdlOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxcbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycykge1xuICBjb25zdCBjb21wcyA9IHt9XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIE9iamVjdC52YWx1ZXMoZmlsdGVycyB8fCB7fSkpIHtcbiAgICAvLyBTdXBwb3J0IGJvdGggY3VzdG9tIGZvcm1zIGFuZCBkZWZhdWx0IGZpbHRlciBjb21wb25lbnRzLCB0aHJvdWdoIHRoZVxuICAgIC8vIGBmaWx0ZXJDb21wb25lbnRzYCByZWdpc3RyeS4gRXZlbiBmb3IgZGVmYXVsdCBmaWx0ZXJzLCBzdGlsbCB1c2UgdGhlXG4gICAgLy8gcHJvcGVydGllcyBpbiBgZmlsdGVyYCBhcyB0aGUgYmFzZSBmb3IgYGZvcm1gLCBzbyB0aGluZ3MgbGlrZSBgbGFiZWxgXG4gICAgLy8gY2FuIGJlIGNoYW5nZWQgb24gdGhlIHJlc3VsdGluZyBmb3JtLlxuICAgIGNvbnN0IHsgZmlsdGVyOiB0eXBlLCAuLi5mb3JtIH0gPSBmaWx0ZXJcbiAgICBjb25zdCBjb21wb25lbnRzID0gdHlwZVxuICAgICAgPyBmaWx0ZXJDb21wb25lbnRzW3R5cGVdPy4oZmlsdGVyKVxuICAgICAgOiBmaWx0ZXIuY29tcG9uZW50c1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3JtLmNvbXBvbmVudHMgPSB7fVxuICAgICAgLy8gQ29udmVydCBsYWJlbHMgdG8gcGxhY2Vob2xkZXJzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IGNvbXBvbmVudC5sYWJlbCB8fCBsYWJlbGl6ZShjb21wb25lbnQubmFtZSB8fCBrZXkpXG4gICAgICAgICAgZm9ybS5jb21wb25lbnRzW2tleV0gPSB7XG4gICAgICAgICAgICAuLi5jb21wb25lbnQsXG4gICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogbGFiZWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbXBzW2ZpbHRlci5uYW1lXSA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm0ubGFiZWwsXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgICBmb3JtLFxuICAgICAgICBpbmxpbmVkOiB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZmlsdGVyICcke2ZpbHRlci5uYW1lfSc6IFVua25vd24gZmlsdGVyIHR5cGUgJyR7dHlwZX0nLmBcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbXBzXG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzW25hbWVdXG4gIHJldHVybiBjb21wb25lbnQ/LmZvcm0/LmNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyc0RhdGEoc2NoZW1hLCBkYXRhKSB7XG4gIGNvbnN0IGZpbHRlcnMgPSBbXVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVudHJ5ID0gZGF0YVtuYW1lXVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgLy8gTWFwIGNvbXBvbmVudHMgc2VxdWVuY2UgdG8gYXJndW1lbnRzOlxuICAgICAgY29uc3QgYXJncyA9IE9iamVjdC5rZXlzKGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSkubWFwKFxuICAgICAgICBrZXkgPT4gZW50cnlba2V5XSA/PyBudWxsXG4gICAgICApXG4gICAgICAvLyBPbmx5IGFwcGx5IGZpbHRlciBpZiB0aGVyZSBhcmUgc29tZSBhcmd1bWVudHMgdGhhdCBhcmVuJ3QgbnVsbDpcbiAgICAgIGlmIChhcmdzLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaChgJHtuYW1lfToke2FyZ3MubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsJyl9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcnMubGVuZ3RoID8gZmlsdGVycyA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnNEYXRhKHNjaGVtYSwgcXVlcnkpIHtcbiAgY29uc3QgZmlsdGVycyA9IHt9XG4gIC8vIFNhbWUgYXMgQGRpdG9qcy9zZXJ2ZXIncyBRdWVyeVBhcmFtZXRlcnMuZmlsdGVyOiBUcmFuc2xhdGUgdGhlIHN0cmluZyBkYXRhXG4gIC8vIGZyb20gJHJvdXRlLnF1ZXJ5IGJhY2sgdG8gcGFyYW0gbGlzdHMgcGVyIGZpbHRlcjpcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgYXNBcnJheShxdWVyeS5maWx0ZXIpKSB7XG4gICAgICBjb25zdCBbLCBuYW1lLCBqc29uXSA9IGZpbHRlci5tYXRjaCgvXihcXHcrKTooLiopJC8pXG4gICAgICB0cnkge1xuICAgICAgICBmaWx0ZXJzW25hbWVdID0gYXNBcnJheShKU09OLnBhcnNlKGBbJHtqc29ufV1gKSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGZpbHRlcnNEYXRhID0ge31cbiAgZm9yIChjb25zdCBuYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tuYW1lXVxuICAgIGlmIChhcmdzKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpXG4gICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBhcmdzW2luZGV4KytdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlsdGVyc0RhdGFbbmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCJcbi5kaXRvLWxpc3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1uYXZpZ2F0aW9uXG4gICAgZGl0by1zY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAvLyBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgLy8gZGl2LCBmb3IgdGhlIGxheW91dCBub3QgdG8gYnJlYWsuLi5cbiAgICAuZGl0by1zcGFjZXIoXG4gICAgICB2LWVsc2UtaWY9XCJwYWdpbmF0ZVwiXG4gICAgKVxuICAgIGRpdG8tcGFnaW5hdGlvbihcbiAgICAgIHYtaWY9XCJwYWdpbmF0ZVwiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICA6dG90YWw9XCJ0b3RhbCB8fCAwXCJcbiAgICApXG4gIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtYWx0ZXJuYXRlLWNvbG9ycyc6ICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgfWBcbiAgKVxuICAgIGRpdG8tdGFibGUtaGVhZChcbiAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCJpdGVtLCBpbmRleCBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4IH0pXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICB2LWlmPVwiaGFzQ2VsbEVkaXRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgIClcbiAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIHRmb290KFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIClcbiAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWxpc3QoXG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICAgIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4gIClcbiAgICAuZGl0by1uYXZpZ2F0aW9uXG4gICAgICBkaXRvLXNjb3BlcyhcbiAgICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgICApXG4gICAgICAvLyBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgICAgLmRpdG8tc3BhY2VyKFxuICAgICAgICB2LWVsc2UtaWY9XCJwYWdpbmF0ZVwiXG4gICAgICApXG4gICAgICBkaXRvLXBhZ2luYXRpb24oXG4gICAgICAgIHYtaWY9XCJwYWdpbmF0ZVwiXG4gICAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgICA6dG90YWw9XCJ0b3RhbCB8fCAwXCJcbiAgICAgIClcbiAgICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgICAgOmNsYXNzPWB7XG4gICAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtYWx0ZXJuYXRlLWNvbG9ycyc6ICFpc0lubGluZWQsXG4gICAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICAgIH1gXG4gICAgKVxuICAgICAgZGl0by10YWJsZS1oZWFkKFxuICAgICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgICAgOmhhc0VkaXRCdXR0b25zPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgICAgKVxuICAgICAgdnVlLWRyYWdnYWJsZShcbiAgICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3REYXRhLCBwYWdpbmF0aW9uUmFuZ2UpXCJcbiAgICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCJpdGVtLCBpbmRleCBpbiBsaXN0RGF0YVwiXG4gICAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoc2NoZW1hLCBpdGVtKVwiXG4gICAgICAgICAgOmlkPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJjb2x1bW5zXCIpXG4gICAgICAgICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6a2V5PVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDpjZWxsPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgICB0ZFxuICAgICAgICAgICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29tcG9uZW50KFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4IH0pXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICB2LWlmPVwiaGFzQ2VsbEVkaXRCdXR0b25zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgICAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIGluc2lkZSB0YWJsZSB3aGVuIG5vdCBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICAgIHRmb290KFxuICAgICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgICApXG4gICAgICAgIHRyXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIDpjb2xzcGFuPVwibnVtQ29sdW1uc1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgKVxuICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmIHNpbmdsZVwiXG4gICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWxpc3RcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1uYXZpZ2F0aW9uXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAgIHBhZGRpbmctYm90dG9tOiAkY29udGVudC1wYWRkaW5nLWhhbGZcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgJjplbXB0eVxuICAgICAgICBkaXNwbGF5OiBub25lXG4gICAgICAuZGl0by1zY29wZXMsXG4gICAgICAuZGl0by1wYWdpbmF0aW9uXG4gICAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgICAgZmxleDogMCAxIGF1dG9cbiAgICAgICAgbWluLXdpZHRoOiAwXG4gICAgJi5kaXRvLXNpbmdsZVxuICAgICAgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgICAgZGlzcGxheTogZ3JpZFxuICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudFxuICAgICAgaGVpZ2h0OiAxMDAlXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgZ2V0Vmlld0VkaXRQYXRoIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0RmlsdGVyc1BhbmVsIH0gZnJvbSAnLi4vdXRpbHMvZmlsdGVyLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgcGlja0J5LCBlcXVhbHMsIGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsaXN0Jywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtTb3VyY2VNaXhpbiwgT3JkZXJlZE1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgZ2V0UGFuZWxTY2hlbWEoc2NoZW1hLCBkYXRhUGF0aCwgc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSBzY2hlbWFcbiAgICAvLyBTZWUgaWYgdGhpcyBsaXN0IGNvbXBvbmVudCB3YW50cyB0byBkaXNwbGF5IGEgZmlsdGVyIHBhbmVsLCBhbmQgaWYgc28sXG4gICAgLy8gY3JlYXRlIHRoZSBwYW5lbCBzY2hlbWEgZm9yIGl0IHRocm91Z2ggYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgLy8gQXQgdGhlIHRpbWUgb2YgdGhlIGNyZWF0aW9uIG9mIHRoZSBwYW5lbCBzY2hlbWEsIHRoZSBzY2hlbWFDb21wb25lbnQgaXNcbiAgICAgIC8vIG5vdCBmaWxsZWQgeWV0LCBzbyB3ZSBjYW4ndCBnZXQgdGhlIHRhcmdldCBjb21wb25lbnQgKGRhdGFQYXRoKSByaWdodFxuICAgICAgLy8gYXdheS4gVXNlIGEgcHJveHkgYW5kIGEgZ2V0dGVyIGluc3RlYWQsIHRvIGdldCBhcm91bmQgdGhpczpcbiAgICAgIGNvbnN0IGdldExpc3RDb21wb25lbnQgPSAoKSA9PiBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIGNvbXBvbmVudCA9PiBjb21wb25lbnQudHlwZSA9PT0gJ2xpc3QnXG4gICAgICApXG5cbiAgICAgIHJldHVybiBnZXRGaWx0ZXJzUGFuZWwoXG4gICAgICAgIGdldE5hbWVkU2NoZW1hcyhmaWx0ZXJzKSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHsgLy8gQ3JlYXRlIGEgc2ltcGxlIHByb3h5IHRvIGdldCAvIHNldCB0aGUgcXVlcnksIHNlZSBnZXRGaWx0ZXJzUGFuZWwoKVxuICAgICAgICAgIGdldCBxdWVyeSgpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRMaXN0Q29tcG9uZW50KCk/LnF1ZXJ5XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXQgcXVlcnkocXVlcnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGdldExpc3RDb21wb25lbnQoKVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHVuZGVmaW5lZCB2YWx1ZXMgZm9yIGNvbXBhcmluZyB3aXRoIGVxdWFscygpXG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG9iaiA9PiBwaWNrQnkob2JqLCB2YWx1ZSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICBpZiAoIWVxdWFscyhmaWx0ZXIocXVlcnkpLCBmaWx0ZXIoY29tcG9uZW50LnF1ZXJ5KSkpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc0xpc3RCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICEhKFxuICAgICAgICB0aGlzLmJ1dHRvblNjaGVtYXMgfHxcbiAgICAgICAgdGhpcy5jcmVhdGFibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbGlzdERhdGEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIHRoaXMuZWRpdGFibGUgfHxcbiAgICAgICAgdGhpcy5kZWxldGFibGUgfHxcbiAgICAgICAgdGhpcy5kcmFnZ2FibGVcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2VsbEVkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzSW5saW5lZCAmJiB0aGlzLmhhc0VkaXRCdXR0b25zXG4gICAgfSxcblxuICAgIGhhc0V2ZW5Db3VudCgpIHtcbiAgICAgIHJldHVybiAhKHRoaXMubGlzdERhdGEubGVuZ3RoICUgMilcbiAgICB9LFxuXG4gICAgbnVtQ29sdW1ucygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmNvbHVtbnMgPyBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmxlbmd0aCA6IDEpICtcbiAgICAgICAgKHRoaXMuaGFzQ2VsbEVkaXRCdXR0b25zID8gMSA6IDApXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREYXRhUGF0aChpbmRleCkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgIH0sXG5cbiAgICBnZXRFZGl0UGF0aChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSB8fCB0aGlzLnBhdGhcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgIHJldHVybiBgJHtwYXRofS8ke2lkfWBcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGdldENlbGxDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jZWxsLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldENvbnRleHQoaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRhdGFQYXRoOiB0aGlzLmdldERhdGFQYXRoKGluZGV4KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25GaWx0ZXJFcnJvcnMoZXJyb3JzKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCAnJGZpbHRlcnMnKVxuICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRQYW5lbEJ5RGF0YVBhdGgoZmlsdGVyc0RhdGFQYXRoKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1sYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudCg6bGFiZWw9XCJ2YWx1ZVwiIDpkYXRhUGF0aD1cImRhdGFQYXRoXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWxhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KDpsYWJlbD1cInZhbHVlXCIgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1sYWJlbC1jb21wb25lbnRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgaGVpZ2h0OiAyZW1cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGFiZWwnLCB7XG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tbWFya3VwKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIGVkaXRvci1tZW51LWJhci5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgIClcbiAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiLFxuICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICApXG4gICAgICAgICAgaWNvbig6bmFtZT1cImljb25cIilcbiAgZWRpdG9yLWNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgIHJlZj1cImVkaXRvclwiXG4gICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKVxuICAuZGl0by1yZXNpemUoXG4gICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tYXJrdXAoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICApXG4gICAgZWRpdG9yLW1lbnUtYmFyLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCIsXG4gICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBpY29uKDpuYW1lPVwiaWNvblwiKVxuICAgIGVkaXRvci1jb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICAgIHJlZj1cImVkaXRvclwiXG4gICAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gICAgKVxuICAgIC5kaXRvLXJlc2l6ZShcbiAgICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgICAgQG1vdXNlZG93bi5zdG9wLnByZXZlbnQ9XCJvbkRyYWdSZXNpemVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1tYXJrdXBcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgLmRpdG8tcmVzaXplXG4gICAgICBAZXh0ZW5kICVpY29uLXJlc2l6ZVxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICB0b3A6IHVuc2V0XG4gICAgICBsZWZ0OiB1bnNldFxuICAgICAgcmlnaHQ6IDBcbiAgICAgIGJvdHRvbTogMFxuICAgICAgd2lkdGg6IDFlbVxuICAgICAgaGVpZ2h0OiAxZW1cblxuICAgIC5Qcm9zZU1pcnJvclxuICAgICAgaGVpZ2h0OiAxMDAlXG4gICAgICBvdXRsaW5lOiBub25lXG5cbiAgICAuZGl0by1tYXJrdXAtZWRpdG9yXG4gICAgICBvdmVyZmxvdy15OiBzY3JvbGxcbiAgICAgIC8vIE1vdmUgcGFkZGluZyBcImluc2lkZVwiIGVkaXRvciB0byBjb3JyZWN0bHkgcG9zaXRpb24gc2Nyb2xsYmFyXG4gICAgICBtYXJnaW4tcmlnaHQ6IC0kaW5wdXQtcGFkZGluZy1ob3JcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICRpbnB1dC1wYWRkaW5nLWhvclxuXG4gICAgLmRpdG8tYnV0dG9ucy10b29sYmFyXG4gICAgICBtYXJnaW46ICRpbnB1dC1wYWRkaW5nLXZlciAwXG5cbiAgICBoMSxcbiAgICBoMixcbiAgICBoMyxcbiAgICBwLFxuICAgIHVsLFxuICAgIG9sLFxuICAgIHByZSxcbiAgICBibG9ja3F1b3RlXG4gICAgICBtYXJnaW46IDFyZW0gMFxuICAgICAgJjpmaXJzdC1jaGlsZFxuICAgICAgICBtYXJnaW4tdG9wOiAwXG4gICAgICAmOmxhc3QtY2hpbGRcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMFxuICAgIGgxLFxuICAgIGgyLFxuICAgIGgzXG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgIGgxXG4gICAgICBmb250LXNpemU6IDEuNHJlbVxuICAgIGgyXG4gICAgICBmb250LXNpemU6IDEuMnJlbVxuICAgIHVsXG4gICAgICBsaXN0LXN0eWxlOiBkaXNjXG4gICAgY29kZVxuICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vXG4gICAgcHJlXG4gICAgICBwYWRkaW5nOiAwLjdyZW0gMXJlbVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXJcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgIG92ZXJmbG93LXg6IGF1dG9cbiAgICAgIGNvZGVcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICBwIGNvZGVcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgcGFkZGluZzogMCAwLjNyZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlclxuICAgIGFcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lXG4gICAgICBjdXJzb3I6IGRlZmF1bHRcbiAgICAgIGNvbG9yOiBibHVlXG4gICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZVxuICAgIHVsLFxuICAgIG9sXG4gICAgICBwYWRkaW5nLWxlZnQ6IDJyZW1cbiAgICBsaVxuICAgICAgJiA+IHAsXG4gICAgICAmID4gb2wsXG4gICAgICAmID4gdWxcbiAgICAgICAgbWFyZ2luOiAwXG4gICAgYmxvY2txdW90ZVxuICAgICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCAkY29sb3ItbGlnaHRlclxuICAgICAgcGFkZGluZy1sZWZ0OiAxcmVtXG4gICAgICBmb250LXN0eWxlOiBpdGFsaWNcbiAgICAgIHBcbiAgICAgICAgbWFyZ2luOiAwXG5cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBFZGl0b3IsIEVkaXRvckNvbnRlbnQsIEVkaXRvck1lbnVCYXIsIE1hcmsgfSBmcm9tICd0aXB0YXAnXG5pbXBvcnQgeyB0b2dnbGVNYXJrIH0gZnJvbSAndGlwdGFwLWNvbW1hbmRzJ1xuaW1wb3J0IHtcbiAgLy8gTWFya3M6XG4gIEJvbGQsIENvZGUsIEl0YWxpYywgTGluaywgU3RyaWtlLCBVbmRlcmxpbmUsXG4gIC8vIE5vZGVzOlxuICBCbG9ja3F1b3RlLCBDb2RlQmxvY2ssIEhhcmRCcmVhaywgSGVhZGluZywgSG9yaXpvbnRhbFJ1bGUsXG4gIE9yZGVyZWRMaXN0LCBCdWxsZXRMaXN0LCBMaXN0SXRlbSxcbiAgLy8gVE9ETzpcbiAgLy8gLSBJbWFnZSwgTWVudGlvbiwgQ29kZUJsb2NrSGlnaGxpZ2h0XG4gIC8vIC0gVGFibGUsIFRhYmxlQ2VsbCwgVGFibGVIZWFkZXIsIFRhYmxlTm9kZXMsIFRhYmxlUm93LFxuICAvLyAtIFRvZG9JdGVtLCBUb2RvTGlzdFxuICAvLyBUb29sczpcbiAgSGlzdG9yeVxufSBmcm9tICd0aXB0YXAtZXh0ZW5zaW9ucydcbmltcG9ydCB7IEljb24gfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IHtcbiAgaXNBcnJheSwgaXNPYmplY3QsIHVuZGVyc2NvcmUsIGh5cGhlbmF0ZSwgZGVib3VuY2Vcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ21hcmt1cCcsIHtcbiAgY29tcG9uZW50czoge1xuICAgIEVkaXRvckNvbnRlbnQsXG4gICAgRWRpdG9yTWVudUJhcixcbiAgICBJY29uXG4gIH0sXG5cbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVkaXRvcjogbnVsbCxcbiAgICAgIGhlaWdodDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDEwXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgfHwgYGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWFya0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdtYXJrcycsIHtcbiAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgaXRhbGljOiB0cnVlLFxuICAgICAgICB1bmRlcmxpbmU6IHRydWUsXG4gICAgICAgIHN0cmlrZTogdHJ1ZSxcbiAgICAgICAgc21hbGw6IHRydWUsXG4gICAgICAgIGNvZGU6IHRydWUsXG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICBvbkNsaWNrOiBjb21tYW5kID0+IHRoaXMub25DbGlja0xpbmsoY29tbWFuZClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYmFzaWNOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBwYXJhZ3JhcGg6IHtcbiAgICAgICAgLy8gRG8gbm90IHNob3cgdGhlIHBhcmFncmFwaCBjb21tYW5kIGFzIGFjdGl2ZSBpZiBhbnkgb2YgdGhlIGJsb2NrXG4gICAgICAgIC8vIGNvbW1hbmRzIGFyZSBhbHNvIGFjdGl2ZTpcbiAgICAgICAgICBpZ25vcmVBY3RpdmU6ICgpID0+XG4gICAgICAgICAgICB0aGlzLm90aGVyTm9kZUJ1dHRvbnMuc29tZShidXR0b24gPT4gYnV0dG9uLmlzQWN0aXZlKVxuICAgICAgICB9LFxuICAgICAgICBoZWFkaW5nOiB7XG4gICAgICAgICAgYXR0cjogJ2xldmVsJyxcbiAgICAgICAgICB2YWx1ZXM6IFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvdGhlck5vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIGJ1bGxldExpc3Q6IHRydWUsXG4gICAgICAgIG9yZGVyZWRMaXN0OiB0cnVlLFxuICAgICAgICBibG9ja3F1b3RlOiB0cnVlLFxuICAgICAgICBjb2RlQmxvY2s6IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHRvb2xCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygndG9vbHMnLCB7XG4gICAgICAgIHVuZG86IHRydWUsXG4gICAgICAgIHJlZG86IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdyb3VwZWRCdXR0b25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrQnV0dG9ucyxcbiAgICAgICAgYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgb3RoZXJOb2RlQnV0dG9ucyxcbiAgICAgICAgdG9vbEJ1dHRvbnNcbiAgICAgIH0gPSB0aGlzXG4gICAgICByZXR1cm4gW1xuICAgICAgICBtYXJrQnV0dG9ucyxcbiAgICAgICAgYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgb3RoZXJOb2RlQnV0dG9ucyxcbiAgICAgICAgdG9vbEJ1dHRvbnNcbiAgICAgIF0uZmlsdGVyKGJ1dHRvbnMgPT4gYnV0dG9ucy5sZW5ndGggPiAwKVxuICAgIH0sXG5cbiAgICBwYXJzZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6IHtcbiAgICAgICAgICAnY29sbGFwc2UnOiBmYWxzZSxcbiAgICAgICAgICAncHJlc2VydmUnOiB0cnVlLFxuICAgICAgICAgICdwcmVzZXJ2ZS1hbGwnOiAnZnVsbCdcbiAgICAgICAgfVt0aGlzLndoaXRlc3BhY2VdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVkaXRvck9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlZGl0YWJsZTogIXRoaXMucmVhZHlvbmx5LFxuICAgICAgICBhdXRvRm9jdXM6IHRoaXMuYXV0b2ZvY3VzLFxuICAgICAgICBkaXNhYmxlSW5wdXRSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMuaW5wdXQsXG4gICAgICAgIGRpc2FibGVQYXN0ZVJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5wYXN0ZSxcbiAgICAgICAgcGFyc2VPcHRpb25zOiB0aGlzLnBhcnNlT3B0aW9uc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHdoaXRlc3BhY2U6IGdldFNjaGVtYUFjY2Vzc29yKCd3aGl0ZXNwYWNlJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2NvbGxhcHNlJ1xuICAgICAgLy8gUG9zc2libGUgdmFsdWVzIGFyZTogJ2NvbGxhcHNlJywgJ3ByZXNlcnZlJywgJ3ByZXNlcnZlLWFsbCdcbiAgICB9KSxcblxuICAgIGVuYWJsZVJ1bGVzOiBnZXRTY2hlbWFBY2Nlc3NvcignZW5hYmxlUnVsZXMnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVuYWJsZVJ1bGVzKSB7XG4gICAgICAgIHJldHVybiBpc09iamVjdChlbmFibGVSdWxlcylcbiAgICAgICAgICA/IGVuYWJsZVJ1bGVzXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICBpbnB1dDogISFlbmFibGVSdWxlcyxcbiAgICAgICAgICAgIHBhc3RlOiAhIWVuYWJsZVJ1bGVzXG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICByZWFkeW9ubHk6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBhdXRvZm9jdXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBlbmFibGVSdWxlczogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWVEZWJvdW5jZWQgPSBkZWJvdW5jZShnZXRWYWx1ZSA9PiB7XG4gICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgIHRoaXMudmFsdWUgPSBnZXRWYWx1ZSgpXG4gICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH0sIDEwMClcblxuICAgIGNvbnN0IG9uVXBkYXRlID0gKHsgZ2V0SFRNTCB9KSA9PiB7XG4gICAgICBzZXRWYWx1ZURlYm91bmNlZChnZXRIVE1MKVxuICAgICAgdGhpcy5vbklucHV0KClcbiAgICB9XG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Q29udGVudCh2YWx1ZSwgZmFsc2UsIHRoaXMucGFyc2VPcHRpb25zKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3Ioe1xuICAgICAgLi4udGhpcy5lZGl0b3JPcHRpb25zLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgZXh0ZW5zaW9uczogdGhpcy5jcmVhdGVFeHRlbnNpb25zKCksXG4gICAgICBjb250ZW50OiB0aGlzLnZhbHVlIHx8ICcnXG4gICAgfSlcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkRyYWdSZXNpemUoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGdldFBvaW50ID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSB9KSA9PiAoeyB4LCB5IH0pXG5cbiAgICAgIGxldCBwcmV2WSA9IGdldFBvaW50KGV2ZW50KS55XG4gICAgICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMuJHJlZnMuZWRpdG9yLiRlbCkuaGVpZ2h0KVxuXG4gICAgICBjb25zdCBtb3VzZW1vdmUgPSBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgeSB9ID0gZ2V0UG9pbnQoZXZlbnQpXG4gICAgICAgIGhlaWdodCArPSB5IC0gcHJldllcbiAgICAgICAgcHJldlkgPSB5XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gYCR7TWF0aC5tYXgoaGVpZ2h0LCAwKX1weGBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIG1vdXNlbW92ZSxcblxuICAgICAgICBtb3VzZXVwKGV2ZW50KSB7XG4gICAgICAgICAgbW91c2Vtb3ZlKGV2ZW50KVxuICAgICAgICAgIGhhbmRsZXJzLnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHVwZGF0ZUVkaXRvck9wdGlvbnMoKSB7XG4gICAgICB0aGlzLmVkaXRvci5zZXRPcHRpb25zKHRoaXMuZWRpdG9yT3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGlja0xpbmsoY29tbWFuZCkge1xuICAgICAgY29uc3QgYXR0cnMgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgaHJlZjoge1xuICAgICAgICAgICAgdHlwZTogJ3VybCcsXG4gICAgICAgICAgICBsYWJlbDogJ0xpbmsnLFxuICAgICAgICAgICAgYXV0b2ZvY3VzOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aXRsZToge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgbGFiZWw6ICdUaXRsZSdcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGFwcGx5OiB7IHR5cGU6ICdzdWJtaXQnIH0sXG4gICAgICAgICAgcmVtb3ZlOiB7XG4gICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgY2xpY2soeyBkaWFsb2dDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudC5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgIGhyZWY6IG51bGwsXG4gICAgICAgICAgICAgICAgICB0aXRsZTogbnVsbFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGRhdGE6IHRoaXMuZWRpdG9yLmdldE1hcmtBdHRycygnbGluaycpXG4gICAgICB9KVxuICAgICAgaWYgKGF0dHJzKSB7XG4gICAgICAgIGxldCB7IGhyZWYsIHRpdGxlIH0gPSBhdHRyc1xuICAgICAgICBpZiAoaHJlZikge1xuICAgICAgICAgIC8vIFNlZSBpZiBgaHJlZmAgY2FuIGJlIHBhcnNlZCBhcyBhIFVSTCwgYW5kIGlmIG5vdCwgcHJlZml4IGl0IHdpdGhcbiAgICAgICAgICAvLyBhIGRlZmF1bHQgcHJvdG9jb2wuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBVUkwoaHJlZilcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGhyZWYgPSBgaHR0cDovLyR7aHJlZn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbW1hbmQoeyBocmVmLCB0aXRsZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVFeHRlbnNpb25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrcyA9IHt9LFxuICAgICAgICBub2RlcyA9IHt9LFxuICAgICAgICB0b29scyA9IHt9XG4gICAgICB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC8vIHNjaGVtYS5tYXJrczpcbiAgICAgICAgbWFya3MuYm9sZCAmJiBuZXcgQm9sZCgpLFxuICAgICAgICBtYXJrcy5pdGFsaWMgJiYgbmV3IEl0YWxpYygpLFxuICAgICAgICBtYXJrcy51bmRlcmxpbmUgJiYgbmV3IFVuZGVybGluZSgpLFxuICAgICAgICBtYXJrcy5zdHJpa2UgJiYgbmV3IFN0cmlrZSgpLFxuICAgICAgICBtYXJrcy5zbWFsbCAmJiBuZXcgU21hbGwoKSxcbiAgICAgICAgbWFya3MuY29kZSAmJiBuZXcgQ29kZSgpLFxuICAgICAgICBtYXJrcy5saW5rICYmIG5ldyBMaW5rV2l0aFRpdGxlKCksXG5cbiAgICAgICAgLy8gc2NoZW1hLm5vZGVzOlxuICAgICAgICBub2Rlcy5ibG9ja3F1b3RlICYmIG5ldyBCbG9ja3F1b3RlKCksXG4gICAgICAgIG5vZGVzLmNvZGVCbG9jayAmJiBuZXcgQ29kZUJsb2NrKCksXG4gICAgICAgIG5ldyBIYXJkQnJlYWsoKSwgLy8gVE9ETzogU2hvdWxkIHRoaXMgYWx3YXlzIG9uP1xuICAgICAgICBub2Rlcy5oZWFkaW5nICYmIG5ldyBIZWFkaW5nKHsgbGV2ZWxzOiBub2Rlcy5oZWFkaW5nIH0pLFxuICAgICAgICBub2Rlcy5ob3Jpem9udGFsUnVsZSAmJiBuZXcgSG9yaXpvbnRhbFJ1bGUoKSxcbiAgICAgICAgKG5vZGVzLm9yZGVyZWRMaXN0IHx8IG5vZGVzLmJ1bGxldExpc3QpICYmIG5ldyBMaXN0SXRlbSgpLFxuICAgICAgICBub2Rlcy5idWxsZXRMaXN0ICYmIG5ldyBCdWxsZXRMaXN0KCksXG4gICAgICAgIG5vZGVzLm9yZGVyZWRMaXN0ICYmIG5ldyBPcmRlcmVkTGlzdCgpLFxuICAgICAgICAvLyBUT0RPOlxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBuZXcgVG9kb0l0ZW0oKSxcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgbmV3IFRvZG9MaXN0KCksXG5cbiAgICAgICAgLy8gc2NoZW1hLnRvb2xzOlxuICAgICAgICB0b29scy5oaXN0b3J5ICYmIG5ldyBIaXN0b3J5KClcbiAgICAgIF0uZmlsdGVyKGV4dGVuc2lvbiA9PiAhIWV4dGVuc2lvbilcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9ucyhzZXR0aW5nc05hbWUsIGRlc2NyaXB0aW9ucykge1xuICAgICAgY29uc3QgbGlzdCA9IFtdXG5cbiAgICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICh7IG5hbWUsIGljb24sIGF0dHJzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSkgPT4ge1xuICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuZWRpdG9yLmlzQWN0aXZlW25hbWVdXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSB0aGlzLmVkaXRvci5jb21tYW5kc1tuYW1lXVxuICAgICAgICBsaXN0LnB1c2goe1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgaWNvbixcbiAgICAgICAgICBpc0FjdGl2ZTogKFxuICAgICAgICAgICAgaXNBY3RpdmU/LihhdHRycykgJiZcbiAgICAgICAgICAgIChpZ25vcmVBY3RpdmUgPT0gbnVsbCB8fCAhaWdub3JlQWN0aXZlKCkpXG4gICAgICAgICAgKSxcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBvbkNsaWNrXG4gICAgICAgICAgICA/IG9uQ2xpY2soY29tbWFuZCwgYXR0cnMpXG4gICAgICAgICAgICA6IGNvbW1hbmQoYXR0cnMpXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zY2hlbWFbc2V0dGluZ3NOYW1lXVxuICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZGVzY3JpcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucykpIHtcbiAgICAgICAgICBjb25zdCBzZXR0aW5nTmFtZSA9IFsndW5kbycsICdyZWRvJ10uaW5jbHVkZXMoa2V5KSA/ICdoaXN0b3J5JyA6IGtleVxuICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tzZXR0aW5nTmFtZV1cbiAgICAgICAgICBjb25zdCBuYW1lID0gdW5kZXJzY29yZShrZXkpXG4gICAgICAgICAgY29uc3QgaWNvbiA9IGh5cGhlbmF0ZShrZXkpXG4gICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGF0dHIsIHZhbHVlcywgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0gPSBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICBpZiAoYXR0cikge1xuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlcykgJiYgaXNBcnJheShzZXR0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBoZWFkaW5nIGxldmVsIGF0dHJzOlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRkQnV0dG9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgJHtpY29ufS0ke3ZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBbYXR0cl06IHZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVBY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwuc2Nyb2xsSW50b1ZpZXc/LigpXG4gICAgICB0aGlzLmVkaXRvci5mb2N1cygpXG4gICAgfVxuICB9XG59KVxuXG5jbGFzcyBTbWFsbCBleHRlbmRzIE1hcmsge1xuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gJ3NtYWxsJ1xuICB9XG5cbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyc2VET006IFtcbiAgICAgICAgeyB0YWc6ICdzbWFsbCcgfVxuICAgICAgXSxcbiAgICAgIHRvRE9NOiAoKSA9PiBbJ3NtYWxsJywgMF1cbiAgICB9XG4gIH1cblxuICBjb21tYW5kcyh7IHR5cGUgfSkge1xuICAgIHJldHVybiAoKSA9PiB0b2dnbGVNYXJrKHR5cGUpXG4gIH1cbn1cbmNsYXNzIExpbmtXaXRoVGl0bGUgZXh0ZW5kcyBMaW5rIHtcbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXR0cnM6IHtcbiAgICAgICAgaHJlZjoge1xuICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgcGFyc2VET006IFt7XG4gICAgICAgIHRhZzogJ2EnLFxuICAgICAgICBnZXRBdHRyczogZG9tID0+ICh7XG4gICAgICAgICAgaHJlZjogZG9tLmdldEF0dHJpYnV0ZSgnaHJlZicpLFxuICAgICAgICAgIHRpdGxlOiBkb20uZ2V0QXR0cmlidXRlKCd0aXRsZScpXG4gICAgICAgIH0pXG4gICAgICB9XSxcbiAgICAgIHRvRE9NOiBub2RlID0+IFsnYScsIG5vZGUuYXR0cnMsIDBdXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tbXVsdGlzZWxlY3QoXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAnZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZSc6IG11bHRpcGxlXG4gIH1gXG4pXG4gIHZ1ZS1tdWx0aXNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6c2hvdy1sYWJlbHM9XCJmYWxzZVwiXG4gICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgIHRhZy1wbGFjZWhvbGRlcj1cIlByZXNzIGVudGVyIHRvIGFkZCBuZXcgdGFnXCIsXG4gICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICA6Y3VzdG9tLWxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgIDp0cmFjay1ieT1cIm9wdGlvblZhbHVlXCJcbiAgICA6Z3JvdXAtbGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgIDpncm91cC12YWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgIDppbnRlcm5hbC1zZWFyY2g9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICA6cHJlc2VydmUtc2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbGVhci1vbi1zZWxlY3Q9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICA6Y2xvc2Utb24tc2VsZWN0PVwiIXN0YXlPcGVuXCJcbiAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgQG9wZW49XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbXVsdGlzZWxlY3QoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by1tdWx0aXNlbGVjdC1zaW5nbGUnOiAhbXVsdGlwbGUsXG4gICAgICAnZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZSc6IG11bHRpcGxlXG4gICAgfWBcbiAgKVxuICAgIHZ1ZS1tdWx0aXNlbGVjdChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOnNob3ctbGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOnBsYWNlaG9sZGVyPVwicGxhY2Vob2xkZXJcIlxuICAgICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICAgIDpvcHRpb25zPVwicG9wdWxhdGUgJiYgYWN0aXZlT3B0aW9ucyB8fCBbXVwiXG4gICAgICA6Y3VzdG9tLWxhYmVsPVwiZ2V0TGFiZWxGb3JPcHRpb25cIlxuICAgICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgICAgOmdyb3VwLWxhYmVsPVwiZ3JvdXBCeUxhYmVsXCJcbiAgICAgIDpncm91cC12YWx1ZXM9XCJncm91cEJ5T3B0aW9uc1wiXG4gICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICA6dGFnZ2FibGU9XCJ0YWdnYWJsZVwiXG4gICAgICA6c2VhcmNoYWJsZT1cInNlYXJjaGFibGVcIlxuICAgICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOnByZXNlcnZlLXNlYXJjaD1cIiEhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbGVhci1vbi1zZWxlY3Q9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgICAgOmxvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgICAgQG9wZW49XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICAgIEBzZWFyY2gtY2hhbmdlPVwib25TZWFyY2hDaGFuZ2VcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJ3Z1ZS1tdWx0aXNlbGVjdC9kaXN0L3Z1ZS1tdWx0aXNlbGVjdC5taW4uY3NzJ1xuXG4gICRzcGlubmVyLXdpZHRoOiAkc2VsZWN0LWFycm93LXdpZHRoXG4gICR0YWctaWNvbi13aWR0aDogMS44ZW1cbiAgJHRhZy1tYXJnaW46IDJweFxuICAkdGFnLXBhZGRpbmc6IDNweFxuICAkdGFnLWxpbmUtaGVpZ2h0OiAxLjFlbVxuXG4gIC5kaXRvLW11bHRpc2VsZWN0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgICAubXVsdGlzZWxlY3RcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdFxuICAgICAgbWluLWhlaWdodDogaW5oZXJpdFxuICAgICAgY29sb3I6ICRjb2xvci1ibGFja1xuXG4gICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIG92ZXJmbG93OiBhdXRvXG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0XG4gICAgICBwYWRkaW5nOiAwICRzcGlubmVyLXdpZHRoIDAgMFxuICAgICAgLy8gU28gdGFncyBjYW4gZmxvYXQgb24gbXVsdGlwbGUgbGluZXMgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnM6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHRhZy1tYXJnaW5cblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnXG4gICAgICBmbG9hdDogbGVmdFxuICAgICAgbWFyZ2luOiAkdGFnLW1hcmdpbiAwIDAgJHRhZy1tYXJnaW5cbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbVxuICAgICAgcGFkZGluZzogJHRhZy1wYWRkaW5nICR0YWctaWNvbi13aWR0aCAkdGFnLXBhZGRpbmcgMC44ZW1cbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ3Mtd3JhcFxuICAgICAgb3ZlcmZsb3c6IGF1dG9cbiAgICAgIGxpbmUtaGVpZ2h0OiAwXG5cbiAgICAubXVsdGlzZWxlY3RfX3NpbmdsZSxcbiAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyLFxuICAgIC5tdWx0aXNlbGVjdF9faW5wdXRcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdFxuICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIG1pbi1oZWlnaHQ6IDBcbiAgICAgIG1hcmdpbjogMCAwIDFweCAwXG4gICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIHN0eWxlPVwicGFkZGluZzogLi4uO1wiIGluIGFkZGl0aW9uIHRvIHVzaW5nXG4gICAgICAvLyBjbGFzc2VzLCBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcgIWltcG9ydGFudFxuICAgICAgLy8gU28gaW5wdXQgY2FuIGZsb2F0IG5leHQgdG8gdGFncyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2lucyB3aXRoXG4gICAgICAvLyAubXVsdGlzZWxlY3RfX3RhZ3M6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogMCAhaW1wb3J0YW50XG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG5cbiAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyLFxuICAgIC5tdWx0aXNlbGVjdF9faW5wdXQ6OnBsYWNlaG9sZGVyXG4gICAgICBjb2xvcjogJGNvbG9yLXBsYWNlaG9sZGVyXG5cbiAgICAubXVsdGlzZWxlY3QtLWFjdGl2ZVxuICAgICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlclxuICAgICAgICAvLyBEb24ndCB1c2UgYGRpc3BsYXk6IG5vbmVgIHRvIGhpZGUgcGxhY2UtaG9sZGVyLCBhcyB0aGUgbGF5b3V0IHdvdWxkXG4gICAgICAgIC8vIGNvbGxhcHNlLlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG5cbiAgICAubXVsdGlzZWxlY3RfX3NlbGVjdCxcbiAgICAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgIC8vICRib3JkZXItd2lkdGggdG8gcHJldmVudCBtYXNraW5nIGJvcmRlciB3aXRoIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgICAgdG9wOiAkYm9yZGVyLXdpZHRoXG4gICAgICByaWdodDogJGJvcmRlci13aWR0aFxuICAgICAgYm90dG9tOiAkYm9yZGVyLXdpZHRoXG4gICAgICBoZWlnaHQ6IGluaGVyaXRcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG5cbiAgICAubXVsdGlzZWxlY3RfX3NlbGVjdFxuICAgICAgd2lkdGg6IDBcbiAgICAgIG1hcmdpbi1yaWdodDogY2FsYygkc2VsZWN0LWFycm93LXdpZHRoIC8gMilcbiAgICAgICY6OmJlZm9yZVxuICAgICAgICArYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKVxuICAgICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tXG4gICAgICAgIHJpZ2h0OiBjYWxjKC0xICogJHNlbGVjdC1hcnJvdy1zaXplIC8gMilcblxuICAgIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoXG4gICAgICAmOjpiZWZvcmUsXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBDaGFuZ2UgdGhlIHdpZHRoIG9mIHRoZSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAzcHhcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBpbnNldDogMFxuICAgICAgICBtYXJnaW46IGF1dG9cblxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uXG4gICAgICBtaW4taGVpZ2h0OiB1bnNldFxuICAgICAgaGVpZ2h0OiB1bnNldFxuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBJbnN0cnVjdGlvbiB0ZXh0IGZvciBvcHRpb25zXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50XG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0tZGlzYWJsZWRcbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcbiAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnLWljb25cbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbVxuICAgICAgZm9udC13ZWlnaHQ6IGluaGVyaXRcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjRlbVxuICAgICAgd2lkdGg6ICR0YWctaWNvbi13aWR0aFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG4gICAgICAgIGZvbnQtc2l6ZTogMS4zZW1cbiAgICAgICY6aG92ZXI6OmFmdGVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dFxuXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLXNlbGVjdGVkXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHRcbiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgICYubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWcsXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZVxuICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ3MsXG4gICAgLm11bHRpc2VsZWN0X19jb250ZW50LXdyYXBwZXJcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcblxuICAgICYuZGl0by1tdWx0aXNlbGVjdC1zaW5nbGVcbiAgICAgIC0taW5wdXQtd2lkdGg6IDEwMCVcbiAgICAmLmRpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGVcbiAgICAgIC0taW5wdXQtd2lkdGg6IGF1dG9cblxuICAgIC5tdWx0aXNlbGVjdC0tYWN0aXZlXG4gICAgICAubXVsdGlzZWxlY3RfX3NpbmdsZSxcbiAgICAgIC5tdWx0aXNlbGVjdF9faW5wdXRcbiAgICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBgc3R5bGU9XCJ3aWR0aFwiYCBpbiBhZGRpdGlvbiB0byB1c2luZyBjbGFzc2VzXG4gICAgICAgIC8vIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICAgIHdpZHRoOiB2YXIoLS1pbnB1dC13aWR0aCkgIWltcG9ydGFudFxuXG4gICAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDBcblxuICAgICAgLm11bHRpc2VsZWN0X19jb250ZW50LXdyYXBwZXJcbiAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJGJvcmRlci1jb2xvclxuICAgICAgICBtYXJnaW46IC0xcHggMCAwXG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDBcblxuICAgICAgJi5tdWx0aXNlbGVjdC0tYWJvdmVcbiAgICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDBcbiAgICAgICAgLm11bHRpc2VsZWN0X19jb250ZW50LXdyYXBwZXJcbiAgICAgICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZVxuICAgICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRib3JkZXItY29sb3JcbiAgICAgICAgICBtYXJnaW46IDAgMCAtMXB4XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDBcblxuICAgICYuZGl0by1oYXMtZXJyb3JzXG4gICAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItZXJyb3JcblxuICAgIC5kaXRvLWJ1dHRvbi1jbGVhclxuICAgICAgd2lkdGg6ICRzcGlubmVyLXdpZHRoXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcbmltcG9ydCBWdWVNdWx0aXNlbGVjdCBmcm9tICd2dWUtbXVsdGlzZWxlY3QnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QubWluLmNzcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ211bHRpc2VsZWN0Jywge1xuICBjb21wb25lbnRzOiB7IFZ1ZU11bHRpc2VsZWN0IH0sXG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoZWRPcHRpb25zOiBudWxsLFxuICAgICAgcG9wdWxhdGU6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKVxuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgLy8gSWYgYW4gb3B0aW9uIGNhbm5vdCBiZSBmb3VuZCwgd2UgbWF5IGJlIGluIHRhZ2dhYmxlIG1vZGUgYW5kXG4gICAgICAgICAgICAgIC8vIGNhbiBhZGQgaXQuXG4gICAgICAgICAgICAgIHZhbHVlID0+IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHx8IHRoaXMuYWRkVGFnT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCBvcHRpb25zIHRoYXQgd2UgY291bGRuJ3QgbWF0Y2guXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSByZWFsbHkgc2hvdWxkIGRpc3BsYXkgYW4gZXJyb3IgaW5zdGVhZFxuICAgICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRPcHRpb25cbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBvcHRpb25zIG9iamVjdCwgc2luY2UgdnVlLW11bHRpc2VsZWN0IGNhbid0IG1hcCB0aGF0XG4gICAgICAgIC8vIGl0c2VsZiB1bmZvcnR1bmF0ZWx5LiBgdHJhY2stYnlgIGlzIHVzZWQgZm9yIDprZXkgbWFwcGluZyBpdCBzZWVtcy5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKG9wdGlvbiB8fCBbXSkubWFwKHZhbHVlID0+IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpKVxuICAgICAgICAgIDogdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hlZE9wdGlvbnMgfHwgdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHNlYXJjaGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2hhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB0YWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdGF5T3BlbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0YXlPcGVuJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcigpIHtcbiAgICAgIGNvbnN0IHsgcGxhY2Vob2xkZXIsIHNlYXJjaGFibGUsIHRhZ2dhYmxlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHBsYWNlaG9sZGVyIHx8IChcbiAgICAgICAgc2VhcmNoYWJsZSAmJiB0YWdnYWJsZSA/IGBTZWFyY2ggb3IgYWRkIGEgJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgOiBzZWFyY2hhYmxlID8gYFNlbGVjdCBvciBzZWFyY2ggJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcbiAgICAgIC8vIHZ1ZS1tdWx0aXNlbGVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGUuIFdlIG5lZWQgdG9cbiAgICAgIC8vIGhhbmRsZSBpdCBoZXJlLlxuICAgICAgdGhpcy5mb2N1cygpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBAb3ZlcnJpZGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICAvLyBvdmVycmlkZSBgVHlwZU1peGluLmdldExpc3RlbmVycygpYCB0byByZS1yb3V0ZSAnaW5wdXQnIHRvIGBvbkNoYW5nZSgpYFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgYmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIGlucHV0OiB0aGlzLm9uQ2hhbmdlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFkZFRhZ09wdGlvbih0YWcpIHtcbiAgICAgIGlmICh0aGlzLnRhZ2dhYmxlKSB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwsIG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbkxhYmVsICYmIG9wdGlvblZhbHVlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBbb3B0aW9uTGFiZWxdOiB0YWcsXG4gICAgICAgICAgICAvLyBUT0RPOiBEZWZpbmUgYSBzaW1wbGUgc2NoZW1hIG9wdGlvbiB0byBjb252ZXJ0IHRoZSB0YWcgdmFsdWUgdG9cbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBlbHNlLCBlLmcuIGB0b1RhZzogdGFnID0+IHVuZGVyc2NvcmUodGFnKWBcbiAgICAgICAgICAgIFtvcHRpb25WYWx1ZV06IHRhZ1xuICAgICAgICAgIH1cbiAgICAgICAgICA6IHRhZ1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgb25BZGRUYWcodGFnKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmFkZFRhZ09wdGlvbih0YWcpXG4gICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uU2VhcmNoQ2hhbmdlKHF1ZXJ5KSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hGaWx0ZXIpIHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgLy8gU2V0IGBzZWFyY2hlZE9wdGlvbnNgIHRvIGFuIGVtcHR5IGFycmF5LCBiZWZvcmUgaXQgd2lsbCBiZVxuICAgICAgICAgIC8vIHBvcHVsYXRlZCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBhY3R1YWwgcmVzdWx0cy5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IFtdXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBhd2FpdCB0aGlzLnJlc29sdmVEYXRhKFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5zZWFyY2hGaWx0ZXIobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgcXVlcnkgfSkpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENsZWFyIGBzZWFyY2hlZE9wdGlvbnNgIHdoZW4gdGhlIHF1ZXJ5IGlzIGNsZWFyZWQuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICE9PSBudWxsID8gdGhpcy52YWx1ZSA6ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlICE9PSAnJ1xuICAgICAgICAgID8gdGhpcy5pc0ludGVnZXIgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaXNJbnRlZ2VyKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHN0ZXBWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0ZXAgPT0gbnVsbCAmJiAhdGhpcy5pc0ludGVnZXIgPyAnYW55JyA6IHRoaXMuc3RlcFxuICAgIH0sXG5cbiAgICBkZWNpbWFsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlY2ltYWxzJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBzdGVwOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RlcCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChzdGVwKSB7XG4gICAgICAgIC8vIEZvciBpbnRlZ2Vycywgcm91bmQgdGhlIHN0ZXBzIHRvIHRoZSBuZXh0IGJpZ2dlciBpbnRlZ2VyIHZhbHVlOlxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgc3RlcCAhPSBudWxsID8gTWF0aC5jZWlsKHN0ZXApIDogc3RlcFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWluOiBnZXRTY2hlbWFBY2Nlc3NvcignbWluJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1pbikge1xuICAgICAgICBtaW4gPSBtaW4gPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMF1cbiAgICAgICAgICA6IG1pblxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWluICE9IG51bGwgPyBNYXRoLmZsb29yKG1pbikgOiBtaW5cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heDogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtYXgpIHtcbiAgICAgICAgbWF4ID0gbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzFdXG4gICAgICAgICAgOiBtYXhcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1heCAhPSBudWxsID8gTWF0aC5jZWlsKG1heCkgOiBtYXhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHJhbmdlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmFuZ2UnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gYHRoaXMubWluYCwgYHRoaXMubWF4YCBhbHJlYWR5IHN1cHBvcnQgYHNjaGVtYS5yYW5nZWAsXG4gICAgICAgIC8vIHNvIHJlZGlyZWN0IHRoZXJlLlxuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzXG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiBtYXggIT0gbnVsbCA/IFttaW4sIG1heF0gOiB1bmRlZmluZWRcbiAgICAgIH0sXG5cbiAgICAgIHNldChyYW5nZSkge1xuICAgICAgICAvLyBQcm92aWRlIGEgc2V0dGVyIHRoYXQgZGVsZWdhdGVzIHRvIGBbdGhpcy5taW4sIHRoaXMubWF4XWAsXG4gICAgICAgIC8vIHNpbmNlIHRob3NlIGFscmVhZHkgaGFuZGxlIGBzY2hlbWEucmFuZ2VgLlxuICAgICAgICBpZiAoaXNBcnJheShyYW5nZSkpIHtcbiAgICAgICAgICBbdGhpcy5taW4sIHRoaXMubWF4XSA9IHJhbmdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0ge31cbiAgICAgIGNvbnN0IHsgcmFuZ2UsIG1pbiwgbWF4LCBkZWNpbWFscywgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJhbmdlID0gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1pbiA9IG1pblxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1heCA9IG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbHMgIT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICB9IGVsc2UgaWYgKHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoYCR7c3RlcH1gLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aFxuICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW50ZWdlcikge1xuICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfVxuICB9XG59XG4iLCJcbmlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDptaW49XCJtaW5cIlxuICA6bWF4PVwibWF4XCJcbiAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBPbmx5IHNob3cgc3BpbiBidXR0b25zIGlmIHRoZSBudW1iZXIgY29tcG9uZW50IGRlZmluZXMgYSBzdGVwIHNpemUuXG4gIGlucHV0W3R5cGU9XCJudW1iZXJcIl06bm90KFtzdGVwXSlcbiAgICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICAgICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b25cbiAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZVxuICAgICAgbWFyZ2luOiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdudW1iZXInLCAnaW50ZWdlcidcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNJbnRlZ2VyKCkge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2ludGVnZXInXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLW9iamVjdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4pXG4gIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgKVxuICAgIC8vIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgKVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlXG4gICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgKVxuICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6ZGVsZXRhYmxlPVwib2JqZWN0RGF0YSAmJiBkZWxldGFibGVcIlxuICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmVkaXRQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICA6cGF0aD1cInBhdGhcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tb2JqZWN0KFxuICAgIHYtaWY9XCJpc1JlYWR5XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuICApXG4gICAgLmRpdG8tb2JqZWN0LWNvbnRlbnQoXG4gICAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gICAgKVxuICAgICAgLy8gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgKVxuICAgICAgY29tcG9uZW50KFxuICAgICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICApXG4gICAgICBzcGFuKFxuICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgICApXG4gICAgICBzcGFuKFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgICAgKVxuICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwib2JqZWN0RGF0YSAmJiBkZWxldGFibGVcIlxuICAgICAgOmVkaXRhYmxlPVwib2JqZWN0RGF0YSAmJiBlZGl0YWJsZVwiXG4gICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgOmVkaXRQYXRoPVwicGF0aFwiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOnBhdGg9XCJwYXRoXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLW9iamVjdFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgIG1hcmdpbjogMFxuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmdcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLmRpdG8tb2JqZWN0LWNvbnRlbnRcbiAgICAgIGZsZXg6IDAgMSAxMDAlXG4gICAgPiAuZGl0by1idXR0b25zXG4gICAgICBmbGV4OiAxIDAgMCVcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdvYmplY3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgZGF0YTogdGhpcy5vYmplY3REYXRhIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3BhbmVsJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdFBhZGRpbmc6IHRydWUsXG5cbiAgZ2V0UGFuZWxTY2hlbWEoc2NoZW1hKSB7XG4gICAgLy8gRm9yIGEgVHlwZVBhbmVsLCB0aGUgY29tcG9uZW50IHNjaGVtYSBpcyBhbHNvIHRoZSBwYW5lbCBzY2hlbWEsIGJ1dFxuICAgIC8vIHJlbW92ZSB0aGUgYWRkZWQgbmFtZSwgc28gaXQgZG9lc24ndCBnZXQgYXBwZW5kZWQgdHdpY2UgdG8gZGF0YS1wYXRoLlxuICAgIGNvbnN0IHsgbmFtZSwgLi4ucGFuZWwgfSA9IHNjaGVtYVxuICAgIHJldHVybiBwYW5lbFxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwcm9ncmVzcycsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wdXRlZDoge1xuICAgIHByb2dyZXNzVmFsdWUoKSB7XG4gICAgICBsZXQgeyB2YWx1ZSwgcmFuZ2UsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICB2YWx1ZSAtPSByYW5nZVswXVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3RlcCkgKiBzdGVwXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gJydcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBwcm9ncmVzc01heCgpIHtcbiAgICAgIGNvbnN0IHsgcmFuZ2UgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICByZXR1cm4gcmFuZ2VbMV0gLSByYW5nZVswXVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG51bC5kaXRvLXJhZGlvLWJ1dHRvbnMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB1bC5kaXRvLXJhZGlvLWJ1dHRvbnMoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbiAgKVxuICAgIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICAgIGxhYmVsXG4gICAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgICApXG4gICAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXJhZGlvLWJ1dHRvbnNcbiAgICBsYWJlbFxuICAgICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuICAgIC5kaXRvLXJhZGlvLWJ1dHRvblxuICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3JhZGlvJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXNlY3Rpb24oXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCcgOiAhIXNjaGVtYS5sYWJlbCB9XCJcbilcbiAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJpdGVtXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNlY3Rpb24oXG4gICAgOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLWxhYmVsbGVkJyA6ICEhc2NoZW1hLmxhYmVsIH1cIlxuICApXG4gICAgZGl0by1wYW5lLmRpdG8tc2VjdGlvbi1wYW5lKFxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNlY3Rpb25cbiAgICAmLmRpdG8tc2VjdGlvbi1sYWJlbGxlZFxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZ1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRJdGVtRm9ybVNjaGVtYSwgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWN0aW9uJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gIXNjaGVtYS5uZXN0ZWQgJiYgISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcbiAgZGVmYXVsdE5lc3RlZDogZmFsc2UsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0RmxleEdyb3c6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy52YWx1ZSA6IHRoaXMuZGF0YVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWFcbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gICAgLy8gUHJvY2VzcyBzZWN0aW9uIGNvbXBvbmVudHMgc28gdGhlaXIgZm9ybXMgZ2V0IHJlc29sdmVkIHRvby5cbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbClcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLy0gTmVzdGluZyBpcyBuZWVkZWQgdG8gbWFrZSBhbiBhcnJvdyBhcHBlYXIgb3ZlciB0aGUgc2VsZWN0IGl0ZW06XG4uZGl0by1zZWxlY3RcbiAgc2VsZWN0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQGZvY3VzPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInBvcHVsYXRlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gICAgICApXG4gICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgIHYtaWY9XCJncm91cEJ5XCJcbiAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgIClcbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0KSB9fVxuICAgICAgICBvcHRpb24oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1lbHNlLWlmPVwic2VsZWN0ZWRPcHRpb25cIlxuICAgIClcbiAgICAgIG9wdGlvbihcbiAgICAgICAgOnZhbHVlPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAvLy0gTmVzdGluZyBpcyBuZWVkZWQgdG8gbWFrZSBhbiBhcnJvdyBhcHBlYXIgb3ZlciB0aGUgc2VsZWN0IGl0ZW06XG4gIC5kaXRvLXNlbGVjdFxuICAgIHNlbGVjdChcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgICAgQGZvY3VzPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cInBvcHVsYXRlXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBvcHRncm91cChcbiAgICAgICAgICAgIHYtaWY9XCJncm91cEJ5XCJcbiAgICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0KSB9fVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwic2VsZWN0ZWRPcHRpb25cIlxuICAgICAgKVxuICAgICAgICBvcHRpb24oXG4gICAgICAgICAgOnZhbHVlPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24oc2VsZWN0ZWRPcHRpb24pIH19XG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLy8gVE9ETzogTW92ZSB0byBkaXRvLXVpXG4gICRzZWxlY3QtYXJyb3ctcmlnaHQ6IGNhbGMoKCRzZWxlY3QtYXJyb3ctd2lkdGggLSAkc2VsZWN0LWFycm93LXNpemUpIC8gMilcblxuICAuZGl0by1zZWxlY3RcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIHNlbGVjdFxuICAgICAgcGFkZGluZy1yaWdodDogJHNlbGVjdC1hcnJvdy13aWR0aFxuXG4gICAgLy8gSGFuZGxlIC5kaXRvLXdpZHRoLWZpbGwgc2VwYXJhdGVseSBkdWUgdG8gcmVxdWlyZWQgbmVzdGluZyBvZiBzZWxlY3Q6XG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHNlbGVjdFxuICAgICAgICB3aWR0aDogMTAwJVxuXG4gICAgJjo6YWZ0ZXJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgK2Fycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSlcbiAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b21cbiAgICAgIHJpZ2h0OiBjYWxjKCN7JHNlbGVjdC1hcnJvdy1yaWdodH0gKyAjeyRib3JkZXItd2lkdGh9KVxuXG4gICAgJi5kaXRvLWRpc2FibGVkOjphZnRlclxuICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlbGVjdCcsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBEaXNhYmxlIGxhenktcG9wdWxhdGlvbiBmb3Igbm93LlxuICAgICAgLy8gVE9ETzogU2V0IHRvIGBmYWxzZWAgT25jZSBsaW5ldG8gZTJlIHRlc3RzIGFkZHJlc3MgdGhlaXIgaXNzdWVzLlxuICAgICAgcG9wdWxhdGU6IHRydWVcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc2xpZGVyXG4gIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICB2LWlmPVwiaW5wdXRcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNsaWRlclxuICAgIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOm1pbj1cIm1pblwiXG4gICAgICA6bWF4PVwibWF4XCJcbiAgICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgICApXG4gICAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgICB2LWlmPVwiaW5wdXRcIlxuICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgOm1pbj1cIm1pblwiXG4gICAgICA6bWF4PVwibWF4XCJcbiAgICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2xpZGVyXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcmFuZ2VcbiAgICAgIGZsZXg6IGF1dG9cbiAgICAgIGhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpXG4gICAgLmRpdG8tbnVtYmVyXG4gICAgICBib3JkZXI6IDBcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWknXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzbGlkZXInLCB7XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93SW5wdXRgP1xuICAgIGlucHV0OiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuc3dpdGNoLWJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnN5bmM9XCJ0cnVlXCJcbiAgOmxhYmVscz1cImxhYmVsc1wiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHN3aXRjaC1idXR0b24uZGl0by1zd2l0Y2goXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzeW5jPVwidHJ1ZVwiXG4gICAgOmxhYmVscz1cImxhYmVsc1wiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXN3aXRjaFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFN3aXRjaEJ1dHRvbiB9IGZyb20gJ0BkaXRvanMvdWknXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dHlwZT1cImlucHV0VHlwZVwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG5jb25zdCBtYXNrZWRQYXNzd29yZCA9ICcqKioqKioqKioqKioqKioqJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ3RleHQnLCAnZW1haWwnLCAndXJsJywgJ2hvc3RuYW1lJywgJ2RvbWFpbicsICd0ZWwnLCAncGFzc3dvcmQnLCAnY3JlZGl0Y2FyZCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gc2NoZW1hLnR5cGUgPT09ICdwYXNzd29yZCcsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFR5cGUoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjcmVkaXRjYXJkOiAndGV4dCcsXG4gICAgICAgIGhvc3RuYW1lOiAndGV4dCcsXG4gICAgICAgIGRvbWFpbjogJ3RleHQnXG4gICAgICB9W3RoaXMudHlwZV0gfHwgdGhpcy50eXBlXG4gICAgfSxcblxuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0aGlzLnR5cGUgPT09ICdwYXNzd29yZCcgJiZcbiAgICAgICAgICB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAhdGhpcy5mb2N1c2VkXG4gICAgICAgIClcbiAgICAgICAgICA/IG1hc2tlZFBhc3N3b3JkXG4gICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgIGVtYWlsOiAnZW1haWwnLFxuICAgICAgICB1cmw6ICd1cmwnLFxuICAgICAgICBob3N0bmFtZTogJ2hvc3RuYW1lJyxcbiAgICAgICAgZG9tYWluOiAnZG9tYWluJyxcbiAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZCcsXG4gICAgICAgIGNyZWRpdGNhcmQ6ICdjcmVkaXRjYXJkJ1xuICAgICAgfVt0aGlzLnR5cGVdXG4gICAgICByZXR1cm4gcnVsZSA/IHsgW3J1bGVdOiB0cnVlIH0gOiB7fVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOnJvd3M9XCJsaW5lc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpyb3dzPVwibGluZXNcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdGV4dGFyZWFcbiAgICBkaXNwbGF5OiBibG9ja1xuICAgIHJlc2l6ZTogbm9uZVxuICAgIG1pbi1oZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpICsgI3sgMiAqICRpbnB1dC1wYWRkaW5nLXZlciB9KVxuICAgICYuZGl0by1yZXNpemFibGVcbiAgICAgIHJlc2l6ZTogdmVydGljYWxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3RleHRhcmVhJywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgNFxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXRyZWUtbGlzdFxuICBkaXRvLXNjb3BlcyhcbiAgICB2LWlmPVwic2NvcGVzXCJcbiAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gIClcbiAgLmRpdG8tdHJlZS1wYW5lbFxuICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6b3Blbj1cInRydWVcIlxuICAgIClcbiAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgIClcbiAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyZWUtbGlzdFxuICAgIGRpdG8tc2NvcGVzKFxuICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1wYW5lbFxuICAgICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICA6b3Blbj1cInRydWVcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgICAgKVxuICAgICAgICAvLyBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgICAgcm91dGVyLXZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10cmVlLWxpc3RcbiAgICBAZXh0ZW5kICVmaWVsZFxuICAgIC5kaXRvLXRyZWUtcGFuZWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgPiAuZGl0by10cmVlLWl0ZW1cbiAgICAgICAgZmxleDogMSAxIDI1JVxuICAgICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyXG4gICAgICAgIGZsZXg6IDAgMSA3NSVcbiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMVxuICAgICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRpbnB1dC1wYWRkaW5nLWhvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgaGFzRm9ybVNjaGVtYSwgZ2V0Rm9ybVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gIH0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICB9LFxuXG4gICAgZWRpdFBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgfSxcblxuICAgIHRyZWVEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgIDogdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWVkXG4gICAgICAvLyB0byBgdHJlZURhdGFgIGFuZCBgdHJlZVNjaGVtYWBcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICA6IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHtcbiAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgaGFzRWRpdGFibGVGb3JtcyA9IHNjaGVtYSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2VkaXRhYmxlJywge1xuICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgc2NoZW1hXG4gICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICBoYXNFZGl0YWJsZUZvcm1zKHNjaGVtYS5jaGlsZHJlbilcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IHRydWUsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgICAgbmVzdGVkLCBmbGF0dGVuLFxuICAgICAgLy8gUGFzcyBwcm9jZXNzKCkgdG8gYWRkIG1vcmUgcm91dGVzIHRvIGNoaWxkUm91dGVzOlxuICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgYXBpLCBjaGlsZHJlbiwgY2hpbGRyZW4ubmFtZSwgY2hpbGRSb3V0ZXMsIGxldmVsLFxuICAgICAgICAgICAgbmVzdGVkLCB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9LFxuXG4gIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAvLyBwcmVzZW50IGluIGVhY2ggb2YgdGhlIGZvcm1zLCBhcyByZXF1aXJlZCBieSBgcHJvY2Vzc1NjaGVtYURhdGEoKWBcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBjaGlsZHJlblxuICAgICAgPyBmb3JtID0+ICh7XG4gICAgICAgIC4uLmZvcm0sXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5mb3JtLmNvbXBvbmVudHMsXG4gICAgICAgICAgW2NoaWxkcmVuLm5hbWVdOiBjaGlsZHJlblxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgOiBudWxsXG4gICAgKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBmaWxlc2l6ZSB9IGZyb20gJ2ZpbGVzaXplJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xuICByZXR1cm4gZmlsZXNpemUoc2l6ZSwgeyBiYXNlOiAxMCB9KVxufVxuIiwiXG4uZGl0by11cGxvYWRcbiAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICB0clxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhblxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwiZmlsZXNcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgIDprZXk9XCJmaWxlLmtleVwiXG4gICAgICApXG4gICAgICAgIHRkKHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCIpXG4gICAgICAgIHRkIHt7IGZpbGUuc2l6ZSB8IGZvcm1hdEZpbGVTaXplIH19XG4gICAgICAgIHRkXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkXCIpXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIilcbiAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgIClcbiAgICB0Zm9vdFxuICAgICAgdHJcbiAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgdnVlLXVwbG9hZC5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkKFxuICAgICAgICAgICAgICAgIDppbnB1dC1pZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgOnBvc3QtYWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXVwbG9hZFxuICAgIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgICAgdHJcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBOYW1lXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cImZpbGVzXCJcbiAgICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgICApXG4gICAgICAgICAgdGQodi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIilcbiAgICAgICAgICB0ZCB7eyBmaWxlLnNpemUgfCBmb3JtYXRGaWxlU2l6ZSB9fVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWRcIilcbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCIpXG4gICAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCIpXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgdGZvb3RcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgICB2dWUtdXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgICA6aW5wdXQtaWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIDpwb3N0LWFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dC1maWx0ZXI9XCJpbnB1dEZpbHRlclwiXG4gICAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJVcGxvYWQgRmlsZXNcIlxuICAgICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by11cGxvYWRcbiAgICAuZGl0by10YWJsZVxuICAgICAgdHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZVxuICAgIC5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+ICpcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmRcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXJcbiAgICAgIC5kaXRvLXByb2dyZXNzXG4gICAgICAgIGZsZXg6IGF1dG9cbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCBWdWVVcGxvYWQgZnJvbSAndnVlLXVwbG9hZC1jb21wb25lbnQnXG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCBwYXJzZUZpbGVTaXplIGZyb20gJ2ZpbGVzaXplLXBhcnNlcidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL3V0aWxzL3VuaXRzLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd1cGxvYWQnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlVXBsb2FkLCBWdWVEcmFnZ2FibGUgfSxcbiAgZmlsdGVyczogeyBmb3JtYXRGaWxlU2l6ZSB9LFxuICBtaXhpbnM6IFtPcmRlcmVkTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwbG9hZHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdXBsb2FkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMudXBsb2FkXG4gICAgfSxcblxuICAgIGZpbGVzKCkge1xuICAgICAgcmV0dXJuIGFzRmlsZXModGhpcy52YWx1ZSlcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIE5vIGNhbGxiYWNrIGFzIGl0J3MgdXNlZCBpbiBgcHJvY2Vzc1ZhbHVlKClgXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGV4dGVuc2lvbnM6IGdldFNjaGVtYUFjY2Vzc29yKCdleHRlbnNpb25zJywge1xuICAgICAgdHlwZTogW0FycmF5LCBTdHJpbmcsIFJlZ0V4cF1cbiAgICB9KSxcblxuICAgIGFjY2VwdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FjY2VwdCcsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KGFjY2VwdCkge1xuICAgICAgICByZXR1cm4gaXNBcnJheShhY2NlcHQpID8gYWNjZXB0LmpvaW4oJywnKSA6IGFjY2VwdFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4U2l6ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heFNpemUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZ2V0KG1heFNpemUpIHtcbiAgICAgICAgcmV0dXJuIG1heFNpemUgPyBwYXJzZUZpbGVTaXplKG1heFNpemUpIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiBkcmFnZ2FibGUgJiYgdGhpcy5maWxlcy5sZW5ndGggPiAxXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGlzVXBsb2FkUmVhZHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRzLmxlbmd0aCAmJlxuICAgICAgICAhKHRoaXMudXBsb2FkLmFjdGl2ZSB8fCB0aGlzLnVwbG9hZC51cGxvYWRlZClcbiAgICB9LFxuXG4gICAgaXNVcGxvYWRBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRzLmxlbmd0aCAmJiB0aGlzLnVwbG9hZC5hY3RpdmVcbiAgICB9LFxuXG4gICAgdXBsb2FkUHJvZ3Jlc3MoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnVwbG9hZHMucmVkdWNlKCh0b3RhbCwgZmlsZSkgPT4gdG90YWwgKyBmaWxlLnByb2dyZXNzLCAwKSAvXG4gICAgICAgIHRoaXMudXBsb2Fkcy5sZW5ndGhcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdXBsb2FkUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlVXJsKHtcbiAgICAgICAgdHlwZTogJ3VwbG9hZCcsXG4gICAgICAgIHBhdGg6IHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgodGhpcy5kYXRhUGF0aClcbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IHJlbmRlciB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiByZW5kZXJcbiAgICAgICAgPyByZW5kZXIuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICB2YWx1ZTogZmlsZSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZmlsZXMsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbChmaWxlLm5hbWUpXG4gICAgfSxcblxuICAgIGRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSB9ID0gZmlsZVxuXG4gICAgICBpZiAoZmlsZSAmJiB3aW5kb3cuY29uZmlybShcbiAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMucmVtb3ZlfSAke25hbWV9P2ApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxlLnVwbG9hZCkge1xuICAgICAgICAgIHRoaXMudXBsb2FkLnJlbW92ZShmaWxlLnVwbG9hZClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgICB0ZXh0OiBgJHtuYW1lfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RmlsZUluZGV4KGZpbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlICYmIHRoaXMudmFsdWVcbiAgICAgICAgPyB0aGlzLnZhbHVlLmZpbmRJbmRleChpdCA9PiBpdC5pZCA9PT0gZmlsZS5pZClcbiAgICAgICAgOiAtMVxuICAgIH0sXG5cbiAgICBhZGRGaWxlKGZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IFtmaWxlXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gZmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXBsYWNlRmlsZShmaWxlLCBuZXdGaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RmlsZUluZGV4KGZpbGUpXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5ld0ZpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuJHNldCh0aGlzLnZhbHVlLCBpbmRleCwgbmV3RmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3RmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZW1vdmVGaWxlKGZpbGUpIHtcbiAgICAgIHRoaXMucmVwbGFjZUZpbGUoZmlsZSwgbnVsbClcbiAgICB9LFxuXG4gICAgaW5wdXRGaWxlKG5ld0ZpbGUsIG9sZEZpbGUpIHtcbiAgICAgIGlmIChuZXdGaWxlICYmICFvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIHNpemUgfSA9IG5ld0ZpbGVcbiAgICAgICAgdGhpcy5hZGRGaWxlKHsgaWQsIG5hbWUsIHNpemUsIHVwbG9hZDogbmV3RmlsZSB9KVxuICAgICAgfVxuICAgICAgaWYgKG5ld0ZpbGUgJiYgb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IHN1Y2Nlc3MsIGVycm9yIH0gPSBuZXdGaWxlXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ld0ZpbGUucmVzcG9uc2VbMF1cbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZmlsZS51cGxvYWQgPSBuZXdGaWxlXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSB1cGxvYWQgZmlsZSBvYmplY3Qgd2l0aCB0aGUgZmlsZSBvYmplY3QgcmVjZWl2ZWRcbiAgICAgICAgICAgIC8vIGZyb20gdGhlIHVwbG9hZCByZXNwb25zZS5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUZpbGUobmV3RmlsZSwgZmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IHtcbiAgICAgICAgICAgIGFib3J0OiAnVXBsb2FkIGFib3J0ZWQnLFxuICAgICAgICAgICAgZGVuaWVkOiAnVXBsb2FkIGRlbmllZCcsXG4gICAgICAgICAgICBleHRlbnNpb246IGBVbnN1cHBvcnRlZCBmaWxlLXR5cGU6ICR7bmV3RmlsZS5uYW1lfWAsXG4gICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29yayBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgIHNlcnZlcjogJ1NlcnZlciBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgIHNpemU6IGBGaWxlIGlzIHRvbyBsYXJnZTogJHtmb3JtYXRGaWxlU2l6ZShuZXdGaWxlLnNpemUpfWAsXG4gICAgICAgICAgICB0aW1lb3V0OiAnVGltZW91dCBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJ1xuXG4gICAgICAgICAgfVtlcnJvcl0gfHwgYFVua25vd24gRmlsZSBVcGxvYWQgRXJyb3I6ICcke2Vycm9yfSdgXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnRmlsZSBVcGxvYWQgRXJyb3InLFxuICAgICAgICAgICAgdGV4dFxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaW5wdXRGaWx0ZXIobmV3RmlsZS8qLCBvbGRGaWxlLCBwcmV2ZW50ICovKSB7XG4gICAgICBjb25zdCB4aHIgPSBuZXdGaWxlPy54aHJcbiAgICAgIGlmICh0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFscyAmJiB4aHIgJiYgIXhoci53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAvLyBGaWx0ZXIgb3V0IGFsbCBuZXdseSBhZGRlZCBmaWxlcyB0aGF0IHdlcmVuJ3QgYWN0dWFsbHkgdXBsb2FkZWQuXG4gICAgY29uc3QgZmlsZXMgPSBhc0ZpbGVzKHZhbHVlKVxuICAgICAgLm1hcChcbiAgICAgICAgKHsgdXBsb2FkLCAuLi5maWxlIH0pID0+ICF1cGxvYWQgfHwgdXBsb2FkLnN1Y2Nlc3MgPyBmaWxlIDogbnVsbFxuICAgICAgKVxuICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUpXG4gICAgcmV0dXJuIHNjaGVtYS5tdWx0aXBsZSA/IGZpbGVzIDogZmlsZXNbMF0gfHwgbnVsbFxuICB9XG59KVxuXG5mdW5jdGlvbiBhc0ZpbGVzKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IGFzQXJyYXkodmFsdWUpIDogW11cbn1cblxuPC9zY3JpcHQ+XG4iLCJjb25zdCBsb2dnZWREZXByZWNhdGlvbnMgPSBuZXcgU2V0KClcblxuZXhwb3J0IGZ1bmN0aW9uIGRlcHJlY2F0ZShtZXNzYWdlKSB7XG4gIC8vIE9ubHkgbG9nIGRlcHJlY2F0aW9uIG1lc3NhZ2VzIG9uY2UuXG4gIGlmICghbG9nZ2VkRGVwcmVjYXRpb25zLmhhcyhtZXNzYWdlKSkge1xuICAgIGxvZ2dlZERlcHJlY2F0aW9ucy5hZGQobWVzc2FnZSlcbiAgICBjb25zb2xlLndhcm4obWVzc2FnZSlcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgW1xuICAnY3JlYXRlJywgJ2NyZWF0ZWQnLFxuICAnc2F2ZScsICdzYXZlZCcsXG4gICdzdWJtaXQnLCAnc3VibWl0dGVkJyxcbiAgJ2RlbGV0ZScsICdkZWxldGVkJyxcbiAgJ2VkaXQnLCAnZWRpdGVkJyxcbiAgJ2Nsb3NlJywgJ2Nsb3NlZCcsXG4gICdjYW5jZWwnLCAnY2FuY2VsbGVkJyxcbiAgJ2RyYWcnLCAnZHJhZ2dlZCdcbl0ucmVkdWNlKCh2ZXJicywgdmVyYikgPT4ge1xuICB2ZXJic1t2ZXJiXSA9IHZlcmJcbiAgcmV0dXJuIHZlcmJzXG59LCB7fSlcbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IFZ1ZU1vZGFsIGZyb20gJ3Z1ZS1qcy1tb2RhbCdcbmltcG9ydCBWdWVSb3V0ZXIgZnJvbSAndnVlLXJvdXRlcidcbmltcG9ydCBWdWVOb3RpZmljYXRpb25zIGZyb20gJ3Z1ZS1ub3RpZmljYXRpb24nXG5pbXBvcnQge1xuICBpc1N0cmluZywgaXNBcnJheSwgYXNBcnJheSwgaXNBYnNvbHV0ZVVybCxcbiAgbWVyZ2UsIGh5cGhlbmF0ZSwgY2FtZWxpemUsXG4gIGRlZmF1bHRGb3JtYXRzXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyBjb21wb25lbnRzIGZyb20gJy4vY29tcG9uZW50cy9pbmRleC5qcydcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vdHlwZXMvaW5kZXguanMnXG5pbXBvcnQgRGl0b1Jvb3QgZnJvbSAnLi9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSdcbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGRlcHJlY2F0ZSB9IGZyb20gJy4vdXRpbHMvZGVwcmVjYXRlLmpzJ1xuaW1wb3J0IHZlcmJzIGZyb20gJy4vdmVyYnMuanMnXG5cblZ1ZS5jb25maWcucHJvZHVjdGlvblRpcCA9IGZhbHNlXG5cbi8vIEFsbCBnbG9iYWwgcGx1Z2lucyB0aGF0IG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCBvbiBgVnVlYDpcblZ1ZS51c2UoVnVlUm91dGVyKVxuVnVlLnVzZShWdWVNb2RhbCwgeyBkeW5hbWljOiB0cnVlIH0pXG5WdWUudXNlKFZ1ZU5vdGlmaWNhdGlvbnMpXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9BZG1pbiB7XG4gIGNvbnN0cnVjdG9yKGVsLCB7XG4gICAgLy8gYGRpdG9gIGNvbnRhaW5zIHRoZSBiYXNlIGFuZCBhcGkgc2V0dGluZ3MgcGFzc2VkIGZyb20gYEFkbWluQ29udHJvbGxlcmBcbiAgICBkaXRvID0ge30sXG4gICAgYXBpLFxuICAgIHZpZXdzID0ge30sXG4gICAgLi4ub3B0aW9uc1xuICB9ID0ge30pIHtcbiAgICB0aGlzLmVsID0gZWxcbiAgICAvLyBNZXJnZSBpbiBgYXBpYCBzZXR0aW5ncyBhcyBwYXNzZWQgZnJvbSBgY29uZmlnLmFkbWluYCBhbmQgdGhyb3VnaCB0aGVcbiAgICAvLyBgQWRtaW5Db250cm9sbGVyYCB3aXRoIGBhcGlgIHZhbHVlcyBmcm9tIGZyb20gJ2FkbWluL2luZGV4LmpzJ1xuICAgIC8vIE5PVEU6IGBBZG1pbkNvbnRyb2xsZXJgIHByb3ZpZGVzIGBkaXRvLmFwaS5iYXNlYFxuICAgIHRoaXMuYXBpID0gYXBpID0gbWVyZ2UoeyBiYXNlOiAnLycgfSwgZGl0by5hcGksIGFwaSlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cbiAgICAvLyBTZXR1cCBkZWZhdWx0IGFwaSBzZXR0dGluZ3M6XG4gICAgYXBpLmxvY2FsZSB8fD0gJ2VuLVVTJ1xuICAgIGFwaS5mb3JtYXRzID0gbWVyZ2Uoe30sIGRlZmF1bHRGb3JtYXRzLCBhcGkuZm9ybWF0cylcbiAgICBhcGkucmVxdWVzdCB8fD0gb3B0aW9ucyA9PiByZXF1ZXN0KGFwaSwgb3B0aW9ucylcbiAgICBhcGkuZ2V0QXBpVXJsIHx8PSBvcHRpb25zID0+IGdldEFwaVVybChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmlzQXBpVXJsIHx8PSB1cmwgPT4gaXNBcGlVcmwoYXBpLCB1cmwpXG4gICAgLy8gU2V0dGluZyBgYXBpLm5vcm1hbGl6ZVBhdGhzID0gdHJ1ZSAocGx1cmFsKSBzZXRzIGJvdGg6XG4gICAgLy8gYGFwaS5ub3JtYWxpemVQYXRoID0gaHlwaGVuYXRlYCBhbmQgYGFwaS5kZW5vcm1hbGl6ZVBhdGggPSBjYW1lbGl6ZWBcbiAgICBhcGkubm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gaHlwaGVuYXRlIDogdmFsID0+IHZhbFxuICAgIGFwaS5kZW5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGNhbWVsaXplIDogdmFsID0+IHZhbFxuXG4gICAgLy8gQWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGF1dGggcmVzb3VyY2VzLCBsaWtlIHNvOlxuICAgIC8vIGFwaS51c2VycyA9IHtcbiAgICAvLyAgIHBhdGg6ICcvYWRtaW5zJyxcbiAgICAvLyAgIC8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdHM6XG4gICAgLy8gICBsb2dpbjoge1xuICAgIC8vICAgICBwYXRoOiAnbG9naW4nLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGxvZ291dDoge1xuICAgIC8vICAgICBwYXRoOiAnbG9nb3V0JyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzZXNzaW9uOiB7XG4gICAgLy8gICAgIHBhdGg6ICdzZXNzaW9uJyxcbiAgICAvLyAgICAgbWV0aG9kOiAnZ2V0J1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBjb25zdCB1c2VycyA9IGFwaS51c2VycyA9IGdldFJlc291cmNlKGFwaS51c2Vycywge1xuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nXG4gICAgfSkgfHwge31cbiAgICB1c2Vycy5sb2dpbiA9IGdldFJlc291cmNlKHVzZXJzLmxvZ2luIHx8ICdsb2dpbicsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMubG9nb3V0ID0gZ2V0UmVzb3VyY2UodXNlcnMubG9nb3V0IHx8ICdsb2dvdXQnLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLnNlc3Npb24gPSBnZXRSZXNvdXJjZSh1c2Vycy5zZXNzaW9uIHx8ICdzZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyBvZiByZXNvdXJjZSBwYXRoIGhhbmRsZXJzOlxuICAgIC8vIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgLy8gICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgLy8gICAgIHJldHVybiByZXNvdXJjZS5wYXJlbnRcbiAgICAvLyAgICAgICA/IGAke3Jlc291cmNlLnBhdGh9PyR7cmVzb3VyY2UucGFyZW50LnBhdGh9X2lkPSR7XG4gICAgLy8gICAgICAgICAgcmVzb3VyY2UucGFyZW50LmlkfWBcbiAgICAvLyAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkucmVzb3VyY2VzID0ge1xuICAgICAgYW55KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzW3Jlc291cmNlPy50eXBlXSB8fCB0aGlzLmRlZmF1bHRcbiAgICAgICAgcmV0dXJuIHJlc291cmNlICYmIGhhbmRsZXIuY2FsbCh0aGlzLCByZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIGRlZmF1bHQocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHRoaXMuYW55KHJlc291cmNlLnBhcmVudClcbiAgICAgICAgcmV0dXJuIHBhcmVudFBhdGhcbiAgICAgICAgICA/IGAke3BhcmVudFBhdGh9LyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgICB9LFxuXG4gICAgICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQocmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBtZW1iZXIocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gTk9URTogV2UgYXNzdW1lIHRoYXQgYWxsIG1lbWJlcnMgaGF2ZSByb290LWxldmVsIGNvbGxlY3Rpb24gcm91dGVzLFxuICAgICAgICAvLyB0byBhdm9pZCBleGNlc3NpdmUgbmVzdGluZyBvZiAoc3ViLSljb2xsZWN0aW9uIHJvdXRlcy5cbiAgICAgICAgcmV0dXJuIGAke3Jlc291cmNlLnBhdGh9LyR7cmVzb3VyY2UuaWR9YFxuICAgICAgfSxcblxuICAgICAgdXBsb2FkKHJlc291cmNlKSB7XG4gICAgICAgIC8vIERpdG8gU2VydmVyIGhhbmRsZXMgdXBsb2FkIHJvdXRlcyBvbiB0aGUgY29sbGVjdGlvbiByZXNvdXJjZTpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29sbGVjdGlvbihyZXNvdXJjZS5wYXJlbnQpfS91cGxvYWQvJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgIH0sXG5cbiAgICAgIC4uLmFwaS5yZXNvdXJjZXNcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIC8gZXh0ZW5kaW5nIG9mIGhlYWRlcnM6XG4gICAgLy8gYXBpLmhlYWRlcnMgPSB7XG4gICAgLy8gICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgLy8gfVxuICAgIGFwaS5oZWFkZXJzID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIC4uLmFwaS5oZWFkZXJzXG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGVsKSkge1xuICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKVxuICAgIH1cblxuICAgIHRoaXMucm9vdCA9IG5ldyBWdWUoe1xuICAgICAgZWwsXG4gICAgICByb3V0ZXI6IG5ldyBWdWVSb3V0ZXIoe1xuICAgICAgICBtb2RlOiAnaGlzdG9yeScsXG4gICAgICAgIGJhc2U6IGRpdG8uYmFzZSxcbiAgICAgICAgbGlua0FjdGl2ZUNsYXNzOiAnJyxcbiAgICAgICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICcnXG4gICAgICB9KSxcbiAgICAgIGNvbXBvbmVudHM6IHsgRGl0b1Jvb3QgfSxcbiAgICAgIC8vIE1vc3QgaW5qZWN0cyBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlIHJlYWN0aXZlbmVzcyBhY3Jvc3NcbiAgICAgIC8vIHByb3ZpZGUvaW5qZWN0LCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICAgIHByb3ZpZGU6IHtcbiAgICAgICAgYXBpLFxuICAgICAgICAvLyBBIGRlZmF1bHQgbGlzdCBvZiB2ZXJicyBhcmUgcHJvdmlkZWQgYnkgJHZlcmJzKCkgYW5kIGNhbiBiZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGF0IGFueSBwb2ludCBpbiB0aGUgY29tcG9uZW50IGhpZXJhcmNoeS5cbiAgICAgICAgJHZlcmJzOiAoKSA9PiB2ZXJicyxcbiAgICAgICAgLy8gUHJvdmlkZSBkZWZhdWx0cyBzbyBEaXRvTWl4aW4gY2FuIGluamVjdCB0aGVtIGZvciBhbGwgY29tcG9uZW50czpcbiAgICAgICAgLy8gICBpbmplY3Q6IFsgICckaXNQb3B1bGF0ZWQnLCAnJHNjaGVtYUNvbXBvbmVudCcsICckcm91dGVDb21wb25lbnQnIF1cbiAgICAgICAgJHZpZXdzOiAoKSA9PiB7fSxcbiAgICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0cnVlLFxuICAgICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkYXRhQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICAgICAgfSxcblxuICAgICAgcmVuZGVyOiBjcmVhdGVFbGVtZW50ID0+IGNyZWF0ZUVsZW1lbnQoRGl0b1Jvb3QsIHtcbiAgICAgICAgLy8gUHJlc2VydmUgdGhlIHJvb3QgY29udGFpbmVyJ3MgaWQsIGFzIHJlcXVpcmVkIGJ5IGhvdC1yZWxvYWRpbmc6XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgaWQ6IGVsLmlkXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgdW5yZXNvbHZlZFZpZXdzOiB2aWV3cyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFRoaXMgbWF5IG9ubHkgYmUgbmVlZGVkIHRvIGF2b2lkIHRyZWUtc2hhY2tpbmcgb2YgdGhlc2UgY29tcG9uZW50cyxcbiAgICAgICAgLy8gc2luY2UgdGhleSBhY3R1YWxseSBoYW5kbGUgcmVnaXN0cnkgaW50ZXJuYWxseSBhbHJlYWR5LlxuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgLi4uY29tcG9uZW50cyxcbiAgICAgICAgICAuLi50eXBlc1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICByZWdpc3Rlcih0eXBlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIFR5cGVDb21wb25lbnQucmVnaXN0ZXIodHlwZSwgb3B0aW9ucylcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfSAoJHtyZXNwb25zZS5zdGF0dXNUZXh0fSlgKVxuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QoYXBpLCB7XG4gIHVybCxcbiAgbWV0aG9kID0gJ2dldCcsXG4gIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYHF1ZXJ5YCBvbiAyMDIyLTExLTAxLFxuICAvLyByZW1vdmUgb25jZSBub3QgaW4gdXNlIGFueXdoZXJlIGFueW1vcmUuXG4gIHBhcmFtcyA9IG51bGwsXG4gIHF1ZXJ5ID0gcGFyYW1zIHx8IG51bGwsXG4gIGhlYWRlcnMgPSBudWxsLFxuICBkYXRhID0gbnVsbFxufSkge1xuICBpZiAocGFyYW1zKSB7XG4gICAgZGVwcmVjYXRlKGByZXF1ZXN0LnBhcmFtcyBpcyBkZXByZWNhdGVkLiBVc2UgYWN0aW9uLm1ldGhvZCBhbmQgYWN0aW9uLnBhdGggaW5zdGVhZC5gKVxuICB9XG5cbiAgY29uc3QgaXNBcGlVcmwgPSBhcGkuaXNBcGlVcmwodXJsKVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYXBpLmdldEFwaVVybCh7IHVybCwgcXVlcnkgfSksIHtcbiAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgIC4uLihkYXRhICYmIHsgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YSkgfSksXG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uKGlzQXBpVXJsICYmIGFwaS5oZWFkZXJzKSxcbiAgICAgIC4uLmhlYWRlcnNcbiAgICB9LFxuICAgIGNyZWRlbnRpYWxzOiBpc0FwaVVybCAmJiBhcGkuY29ycz8uY3JlZGVudGlhbHNcbiAgICAgID8gJ2luY2x1ZGUnXG4gICAgICA6ICdzYW1lLW9yaWdpbidcbiAgfSlcblxuICBpZiAocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgcmVzcG9uc2UuZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICB9XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IocmVzcG9uc2UpXG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIGlzQXBpVXJsKGFwaSwgdXJsKSB7XG4gIHJldHVybiAhaXNBYnNvbHV0ZVVybCh1cmwpIHx8IHVybC5zdGFydHNXaXRoKGFwaS51cmwpXG59XG5cbmZ1bmN0aW9uIGdldEFwaVVybChhcGksIHsgdXJsLCBxdWVyeSB9KSB7XG4gIGlmICghaXNBYnNvbHV0ZVVybCh1cmwpKSB7XG4gICAgdXJsID0gY29tYmluZVVybHMoYXBpLnVybCwgdXJsKVxuICB9XG4gIC8vIFN1cHBvcnQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycywgdG8gYmUgYXJlIGFkZGVkIHRvIHRoZSBVUkwuXG4gIGNvbnN0IHNlYXJjaCA9IGZvcm1hdFF1ZXJ5KHF1ZXJ5KVxuICByZXR1cm4gc2VhcmNoID8gYCR7dXJsfT8ke3NlYXJjaH1gIDogdXJsXG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVVcmxzKGJhc2VVcmwsIHJlbGF0aXZlVXJsKSB7XG4gIC8vIFVzZSBzYW1lIGFwcHJvYWNoIGFzIGF4aW9zIGBjb21iaW5lVVJMcygpYCB0byBqb2luIGJhc2VVcmwgJiByZWxhdGl2ZVVybDpcbiAgcmV0dXJuIGAke2Jhc2VVcmwucmVwbGFjZSgvXFwvKyQvLCAnJyl9LyR7cmVsYXRpdmVVcmwucmVwbGFjZSgvXlxcLysvLCAnJyl9YFxufVxuXG5mdW5jdGlvbiBmb3JtYXRRdWVyeShxdWVyeSkge1xuICBjb25zdCBlbnRyaWVzID0gcXVlcnlcbiAgICA/IGlzQXJyYXkocXVlcnkpXG4gICAgICA/IHF1ZXJ5XG4gICAgICA6IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KVxuICAgIDogW11cbiAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgLy8gRXhwYW5kIGFycmF5IHZhbHVlcyBpbnRvIG11bHRpcGxlIGVudHJpZXMgdW5kZXIgdGhlIHNhbWUga2V5LCBzb1xuICAgIC8vIGBmb3JtYXRRdWVyeSh7IGZvbzogWzEsIDJdLCBiYXI6IDMgfSlgID0+ICdmb289MSZmb289MiZiYXI9MycuXG4gICAgZW50cmllcy5yZWR1Y2UoXG4gICAgICAoZW50cmllcywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIGFzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksIHZhbF0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICAgIH0sXG4gICAgICBbXVxuICAgIClcbiAgKS50b1N0cmluZygpXG59XG4iXSwibmFtZXMiOlsiYXBwU3RhdGUiLCJhcHBlbmREYXRhUGF0aCIsImRhdGFQYXRoIiwidG9rZW4iLCJwYXJzZVBhcmVudERhdGFQYXRoIiwicGF0aCIsInBhcnNlRGF0YVBhdGgiLCJwYXJzZUl0ZW1EYXRhUGF0aCIsIm5lc3RlZCIsImdldEl0ZW1EYXRhUGF0aCIsIm5vcm1hbGl6ZURhdGFQYXRoIiwicGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgiLCJpc0ludGVnZXIiLCJnZXRQYXJlbnRJdGVtRGF0YVBhdGgiLCJnZXRJdGVtIiwicm9vdEl0ZW0iLCJnZXRWYWx1ZUF0RGF0YVBhdGgiLCJnZXRQYXJlbnRJdGVtIiwiZ2V0TGFzdERhdGFQYXRoVG9rZW4iLCJnZXRMYXN0RGF0YVBhdGhOYW1lIiwiZ2V0TGFzdERhdGFQYXRoSW5kZXgiLCJpbmRleCIsInRlbXBvcmFyeUlkIiwic2V0VGVtcG9yYXJ5SWQiLCJkYXRhIiwiaWRLZXkiLCJpc1RlbXBvcmFyeUlkIiwiaWQiLCJpc1JlZmVyZW5jZSIsImNvbnRleHRzIiwiZ2V0IiwiY29udGV4dCIsImtleSIsImRlZmF1bHRWYWx1ZSIsIm9iamVjdCIsInZhbHVlIiwiaXNGdW5jdGlvbiIsInNldCIsIkRpdG9Db250ZXh0IiwiY29tcG9uZW50IiwiX2EiLCJwYXJlbnRJdGVtIiwib3B0aW9ucyIsImxvY2F0aW9uIiwicmVzb3VyY2UiLCJFbWl0dGVyTWl4aW4iLCJldmVudCIsImNhbGxiYWNrIiwiaXNBcnJheSIsImV2IiwiaXNQbGFpbk9iamVjdCIsImV2ZW50cyIsImNhbGxiYWNrcyIsIm9uIiwiYXJncyIsImVudHJ5IiwiY2IiLCJxdWV1ZSIsInJlc29sdmUiLCJuZXh0IiwicmVzdWx0IiwicmVzIiwiZXJyb3IiLCJ0YXJnZXQiLCJ0eXBlQ2hlY2tlcnMiLCJpc0Jvb2xlYW4iLCJpc051bWJlciIsImlzU3RyaW5nIiwiaXNEYXRlIiwiaXNPYmplY3QiLCJpc1JlZ0V4cCIsInR5cGVDb252ZXJ0ZXJzIiwiYXNBcnJheSIsImlzTWF0Y2hpbmdUeXBlIiwidHlwZXMiLCJ0eXBlIiwiY29udmVydFR5cGUiLCJjb252ZXJ0ZXIiLCJoYXNSZXNvdXJjZSIsInNjaGVtYSIsImdldFJlc291cmNlIiwiZGVmYXVsdHMiLCJwYXJlbnQiLCJkZWZzIiwiZ2V0TWVtYmVyUmVzb3VyY2UiLCJwaWNrQnkiLCJEaXRvTWl4aW4iLCJ1aWQiLCJrZXlPckRhdGFQYXRoIiwiZGVmIiwiY29udmVydGVkIiwibmFtZSIsImxhYmVsaXplIiwiYnV0dG9uIiwidmVyYiIsImRyYWdnYWJsZSIsImZhbGxiYWNrIiwicXVlcnkiLCJjb21wb25lbnRzIiwiYnV0dG9ucyIsInNldHRpbmdzIiwicmVqZWN0IiwiRGl0b0NvbXBvbmVudCIsInVybCIsIm1ldGhvZCIsImludGVybmFsIiwiY2hlY2tVc2VyIiwicmVzcG9uc2UiLCJlcXVhbHMiLCJjYWNoZSIsImNhY2hlUGFyZW50IiwibG9hZENhY2hlIiwiY2FjaGVLZXkiLCJsb2NhbGUiLCJmb3JtYXQiLCJhIiwiYm9keSIsImFjY2Vzc29yIiwid2F0Y2giLCJoYW5kbGVycyIsImV4cHIiLCJhZGRFdmVudCIsImh5cGhlbmF0ZSIsImhhc0xpc3RlbmVycyIsInBhcmVudEhhc0xpc3RlbmVycyIsImdldENvbnRleHQiLCJwYXJhbXMiLCJpc0NyZWRpdENhcmQiLCJkZWNpbWFscyIsIm1hdGNoIiwiaXNFbWFpbCIsImlzSG9zdG5hbWUiLCJpc0RvbWFpbiIsIm1heCIsIm1pbiIsInBhc3N3b3JkIiwiaXNVcmwiLCJWYWxpZGF0aW9uTWl4aW4iLCJub3RpZnkiLCJpc1ZhbGlkIiwicnVsZSIsInNldHRpbmciLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0aW9ucyIsInZhbGlkYXRlIiwibWVzc2FnZSIsImFkZExhYmVsIiwiZXJyb3JzIiwiZm9jdXMiLCJnZXRTY2hlbWFBY2Nlc3NvciIsImdldFN0b3JlQWNjZXNzb3IiLCJ1aWRNYXAiLCJnZXRVaWQiLCJpdGVtSWQiLCJTY2hlbWFHcmFwaCIsIl9fcHVibGljRmllbGQiLCJzdWJHcmFwaCIsInBhcnQiLCJyZWxhdGVkRGF0YVBhdGgiLCJfYiIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJyZWxhdGVkIiwicmVmZXJlbmNlIiwic291cmNlIiwicmVsYXRpb24iLCJ2YWx1ZXMiLCJyZW1vdmVJZCIsInJlZmVyZW5jZUlkIiwicmVmS2V5IiwicmV2VmFsdWUiLCJ0eXBlQ29tcG9uZW50cyIsInVua25vd25UeXBlUmVwb3J0ZWQiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiZm9yRWFjaFNjaGVtYSIsInNjaGVtYXMiLCJmb3JFYWNoU2NoZW1hQ29tcG9uZW50Iiwic29tZVNjaGVtYUNvbXBvbmVudCIsInJlc29sdmVTY2hlbWEiLCJ1bndyYXBNb2R1bGUiLCJpc1Byb21pc2UiLCJpc01vZHVsZSIsImtleXMiLCJyZXNvbHZlU2NoZW1hcyIsInVucmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZUl0ZW0iLCJpdGVtIiwicmVzb2x2ZVBhbmVscyIsInBhbmVscyIsInByb2Nlc3NWaWV3IiwiYXBpIiwicm91dGVzIiwiY2hpbGRyZW4iLCJwcm9jZXNzUm91dGVTY2hlbWEiLCJpc1NpbmdsZUNvbXBvbmVudFZpZXciLCJwcm9jZXNzQ29tcG9uZW50IiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMiLCJsZXZlbCIsImdldFR5cGVPcHRpb25zIiwicHJvbWlzZXMiLCJwcm9jZXNzRm9ybXMiLCJmb3JtIiwiZm9ybXMiLCJyZXNvbHZlRm9ybSIsImhhc0Zvcm1TY2hlbWEiLCJoYXNNdWx0aXBsZUZvcm1TY2hlbWFzIiwiZ2V0Vmlld1NjaGVtYSIsInZpZXciLCJ2aWV3U2NoZW1hIiwidmlld0NvbXBvbmVudCIsImdldFZpZXdFZGl0UGF0aCIsImdldEZvcm1TY2hlbWFzIiwibW9kaWZ5Rm9ybSIsImNvbXBhY3QiLCJnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyIsImdldEl0ZW1Gb3JtU2NoZW1hIiwiaGFzTGFiZWwiLCJpc0NvbXBhY3QiLCJpc0lubGluZWQiLCJpc05lc3RlZCIsInNob3VsZE9taXRQYWRkaW5nIiwiZ2V0RGVmYXVsdFZhbHVlIiwiY2xvbmUiLCJpZ25vcmVNaXNzaW5nVmFsdWUiLCJ0eXBlT3B0aW9ucyIsImhhc0xhYmVscyIsImNoZWNrQ29tcG9uZW50cyIsInNldERlZmF1bHRzIiwicHJvY2Vzc1NjaGVtYURhdGEiLCJjb21wdXRlVmFsdWUiLCJyb290RGF0YSIsImNvbXB1dGUiLCJWdWUiLCJjbG9uZUl0ZW0iLCJjb3B5Iiwib3JkZXJLZXkiLCJwcm9jZXNzRGF0YSIsInNjaGVtYU9ubHkiLCJwcm9jZXNzZWREYXRhIiwid3JhcFByaW1pdGl2ZXMiLCJiIiwiaWQxIiwiaWQyIiwiZXhjbHVkZSIsInByb2Nlc3MiLCJwcm9jZXNzVmFsdWUiLCJwcm9jZXNzQmVmb3JlIiwicHJvY2Vzc0FmdGVyIiwicHJvY2Vzc0NvbXBvbmVudHMiLCJnZXREYXRhUGF0aCIsImNvbXBvbmVudFNjaGVtYSIsImNvbXBvbmVudERhdGFQYXRoIiwicHJvY2Vzc0l0ZW0iLCJwcm9jZXNzZWRJdGVtIiwidGFiIiwicGFuZWwiLCJnZXRBbGxQYW5lbFNjaGVtYXMiLCJnZXROYW1lZFNjaGVtYXMiLCJkZXNjcmlwdGlvbnMiLCJ0b09iamVjdCIsImFycmF5IiwidG9TY2hlbWEiLCJjYW1lbGl6ZSIsImdldEJ1dHRvblNjaGVtYXMiLCJnZXRUeXBlIiwic2NoZW1hT3JUeXBlIiwiZ2V0U291cmNlVHlwZSIsIl9jIiwiZ2V0UGFuZWxTY2hlbWEiLCJ0YWJDb21wb25lbnQiLCJnZXRQYW5lbFNjaGVtYXMiLCJzY2hlbWFDb21wb25lbnQiLCJpc09iamVjdFNvdXJjZSIsImlzTGlzdFNvdXJjZSIsImdldEl0ZW1JZCIsImdldEl0ZW1VaWQiLCJUeXBlTWl4aW4iLCJwYXJzZSIsImxhYmVsIiwibmF0aXZlRmllbGQiLCJ0ZXh0RmllbGQiLCJhdHRyaWJ1dGVzIiwibGlzdGVuZXJzIiwiYWRkIiwiZWxlbWVudCIsIm1peGlucyIsImNvbXAiLCJjdG9yIiwiRGl0b1VzZXIiLCJyb2xlcyIsInJvbGUiLCJTY2hlbWFQYXJlbnRNaXhpbiIsInNjaGVtYUNvbXBvbmVudHMiLCJWYWxpZGF0b3JNaXhpbiIsIml0IiwiUm91dGVNaXhpbiIsInRvIiwiZnJvbSIsIm1hdGNoZWQiLCJpIiwicmVjb3JkIiwiYnJlYWRjcnVtYiIsInJvdXRlQ29tcG9uZW50cyIsIm9rIiwidGVtcGxhdGVQYXRoIiwicm9vdFBhdGgiLCJnZXRDb21tb25QcmVmaXgiLCJyZW5kZXIiLCJfdm0iLCJfaCIsInN0YXRpY1JlbmRlckZucyIsIl9fdnVlMl9zY3JpcHQiLCJpc0xvYWRpbmciLCJEb21NaXhpbiIsInJlbW92ZSIsImhhbmRsZXIiLCJhZGRFdmVudHMiLCIkZXZlbnQiLCJlcnIiLCJ0aXRsZSIsInRleHQiLCJsb2ciLCJzdHJpcFRhZ3MiLCJub3RpZmljYXRpb25zIiwiZHVyYXRpb25GYWN0b3IiLCJkdXJhdGlvbiIsImFkZGl0aW9uYWxDb21wb25lbnRzIiwicmVkaXJlY3RBZnRlckxvZ2luIiwibG9naW5EYXRhIiwidXNlciIsIkRpdG9WaWV3Iiwicm91dGUiLCJTcGlubmVyIiwiUHVsc2VMb2FkZXIiLCJzaXplIiwiY29sb3IiLCJwcm9wcyIsIlB1bGxkb3duTWl4aW4iLCJzdGFydFRpbWUiLCJvcGVuIiwiZGlhbG9nRGF0YSIsImNvbnRlbnQiLCJhc09iamVjdCIsInByZWZpeCIsInN1ZmZpeCIsIkl0ZW1NaXhpbiIsImV4dGVuZGVkIiwiaXRlbUxhYmVsIiwiZm9ybUxhYmVsIiwiZ2V0Rm9ybUxhYmVsIiwiY29sdW1ucyIsImhhZExhYmVsIiwiVHJhbnNpdGlvbkhlaWdodCIsInBhbmUiLCJjdXJyZW50VGFiIiwiZmlyc3QiLCJkZWZhdWx0VGFiIiwiZGF0YVBhdGhPck5hbWUiLCJleHBhbmQiLCJjb21wb25lbnRzQnlEYXRhUGF0aCIsImRhdGFQYXRocyIsImNoZWNrIiwiZmllbGQiLCJ1bm1hdGNoZWQiLCJlcnJzIiwiZnVsbERhdGFQYXRoIiwiZGF0YVBhdGhQYXJ0cyIsImZvdW5kIiwicHJvcGVydHkiLCJzdWJDb21wb25lbnRzIiwicmVnaXN0cnkiLCJlbnRyaWVzQnlEYXRhUGF0aCIsIl9yZWYiLCJuZXN0ZWREYXRhUGF0aCIsInN0b3JlIiwicGFyc2VGcmFjdGlvbiIsImRpdmlkZW5kIiwiZGl2aXNvciIsIndpZHRoIiwiZGlzYWJsZWQiLCJjb250YWluZXJDbGFzcyIsImJhc2lzIiwiZ3JvdyIsInNocmluayIsImJhc2lzSXNBdXRvIiwidGFiU2NoZW1hIiwiYnV0dG9uU2NoZW1hIiwiYnV0dG9uRGF0YVBhdGgiLCJub2RlIiwiY2FwaXRhbGl6ZSIsImNsaXBib2FyZERhdGEiLCJwYXN0ZSIsInJlcG9ydCIsImpzb24iLCJfZCIsImRlaW5kZW50IiwiJHNjaGVtYSIsIl9lIiwiTG9hZGluZ01peGluIiwidXBkYXRlUm9vdCIsInVwZGF0ZVZpZXciLCJSZXNvdXJjZU1peGluIiwiYW1vdW50IiwicGFnZSIsInN0YXJ0IiwicmFuZ2UiLCJ2ZXJicyIsImNsZWFyIiwibG9hZGluZ09wdGlvbnMiLCJyZXF1ZXN0Iiwic2V0RGF0YSIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJub3RpZnlTdWNjZXNzIiwibm90aWZ5RXJyb3IiLCJpc0NyZWF0aW5nIiwicHJvdmlkZXNEYXRhIiwibWVyZ2UiLCJkYXRhUGFydHMiLCJwYXRoUGFydHMiLCJyb3V0ZVBhcnRzIiwibGFzdERhdGFQYXJ0IiwibCIsImRhdGFQYXJ0IiwibWFpblNjaGVtYUNvbXBvbmVudCIsIm5ld1ZhbHVlIiwib2xkVmFsdWUiLCJwcmVzZW50IiwiY2xvc2VGb3JtIiwiZ2V0VmVyYiIsImJ1dHR0b25SZXNvdXJjZSIsInN1Y2Nlc3MiLCJfcmVzb3VyY2UiLCJfbWV0aG9kIiwiRGl0b0Zvcm0iLCJzY29wZSIsIm5hdmlnYXRlIiwiUGFnaW5hdGlvbiIsIk9yZGVyZWRNaXhpbiIsIm9sZEluZGV4IiwibmV3SW5kZXgiLCJsaXN0IiwicGFnaW5hdGlvblJhbmdlIiwib2Zmc2V0IiwiVnVlRHJhZ2dhYmxlIiwiY2hpbGRyZW5TY2hlbWEiLCJlZGl0UGF0aCIsImNoaWxkcmVuT3BlbiIsIm51bUNoaWxkcmVuIiwiY3JlYXRhYmxlIiwiZWRpdGFibGUiLCJjb2x1bW4iLCJvcmRlciIsImVzY2FwZUh0bWwiLCJoIiwiVHlwZUNvbXBvbmVudCIsIlR5cGVDb21wb25lbnQkMSIsImRlZmluaXRpb24iLCIkJGEiLCIkJGVsIiwiJCRjIiwiJCR2IiwiJCRpIiwiRGF0YU1peGluIiwicmVzb2x2ZUNvdW50ZXIiLCJhc3luY0VudHJ5IiwicmVzb2x2ZWREYXRhIiwibG9hZCIsIk9wdGlvbnNNaXhpbiIsImNvbnZlcnRWYWx1ZSIsImNvbnZlcnQiLCJzZWFyY2giLCJmaWx0ZXIiLCJkZWJvdW5jZSIsImRlYm91bmNlQXN5bmMiLCJvcHRpb24iLCJncm91cGVkIiwicmVzdWx0cyIsImdyb3VwIiwiZmluZE9wdGlvbiIsImdyb3VwQnkiLCJvcHRpb25WYWx1ZSIsIm9wdGlvbkxhYmVsIiwicHJvY2Vzc1JlbGF0ZSIsImZsYXNrIiwiQ29kZUZsYXNrIiwiY2hhbmdlZCIsImlnbm9yZVdhdGNoIiwiaWdub3JlVXBkYXRlIiwib25DaGFuZ2UiLCJvbkZvY3VzIiwib25CbHVyIiwic2V0Q29kZSIsImNvZGUiLCJzZXRWYWx1ZSIsIlRyaWdnZXIiLCJTa2V0Y2hQaWNrZXIiLCJ0aW55Y29sb3IiLCJmb2N1c2VkIiwiRGF0ZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJEYXRlVGltZVBpY2tlciIsIlNvdXJjZU1peGluIiwiZGVmYXVsdFNvcnQiLCJkaXJlY3Rpb24iLCJjb2xsYXBzaWJsZSIsImxpc3REYXRhIiwibGVuZ3RoIiwib25Db21wbGV0ZSIsIm9wZW5lZCIsImNhbGxPbkNvbXBsZXRlIiwicm91dGVDb21wb25lbnQiLCJpbmxpbmVkIiwicGFyYW0iLCJtZXRhIiwiZm9ybU1ldGEiLCJjaGlsZFJvdXRlcyIsImdldFBhdGhXaXRoUGFyYW0iLCJzb3VyY2VQYXRoIiwiZm9ybVJvdXRlIiwiZmxhdFJvdXRlcyIsInN1YlJvdXRlcyIsImNoaWxkUm91dGUiLCJmaWx0ZXJDb21wb25lbnRzIiwiZGF0ZUZvcm1hdCIsImdldEZpbHRlcnNQYW5lbCIsImZpbHRlcnMiLCJwcm94eSIsInBhcnNlRmlsdGVyc0RhdGEiLCJnZXRGaWx0ZXJzQ29tcG9uZW50cyIsImZvcm1hdEZpbHRlcnNEYXRhIiwiY29tcHMiLCJnZXRDb21wb25lbnRzRm9yRmlsdGVyIiwiZmlsdGVyc0RhdGEiLCJnZXRMaXN0Q29tcG9uZW50Iiwib2JqIiwiZmlsdGVyc0RhdGFQYXRoIiwiaWNvbiIsImlzQWN0aXZlIiwib25DbGljayIsIkVkaXRvckNvbnRlbnQiLCJFZGl0b3JNZW51QmFyIiwiSWNvbiIsImNvbW1hbmQiLCJtYXJrQnV0dG9ucyIsImJhc2ljTm9kZUJ1dHRvbnMiLCJvdGhlck5vZGVCdXR0b25zIiwidG9vbEJ1dHRvbnMiLCJlbmFibGVSdWxlcyIsInNldFZhbHVlRGVib3VuY2VkIiwiZ2V0VmFsdWUiLCJvblVwZGF0ZSIsImdldEhUTUwiLCJFZGl0b3IiLCJnZXRQb2ludCIsIngiLCJ5IiwicHJldlkiLCJoZWlnaHQiLCJtb3VzZW1vdmUiLCJhdHRycyIsImRpYWxvZ0NvbXBvbmVudCIsImhyZWYiLCJtYXJrcyIsIm5vZGVzIiwidG9vbHMiLCJCb2xkIiwiSXRhbGljIiwiVW5kZXJsaW5lIiwiU3RyaWtlIiwiU21hbGwiLCJDb2RlIiwiTGlua1dpdGhUaXRsZSIsIkJsb2NrcXVvdGUiLCJDb2RlQmxvY2siLCJIYXJkQnJlYWsiLCJIZWFkaW5nIiwiSG9yaXpvbnRhbFJ1bGUiLCJMaXN0SXRlbSIsIkJ1bGxldExpc3QiLCJPcmRlcmVkTGlzdCIsIkhpc3RvcnkiLCJleHRlbnNpb24iLCJzZXR0aW5nc05hbWUiLCJhZGRCdXR0b24iLCJpZ25vcmVBY3RpdmUiLCJkZXNjcmlwdGlvbiIsInNldHRpbmdOYW1lIiwidW5kZXJzY29yZSIsImF0dHIiLCJNYXJrIiwidG9nZ2xlTWFyayIsIkxpbmsiLCJkb20iLCJWdWVNdWx0aXNlbGVjdCIsInBsYWNlaG9sZGVyIiwic2VhcmNoYWJsZSIsInRhZ2dhYmxlIiwidGFnIiwiTnVtYmVyTWl4aW4iLCJzdGVwIiwiSW5wdXRGaWVsZCIsIiQkc2VsZWN0ZWRWYWwiLCJvIiwidmFsIiwib3B0IiwiU3dpdGNoQnV0dG9uIiwibWFza2VkUGFzc3dvcmQiLCJoYXNFZGl0YWJsZUZvcm1zIiwiZm9ybWF0RmlsZVNpemUiLCJmaWxlc2l6ZSIsImZpbGUiLCJWdWVVcGxvYWQiLCJhc0ZpbGVzIiwiYWNjZXB0IiwibWF4U2l6ZSIsInBhcnNlRmlsZVNpemUiLCJ0b3RhbCIsIm5ld0ZpbGUiLCJvbGRGaWxlIiwieGhyIiwiZmlsZXMiLCJ1cGxvYWQiLCJsb2dnZWREZXByZWNhdGlvbnMiLCJkZXByZWNhdGUiLCJWdWVSb3V0ZXIiLCJWdWVfX2RlZmF1bHQiLCJWdWVNb2RhbCIsIlZ1ZU5vdGlmaWNhdGlvbnMiLCJEaXRvQWRtaW4iLCJlbCIsImRpdG8iLCJ2aWV3cyIsImRlZmF1bHRGb3JtYXRzIiwiZ2V0QXBpVXJsIiwiaXNBcGlVcmwiLCJ1c2VycyIsInBhcmVudFBhdGgiLCJEaXRvUm9vdCIsImNyZWF0ZUVsZW1lbnQiLCJSZXF1ZXN0RXJyb3IiLCJoZWFkZXJzIiwiaXNBYnNvbHV0ZVVybCIsImNvbWJpbmVVcmxzIiwiZm9ybWF0UXVlcnkiLCJiYXNlVXJsIiwicmVsYXRpdmVVcmwiXSwibWFwcGluZ3MiOiI0aERBQWVBLEdBQUEsQ0FDYixNQUFPLEdBQ1AsZ0JBQWlCLENBQUUsRUFDbkIsS0FBTSxLQUNOLFVBQVcsQ0FBRSxFQUNiLFlBQWEsS0FDYixjQUFlLElBQ2pCLEVDSE8sU0FBU0MsRUFBZUMsRUFBVUMsRUFBTyxDQUM5QyxPQUFPRCxFQUNILEdBQUdBLEtBQVlDLElBQ2ZBLENBQ04sQ0FFTyxTQUFTQyxHQUFvQkYsRUFBVSxDQUM1QyxNQUFNRyxFQUFPQyxFQUFhLGNBQUNKLENBQVEsRUFDbkMsT0FBQUcsR0FBQSxNQUFBQSxFQUFNLE1BQ0NBLENBQ1QsQ0FNTyxTQUFTRSxH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QUEsV0FBQXNHLENBQUEsRUFBQXRHLEVBQ0EsR0FBQWxPLEVBQUFBLFdBQUF3VSxDQUFBLEVBQ0FBLEVBQUEsS0FBQSxLQUFBLEtBQUEsT0FBQSxFQUNBQSxFQUVBLE9BQUF0RyxFQUVBcUcsSUFDQUEsRUFBQXJHLEVBRUEsQ0FDQSxPQUFBcUcsQ0FDQSxDQUNBLEVBRUEsV0FBQSxPQUNBLE9BQUFuVSxFQUFBLEtBQUEsU0FBQSxZQUFBQSxFQUFBLFNBQ0EsRUFFQSxlQUFBLENBQ0EsT0FBQSxLQUFBLFlBQUEsQ0FBQSxPQUFBLFNBQUEsV0FBQSxHQUFBLENBQ0EsRUFFQSxlQUFBLENBQ0EsTUFBQSxDQUNBLFFBQUEsS0FBQSxPQUFBLEtBQ0EsR0FBQSxLQUFBLFlBQUEsQ0FBQSxPQUFBLFlBQUEsV0FBQSxHQUFBLENBQ0EsQ0FDQSxFQVFBLE1BQUEsQ0FDQSxPQUFBLEtBQUEsSUFDQSxFQUVBLFVBQUEsQ0FDQSxPQUFBLEtBQUEsUUFDQSxFQUVBLGVBQUEsQ0FDQSxPQUFBLEtBQUEsYUFDQSxFQUVBLGVBQUEsQ0FDQSxPQUFBLEtBQUEsYUFDQSxFQUVBLFlBQUEsQ0FDQSxPQUFBdkIsR0FBQSxLQUFBLFNBQUEsS0FBQSxTQUFBLEVBQUEsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxPQUFBLEtBQUEsU0FDQSxLQUFBLGtCQUFBLEtBQUEsYUFBQSxLQUFBLEtBQUEsS0FBQSxPQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxPQUFBLEtBQUEsY0FBQTZSLEdBQUFBLEVBQUEsT0FBQSxDQUNBLEVBRUEsV0FBQSxDQUNBLE9BQUEsS0FBQSxjQUFBQSxHQUFBQSxFQUFBLFNBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxPQUFBLEtBQUEsZUFBQUEsR0FBQUEsRUFBQSxPQUFBLENBQ0EsRUFFQSxhQUFBLENBQ0EsT0FBQSxLQUFBLGVBQUFBLEdBQUFBLEVBQUEsV0FBQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FBQSxDQUFBLEtBQUEsSUFDQSxFQUVBLFVBQUEsQ0FDQSxNQUFBLENBQUEsQ0FBQSxLQUFBLE9BQUEsS0FBQSxXQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FBQSxLQUFBLFNBQUEsQ0FBQSxDQUFBLEtBQUEsSUFDQSxFQUVBLGFBQUEsQ0FDQSxLQUFBLENBQUEsV0FBQTVNLEdBQUEsS0FBQSxPQUNBLE1BQUEsQ0FBQSxDQUFBQSxHQUFBLE9BQUEsS0FBQUEsQ0FBQSxFQUFBLE9BQUEsQ0FDQSxFQUVBLE9BQUFvRCxHQUFBLFNBQUEsQ0FDQSxTQUFBLENBQ0EsTUFBQSxDQUFBLEtBQUEsU0FDQSxDQUNBLENBQUEsRUFFQSxZQUFBLENBQ0EsT0FBQSxPQUFBLE9BQUEsS0FBQSxrQkFBQSxDQUNBLEVBRUEsT0FBQSxDQUNBLE9BQUEsT0FBQSxPQUFBLEtBQUEsYUFBQSxDQUNBLEVBRUEsUUFBQSxDQUNBLE9BQUEsT0FBQSxPQUFBLEtBQUEsY0FBQSxDQUNBLEVBRUEsc0JBQUEsQ0FDQSxPQUFBLEtBQUEsdUJBQUEsS0FBQSxrQkFBQSxDQUNBLEVBRUEsaUJBQUEsQ0FDQSxPQUFBLEtBQUEsdUJBQUEsS0FBQSxhQUFBLENBQ0EsRUFFQSxrQkFBQSxDQUNBLE9BQUEsS0FBQSx1QkFBQSxLQUFBLGNBQUEsQ0FDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLEtBQUEsVUFBQSxFQUFBLEVBQ0EsS0FBQSxrQkFBQSxFQUVBLEtBQUEsU0FBQSxTQUFBLEtBQUEscUJBQUEsRUFDQSxLQUFBLFVBQUEsWUFBQSxDQUNBLEVBRUEsZUFBQSxDQUNBLEtBQUEsVUFBQSxTQUFBLEVBQ0EsS0FBQSxVQUFBLEVBQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSx3QkFBQXBKLEVBQUErSCxFQUFBLENBQ0EsT0FBQSxLQUFBLHNCQUNBLEtBQUEscUJBQUEvSCxFQUFBK0gsQ0FDQSxDQUNBLEVBRUEsdUJBQUEvSCxFQUFBK0gsRUFBQSxDQUNBLE9BQUEsS0FBQSx3QkFBQS9ILEVBQUErSCxDQUFBLEVBQUEsSUFBQSxJQUNBLEVBRUEsb0JBQUEvSCxFQUFBK0gsRUFBQSxDQUNBLE9BQUEsS0FBQSxrQkFBQSxLQUFBLHFCQUFBL0gsRUFBQStI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Q0FBQSxLQUFBLE9BQUEsUUFBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLEtBQUEsRUFBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsT0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxPQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsU0FBQSxFQUFBLEVBQ0EsZUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsT0FBQSxJQUNBLENBQ0EsRUFFQSxTQUFBLENBQ0EsU0FBQSxDQUNBLE9BQUEsSUFBQWhFLEVBQUEsS0FBQSxDQUFBLE9BQUEsS0FBQSxPQUFBLENBQ0EsRUFFQSxhQUFBLENBQ0EsT0FBQXdLLEVBQUEsS0FBQSxNQUFBLEdBQUEsQ0FBQSxDQUNBLEVBRUEsVUFBQSxDQUNBLEtBQUEsQ0FBQSxPQUFBL0gsQ0FBQSxFQUFBLEtBQ0EsQ0FBQSxNQUFBK00sQ0FBQSxFQUFBL00sRUFDQSxPQUNBK00sSUFBQSxLQUNBLENBQUEsQ0FBQUEsR0FBQSxLQUFBLFlBQUEsZUFBQSxLQUFBLGVBRUEsRUFFQSxPQUFBLENBQ0EsT0FBQSxLQUFBLFNBQUEsS0FBQSxTQUFBLEtBQUEsTUFBQSxFQUFBLElBQ0EsRUFFQSxlQUFBLENBRUEsT0FBQSxLQUFBLE9BQUEsS0FBQSxTQUFBLElBQ0EsRUFFQSxlQUFBekksRUFBQSxRQUFBLENBQ0EsS0FBQSxDQUFBLE9BQUEsTUFBQSxFQUNBLFNBQUEsQ0FDQSxPQUFBLEtBQUEsWUFBQSxZQUNBLEVBQ0EsSUFBQTZPLEVBQUEsQ0FFQSxPQUFBQSxJQUFBLE9BQ0EsRUFDQS9ULEVBQUFBLFNBQUErVCxDQUFBLEVBQ0FBLEVBQUEsTUFBQSxtQkFBQSxFQUFBLEdBQ0FBLENBQ0EsQ0FDQSxDQUFBLEVBRUEsdUJBQUE3TyxF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QSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxTQUFBLEVBQUEsRUFDQSxrQkFBQSxDQUFBLEtBQUF2TSxFQUFBLFFBQUEsSUFBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxRQUFBLElBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxnQkFBQSxDQUNBLE9BQUEsSUFDQSxFQUVBLGNBQUEsQ0FDQSxPQUFBLEtBQUEsaUJBQ0EsRUFFQSxlQUFBLENBQ0EsT0FBQXlLLEVBQUEsS0FBQSxPQUFBLE9BQUEsQ0FDQSxFQUVBLFFBQUEsQ0FDQSxPQUFBLEtBQUEsT0FBQSxRQUFBLEtBQUEsUUFDQSxFQUVBLFlBQUEsQ0FDQSxNQUFBLENBQUEsQ0FBQSxLQUFBLE9BQ0EsRUFFQSxXQUFBLENBQ0EsT0FBQSxLQUFBLFNBQUEsS0FBQSxJQUNBLEVBRUEsYUFBQSxDQUNBLEdBQUEsS0FBQSxXQUNBLE9BQUEsS0FBQSxPQUNBLENBR0EsS0FBQSxDQUFBLEtBQUF2UCxLQUFBdUQsQ0FBQSxFQUFBLEtBQUEsT0FDQSxPQUFBQSxDQUNBLENBQ0EsRUFFQSxVQUFBLENBRUEsT0FBQSxLQUFBLFdBQUEsT0FBQSxLQUNBLEVBRUEsZUFBQSxDQUlBLE9BQUEsS0FBQSxXQUFBLEtBQUEsU0FBQSxLQUFBLGdCQUFBLFFBQ0EsRUFFQSxRQUFBc0UsRUFBQSxVQUFBLENBQ0EsS0FBQSxRQUNBLFFBQUEsRUFDQSxDQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsS0FBQSxVQUFBLEVBQUEsRUFHQSxLQUFBLENBQUEsS0FBQTdILEdBQUEsS0FBQSxPQUNBQSxJQUNBLEtBQUEsUUFBQVksRUFBQSxXQUFBWixDQUFBLEVBQ0FBLEVBQUEsS0FBQSxLQUFBLEtBQUEsT0FBQSxFQUNBQSxFQUVBLEVBRUEsZUFBQSxDQUNBLEtBQUEsVUFBQSxFQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsVUFBQTJRLEVBQUEsQ0FHQSxLQUFBLGdCQUFBLGVBQUEsS0FBQUEsQ0FBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLHNJQy9LQSxJQUFJd0IsR0FBUyxVQUFZLENBQ3ZCLElBQUlDLEVBQUksS0FDSkMsRUFBR0QsRUFBSSxlQUNQekMsRUFBR3lDLEVBQUksTUFBTSxJQUFJQyxFQUVyQixPQUFPRCxFQUFJLE9BQU8sT0FBUyxFQUFJekMsRUFBRyxNQUFPLENBQ3ZDLFlBQWEsYUFDZCxFQUFFeUMsRUFBSSxHQUFHQSxFQUFJLE9BQVEsU0FBVWdFLEVBQU0sQ0FDcEMsSUFBSTdTLEVBQVM2UyxFQUFLLE9BQ2QxWCxFQUFXMFgsRUFBSyxTQUNoQnZHLEVBQWV1RyxFQUFLLGFBQ3hCLE9BQU9oRSxFQUFJLGFBQWE3TyxDQUFNLEVBQUlvTSxFQUFHLGFBQWMsQ0FDakQsSUFBS3lDLEVBQUksWUFBWTFULEVBQVVtUixDQUFZLEVBQzNDLE1BQU8sQ0FDTCxPQUFVdE0sRUFDVixTQUFZN0UsRUFDWixLQUFRMFQsRUFBSSxLQUNaLEtBQVFBLEVBQUksS0FDWixNQUFTQSxFQUFJLGNBQWM3TyxFQUFPLElBQUksRUFDdEMsU0FBWUEsRUFBTyxVQUFZLEtBQU9BLEVBQU8sU0FBVzZPLEVBQUksU0FDNUQsa0JBQXFCdkMsQ0FDdEIsQ0FDUCxDQUFLLEVBQUl1QyxFQUFJLElBQ1YsQ0FBQSxFQUFHLENBQUMsRUFBSUEsRUFBSSxHQUFFLENBQ2pCLEVBRUlFLEdBQWtCLENBQUUsY0NFeEJDLEdBQUF6TixFQUFBLFVBQUEsY0FBQSxDQUNBLE1BQUEsQ0FDQSxPQUFBLENBQUEsS0FBQSxNQUFBLFFBQUEsSUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLFFBQUEsU0FBQSxFQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsWUFBQXBHLEVBQUFtUixFQUFBLENBR0EsT0FBQUEsRUFBQSxHQUFBQSxFQUFBLE9BQUFuUixJQUFBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLHNJQzVDQSxJQUFJeVQsR0FBUyxVQUFZLENBQ3ZCLElBQUlDLEVBQUksS0FDSkMsRUFBR0QsRUFBSSxlQUNQekMsRUFBR3lDLEVBQUksTUFBTSxJQUFJQyxFQUVyQixPQUFPRCxFQUFJLGVBQWlCQSxFQUFJLE9BQU8sUUFBVXpDLEVBQUcsTUFBT3lDLEVBQUksR0FBRyxDQUNoRSxZQUFhLGNBQ2pCLEVBQUtBLEVBQUksVUFBVSxFQUFHLENBQUNBLEVBQUksR0FBR0EsRUFBSSxjQUFlLFNBQVU4RSxFQUFjQyxFQUFnQixDQUNyRixPQUFPL0UsRUFBSSxhQUFhOEUsQ0FBWSxFQUFJdkgsRUFBRyxpQkFBa0IsQ0FDM0QsSUFBS3dILEVBQ0wsTUFBTyxDQUNMLE9BQVVELEVBQ1YsU0FBWUMsRUFDWixLQUFRL0UsRUFBSSxLQUNaLEtBQVFBLEVBQUksS0FDWixNQUFTQSxFQUFJLGNBQWM4RSxFQUFhLElBQUksRUFDNUMsU0FBWTlFLEVBQUksU0FDaEIsZUFBa0IsRUFDbkIsQ0FDUCxDQUFLLEVBQUlBLEVBQUksSUFDYixDQUFHLEVBQUdBLEVBQUksR0FBR0EsRUFBSSxPQUFPLFFBQVMsU0FBVWdGLEVBQU0sQ0FDN0MsT0FBT0EsRUFBSyxJQUFNekgsRUFBRyxNQUFPLENBQzFCLFlBQWEsZ0JBQ25CLEVBQU8sQ0FBQ0EsRUFBRyxhQUFjLENBQ25CLE1BQU8sQ0FDTCxLQUFReUgsQ0FDVCxDQUNGLENBQUEsQ0FBQyxFQUFHLENBQUMsRUFBSWhGLEVBQUksR0FBRSxDQUNqQixDQUFBLENBQUMsRUFBRyxDQUFDLEVBQUlBLEVBQUksR0FBRSxDQUNsQixFQUVJRSxHQUFrQixDQUFFLGNDT3hCQyxHQUFBek4sRUFBQSxVQUFBLGVBQUEsQ0FDQSxRQUFBLENBQ0EsY0FBQSxJQUFBLElBQ0EsRUFFQSxNQUFBLENBQ0EsUUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLENBQUEsT0FBQSxLQUFBLEVBQUEsUUFBQSxJQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLEtBQUEsQ0FBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLEtBQUEsQ0FBQSxFQUFBLEVBQ0EsU0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxlQUFBLENBRUEsS0FBQSxDQUFBLFNBQUFwRyxFQUFBLFFBQUFpRyxDQUFBLEVBQUEsS0FDQSxPQUFBQSxFQUNBLE9BQUEsT0FBQUEsQ0FBQSxFQUFBLE9BQUEsQ0FBQW9GLEVBQUExRixLQUNBMEYsRUFBQXRMLEVBQUFDLEVBQUEyRixFQUFBLElBQUEsR0FBQUEsRUFDQTBGLEdBQ0EsRUFBQSxFQUNBLElBQ0EsQ0FDQSxDQUNBLENBQUEsc0lDaEVBLElBQUlvSSxHQUFTLFVBQVksQ0FDdkIsSUFBSUMsRUFBSSxLQUNKQyxFQUFHRCxFQUFJLGVBQ1B6QyxFQUFHeUMsRUFBSSxNQUFNLElBQUlDLEVBRXJCLE9BQU8xQyxFQUFHLGVBQWdCLENBQ3hCLFlBQWEsdUNBQ2IsTUFBTyxDQUNMLFFBQVd5QyxFQUFJLFFBQ2YsU0FBWUEsRUFBSSxTQUNoQixLQUFRQSxFQUFJLEtBQ1osS0FBUUEsRUFBSSxLQUNaLE1BQVNBLEVBQUksS0FDZCxFQUNELEdBQUksQ0FDRixNQUFTLFNBQVVTLEVBQVEsQ0FDekJBLEVBQU8sZ0JBQWUsQ0FDdkIsQ0FDRixDQUNMLEVBQUssQ0FBQ1QsRUFBSSxZQUFjekMsRUFBRyxJQUFLeUMsRUFBSSxHQUFHLENBQ25DLFlBQWEsYUFDakIsRUFBSyxJQUFLQSxFQUFJLG9CQUFvQkEsRUFBSSxNQUFNLElBQUksRUFBRyxFQUFLLENBQUMsRUFBSUEsRUFBSSxHQUFJLEVBQUVBLEVBQUksV0FBYXpDLEVBQUcsY0FBZXlDLEVBQUksR0FBRyxDQUM3RyxZQUFhLGNBQ2IsTUFBTyxDQUNMLEdBQU0sQ0FDSixLQUFNQSxFQUFJLFFBQ1gsRUFDRCxPQUFVLEVBQ1gsQ0FDTCxFQUFLLGNBQWVBLEVBQUksb0JBQW9CQSxFQUFJLE1BQU0sSUFBSSxFQUFHLEVBQUssQ0FBQyxFQUFJQSxFQUFJLEdBQUksRUFBRUEsRUFBSSxZQUFjekMsRUFBRyxxQkFBc0IsQ0FDeEgsTUFBTyxDQUNMLE9BQVV5QyxFQUFJLE9BQ2QsS0FBUUEsRUFBSSxXQUNaLEtBQVFBLEVBQUksTUFBTSxPQUNsQixLQUFRQSxFQUFJLGdCQUNiLENBQ0wsQ0FBRyxFQUFJQSxFQUFJLEdBQUUsRUFBSUEsRUFBSSxZQUFjekMsRUFBRyxTQUFVeUMsRUFBSSxHQUFHLENBQ25ELFlBQWEsY0FDYixNQUFPLENBQ0wsS0FBUSxRQUNULEVBQ0QsR0FBSSxDQUNGLE1BQVMsU0FBVVMsRUFBUSxDQUN6QixPQUFPVCxFQUFJLE1BQU0sUUFBUSxDQUMxQixDQUNGLENBQ0YsRUFBRSxTQUFVQSxFQUFJLG9CQUFvQkEsRUFBSSxNQUFNLE1BQU0sRUFBRyxFQUFLLENBQUMsRUFBSUEsRUFBSSxHQUFFLENBQUUsRUFBRyxDQUFDLENBQ2hGLEVBRUlFLEdBQWtCLENBQUUsY0NGeEJDLEdBQUF6TixFQUFBLFVBQUEsb0JBQUEsQ0FDQSxNQUFBLENBQ0EsVUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsVUFBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxTQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsSUFBQSxFQUNBLFdBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLEVBQ0EsUUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFDQSxPQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLEtBQUEsRUFBQSxRQUFBLElBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLE1BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsV0FBQSxDQUNBLE9BQUEsS0FBQSxTQUFBLEtBQUEsT0FBQSxJQUFBLENBQ0EsRUFFQSxhQUFBLENBQ0EsT0FBQSxLQUFBLFVBQUEsV0FBQSxDQUNBLEVBRUEsWUFBQSxDQUNBLE9BQUEsS0FBQSxVQUFBLFVBQUEsR0FBQSxDQUFBLENBQUEsS0FBQSxRQUNBLEVBRUEsYUFBQSxDQUNBLE9BQUEsS0FBQSxVQUFBLFdBQUEsR0FBQSxDQUFBLENBQUEsS0FBQSxVQUNBLEVBRUEsYUFBQSxDQUNBLE9BQUEsS0FBQSxVQUFBLFdBQUEsQ0FDQSxFQUVBLGtCQUFBLE9BQ0EsUUFFQTlELEVBQUEsS0FBQSxPQUFBLFlBQUEsWUFBQUEsRUFBQSxRQUlBLEtBQUEsV0FDQSxHQUFBcVcsRUFBQUEsV0FBQSxLQUFBLE1BQUEsTUFBQSxLQUFBLEtBQUEsYUFFQSxJQUVBLENBQ0EsRUFFQSxRQUFBLENBQ0EsVUFBQWxULEVBQUEsQ0FJQSxNQUFBLENBQUEsRUFBQSxLQUFBQSxJQUFBLEtBQUEsT0FBQUEsS0FBQSxHQUNBLENBQ0EsQ0FDQSxDQUFBLHNJQzNHQSxJQUFJZ08sR0FBUyxVQUFZLENBQ3ZCLElBQUlDLEVBQUksS0FDSkMsRUFBR0QsRUFBSSxlQUNQekMsRUFBR3lDLEVBQUksTUFBTSxJQUFJQyxFQUVyQixPQUFPMUMsRUFBRyxNQUFPLENBQ2YsWUFBYSxvQkFDZCxFQUFFLENBQUN5QyxFQUFJLGFBQWUsQ0FBQ3pDLEVBQUcsU0FBVSxDQUNuQyxZQUFhLGNBQ2IsTUFBTyxlQUFleUMsRUFBSSxPQUMxQixNQUFPLENBQ0wsS0FBUSxTQUNSLE1BQVNBLEVBQUksU0FBU0EsRUFBSSxJQUFJLENBQy9CLEVBQ0QsR0FBSSxDQUNGLFVBQWEsU0FBVVMsRUFBUSxDQUM3QixPQUFBQSxFQUFPLGdCQUFlLEVBQ2ZULEVBQUkscUJBQ1osQ0FDRixDQUNGLEVBQUUsQ0FBQ0EsRUFBSSxHQUFHQSxFQUFJLEdBQUdBLEVBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFHekMsRUFBRyxLQUFNLENBQ3ZDLFlBQWEsZ0JBQ2IsTUFBTyxDQUNMLFlBQWF5QyxFQUFJLFNBQVMsSUFDM0IsQ0FDTCxFQUFLQSxFQUFJLEdBQUdBLEVBQUksTUFBTyxTQUFVM0csRUFBTXRJLEVBQU0sQ0FDekMsT0FBT3dNLEVBQUcsS0FBTSxDQUFDeUMsRUFBSSxZQUFZM0csQ0FBSSxFQUFJa0UsRUFBRyxJQUFLLENBQy9DLE1BQU8sYUFBYXhNLElBQ3BCLEdBQUksQ0FDRixVQUFhLFNBQVUwUCxFQUFRLENBQzdCLE9BQUFBLEVBQU8sZ0JBQWUsRUFDZlQsRUFBSSxvQkFBb0JqUCxDQUFJLENBQ3BDLEVBQ0QsUUFBVyxTQUFVMFAsRUFBUSxDQUMzQixPQUFPVCxFQUFJLGtCQUFrQmpQLENBQUksQ0FDbEMsQ0FDRixDQUNGLEVBQUUsQ0FBQ2lQLEVBQUksR0FBR0EsRUFBSSxHQUFHQSxFQUFJLFNBQVMzRyxDQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBSTJHLEVBQUksR0FBRSxDQUFFLENBQUMsQ0FDckQsQ0FBQSxFQUFHLENBQUMsQ0FBQyxFQUFJekMsRUFBRyxTQUFVLENBQ3JCLFlBQWEsY0FDYixNQUFPLGVBQWV5QyxFQUFJLE9BQzFCLE1BQU8sQ0FDTCxLQUFRQSxFQUFJLFVBQVksU0FBVyxTQUNuQyxNQUFTQSxFQUFJLFNBQVNBLEVBQUksSUFBSSxDQUMvQixFQUNELEdBQUksQ0FDRixNQUFTLFNBQVVTLEVBQVEsQ0FDekIsT0FBT1QsRUFBSSxXQUFXQSxFQUFJLE1BQU0sT0FBTyxDQUN4QyxDQUNGLENBQ0YsRUFBRSxDQUFDQSxFQUFJLEdBQUdBLEVBQUksR0FBR0EsRUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRyxDQUFDLENBQ3BDLEVBRUlFLEdBQWtCLENBQUUsY0NaeEJDLEdBQUF6TixFQUFBLFVBQUEscUJBQUEsQ0FDQSxPQUFBLENBQUFtUCxFQUFBLEVBRUEsTUFBQSxDQUNBLE9BQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxPQUFBLFNBQUEsRUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxJQUFBLENBQ0EsRUFFQSxTQUFBLENBQ0EsT0FBQSxDQUNBLE9BQUE5SCxFQUFBLEtBQUEsT0FBQSxLQUFBLE9BQUEsQ0FDQSxFQUVBLFdBQUEsQ0FDQSxPQUFBTyxHQUFBLEtBQUEsTUFBQSxDQUNBLEVBRUEsY0FBQSxDQUNBLE9BQUEsT0FBQSxLQUFBLEtBQUEsS0FBQSxFQUFBLE9BQUEsR0FBQSxDQUFBLEtBQUEsTUFBQSxPQUNBLENBQ0EsRUFFQSxRQUFBLENBQ0EsWUFBQWpCLEVBQUEsQ0FFQSxPQUFBQSxFQUFBLFlBQUEsRUFDQSxFQUVBLFdBQUFBLEVBQUF0SSxFQUFBLEtBQUEsQ0FDQSxHQUFBLEtBQUEsWUFBQXNJLENBQUEsRUFDQSxLQUFBLFVBQ0EsS0FBQSxnQkFBQSxXQUFBQSxFQUFBdEksQ0FBQSxFQUVBLEtBQUEsUUFBQSxLQUFBLENBQ0EsS0FBQSxHQUFBLEtBQUEsY0FDQSxNQUFBLENBQUEsS0FBQUEsQ0FBQSxFQUNBLE9BQUEsRUFDQSxDQUFBLE1BR0EsT0FBQSxJQUFBLE1BQUEsMkNBQUEsQ0FFQSxFQUVBLGlCQUFBQSxFQUFBLENBQ0EsS0FBQSxXQUFBLEtBQUEsTUFBQUEsR0FBQUEsQ0FBQSxFQUNBLEtBQUEsZ0JBQUEsRUFBQSxDQUNBLENBQ0EsQ0FDQSxDQUFBLHNJQzVGQSxJQUFJZ1AsR0FBUyxVQUFZLENBQ3ZCLElBQUlDLEVBQUksS0FDSkMsRUFBR0QsRUFBSSxlQUNQekMsRUFBR3lDLEVBQUksTUFBTSxJQUFJQyxFQUVyQixPQUFPRCxFQUFJLFVBQVl6QyxFQUFHLE1BQU8sQ0FDL0IsWUFBYSxnREFDakIsRUFBSyxDQUFDQSxFQUFHLFNBQVUsQ0FDZixJQUFLLFdBQ0wsWUFBYSwrQkFDYixNQUFPLENBQ0wsS0FBUSxTQUNSLE1BQVMsWUFDVCxTQUFZLENBQUN5QyxFQUFJLFdBQ2xCLEVBQ0QsR0FBSSxDQUNGLE1BQVNBLEVBQUksTUFDZCxDQUNMLENBQUcsRUFBR3pDLEVBQUcsU0FBVSxDQUNmLFlBQWEsZ0NBQ2IsTUFBTyxDQUNMLEtBQVEsU0FDUixNQUFTLGFBQ1QsU0FBWSxDQUFDeUMsRUFBSSxZQUNsQixFQUNELEdBQUksQ0FDRixNQUFTQSxFQUFJLE9BQ2QsQ0FDRixDQUFBLENBQUMsQ0FBQyxFQUFJQSxFQUFJLElBQ2IsRUFFSUUsR0FBa0IsQ0FBRSxFQ0x4QixNQUFBQyxHQUFBek4sRUFBQSxVQUFBLGlCQUFBLENBQ0EsT0FBQSxDQUFBMk4sQ0FBQSxFQUVBLE1BQUEsQ0FDQSxVQUFBLENBQUEsS0FBQSxDQUFBLFFBQUEsTUFBQSxFQUFBLFFBQUEsRUFBQSxFQUNBLFNBQUEsQ0FBQSxLQUFBLE9BQUEsU0FBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsQ0FBQSxPQUFBLEtBQUEsRUFBQSxRQUFBLElBQUEsQ0FDQSxFQUVBLE1BQUEsQ0FDQSxNQUFBLENBQ0EsWUFBQSxHQUNBLGFBQUEsR0FDQSxhQUFBLEVBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FDQSxrQkFBQSxDQUNBLE9BQUE1UCxFQUFBQSxTQUFBLEtBQUEsU0FBQSxFQUFBLEtBQUEsVUFBQSxDQUFBLENBQ0EsRUFFQSxVQUFBLENBQ0EsS0FBQSxDQUFBLEtBQUE2SyxHQUFBLEtBQUEsaUJBQ0EsT0FBQUEsRUFDQTRKLEdBQUE1SixFQUFBLEtBQUEsS0FBQSxJQUFBNU0sRUFBQSxLQUFBLENBQ0EsY0FBQXdXLENBQ0EsQ0FBQSxDQUFBLEVBQ0FBLEdBQUF4SyxFQUFBLE1BQUF3SyxDQUFBLENBQ0EsRUFFQSxXQUFBLENBQ0EsS0FBQSxDQUFBLE1BQUFDLEdBQUEsS0FBQSxpQkFDQSxPQUFBQSxFQUNBRCxHQUFBQyxFQUFBLEtBQUEsS0FBQSxJQUFBelcsRUFBQSxLQUFBLENBQ0EsY0FBQXdXLENBQ0EsQ0FBQSxDQUFBLEVBQ0FBLEdBQUFBLENBQ0EsQ0FDQSxFQUVBLFNBQUEsQ0FHQSxLQUFBLE1BQUEsU0FBQSxDQUNBLEtBQUEsS0FBQSxjQUNBLENBQUEsRUFDQSxLQUFBLE1BQUEsT0FBQSxDQUNBLE1BQUEsS0FBQSxjQUNBLENBQUEsRUFDQSxLQUFBLE9BQUEsT0FBQSxDQUVBLFVBQUEsR0FDQSxRQUFBLENBQUE5RixFQUFBQyxJQUFBLENBQ0FELElBQUFDLEdBQ0EsS0FBQSxlQUFBLENBRUEsQ0FDQSxDQUFBLENBQ0EsRUFFQSxRQUFBLENBQ0EsTUFBQSxpQkFBQStGLEVBQUEsZUFFQSxHQUFBLENBQUEsY0FBQUYsR0FBQSxLQUFBLFNBQ0EsR0FBQSxDQUNBLE1BQUFHLEVBQUEsT0FBQWxQLEdBQUF2SCxFQUFBLFVBQUEsWUFBQSxZQUFBQSxFQUFBLFdBQUEsWUFBQXVILEVBQUEsS0FBQXZILElBQ0EsS0FBQSxjQUFBeVcsSUFHQSxPQUFBQyxHQUFBL0gsRUFBQSxVQUFBLFlBQUEsWUFBQUEsRUFBQSxZQUFBLFlBQUErSCxFQUFBLEtBQUEvSCxFQUFBOEgsSUFDQSxLQUFBLGFBQUEsSUFFQUEsSUFDQUgsRUFBQSxLQUFBLE1BQUFHLENBQUEsRUFFQSxPQUFBM0UsRUFBQSxDQUNBMEUsSUFDQSxRQUFBLE1BQUExRSxFQUFBQSxFQUFBLEtBQUFBLEVBQUEsT0FBQSxFQUNBQSxFQUFBLE9BQUEsZUFDQSxNQUFBNkUsRUFBQUE7QUFBQUE7QUFBQUEsZ0JBRUE3RSxFQUFBO0FBQUEsYUFDQSxFQUdBLENBQ0EsS0FBQSxDQUFBLFFBQUE4RSxLQUFBNVgsQ0FBQSxFQUFBc1gsR0FBQSxDQUFBLEVBQ0EsT0FBQU0sTUFBQUMsRUFBQSxLQUFBLGtCQUFBLFlBQUFBLEVBQUEsT0FBQSxNQUFBN1gsRUFBQSxJQUNBLEVBRUEsTUFBQSxnQkFBQSxDQUNBLEtBQUEsWUFBQSxDQUFBLENBQUEsS0FBQSxLQUdBLEtBQUEsYUFBQSxDQUFBLENBQUEsTUFBQSxLQUFBLGlCQUFBLEVBQUEsQ0FDQSxFQUVBLE1BQUEsUUFBQSxXQUNBLElBQUFBLEdBQUFnQixFQUFBLEtBQUEsa0JBQUEsWUFBQUEsRUFBQSxjQUNBLEdBQUEsQ0FDQWhCLEVBQUFBLEdBQUEsS0FBQSxTQUFBQSxDQUFBLEVBRUEsS0FBQSxTQUFBLGNBQUFBLEVBQ0EsR0FBQSxDQUNBLE1BQUF5WCxFQUFBLEtBQUEsVUFBQXpYLEVBQUEsS0FBQSxDQUFBLEVBQ0EsT0FBQTJQLEdBQUFwSCxFQUFBLFVBQUEsWUFBQSxZQUFBQSxFQUFBLFlBQUEsWUFBQW9ILEVBQUEsS0FBQXBILEVBQUFrUCxJQUVBLE1BQUEsS0FBQSxlQUFBLENBQ0EsT0FBQTNFLEVBQUEsQ0FDQSxRQUFBLE1BQUFBLEVBQUFBLEVBQUEsS0FBQUEsRUFBQSxPQUFBLENBQ0EsQ0FDQSxPQUFBeFEsRUFBQSxDQUNBLFFBQUEsTUFBQUEsQ0FBQSxFQUNBLE1BQUFBLEVBQUEsT0FBQSxDQUNBLENBQ0EsRUFFQSxNQUFBLFNBQUEsQ0FDQSxJQUFBdEMsRUFBQSxNQUFBLEtBQUEsaUJBQUEsRUFBQSxFQUNBLEdBQUEsQ0FDQUEsRUFBQUEsR0FBQSxLQUFBLFVBQUFBLENBQUEsRUFDQUEsR0FDQSxLQUFBLGdCQUFBLFFBQUFBLENBQUEsQ0FFQSxPQUFBc0MsRUFBQSxDQUNBLFFBQUEsTUFBQUEsQ0FBQSxFQUNBLE1BQUFBLEVBQUEsT0FBQSxDQUNBLENBQ0EsQ0FDQSxDQUNBLENBQUEsc0lDNUpld1YsR0FBQSxDQUNiLE1BQU8sQ0FDTCxNQUFPLENBQ0wsVUFBVyxFQUNaLENBQ0YsRUFFRCxRQUFTLENBQ1AsV0FBV3RGLEVBQVcsQ0FBRSxXQUFBdUYsRUFBYSxHQUFPLFdBQUFDLEVBQWEsRUFBTyxFQUFHLEdBQUksQ0FDakUsQ0FBQyxLQUFLLFVBQVksQ0FBQ3hGLElBQ3JCLEtBQUssVUFBWSxDQUFDLENBQUNBLEVBQ2Z1RixHQUNGLEtBQUssY0FBYyxnQkFBZ0J2RixDQUFTLEVBRTFDd0YsR0FDRixLQUFLLGNBQWMsV0FBVyxLQUFLLFNBQVMsRUFHakQsQ0FDRixDQUNILEVDYmVDLEdBQUEsQ0FDYixPQUFRLENBQUN4RCxHQUFXcUQsRUFBWSxFQUVoQyxTQUFVLENBQ1IsTUFBTyxDQUNMLG1CQUFvQixJQUFNLEtBRTFCLE9BQVEsSUFBTSxLQUFLLE1BQ25CLGFBQWMsSUFBTSxLQUFLLE9BQzFCLENBQ0YsRUFFRCxNQUFPLENBQ0wsTUFBTyxDQUNMLFdBQVksSUFDYixDQUNGLEVBRUQsU0FBVSxDQUNSLG1CQUFvQixDQUNsQixPQUFPLElBQ1IsRUFFRCxVQUFXLENBR1QsT0FBTyxLQUFLLFlBQWEsQ0FDMUIsRUFFRCxjQUFlLENBRWIsTUFBTyxDQUFDLENBQUMsS0FBSyxRQUNmLEVBRUQsYUFBYyxDQUtaLE1BQU8sRUFDUixFQUVELGFBQWMsQ0FLWixNQUFNck0sRUFBTyxLQUFLLGNBQ2xCLE1BQ0UsQ0FBQyxLQUFLLGNBQ04sQ0FBQyxLQUFLLGFBQ05BLElBQ0VBLEVBQUssYUFDTEEsRUFBSyxXQUdWLEVBRUQsZUFBZ0IsQ0FDZCxPQUNFLEtBQUssYUFDTCxrRkFHSCxFQUVELFlBQWEsQ0FDWCxNQUNFLENBQUMsS0FBSyxhQUNOLENBQUMsS0FBSyxTQUVULEVBR0QsU0FBVSxDQUVSLE1BQU8sQ0FBQyxDQUFDLEtBQUssVUFDZixFQUVELE9BQVEsQ0FHTixPQUFPLEtBQUssU0FBVSxDQUN2QixFQUVELGlCQUFrQixDQUVoQixLQUFNLENBQUUsU0FBVXlNLENBQVEsRUFBRyxLQUFLLGFBQ2xDLEdBQUksS0FBSyxjQUFnQkEsRUFBUSxDQUMvQixLQUFNLENBQUUsS0FBQUMsRUFBTyxDQUFHLEVBQUcsS0FBSyxPQUFTLENBQUUsRUFDL0JDLEVBQVFELEVBQU9ELEVBQ3JCLE1BQU8sQ0FBQ0UsRUFBT0EsRUFBUUYsRUFBUyxDQUFDLENBQ2xDLENBQ0YsRUFFRCxhQUFjLENBQ1osTUFBTUcsRUFBUSxLQUFLLGdCQUNiLENBQUUsS0FBQUYsS0FBUzFULENBQU8sRUFBRyxLQUFLLE9BQVMsQ0FBRSxFQUMzQyxNQUFPLENBQ0wsR0FBR0EsRUFDSCxHQUFJNFQsR0FBUyxDQUdYLE1BQU9BLEVBQU0sS0FBSyxHQUFHLENBQy9CLENBQ08sQ0FDRixDQUNGLEVBRUQsU0FBVSxFQUVKLEtBQUssY0FBZ0IsS0FBSyxhQUM1QixLQUFLLFVBQVcsQ0FFbkIsRUFFRCxRQUFTLENBQ1AsYUFBYyxXQUdaLE9BQU83VSxHQUFZeEMsRUFBQSxLQUFLLGVBQUwsWUFBQUEsRUFBbUIsU0FBVSxDQUM5QyxLQUFNLGFBQ04sUUFBUTJPLEdBQUFwSCxFQUFBLEtBQUssc0JBQUwsWUFBQUEsRUFBMEIsV0FBMUIsS0FBQW9ILEVBQXNDLElBQ3RELENBQU8sQ0FDRixFQUVELFVBQVcsQ0FDVCxNQUFNMkksRUFBUSxLQUFLLE9BQVEsRUFDM0IsT0FBTyxLQUFLLFlBQ1IsQ0FDQSxHQUFHQSxFQUVILE9BQVEsTUFDUixRQUFTLFFBQ1QsS0FBTSxRQUNOLE1BQU8sVUFDUCxPQUFRLFNBQ1IsUUFBUyxTQUNWLEVBQ0NBLENBQ0wsRUFHRCxXQUFZLENBQ1YsS0FBSyxXQUFhLElBQ25CLEVBR0QsUUFBUXRZLEVBQU0sQ0FDWixLQUFLLFdBQWFBLENBQ25CLEVBRUQsV0FBWSxDQUlWLEtBQUssV0FBWSxDQUNsQixFQUVELFlBQWEsQ0FDUCxLQUFLLGFBQ0gsS0FBSyxRQUNQLEtBQUssV0FBWSxFQUVqQixLQUFLLFNBQVMsRUFBSSxFQUd2QixFQUVELFlBQWEsQ0FDWCxLQUFLLFNBQVMsRUFBSyxDQUNwQixFQUVELFNBQVN1WSxFQUFPLENBQ1QsS0FBSyxjQUNKQSxHQUNGLEtBQUssVUFBVyxFQUVsQixLQUFLLFlBQWEsRUFFckIsRUFFRCxXQUFXaFYsRUFBUUosRUFBTSxDQUN2QixPQUFPZ0ssR0FBWTVKLEVBQVFKLEVBQU8sQ0FBRSxLQUFBQSxDQUFNLEVBQUcsQ0FBRSxFQUFFLElBQUksQ0FDdEQsRUFFRCxhQUFjLENBQ1osTUFBTXNCLEVBQVEsS0FBSyxZQUNuQixLQUFLLGNBQWMsQ0FBRSxPQUFRLE1BQU8sTUFBQUEsR0FBUyxDQUFDcU8sRUFBSzNOLElBQWEsT0FDOUQsR0FBSTJOLEdBQ0YsR0FBSTNOLEVBQVUsQ0FDWixLQUFNLENBQUUsS0FBQW5GLENBQUksRUFBS21GLEVBQ2pCLElBQ0VuRixHQUFBLFlBQUFBLEVBQU0sUUFBUyxzQkFDZmdCLEVBQUEsS0FBSyxpQkFBTCxZQUFBQSxFQUFBLFVBQXNCaEIsRUFBSyxTQUMzQixNQUFPLEdBQ0YsR0FBSSxLQUFLLG9CQUFvQm1GLENBQVEsRUFHMUMsTUFBTyxFQUVWLE9BRUQsS0FBSyxRQUFRQSxFQUFTLElBQUksRUFDMUIsS0FBSyxnQkFBZ0IsTUFBTSxDQUVyQyxDQUFPLENBQ0YsRUFFRCxrQkFBa0JBLEVBQVUsQ0FDMUIsT0FBT0EsR0FBQSxZQUFBQSxFQUFVLFVBQVcsR0FDN0IsRUFFRCxvQkFBb0JBLEVBQVUsQ0FDNUIsT0FBT0EsR0FBQSxZQUFBQSxFQUFVLFVBQVcsR0FDN0IsRUFFRCxNQUFNLGNBQWMsQ0FDbEIsT0FBQUgsRUFDQSxTQUFBNUQsRUFBVyxLQUFLLFNBQ2hCLE1BQUFxRCxFQUNBLEtBQUF6RSxDQUNELEVBQUV1QixFQUFVLENBQ1gsTUFBTWlYLEVBQWlCLENBQ3JCLFdBQVksR0FDWixXQUFZLEtBQUssUUFDbEIsRUFDRCxLQUFLLFdBQVcsR0FBTUEsQ0FBYyxFQUNwQyxNQUFNQyxFQUFVLENBQUUsT0FBQXpULEVBQVEsU0FBQTVELEVBQVUsS0FBQXBCLEVBQU0sTUFBQXlFLENBQU8sRUFDakQsR0FBSSxDQUNGLE1BQU1VLEVBQVcsTUFBTSxLQUFLLFlBQVlzVCxDQUFPLEVBRy9DbFgsRUFBUyxLQUFNNEQsQ0FBUSxDQUN4QixPQUFRN0MsRUFBUCxDQUVBLEtBQU0sQ0FBRSxTQUFBNkMsQ0FBUSxFQUFLN0MsRUFDckIsR0FBSSxDQUFDZixFQUFTZSxFQUFPNkMsQ0FBUSxFQUFHLENBQzlCLE1BQU1uRixFQUFPbUYsR0FBQSxZQUFBQSxFQUFVLEtBQ25CbkYsR0FBUTJDLEVBQUFBLFNBQVMzQyxFQUFLLElBQUksRUFDNUIsS0FBSyxPQUFPLENBQ1YsS0FBTSxRQUNOLE1BQU9vRSxFQUFBQSxTQUFTcEUsRUFBSyxJQUFJLEVBQ3pCLEtBQU1BLEVBQUssU0FBV3NDLENBQ3BDLENBQWEsRUFFRCxLQUFLLE9BQU8sQ0FDVixLQUFNLFFBQ04sTUFBTyxnQkFDUCxLQUFNQSxDQUNwQixDQUFhLENBRUosQ0FDRixDQUNELEtBQUssV0FBVyxHQUFPa1csQ0FBYyxDQUN0QyxFQUVELGVBQWVuVSxFQUFRVyxFQUFRLENBRTdCLE1BQ0UsQ0FBQyxPQUFRLE1BQU8sT0FBTyxFQUFFLFNBQVNBLENBQU0sSUFHdENYLEVBQU8sZUFBZSxDQUFDLFdBQVksTUFBTSxDQUFDLEdBQzFDQSxFQUFPLGNBR1osRUFFRCxNQUFNLE9BQU9BLEVBQVEsQ0FDbkIsTUFBTWpELEVBQVdvQyxFQUFZYSxFQUFPLE9BQU8sU0FBVSxDQUNuRCxPQUFRLEtBQUssUUFDckIsQ0FBTyxFQUNELEdBQUlqRCxFQUFVLENBQ1osS0FBTSxDQUFFLE9BQUE0RCxDQUFNLEVBQUs1RCxFQUNicEIsRUFBTyxLQUFLLGVBQWVxRSxFQUFRVyxDQUFNLEVBQy9DLE9BQU8sS0FBSyxlQUFlWCxFQUFRakQsRUFBVTRELEVBQVFoRixDQUFJLENBQzFELENBQ0QsTUFBTyxFQUNSLEVBRUQsTUFBTSxlQUFlcUUsRUFBUWpELEVBQVU0RCxFQUFRaEYsRUFBTSxDQUNuRCxRQUFBMFksRUFBVSxHQUNWLFVBQUFDLEVBQ0EsUUFBQUMsRUFDQSxjQUFBQyxFQUFnQixJQUFNLEtBQUssT0FBTyxDQUNoQyxLQUFNLFVBQ04sTUFBTyxxQkFDUCxLQUFNLGdDQUNkLENBQU8sRUFDRCxZQUFBQyxFQUFjeFcsR0FBUyxLQUFLLE9BQU8sQ0FDakMsS0FBTSxRQUNOLE1BQU8sZ0JBQ1AsS0FBTSxDQUNKLHlCQUF5QkEsRUFBUSxJQUFNLE1BQ3ZDQSxHQUFBLFlBQUFBLEVBQU8sVUFBV0EsQ0FDbkIsQ0FDVCxDQUFPLENBQ0YsRUFBRyxHQUFJLENBQ04sT0FBTyxJQUFJLFFBQVFKLEdBQVcsQ0FDNUIsS0FBSyxjQUNILENBQUUsT0FBQThDLEVBQVEsU0FBQTVELEVBQVUsS0FBQXBCLENBQU0sRUFDMUIsTUFBTzhTLEVBQUszTixJQUFhLENBQ3ZCLE1BQU1uRixFQUFPbUYsR0FBQSxZQUFBQSxFQUFVLEtBQ3ZCLEdBQUkyTixFQUFLLENBRVAsTUFBTW5MLEVBQVMsS0FBSyxrQkFBa0J4QyxDQUFRLEdBQUtuRixFQUFLLE9BQ3hELEdBQUkySCxFQUNGLE1BQU0sS0FBSyxxQkFBcUJBLEVBQVEsRUFBSSxNQUN2QyxDQUNMLE1BQU1yRixFQUFRTyxFQUFRLFNBQUM3QyxDQUFJLEVBQUlBLEVBQU84UyxFQUN0QzhGLEdBQUEsTUFBQUEsRUFBVXRXLEdBQ1YsTUFBTSxLQUFLLGdCQUFnQitCLEVBQVEsUUFBUyxDQUMxQyxPQUFReVUsRUFDUixNQUFBeFcsQ0FDbEIsQ0FBaUIsQ0FDRixDQUNESixFQUFRLEVBQUssQ0FDM0IsTUFHa0J3VyxHQUFXMVksR0FDYixLQUFLLFFBQVFBLENBQUksRUFFbkIyWSxHQUFBLE1BQUFBLElBQ0EsTUFBTSxLQUFLLGdCQUFnQnRVLEVBQVEsVUFBVyxDQUM1QyxPQUFRd1UsQ0FDeEIsQ0FBZSxFQUNEM1csRUFBUSxFQUFJLENBRWYsQ0FDRixDQUNULENBQU8sQ0FDRixFQUVELE1BQU0sZ0JBQWdCbUMsRUFBUS9DLEVBQU8sQ0FBRSxPQUFBNEYsRUFBUSxNQUFBNUUsQ0FBSyxFQUFJLENBR3RELE1BQU0vQixFQUFVLElBQUlPLEVBQVl1RCxFQUFRLENBQ3RDLE9BQVEsR0FDUixLQUFNLEtBQUssS0FDWCxVQUFXLEtBQUssVUFDaEIsTUFBQS9CLENBQ1IsQ0FBTyxFQUNLRCxFQUFNLE1BQU1nQyxFQUFPLFVBQVUvQyxFQUFPLENBQUUsUUFBQWYsRUFBUyxFQUNyRCxPQUNFMkcsR0FFQTdFLElBQVEsUUFHUixDQUFDOUIsRUFBUSxhQUVUMkcsRUFBTzVFLENBQUssRUFFUEQsQ0FDUixDQUNGLENBQ0gsRUM5V0EsSUFBSThQLEdBQVMsVUFBWSxDQUN2QixJQUFJQyxFQUFJLEtBQ0pDLEVBQUdELEVBQUksZUFDUHpDLEVBQUd5QyxFQUFJLE1BQU0sSUFBSUMsRUFFckIsT0FBTzFDLEVBQUcsTUFBTyxDQUNmLFlBQWEsK0JBQ2IsTUFBTyxDQUNMLG1CQUFvQnlDLEVBQUksYUFDekIsQ0FDTCxFQUFLLENBQUdBLEVBQUkscUJBQXVCQSxFQUFJLGNBT2hDQSxFQUFJLEtBUDZDekMsRUFBRyxjQUFlLENBQ3RFLFdBQVksQ0FBQyxDQUNYLEtBQU0sT0FDTixRQUFTLFNBQ1QsTUFBTyxDQUFDeUMsRUFBSSxTQUNaLFdBQVksV0FDbEIsQ0FBSyxDQUNMLENBQUcsRUFBY3pDLEVBQUd5QyxFQUFJLGNBQWdCLE1BQVEsT0FBUSxDQUNwRCxXQUFZLENBQUMsQ0FDWCxLQUFNLE9BQ04sUUFBUyxTQUNULE1BQU9BLEVBQUksU0FDWCxXQUFZLFVBQ2xCLENBQUssRUFDRCxJQUFLLFlBQ0wsWUFBYSxjQUNiLEdBQUksQ0FDRixPQUFVLFNBQVVTLEVBQVEsQ0FDMUJBLEVBQU8sZUFBYyxDQUN0QixDQUNGLENBQ0wsRUFBSyxDQUFDbEQsRUFBRyxTQUFVLENBQ2YsV0FBWSxDQUFDLENBQ1gsS0FBTSxPQUNOLFFBQVMsU0FDVCxNQUFPLEdBQ1AsV0FBWSxPQUNsQixDQUFLLEVBQ0QsTUFBTyxDQUNMLEtBQVEsU0FDUixTQUFZLE9BQ1osY0FBZSxNQUNoQixDQUNMLENBQUcsRUFBR0EsRUFBRyxjQUFlLENBQ3BCLE1BQU8sQ0FDTCxPQUFVeUMsRUFBSSxPQUNkLFNBQVlBLEVBQUksU0FDaEIsS0FBUUEsRUFBSSxLQUNaLEtBQVFBLEVBQUksS0FDWixNQUFTQSxFQUFJLE1BQ2IsU0FBWUEsRUFBSSxVQUNoQixXQUFjLEVBQ2YsQ0FDTCxFQUFLLENBQUN6QyxFQUFHLGVBQWdCLENBQ3JCLFlBQWEsMERBQ2IsTUFBTyxDQUNMLEtBQVEsVUFDUixRQUFXeUMsRUFBSSxjQUNmLFNBQVlBLEVBQUksU0FDaEIsS0FBUUEsRUFBSSxLQUNaLEtBQVFBLEVBQUksS0FDWixNQUFTQSxFQUFJLE1BQ2IsU0FBWUEsRUFBSSxTQUNqQixFQUNELEtBQU0sU0FDVixDQUFHLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRyxDQUFDLENBQ2xCLEVBRUlFLEdBQWtCLENBQUUsRUNaeEIsTUFBQUMsR0FBQXpOLEVBQUEsVUFBQSxZQUFBLENBQ0EsT0FBQSxDQUFBeU0sR0FBQTBHLEVBQUEsRUFFQSxNQUFBLENBQ0EsTUFBQSxDQUNBLFlBQUEsS0FDQSxXQUFBLE9BQ0EsVUFBQSxLQUNBLE9BQUEsRUFDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE9BQUEsQ0FJQSxNQUFBSyxFQUFBLEtBQUEsU0FBQSxFQUNBLENBQUEsV0FBQVMsRUFBQSxhQUFBQyxDQUFBLEVBQUEsS0FDQSxNQUFBLENBQ0EsR0FBQVYsRUFDQSxPQUFBUyxFQUFBVCxFQUFBLE9BQUFBLEVBQUEsS0FDQSxVQUFBUyxFQUFBVCxFQUFBLFFBQUFBLEVBQUEsTUFDQSxPQUFBVSxFQUFBVixFQUFBLE9BQUFBLEVBQUEsTUFDQSxVQUFBVSxFQUFBVixFQUFBLFVBQUFBLEVBQUEsTUFDQSxDQUNBLEVBRUEsUUFBQSxDQUNBLE9BQUEsS0FBQSxrQkFDQSxLQUFBLGFBR0EsS0FBQSxNQUFBLENBQUEsS0FBQSxLQUFBLElBQUEsRUFDQSxLQUFBLE9BQ0EsR0FBQSxDQUFBLENBQ0EsRUFFQSxlQUFBLENBQ0EsT0FBQS9JLEVBQ0EwSixFQUFBLE1BQ0EsQ0FDQSxPQUFBLENBQ0EsS0FBQSxTQUNBLE9BQUEsQ0FDQSxNQUFBLElBQUEsS0FBQSxPQUFBLENBQ0EsQ0FDQSxFQUVBLE9BQUEsQ0FBQSxLQUFBLFlBQUEsQ0FDQSxLQUFBLFNBRUEsVUFBQSxHQUNBLE9BQUEsQ0FDQSxNQUFBLENBQUEsQ0FBQSxVQUFBNVUsQ0FBQSxJQUFBQSxFQUFBLE9BQUEsQ0FDQSxDQUNBLENBQ0EsRUFDQSxLQUFBLE9BQUEsT0FDQSxDQUNBLENBQ0EsRUFFQSxVQUFBLENBQ0EsT0FBQSxLQUFBLGFBQUEsS0FBQSxtQkFDQSxFQUVBLGFBQUEsQ0FDQSxNQUFBLENBQUEsS0FBQSxZQUNBLEVBRUEsWUFBQSxDQUVBLE9BQUEsS0FBQSxRQUFBLFFBQ0EsRUFFQSxTQUFBLE9BQ0EsTUFBQSxDQUFBLEtBQUEsWUFBQSxDQUFBLEdBQUFyRCxFQUFBLEtBQUEsc0JBQUEsTUFBQUEsRUFBQSxRQUNBLEVBRUEsYUFBQSxPQUNBLFFBQUFBLEVBQUEsS0FBQSxzQkFBQSxZQUFBQSxFQUFBLGNB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U0FBQSxDQUFBLEtBQUEsT0FBQSxTQUFBLEVBQUEsRUFDQSxLQUFBLENBQUEsS0FBQSxDQUFBLE1BQUEsTUFBQSxFQUFBLFFBQUEsSUFBQSxFQUNBLEtBQUEsQ0FBQSxLQUFBLE9BQUEsUUFBQSxFQUFBLEVBQ0EsS0FBQSxDQUFBLEtBQUEsUUFBQSxRQUFBLEVBQUEsRUFDQSxPQUFBLENBQUEsS0FBQSxRQUFBLFFBQUEsRUFBQSxFQUNBLFVBQUEsQ0FBQSxLQUFBLFFBQUEsUUFBQSxFQUFBLEVBQ0EsTUFBQSxDQUFBLEtBQUEsT0FBQSxRQUFBLElBQUEsRUFDQSxNQUFBLENBQUEsS0FBQSxPQUFBLFFBQUEsQ0FBQSxDQUNBLEVBRUEsTUFBQSxDQUNBLE1BQUEsQ0FDQSxPQUFBLEtBQUEsTUFBQSxLQUFBLE9BQUEsSUFDQSxDQUNBLEVBRUEsU0FBQSxDQUNBLE1BQUEsQ0FDQSxPQUFBLEtBQUEsVUFBQSxJQUNBLEVBRUEsT0FBQSxDQUNBLE9BQUEsS0FBQSxVQUFBLEtBQ0EsRUFFQSxVQUFBLENBQ0EsT0FBQSxLQUFBLFVBQUEsUUFDQSxFQUVBLFlBQUEsQ0FDQSxNQUFBLENBQ0EsR0FBQSxLQUFBLEtBQ0EsT0FBQSxLQUFBLE1BQ0EsQ0FDQSxFQUVBLFlBQUEsQ0FDQSxPQUFBckwsRUFBQSxLQUFBLE9BQUEsVUFBQSxDQUNBLEVBR0EsZ0JBQUEsQ0FDQSxPQUFBLEtBQUEsT0FBQSxRQUNBLEVBRUEsY0FBQSxPQUNBLE1BQUE5SyxHQUFBbkQsRUFBQSxLQUFBLGlCQUFBLFlBQUFBLEVBQUEsS0FDQSxPQUFBbUQsR0FBQSxLQUFBLEtBQUFBLEVBQ0EsRUFFQSxtQkFBQSxPQUNBLFFBQ0FuRCxFQUFBLEtBQUEsZUFBQSxZQUFBQSxFQUFBLFFBQUEsR0FDQSxLQUFBLGVBQUEsWUFBQSxDQUNBLEtBQUEsUUFDQSxRQUFBLEdBQ0EsT0FBQSxLQUFBLGNBQ0EsQ0FBQSxDQUVBLEVBRUEsYUFBQSxPQUNBLFFBQUFBLEVBQUEsS0FBQSxlQUFBLFlBQUFBLEVBQUEsU0FBQSxDQUNBLEVBRUEsZUFBQSxPQUNBLFFB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