@prisma/studio-core 0.5.3 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prisma/studio-core",
3
- "version": "0.5.3",
3
+ "version": "0.6.0",
4
4
  "description": "Modular Prisma Studio components",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -1,10 +0,0 @@
1
- import * as ___react___ from 'react';
2
- import * as ___react_dom___ from 'react-dom';
3
-
4
- function require(mod) {
5
- if (mod === 'react') return ___react___;
6
- if (mod === 'react-dom') return ___react_dom___;
7
- throw new Error(`Unknown module ${mod}`);
8
- }
9
- import{a as d,b as E,c as D,d as S,e as B,f as g,g as w,i as R,j as I}from"./chunk-AQXRIQHE.js";import{e as u}from"./chunk-GDQBQ7MK.js";u();u();u();function c(n){let{error:s,query:a}=n,e=s;return e.query=a,[e]}u();var q={bool:{group:"boolean"},boolean:{group:"boolean"},bytea:{group:"string"},char:{group:"string"},citext:{group:"string"},date:{group:"datetime"},interval:{group:"string"},name:{group:"string"},varchar:{group:"string"},text:{group:"string"},time:{group:"time"},timestamp:{group:"datetime"},timestamptz:{group:"datetime"},"timestamp without time zone":{group:"datetime"},"timestamp with time zone":{group:"datetime"},timetz:{group:"time"},"time without time zone":{group:"time"},"time with time zone":{group:"datetime"},uuid:{group:"raw"},int2:{group:"numeric"},int4:{group:"numeric"},int8:{group:"numeric"},smallint:{group:"numeric"},integer:{group:"numeric"},bigint:{group:"numeric"},decimal:{group:"numeric"},numeric:{group:"numeric"},real:{group:"numeric"},float4:{group:"numeric"},float8:{group:"numeric"},"double precision":{group:"numeric"},json:{group:"json"},jsonb:{group:"json"}};u();u();function _(n){return S({...n,Adapter:D,QueryCompiler:E})}function O(n,s){let{table:a,rows:e}=n,{name:r,schema:t,columns:o}=a,i=_(s),p=Object.keys(o);return g(i.withSchema(t).insertInto(r).values(R("insert",e,o)).returning(p).returning(l=>l.cast("ctid","text").as("ctid")))}function C(n,s){let{pageIndex:a,pageSize:e,sortOrder:r,table:{name:t,schema:o,columns:i},filter:p={kind:"FilterGroup",after:"and",filters:[]}}=n,l=_(s),b=Object.keys(i),h=N(p.filters,i),y=l.withSchema(o).selectFrom(t).where(h).select(m=>m.cast(m.fn.coalesce(m.fn.countAll(),d.lit(0)),"text").as("oid"));return g(l.with("count",()=>y).withSchema(o).selectFrom([t,"count"]).select(d.ref("count.oid").$castTo().as("oid")).select(m=>m.cast("ctid","text").as("ctid")).select(b).$call(m=>r.reduce((A,k)=>A.orderBy(k.column,k.direction),m)).where(h).limit(e).offset(d.lit(BigInt(a)*BigInt(e))))}function v(n,s){return n.kind==="ColumnFilter"?a=>{let{column:e,operator:r,value:t}=n,o=s[e];return a(o.datatype.group==="raw"?a.cast(e,"text"):e,r,I(t,o))}:N(n.filters,s)}function N(n,s){if(n.length===0)return r=>r.lit(!0);let a=[],e=[];for(let r=0;r<n.length;r++)e.push(v(n[r],s)),(r===n.length-1||n[r].after==="or")&&(a.push(e),e=[]);return r=>{let t=a.map(o=>r.and(o.map(i=>i(r))));return r.or(t)}}function le(){return[{created_at:new Date("2025-01-26T21:56:12.345Z"),ctid:"(0,1)",deleted_at:null,id:1,name:"John Doe",oid:"2",role:"admin",name_role:"Jonn Doe - admin"},{created_at:new Date("2025-01-26T20:56:12.345Z"),ctid:"(0,2)",deleted_at:null,id:2,name:"Jane Doe",oid:"2",role:"poweruser",name_role:"Jane Doe - poweruser"}]}function F(n,s){let{changes:a,row:e,table:{columns:r,name:t,schema:o}}=n,i=_(s),p=Object.keys(r);return g(i.withSchema(o).updateTable(t).set(R("update",a,r)).$call(w([e],r)).returning(p).returning(l=>[l.cast("ctid","text").as("ctid"),l.cast(l.fn("floor",[l(l.fn("extract",[d`epoch from now()`]),"*",1e6)]),"text").as("__ps_updated_at__")]))}function z(n,s){let{rows:a,table:{columns:e,name:r,schema:t}}=n,o=_(s);return g(o.withSchema(t).deleteFrom(r).$call(w(a,e)))}u();u();function P(n){return d`(select coalesce(json_agg(agg), '[]') from ${n} as agg)`}var L="r",M="v",V=[L,M];function j(n){return g(_(n).selectFrom("pg_catalog.pg_class as cls").innerJoin("pg_catalog.pg_namespace as ns","cls.relnamespace","ns.oid").$call(W).where("cls.relkind","in",V).select(s=>["ns.nspname as schema","cls.relname as name",P(s.selectFrom("pg_catalog.pg_attribute as att").innerJoin("pg_catalog.pg_type as typ","typ.oid","att.atttypid").innerJoin("pg_catalog.pg_namespace as tns","tns.oid","typ.typnamespace").leftJoin("pg_catalog.pg_constraint as pk_con",a=>a.on("pk_con.contype","=","p").onRef("pk_con.conrelid","=","cls.oid").on(e=>e("att.attnum","=",e.fn.any("pk_con.conkey")))).leftJoin("pg_catalog.pg_constraint as fk_con",a=>a.on("fk_con.contype","=","f").onRef("fk_con.conrelid","=","cls.oid").on(e=>e("att.attnum","=",e.fn.any("fk_con.conkey")))).leftJoin("pg_catalog.pg_class as fk_cls","fk_cls.oid","fk_con.confrelid").leftJoin("pg_catalog.pg_namespace as fk_ns","fk_ns.oid","fk_cls.relnamespace").leftJoin("pg_catalog.pg_attribute as fk_att",a=>a.onRef("fk_att.attrelid","=","fk_cls.oid").on(e=>e("fk_att.attnum","=",e.fn.any("fk_con.confkey")))).whereRef("att.attrelid","=","cls.oid").where("att.attnum",">=",0).where("att.attisdropped","!=",!0).select(["att.attname as name","typ.typname as datatype","tns.nspname as datatype_schema","fk_ns.nspname as foreign_key_schema","fk_cls.relname as foreign_key_table","fk_att.attname as foreign_key_column"]).select(a=>[a("pk_con.conkey","is not",null).$castTo().as("pk"),a("att.attgenerated","!=","").$castTo().as("computed"),a("att.attnotnull","!=",!0).$castTo().as("nullable"),a.fn.coalesce(a.selectFrom("pg_catalog.pg_enum as enm").whereRef("enm.enumtypid","=","typ.oid").select(e=>e.fn.jsonAgg(e.ref("enm.enumlabel")).as("o")),d`'[]'`).as("options")])).as("columns")]))}function G(){return[{schema:"zoo",name:"animals",columns:[{name:"id",datatype:"int4",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"text",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null}]},{schema:"public",name:"users",columns:[{name:"id",datatype:"int4",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"created_at",datatype:"timestamp",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"deleted_at",datatype:"timestamp",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"role",datatype:"varchar",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"varchar",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name_role",datatype:"text",datatype_schema:"pg_catalog",pk:!1,computed:!0,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null}]},{schema:"public",name:"composite_pk",columns:[{name:"id",datatype:"uuid",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!1,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"name",datatype:"text",datatype_schema:"pg_catalog",pk:!0,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null},{name:"created_at",datatype:"timestamp",datatype_schema:"pg_catalog",pk:!1,computed:!1,options:[],nullable:!0,foreign_key_schema:null,foreign_key_table:null,foreign_key_column:null}]}]}function U(){let n=_();return g(n.selectNoFrom(n.fn("current_setting",[d.lit("timezone")]).as("timezone")))}function $(){return[{timezone:"UTC"}]}function W(n){return n.where("ns.nspname","!~","^pg_").where("ns.nspname","!=","information_schema")}function we(n){let{executor:s,...a}=n;return{defaultSchema:"public",async introspect(e){try{let r=j(a),t=U(),[[o,i],[p,l]]=await Promise.all([s.execute(r,e),s.execute(t,e)]);if(o)return c({error:o,query:r});if(p)return c({error:p,query:t});let b=l[0]?.timezone;return b?[null,K({tables:i,timezone:b,query:r})]:c({error:new Error("Timezone not found"),query:t})}catch(r){return c({error:r})}},async query(e,r){try{let t=C(e,a),[o,i]=await s.execute(t,r);return o?c({error:o,query:t}):[null,{filteredRowCount:i[0]?.oid||"0",rows:i,query:t}]}catch(t){return c({error:t})}},async insert(e,r){try{let t=O(e,a),[o,i]=await s.execute(t,r);return o?c({error:o,query:t}):[null,{rows:i,query:t}]}catch(t){return c({error:t})}},async update(e,r){try{let t=F(e,a),[o,i]=await s.execute(t,r);if(o)return c({error:o,query:t});let[p]=i;return p?[null,{row:p,query:t}]:c({error:new Error("Update failed"),query:t})}catch(t){return c({error:t})}},async delete(e,r){try{let t=z(e,a),[o]=await s.execute(t,r);return o?c({error:o,query:t}):[null,{...e,query:t}]}catch(t){return c({error:t})}}}}function K(n){let{tables:s,timezone:a,query:e}=n;return s.reduce((r,t)=>{let{schemas:o}=r,{columns:i,name:p,schema:l}=t,b=i.reduce((h,y)=>{let{datatype:m,datatype_schema:A,name:k,options:Q,nullable:J}=y,x=m.startsWith("_"),T=x?m.slice(1):m;return{...h,[k]:{datatype:{...q[T]||{group:Q.length>0?"enum":"raw"},isArray:x,isNative:A==="pg_catalog",name:x?`${T}[]`:T,options:Q,schema:A},isComputed:y.computed,isInPrimaryKey:y.pk,name:k,nullable:J,schema:l,table:p,fkSchema:y.foreign_key_schema,fkTable:y.foreign_key_table,fkColumn:y.foreign_key_column}}},{});return o[l]===void 0&&(o[l]={name:l,tables:{}}),o[l].tables[p]={columns:b,name:p,schema:l},r},{schemas:{public:{tables:{},name:"public"}},timezone:a,filterOperators:Y,query:e})}var Y=["=","!=",">",">=","<","<=","is","is not","like","not like","ilike","not ilike"];function Re(){let n=G(),[{timezone:s}]=$();return K({tables:n,timezone:s,query:{parameters:[],sql:"<mocked>"}})}u();function Se(){return B("select pg_backend_pid() as pid")}function Be(n){return{parameters:[n],sql:"select pg_cancel_backend($1);"}}export{O as a,C as b,le as c,F as d,z as e,j as f,G as g,U as h,$ as i,we as j,Re as k,Se as l,Be as m};
10
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL2luZGV4LnRzIiwgIi4uL2RhdGEvcG9zdGdyZXMtY29yZS9hZGFwdGVyLnRzIiwgIi4uL2RhdGEvYWRhcHRlci50cyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvZGF0YXR5cGUudHMiLCAiLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL2RtbC50cyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvYnVpbGRlci50cyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvaW50cm9zcGVjdGlvbi50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2hlbHBlcnMvcG9zdGdyZXMuanMiLCAiLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL3V0aWxpdHkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RtbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbGl0eVwiO1xuIiwgImltcG9ydCB7XG4gIHR5cGUgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRGVsZXRlUmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJFcnJvcixcbiAgdHlwZSBBZGFwdGVySW5zZXJ0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJRdWVyeVJlc3VsdCxcbiAgdHlwZSBBZGFwdGVyVXBkYXRlUmVzdWx0LFxuICB0eXBlIENvbHVtbixcbiAgY3JlYXRlQWRhcHRlckVycm9yLFxuICB0eXBlIEZpbHRlck9wZXJhdG9yLFxuICB0eXBlIFRhYmxlLFxufSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBFeGVjdXRvciB9IGZyb20gXCIuLi9leGVjdXRvclwiO1xuaW1wb3J0IHR5cGUgeyBRdWVyeSwgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgRWl0aGVyIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IFBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSB9IGZyb20gXCIuL2RhdGF0eXBlXCI7XG5pbXBvcnQgeyBnZXREZWxldGVRdWVyeSwgZ2V0SW5zZXJ0UXVlcnksIGdldFNlbGVjdFF1ZXJ5LCBnZXRVcGRhdGVRdWVyeSB9IGZyb20gXCIuL2RtbFwiO1xuaW1wb3J0IHsgZ2V0VGFibGVzUXVlcnksIGdldFRpbWV6b25lUXVlcnksIG1vY2tUYWJsZXNRdWVyeSwgbW9ja1RpbWV6b25lUXVlcnkgfSBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zdGdyZXNBZGFwdGVyUmVxdWlyZW1lbnRzIHtcbiAgZXhlY3V0b3I6IEV4ZWN1dG9yO1xuICBub1BhcmFtZXRlcnM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUG9zdGdyZXNBZGFwdGVyKHJlcXVpcmVtZW50czogUG9zdGdyZXNBZGFwdGVyUmVxdWlyZW1lbnRzKTogQWRhcHRlciB7XG4gIGNvbnN0IHsgZXhlY3V0b3IsIC4uLm90aGVyUmVxdWlyZW1lbnRzIH0gPSByZXF1aXJlbWVudHM7XG5cbiAgcmV0dXJuIHtcbiAgICBkZWZhdWx0U2NoZW1hOiBcInB1YmxpY1wiLFxuICAgIGFzeW5jIGludHJvc3BlY3Qob3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckludHJvc3BlY3RSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0YWJsZXNRdWVyeSA9IGdldFRhYmxlc1F1ZXJ5KG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgdGltZXpvbmVRdWVyeSA9IGdldFRpbWV6b25lUXVlcnkoKTtcblxuICAgICAgICBjb25zdCBbW3RhYmxlc0Vycm9yLCB0YWJsZXNdLCBbdGltZXpvbmVFcnJvciwgdGltZXpvbmVzXV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSh0YWJsZXNRdWVyeSwgb3B0aW9ucyksXG4gICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZSh0aW1lem9uZVF1ZXJ5LCBvcHRpb25zKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgaWYgKHRhYmxlc0Vycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiB0YWJsZXNFcnJvciwgcXVlcnk6IHRhYmxlc1F1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRpbWV6b25lRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRpbWV6b25lRXJyb3IsIHF1ZXJ5OiB0aW1lem9uZVF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGltZXpvbmUgPSB0aW1lem9uZXNbMF0/LnRpbWV6b25lO1xuXG4gICAgICAgIGlmICghdGltZXpvbmUpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IG5ldyBFcnJvcihcIlRpbWV6b25lIG5vdCBmb3VuZFwiKSwgcXVlcnk6IHRpbWV6b25lUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIGNyZWF0ZUludHJvc3BlY3Rpb24oeyB0YWJsZXMsIHRpbWV6b25lLCBxdWVyeTogdGFibGVzUXVlcnkgfSldO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHF1ZXJ5KGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJRdWVyeVJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0U2VsZWN0UXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyBmaWx0ZXJlZFJvd0NvdW50OiByZXN1bHRzWzBdPy5vaWQgfHwgXCIwXCIsIHJvd3M6IHJlc3VsdHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIHByb3Blcmx5XG4gICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogZXJyb3IgYXMgRXJyb3IgfSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGluc2VydChkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW5zZXJ0UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRJbnNlcnRRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IFtlcnJvciwgcm93c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvd3MsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlKGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJVcGRhdGVSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFVwZGF0ZVF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgW2Vycm9yLCByZXN1bHRzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbcm93XSA9IHJlc3VsdHM7XG5cbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAvLyBUT0RPOiBjdXN0b20gZXJyb3I/XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBuZXcgRXJyb3IoXCJVcGRhdGUgZmFpbGVkXCIpLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgeyByb3csIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIGRlbGV0ZShkZXRhaWxzLCBvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyRGVsZXRlUmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXREZWxldGVRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IFtlcnJvcl0gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IC4uLmRldGFpbHMsIHF1ZXJ5IH1dO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnRyb3NwZWN0aW9uKGFyZ3M6IHsgdGFibGVzOiBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+OyB0aW1lem9uZTogc3RyaW5nOyBxdWVyeTogUXVlcnkgfSkge1xuICBjb25zdCB7IHRhYmxlcywgdGltZXpvbmUsIHF1ZXJ5IH0gPSBhcmdzO1xuXG4gIHJldHVybiB0YWJsZXMucmVkdWNlKFxuICAgIChyZXN1bHQsIHJvdykgPT4ge1xuICAgICAgY29uc3QgeyBzY2hlbWFzIH0gPSByZXN1bHQ7XG4gICAgICBjb25zdCB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH0gPSByb3c7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnNSZWNvcmQgPSBjb2x1bW5zLnJlZHVjZShcbiAgICAgICAgKGNvbHVtbnMsIGNvbHVtbikgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZGF0YXR5cGUsIGRhdGF0eXBlX3NjaGVtYSwgbmFtZTogY29sdW1uTmFtZSwgb3B0aW9ucywgbnVsbGFibGUgfSA9IGNvbHVtbjtcblxuICAgICAgICAgIGNvbnN0IGlzQXJyYXkgPSBkYXRhdHlwZS5zdGFydHNXaXRoKFwiX1wiKTtcbiAgICAgICAgICBjb25zdCBzdHJpcHBlZERhdGFUeXBlID0gaXNBcnJheSA/IGRhdGF0eXBlLnNsaWNlKDEpIDogZGF0YXR5cGU7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29sdW1ucyxcbiAgICAgICAgICAgIFtjb2x1bW5OYW1lXToge1xuICAgICAgICAgICAgICBkYXRhdHlwZToge1xuICAgICAgICAgICAgICAgIC4uLihQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEFbc3RyaXBwZWREYXRhVHlwZV0gfHwge1xuICAgICAgICAgICAgICAgICAgZ3JvdXA6IG9wdGlvbnMubGVuZ3RoID4gMCA/IFwiZW51bVwiIDogXCJyYXdcIixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBpc0FycmF5LFxuICAgICAgICAgICAgICAgIGlzTmF0aXZlOiBkYXRhdHlwZV9zY2hlbWEgPT09IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgICAgICAgIG5hbWU6IGlzQXJyYXkgPyBgJHtzdHJpcHBlZERhdGFUeXBlfVtdYCA6IHN0cmlwcGVkRGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IGRhdGF0eXBlX3NjaGVtYSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaXNDb21wdXRlZDogY29sdW1uLmNvbXB1dGVkLFxuICAgICAgICAgICAgICBpc0luUHJpbWFyeUtleTogY29sdW1uLnBrLFxuICAgICAgICAgICAgICBuYW1lOiBjb2x1bW5OYW1lLFxuICAgICAgICAgICAgICBudWxsYWJsZSxcbiAgICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgICB0YWJsZTogdGFibGVOYW1lLFxuICAgICAgICAgICAgICBma1NjaGVtYTogY29sdW1uLmZvcmVpZ25fa2V5X3NjaGVtYSxcbiAgICAgICAgICAgICAgZmtUYWJsZTogY29sdW1uLmZvcmVpZ25fa2V5X3RhYmxlLFxuICAgICAgICAgICAgICBma0NvbHVtbjogY29sdW1uLmZvcmVpZ25fa2V5X2NvbHVtbixcbiAgICAgICAgICAgIH0gYXMgY29uc3Qgc2F0aXNmaWVzIENvbHVtbixcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICB7fSBhcyBUYWJsZVtcImNvbHVtbnNcIl0sXG4gICAgICApO1xuXG4gICAgICBpZiAoc2NoZW1hc1tzY2hlbWFdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2NoZW1hc1tzY2hlbWFdID0ge1xuICAgICAgICAgIG5hbWU6IHNjaGVtYSxcbiAgICAgICAgICB0YWJsZXM6IHt9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBzY2hlbWFzW3NjaGVtYV0udGFibGVzW3RhYmxlTmFtZV0gPSB7XG4gICAgICAgIGNvbHVtbnM6IGNvbHVtbnNSZWNvcmQsXG4gICAgICAgIG5hbWU6IHRhYmxlTmFtZSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHtcbiAgICAgIHNjaGVtYXM6IHsgcHVibGljOiB7IHRhYmxlczoge30sIG5hbWU6IFwicHVibGljXCIgfSB9LFxuICAgICAgdGltZXpvbmUsXG4gICAgICBmaWx0ZXJPcGVyYXRvcnMsXG4gICAgICBxdWVyeSxcbiAgICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCBhcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCxcbiAgKTtcbn1cblxuY29uc3QgZmlsdGVyT3BlcmF0b3JzID0gW1xuICBcIj1cIixcbiAgXCIhPVwiLFxuICBcIj5cIixcbiAgXCI+PVwiLFxuICBcIjxcIixcbiAgXCI8PVwiLFxuICBcImlzXCIsXG4gIFwiaXMgbm90XCIsXG4gIFwibGlrZVwiLFxuICBcIm5vdCBsaWtlXCIsXG4gIFwiaWxpa2VcIixcbiAgXCJub3QgaWxpa2VcIixcbl0gc2F0aXNmaWVzIEZpbHRlck9wZXJhdG9yW107XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrSW50cm9zcGVjdCgpIHtcbiAgY29uc3QgdGFibGVzID0gbW9ja1RhYmxlc1F1ZXJ5KCk7XG4gIGNvbnN0IFt7IHRpbWV6b25lIH1dID0gbW9ja1RpbWV6b25lUXVlcnkoKTtcbiAgY29uc3QgcXVlcnkgPSB7IHBhcmFtZXRlcnM6IFtdLCBzcWw6IFwiPG1vY2tlZD5cIiB9IGFzIFF1ZXJ5O1xuXG4gIHJldHVybiBjcmVhdGVJbnRyb3NwZWN0aW9uKHsgdGFibGVzLCB0aW1lem9uZSwgcXVlcnkgfSkgYXMge1xuICAgIC8vIGJlc3QgZWZmb3J0LCBubyBuZWVkIGdvIG92ZXJib2FyZC5cbiAgICBzY2hlbWFzOiB7XG4gICAgICBbSyBpbiAodHlwZW9mIHRhYmxlcylbbnVtYmVyXVtcInNjaGVtYVwiXV06IHtcbiAgICAgICAgbmFtZTogSztcbiAgICAgICAgdGFibGVzOiB7XG4gICAgICAgICAgW1QgaW4gKHR5cGVvZiB0YWJsZXMpW251bWJlcl1bXCJuYW1lXCJdXTogVGFibGU7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH07XG4gICAgdGltZXpvbmU6IHR5cGVvZiB0aW1lem9uZTtcbiAgICBmaWx0ZXJPcGVyYXRvcnM6IEZpbHRlck9wZXJhdG9yW107XG4gICAgcXVlcnk6IFF1ZXJ5O1xuICB9IHNhdGlzZmllcyBBZGFwdGVySW50cm9zcGVjdFJlc3VsdDtcbn1cbiIsICJpbXBvcnQgeyBRdWVyeSB9IGZyb20gXCIuL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEJpZ0ludFN0cmluZywgRWl0aGVyLCBOdW1lcmljU3RyaW5nIH0gZnJvbSBcIi4vdHlwZS11dGlsc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXIge1xuICAvKipcbiAgICogVGhlIHNjaGVtYSBzdHVkaW8gd2lsbCBjaG9vc2UgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogZS5nLiBgcHVibGljYCBmb3IgUG9zdGdyZVNRTFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFNjaGVtYT86IHN0cmluZztcblxuICAvKipcbiAgICogSW50cm9zcGVjdHMgdGhlIGRhdGFiYXNlIGFuZCByZXR1cm5zIHN0cnVjdHVyZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNjaGVtYXMsIHRhYmxlcywgZXRjLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIHRoZSBpbnRyb3NwZWN0aW9uIHJlcXVlc3QuXG4gICAqL1xuICBpbnRyb3NwZWN0KG9wdGlvbnM6IEFkYXB0ZXJJbnRyb3NwZWN0T3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckludHJvc3BlY3RSZXN1bHQ+PjtcblxuICAvKipcbiAgICogRXhlY3V0ZXMgYSBzdHJ1Y3R1cmVkIHF1ZXJ5IGFnYWluc3QgdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgcXVlcnkoZGV0YWlsczogQWRhcHRlclF1ZXJ5RGV0YWlscywgb3B0aW9uczogQWRhcHRlclF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclF1ZXJ5UmVzdWx0Pj47XG5cbiAgLyoqXG4gICAqIEluc2VydHMgYSBzaW5nbGUgcm93IGludG8gdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgaW5zZXJ0KFxuICAgIGRldGFpbHM6IEFkYXB0ZXJJbnNlcnREZXRhaWxzLFxuICAgIG9wdGlvbnM6IEFkYXB0ZXJJbnNlcnRPcHRpb25zLFxuICApOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJJbnNlcnRSZXN1bHQ+PjtcblxuICAvKipcbiAgICogVXBkYXRlcyBhIGdpdmVuIHJvdyBpbiB0aGUgZGF0YWJhc2Ugd2l0aCBnaXZlbiBjaGFuZ2VzLlxuICAgKi9cbiAgdXBkYXRlKFxuICAgIGRldGFpbHM6IEFkYXB0ZXJVcGRhdGVEZXRhaWxzLFxuICAgIG9wdGlvbnM6IEFkYXB0ZXJVcGRhdGVPcHRpb25zLFxuICApOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJVcGRhdGVSZXN1bHQ+PjtcblxuICAvKipcbiAgICogRGVsZXRlcyBnaXZlbiByb3dzIGZyb20gdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgZGVsZXRlKFxuICAgIGRldGFpbHM6IEFkYXB0ZXJEZWxldGVEZXRhaWxzLFxuICAgIG9wdGlvbnM6IEFkYXB0ZXJEZWxldGVPcHRpb25zLFxuICApOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJEZWxldGVSZXN1bHQ+Pjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyQmFzZU9wdGlvbnMge31cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVySW50cm9zcGVjdE9wdGlvbnMgZXh0ZW5kcyBBZGFwdGVyQmFzZU9wdGlvbnMge31cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyUXVlcnlPcHRpb25zIGV4dGVuZHMgQWRhcHRlckJhc2VPcHRpb25zIHtcbiAgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJJbnNlcnRPcHRpb25zIGV4dGVuZHMgQWRhcHRlckJhc2VPcHRpb25zIHt9XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlclVwZGF0ZU9wdGlvbnMgZXh0ZW5kcyBBZGFwdGVyQmFzZU9wdGlvbnMge31cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyRGVsZXRlT3B0aW9ucyBleHRlbmRzIEFkYXB0ZXJCYXNlT3B0aW9ucyB7fVxuXG50eXBlIFNjaGVtYU5hbWUgPSBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckludHJvc3BlY3RSZXN1bHQge1xuICBzY2hlbWFzOiBSZWNvcmQ8U2NoZW1hTmFtZSwgU2NoZW1hPjtcbiAgdGltZXpvbmU6IHN0cmluZztcbiAgZmlsdGVyT3BlcmF0b3JzOiBGaWx0ZXJPcGVyYXRvcltdO1xuICBxdWVyeTogUXVlcnk7XG59XG5cbnR5cGUgVGFibGVOYW1lID0gc3RyaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdGFibGVzOiBSZWNvcmQ8VGFibGVOYW1lLCBUYWJsZT47XG59XG5cbnR5cGUgQ29sdW1uTmFtZSA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZSB7XG4gIGNvbHVtbnM6IFJlY29yZDxDb2x1bW5OYW1lLCBDb2x1bW4+O1xuICBuYW1lOiBUYWJsZU5hbWU7XG4gIHNjaGVtYTogU2NoZW1hTmFtZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW4ge1xuICBkYXRhdHlwZTogRGF0YVR5cGU7XG4gIGlzQ29tcHV0ZWQ6IGJvb2xlYW47XG4gIGlzSW5QcmltYXJ5S2V5OiBib29sZWFuO1xuICBuYW1lOiBDb2x1bW5OYW1lO1xuICBudWxsYWJsZTogYm9vbGVhbjtcbiAgc2NoZW1hOiBTY2hlbWFOYW1lO1xuICB0YWJsZTogVGFibGVOYW1lO1xuICBma1NjaGVtYTogU2NoZW1hTmFtZSB8IG51bGw7XG4gIGZrQ29sdW1uOiBDb2x1bW5OYW1lIHwgbnVsbDtcbiAgZmtUYWJsZTogVGFibGVOYW1lIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhVHlwZSB7XG4gIC8qKlxuICAgKiBBIHNpbXBsaWZpY2F0aW9uL25vcm1hbGl6YXRpb24gZm9yIFVJIHVzYWdlLlxuICAgKlxuICAgKiBlLmcuIHZhcmNoYXIgYW5kIGNoYXIgYXJlIHN0cmluZ3MuXG4gICAqL1xuICBncm91cDogRGF0YVR5cGVHcm91cDtcblxuICAvKipcbiAgICogSXMgdGhpcyBhIG5hdGl2ZSBhcnJheSB0eXBlP1xuICAgKi9cbiAgaXNBcnJheTogYm9vbGVhbjtcblxuICAvKipcbiAgICogSXMgYSBuYXRpdmUgZGF0YWJhc2UgZGF0YXR5cGUgb3IgYSB1c2VyLWRlZmluZWQgZGF0YXR5cGU/XG4gICAqXG4gICAqIGUuZy4gUG9zdGdyZVNRTCBlbnVtcyBhcmUgdXNlci1kZWZpbmVkIGRhdGF0eXBlcywgYnV0IGBpbnQ0YCBpcyBhIG5hdGl2ZSBkYXRhdHlwZS5cbiAgICovXG4gIGlzTmF0aXZlOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaWxsIGJlIGRpc3BsYXllZCBhcy1pcy5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogRW51bSB2YWx1ZXMgZm9yIGVudW0gdHlwZXMuXG4gICAqL1xuICBvcHRpb25zOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHNjaGVtYSB0aGUgZGF0YXR5cGUgYmVsb25ncyB0by5cbiAgICovXG4gIHNjaGVtYTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBEYXRhVHlwZUdyb3VwID0gXCJzdHJpbmdcIiB8IFwiZGF0ZXRpbWVcIiB8IFwiYm9vbGVhblwiIHwgXCJlbnVtXCIgfCBcInRpbWVcIiB8IFwicmF3XCIgfCBcIm51bWVyaWNcIiB8IFwianNvblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJRdWVyeURldGFpbHMge1xuICAvKipcbiAgICogWmVyby1iYXNlZCBpbmRleCBvZiB0aGUgcGFnZSB0byBmZXRjaC5cbiAgICovXG4gIHBhZ2VJbmRleDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGZldGNoIGZyb20gdGhlIGRhdGFiYXNlLlxuICAgKi9cbiAgcGFnZVNpemU6IG51bWJlcjtcblxuICAvKipcbiAgICogU29ydCBvcmRlciBmb3IgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgc29ydE9yZGVyOiBTb3J0T3JkZXJJdGVtW107XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0byBzZWxlY3QgZnJvbS5cbiAgICovXG4gIHRhYmxlOiBUYWJsZTtcblxuICAvKipcbiAgICogVGhlIGZpbHRlciB0byBiZSBhcHBsaWVkLlxuICAgKi9cbiAgZmlsdGVyPzogRmlsdGVyR3JvdXA7XG59XG5cbmV4cG9ydCB0eXBlIEZpbHRlck9wZXJhdG9yID1cbiAgfCBcIj1cIlxuICB8IFwiIT1cIlxuICB8IFwiPlwiXG4gIHwgXCI+PVwiXG4gIHwgXCI8XCJcbiAgfCBcIjw9XCJcbiAgfCBcImlzXCJcbiAgfCBcImlzIG5vdFwiXG4gIHwgXCJsaWtlXCJcbiAgfCBcIm5vdCBsaWtlXCJcbiAgfCBcImlsaWtlXCJcbiAgfCBcIm5vdCBpbGlrZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbkZpbHRlciB7XG4gIGtpbmQ6IFwiQ29sdW1uRmlsdGVyXCI7XG4gIGNvbHVtbjogc3RyaW5nO1xuICBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3I7XG4gIHZhbHVlOiB1bmtub3duO1xuICBhZnRlcjogXCJhbmRcIiB8IFwib3JcIjtcbiAgaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHcm91cCB7XG4gIGtpbmQ6IFwiRmlsdGVyR3JvdXBcIjtcbiAgZmlsdGVyczogKENvbHVtbkZpbHRlciB8IEZpbHRlckdyb3VwKVtdO1xuICBhZnRlcjogXCJhbmRcIiB8IFwib3JcIjtcbiAgaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTb3J0T3JkZXJJdGVtIHtcbiAgLyoqXG4gICAqIFRoZSBjb2x1bW4gdG8gc29ydCBieS5cbiAgICovXG4gIGNvbHVtbjogQ29sdW1uTmFtZTtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdGlvbiB0byBzb3J0IHRoZSBjb2x1bW4gYnkuXG4gICAqL1xuICBkaXJlY3Rpb246IFNvcnREaXJlY3Rpb247XG59XG5cbmV4cG9ydCB0eXBlIFNvcnREaXJlY3Rpb24gPSBcImFzY1wiIHwgXCJkZXNjXCI7XG5cbmV4cG9ydCBjbGFzcyBBZGFwdGVyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHF1ZXJ5PzogUXVlcnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlclF1ZXJ5UmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyB0aGUgcXVlcnkgd291bGQgcmV0dXJuIGlmIG5vdCBsaW1pdGVkLlxuICAgKlxuICAgKiBJZiB0aGUgZGF0YWJhc2UgZG9lcyBub3Qgc3VwcG9ydCBjb3VudGluZyByb3dzLCB0aGlzIHNob3VsZCBiZSBzZXQgdG8gYEluZmluaXR5YC5cbiAgICovXG4gIGZpbHRlcmVkUm93Q291bnQ6IG51bWJlciB8IGJpZ2ludCB8IE51bWVyaWNTdHJpbmcgfCBCaWdJbnRTdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByb3dzIHJldHVybmVkIGJ5IHRoZSBxdWVyeS5cbiAgICovXG4gIHJvd3M6IFJlY29yZDxDb2x1bW5OYW1lLCB1bmtub3duPltdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlY3V0ZWQgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgcXVlcnk6IFF1ZXJ5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJJbnNlcnREZXRhaWxzIHtcbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0byBpbnNlcnQgaW50by5cbiAgICovXG4gIHRhYmxlOiBUYWJsZTtcblxuICAvKipcbiAgICogVGhlIHZhbHVlcyB0byBpbnNlcnQgaW50byB0aGUgdGFibGUuXG4gICAqIC0gVGhlIGtleXMgc2hvdWxkIG1hdGNoIHRoZSBjb2x1bW4gbmFtZXMgaW4gdGhlIHRhYmxlLlxuICAgKiAtIFRoZSB2YWx1ZXMgc2hvdWxkIGJlIHRoZSB2YWx1ZXMgdG8gaW5zZXJ0IGludG8gdGhlIHRhYmxlLlxuICAgKi9cbiAgcm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVySW5zZXJ0UmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBmcmVzaGx5IGluc2VydGVkIHJvdyBkYXRhLlxuICAgKi9cbiAgcm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcblxuICAvKipcbiAgICogVGhlIGV4ZWN1dGVkIHF1ZXJ5IHN0cmluZy5cbiAgICovXG4gIHF1ZXJ5OiBRdWVyeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyVXBkYXRlRGV0YWlscyB7XG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRvIGFwcGx5IHRvIHRoZSByb3cuXG4gICAqL1xuICBjaGFuZ2VzOiBSZWNvcmQ8Q29sdW1uTmFtZSwgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFRoZSByb3cgdG8gdXBkYXRlLlxuICAgKi9cbiAgcm93OiBSZWNvcmQ8Q29sdW1uTmFtZSwgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0byB1cGRhdGUgaW4uXG4gICAqL1xuICB0YWJsZTogVGFibGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlclVwZGF0ZVJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgdXBkYXRlZCByb3cgZGF0YS5cbiAgICovXG4gIHJvdzogUmVjb3JkPENvbHVtbk5hbWUsIHVua25vd24+ICYge1xuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIGNoYW5nZXMgd2VyZSBhcHBsaWVkIGluIGRhdGFiYXNlIHRpbWUuXG4gICAgICovXG4gICAgX19wc191cGRhdGVkX2F0X186IHN0cmluZyB8IG51bWJlciB8IERhdGU7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRlZCBxdWVyeSBzdHJpbmcuXG4gICAqL1xuICBxdWVyeTogUXVlcnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckRlbGV0ZURldGFpbHMge1xuICAvKipcbiAgICogVGhlIHJvd3MgdG8gZGVsZXRlLlxuICAgKi9cbiAgcm93czogUmVjb3JkPENvbHVtbk5hbWUsIHVua25vd24+W107XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0byBkZWxldGUgZnJvbS5cbiAgICovXG4gIHRhYmxlOiBUYWJsZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyRGVsZXRlUmVzdWx0IHtcbiAgcm93czogUmVjb3JkPENvbHVtbk5hbWUsIHVua25vd24+W107XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRlZCBxdWVyeSBzdHJpbmcuXG4gICAqL1xuICBxdWVyeTogUXVlcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBZGFwdGVyRXJyb3IoYXJnczogeyBlcnJvcjogRXJyb3I7IHF1ZXJ5PzogUXVlcnkgfSkge1xuICBjb25zdCB7IGVycm9yLCBxdWVyeSB9ID0gYXJncztcblxuICBjb25zdCBhZGFwdGVyRXJyb3IgPSBlcnJvciBhcyBBZGFwdGVyRXJyb3I7XG5cbiAgYWRhcHRlckVycm9yLnF1ZXJ5ID0gcXVlcnk7XG5cbiAgcmV0dXJuIFthZGFwdGVyRXJyb3JdIGFzIFtBZGFwdGVyRXJyb3JdO1xufVxuIiwgImltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcblxuZXhwb3J0IGNvbnN0IFBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQTogUmVjb3JkPHN0cmluZywgUGljazxEYXRhVHlwZSwgXCJncm91cFwiPj4gPSB7XG4gIGJvb2w6IHtcbiAgICBncm91cDogXCJib29sZWFuXCIsXG4gIH0sXG4gIGJvb2xlYW46IHtcbiAgICBncm91cDogXCJib29sZWFuXCIsXG4gIH0sXG4gIGJ5dGVhOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGNoYXI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgY2l0ZXh0OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCdcbiAgICovXG4gIGRhdGU6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICAvKipcbiAgICogQGV4YW1wbGUgJzEgZGF5IDIgaG91cnMnXG4gICAqL1xuICBpbnRlcnZhbDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBuYW1lOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIHZhcmNoYXI6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgdGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICAvKipcbiAgICogc2hvcnQgZm9ybSBvZiBgdGltZSB3aXRob3V0IHRpbWUgem9uZWAuXG4gICAqXG4gICAqIEBleGFtcGxlICcxNDozMDowMCdcbiAgICovXG4gIHRpbWU6IHtcbiAgICBncm91cDogXCJ0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBzaG9ydCBmb3JtIG9mIGB0aW1lc3RhbXAgd2l0aG91dCB0aW1lIHpvbmVgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCAxNDozMDowMCdcbiAgICovXG4gIHRpbWVzdGFtcDoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBzaG9ydCBmb3JtIG9mIGB0aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmVgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCAxNDozMDowMCswMCdcbiAgICovXG4gIHRpbWVzdGFtcHR6OiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIGxvbmcgZm9ybSBvZiBgdGltZXN0YW1wYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQgMTQ6MzA6MDAnXG4gICAqL1xuICBcInRpbWVzdGFtcCB3aXRob3V0IHRpbWUgem9uZVwiOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIGxvbmcgZm9ybSBvZiBgdGltZXN0YW1wdHpgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCAxNDozMDowMCswMCdcbiAgICovXG4gIFwidGltZXN0YW1wIHdpdGggdGltZSB6b25lXCI6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICAvKipcbiAgICogc2hvcnQgZm9ybSBvZiBgdGltZSB3aXRoIHRpbWUgem9uZWAuXG4gICAqXG4gICAqIEBleGFtcGxlICcxNDozMDowMCswMDowMCdcbiAgICovXG4gIHRpbWV0ejoge1xuICAgIGdyb3VwOiBcInRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIGxvbmcgZm9ybSBvZiBgdGltZWAuXG4gICAqXG4gICAqIEBleGFtcGxlICcxNDozMDowMCdcbiAgICovXG4gIFwidGltZSB3aXRob3V0IHRpbWUgem9uZVwiOiB7XG4gICAgZ3JvdXA6IFwidGltZVwiLFxuICB9LFxuICAvKipcbiAgICogbG9uZyBmb3JtIG9mIGB0aW1ldHpgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCAxNDozMDowMCswMCdcbiAgICovXG4gIFwidGltZSB3aXRoIHRpbWUgem9uZVwiOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgdXVpZDoge1xuICAgIC8vIFRPRE86IHBvc3NpYmx5IGNoYW5nZSB0byBhbm90aGVyIGdyb3VwIGxhdGVyLlxuICAgIGdyb3VwOiBcInJhd1wiLFxuICB9LFxuICAvLyBOdW1lcmljIHR5cGVzXG4gIGludDI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGludDQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGludDg6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIHNtYWxsaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBpbnRlZ2VyOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBiaWdpbnQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGRlY2ltYWw6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIG51bWVyaWM6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIHJlYWw6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGZsb2F0NDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZmxvYXQ4OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBcImRvdWJsZSBwcmVjaXNpb25cIjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAganNvbjoge1xuICAgIGdyb3VwOiBcImpzb25cIixcbiAgfSxcbiAganNvbmI6IHtcbiAgICBncm91cDogXCJqc29uXCIsXG4gIH0sXG59O1xuIiwgImltcG9ydCB7IHR5cGUgRXhwcmVzc2lvbiwgdHlwZSBFeHByZXNzaW9uQnVpbGRlciwgc3FsLCB0eXBlIFNxbEJvb2wgfSBmcm9tIFwia3lzZWx5XCI7XG5cbmltcG9ydCB0eXBlIHtcbiAgQWRhcHRlckRlbGV0ZURldGFpbHMsXG4gIEFkYXB0ZXJJbnNlcnREZXRhaWxzLFxuICBBZGFwdGVyUXVlcnlEZXRhaWxzLFxuICBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgQ29sdW1uRmlsdGVyLFxuICBGaWx0ZXJHcm91cCxcbiAgVGFibGUsXG59IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQge1xuICBhcHBseUluZmVycmVkUm93RmlsdGVycyxcbiAgYXBwbHlUcmFuc2Zvcm1hdGlvbnMsXG4gIHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cyxcbiAgY29tcGlsZSxcbiAgdHJhbnNmb3JtVmFsdWUsXG59IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHR5cGUgeyBCaWdJbnRTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZS11dGlsc1wiO1xuaW1wb3J0IHsgZ2V0UG9zdGdyZVNRTEJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5pbXBvcnQgdHlwZSB7IG1vY2tUYWJsZXNRdWVyeSB9IGZyb20gXCIuL2ludHJvc3BlY3Rpb25cIjtcblxuLyoqXG4gKiBgY3RpZGAgaXMgYSBzeXN0ZW0gY29sdW1uIHRoYXQgcmVwcmVzZW50cyB0aGUgcGh5c2ljYWwgbG9jYXRpb24gb2YgYSByb3cgaW4gYSB0YWJsZS5cbiAqIEl0IGlzIGEgdHVwbGUgb2YgdHdvIGludGVnZXJzOiBgKGJsb2NrTnVtYmVyLCB0dXBsZUluZGV4KWAuXG4gKiBJdCBpcyB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgcm93IGluIGEgdGFibGUsIGV2ZW4gaWYgdGhlIHJvdyBoYXMgbm8gcHJpbWFyeSBrZXksIG9yIG90aGVyIHVuaXF1ZSBjb25zdHJhaW50cy5cbiAqXG4gKiBFeGFtcGxlOiAnKDAsMjMpJyByZXByZXNlbnRzIHRoZSAyNHRoIHJvdyBpbiB0aGUgZmlyc3QgYmxvY2sgb2YgdGhlIHRhYmxlLlxuICovXG5leHBvcnQgdHlwZSBDVElEYXNUZXh0ID0gYCgke251bWJlcn0sJHtudW1iZXJ9KWA7XG5cbi8qKlxuICogSW5zZXJ0cyBvbmUgb3IgbW9yZSByb3dzIGludG8gYSB0YWJsZSBhbmQgcmV0dXJucyB0aGUgaW5zZXJ0ZWQgcm93cyBhbG9uZyB3aXRoIHRoZWlyIGBjdGlkYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEluc2VydFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVySW5zZXJ0RGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7IHRhYmxlLCByb3dzIH0gPSBkZXRhaWxzO1xuICBjb25zdCB7IG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hLCBjb2x1bW5zIH0gPSB0YWJsZTtcblxuICBjb25zdCBidWlsZGVyID0gZ2V0UG9zdGdyZVNRTEJ1aWxkZXI8UmVjb3JkPHN0cmluZywgeyBjdGlkOiB1bmtub3duIH0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG4gIGNvbnN0IGNvbHMgPSBPYmplY3Qua2V5cyhjb2x1bW5zKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAud2l0aFNjaGVtYShzY2hlbWEpXG4gICAgICAuaW5zZXJ0SW50byh0YWJsZU5hbWUpXG4gICAgICAudmFsdWVzKGFwcGx5VHJhbnNmb3JtYXRpb25zKFwiaW5zZXJ0XCIsIHJvd3MsIGNvbHVtbnMpKVxuICAgICAgLnJldHVybmluZyhjb2xzKVxuICAgICAgLnJldHVybmluZygoZWIpID0+IGViLmNhc3Q8Q1RJRGFzVGV4dD4oXCJjdGlkXCIsIFwidGV4dFwiKS5hcyhcImN0aWRcIikpLFxuICApO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHNlbGVjdHMgYWxsIGNvbHVtbnMgZnJvbSBhIHRhYmxlLCBhbG9uZyB3aXRoIHRoZSBgY3RpZGAgY29sdW1uLCBhbmQgdW5ib3VuZCByb3cgY291bnQgYXMgYG9pZGAgKHJlc2VydmVkIGNvbHVtbiBuYW1lIHRoYXQgY2Fubm90IGNvbmZsaWN0IHdpdGggdXNlciBjb2x1bW5zKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyUXVlcnlEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgc29ydE9yZGVyLFxuICAgIHRhYmxlOiB7IG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hLCBjb2x1bW5zIH0sXG4gICAgZmlsdGVyID0geyBraW5kOiBcIkZpbHRlckdyb3VwXCIsIGFmdGVyOiBcImFuZFwiLCBmaWx0ZXJzOiBbXSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0UG9zdGdyZVNRTEJ1aWxkZXI8UmVjb3JkPHN0cmluZywgeyBjdGlkOiB1bmtub3duIH0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG4gIGNvbnN0IGNvbHMgPSBPYmplY3Qua2V5cyhjb2x1bW5zKTtcblxuICBjb25zdCBmaWx0ZXJFeHByZXNzaW9uID0gZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbihmaWx0ZXIuZmlsdGVycywgY29sdW1ucyk7XG5cbiAgY29uc3QgY291bnRRdWVyeSA9IGJ1aWxkZXJcbiAgICAud2l0aFNjaGVtYShzY2hlbWEpXG4gICAgLnNlbGVjdEZyb20odGFibGVOYW1lKVxuICAgIC53aGVyZShmaWx0ZXJFeHByZXNzaW9uKVxuICAgIC5zZWxlY3QoKGViKSA9PiBlYi5jYXN0PEJpZ0ludFN0cmluZz4oZWIuZm4uY29hbGVzY2UoZWIuZm4uY291bnRBbGwoKSwgc3FsLmxpdCgwKSksIFwidGV4dFwiKS5hcyhcIm9pZFwiKSk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGgoXCJjb3VudFwiLCAoKSA9PiBjb3VudFF1ZXJ5KVxuICAgICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgICAgLnNlbGVjdEZyb20oW3RhYmxlTmFtZSwgXCJjb3VudFwiXSlcbiAgICAgIC8vIGBvaWRgIGlzIGEgcmVzZXJ2ZWQgY29sdW1uIG5hbWUgaW4gUG9zdGdyZVNRTCwgc28gd2UgdXNlIGl0IGFzIGFuIGFsaWFzIGZvciB0aGUgcm93IGNvdW50IHRvIG5vdCBjb25mbGljdCB3aXRoIHVzZXIgY29sdW1ucy5cbiAgICAgIC5zZWxlY3Qoc3FsLnJlZihcImNvdW50Lm9pZFwiKS4kY2FzdFRvPEJpZ0ludFN0cmluZz4oKS5hcyhcIm9pZFwiKSlcbiAgICAgIC5zZWxlY3QoKGViKSA9PiBlYi5jYXN0PENUSURhc1RleHQ+KFwiY3RpZFwiLCBcInRleHRcIikuYXMoXCJjdGlkXCIpKVxuICAgICAgLnNlbGVjdChjb2xzKVxuICAgICAgLiRjYWxsKChxYikgPT4gc29ydE9yZGVyLnJlZHVjZSgocWIsIGl0ZW0pID0+IHFiLm9yZGVyQnkoaXRlbS5jb2x1bW4sIGl0ZW0uZGlyZWN0aW9uKSwgcWIpKVxuICAgICAgLy8gVE9ETzogY3Vyc29yIHBhZ2luYXRpb24/XG4gICAgICAud2hlcmUoZmlsdGVyRXhwcmVzc2lvbilcbiAgICAgIC5saW1pdChwYWdlU2l6ZSlcbiAgICAgIC8vIHdlJ3JlIGluamVjdGluZyB0aGUgb2Zmc2V0IHZhbHVlIGhlcmUgdG8gYXZvaWQgc2VyaWFsaXphdGlvbiBjb21wbGV4aXR5IChgYmlnaW50YCBpcyBhIG5vLWdvIGZvciBgSlNPTi5zdHJpbmdpZnlgKS5cbiAgICAgIC5vZmZzZXQoc3FsLmxpdChCaWdJbnQocGFnZUluZGV4KSAqIEJpZ0ludChwYWdlU2l6ZSkpKSxcbiAgKTtcbn1cblxuLy8gSGVscGVyIHRvIGJ1aWxkIGFuIGV4cHJlc3Npb24gYnVpbGRlciBmb3IgYSBzaW5nbGUgZmlsdGVyIG9yIGEgZ3JvdXBcbmZ1bmN0aW9uIGJ1aWxkQmFzZUV4cHJlc3Npb25CdWlsZGVyKFxuICBzcGVjOiBDb2x1bW5GaWx0ZXIgfCBGaWx0ZXJHcm91cCxcbiAgY29sdW1uczogVGFibGVbXCJjb2x1bW5zXCJdLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuKTogKGViOiBFeHByZXNzaW9uQnVpbGRlcjxhbnksIGFueT4pID0+IEV4cHJlc3Npb248U3FsQm9vbD4ge1xuICBpZiAoc3BlYy5raW5kID09PSBcIkNvbHVtbkZpbHRlclwiKSB7XG4gICAgcmV0dXJuIChlYikgPT4ge1xuICAgICAgY29uc3QgeyBjb2x1bW4sIG9wZXJhdG9yLCB2YWx1ZSB9ID0gc3BlYztcblxuICAgICAgY29uc3QgY29sdW1uTWV0YSA9IGNvbHVtbnNbY29sdW1uXSE7XG5cbiAgICAgIHJldHVybiBlYihcbiAgICAgICAgY29sdW1uTWV0YS5kYXRhdHlwZS5ncm91cCA9PT0gXCJyYXdcIiA/IGViLmNhc3QoY29sdW1uLCBcInRleHRcIikgOiBjb2x1bW4sXG4gICAgICAgIG9wZXJhdG9yLFxuICAgICAgICB0cmFuc2Zvcm1WYWx1ZSh2YWx1ZSwgY29sdW1uTWV0YSksXG4gICAgICApO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oc3BlYy5maWx0ZXJzLCBjb2x1bW5zKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uKFxuICBmaWx0ZXJzOiAoQ29sdW1uRmlsdGVyIHwgRmlsdGVyR3JvdXApW10sXG4gIGNvbHVtbnM6IFRhYmxlW1wiY29sdW1uc1wiXSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbik6IChlYjogRXhwcmVzc2lvbkJ1aWxkZXI8YW55LCBhbnk+KSA9PiBFeHByZXNzaW9uPFNxbEJvb2w+IHtcbiAgaWYgKGZpbHRlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gKGViKSA9PiBlYi5saXQodHJ1ZSk7IC8vIG5vIGZpbHRlcnMsIGFsd2F5cyB0cnVlXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29uc3Qgb3JHcm91cHNPZkFuZEJ1aWxkZXJzOiAoKGViOiBFeHByZXNzaW9uQnVpbGRlcjxhbnksIGFueT4pID0+IEV4cHJlc3Npb248U3FsQm9vbD4pW11bXSA9IFtdO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBsZXQgY3VycmVudEFuZEdyb3VwQnVpbGRlcnM6ICgoZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gRXhwcmVzc2lvbjxTcWxCb29sPilbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVycy5sZW5ndGg7IGkrKykge1xuICAgIGN1cnJlbnRBbmRHcm91cEJ1aWxkZXJzLnB1c2goYnVpbGRCYXNlRXhwcmVzc2lvbkJ1aWxkZXIoZmlsdGVyc1tpXSEsIGNvbHVtbnMpKTtcblxuICAgIC8vICZuIEFORCBncm91cCBlbmRzIGlmIGl0J3MgdGhlIGxhc3QgZmlsdGVyLCBvciB0aGUgaXRlbSBpcyBmb2xsb3dlZCBieSBhbiAnb3InXG4gICAgaWYgKGkgPT09IGZpbHRlcnMubGVuZ3RoIC0gMSB8fCBmaWx0ZXJzW2ldIS5hZnRlciA9PT0gXCJvclwiKSB7XG4gICAgICBvckdyb3Vwc09mQW5kQnVpbGRlcnMucHVzaChjdXJyZW50QW5kR3JvdXBCdWlsZGVycyk7XG4gICAgICBjdXJyZW50QW5kR3JvdXBCdWlsZGVycyA9IFtdOyAvLyBzdGFydCBhIG5ldyBncm91cFxuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHJldHVybiAoZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4ge1xuICAgIGNvbnN0IGFuZEV4cHJlc3Npb25zID0gb3JHcm91cHNPZkFuZEJ1aWxkZXJzLm1hcCgoZ3JvdXApID0+IHtcbiAgICAgIHJldHVybiBlYi5hbmQoZ3JvdXAubWFwKChidWlsZGVyKSA9PiBidWlsZGVyKGViKSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGViLm9yKGFuZEV4cHJlc3Npb25zKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tTZWxlY3RRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShcIjIwMjUtMDEtMjZUMjE6NTY6MTIuMzQ1WlwiKSxcbiAgICAgIGN0aWQ6IFwiKDAsMSlcIixcbiAgICAgIGRlbGV0ZWRfYXQ6IG51bGwsXG4gICAgICBpZDogMSxcbiAgICAgIG5hbWU6IFwiSm9obiBEb2VcIixcbiAgICAgIG9pZDogXCIyXCIsXG4gICAgICByb2xlOiBcImFkbWluXCIsXG4gICAgICBuYW1lX3JvbGU6IFwiSm9ubiBEb2UgLSBhZG1pblwiLFxuICAgIH0sXG4gICAge1xuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoXCIyMDI1LTAxLTI2VDIwOjU2OjEyLjM0NVpcIiksXG4gICAgICBjdGlkOiBcIigwLDIpXCIsXG4gICAgICBkZWxldGVkX2F0OiBudWxsLFxuICAgICAgaWQ6IDIsXG4gICAgICBuYW1lOiBcIkphbmUgRG9lXCIsXG4gICAgICBvaWQ6IFwiMlwiLFxuICAgICAgcm9sZTogXCJwb3dlcnVzZXJcIixcbiAgICAgIG5hbWVfcm9sZTogXCJKYW5lIERvZSAtIHBvd2VydXNlclwiLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIHtcbiAgICAvLyBiZXN0IGVmZm9ydCBubyBuZWVkIHRvIGdvIG92ZXJib2FyZFxuICAgIFtLIGluIFJldHVyblR5cGU8dHlwZW9mIG1vY2tUYWJsZXNRdWVyeT5bMV1bXCJjb2x1bW5zXCJdW251bWJlcl1bXCJuYW1lXCJdIHwgXCJjdGlkXCIgfCBcIm9pZFwiXTogdW5rbm93bjtcbiAgfVtdO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHVwZGF0ZXMgYSBnaXZlbiByb3cgaW4gYSB0YWJsZSB3aXRoIGdpdmVuIGNoYW5nZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcGRhdGVRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlclVwZGF0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGNoYW5nZXMsXG4gICAgcm93LFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCB7IGN0aWQ6IHVua25vd24gfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcbiAgY29uc3QgY29scyA9IE9iamVjdC5rZXlzKGNvbHVtbnMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC51cGRhdGVUYWJsZSh0YWJsZU5hbWUpXG4gICAgICAuc2V0KGFwcGx5VHJhbnNmb3JtYXRpb25zKFwidXBkYXRlXCIsIGNoYW5nZXMsIGNvbHVtbnMpKVxuICAgICAgLiRjYWxsKGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzKFtyb3ddLCBjb2x1bW5zKSlcbiAgICAgIC5yZXR1cm5pbmcoY29scylcbiAgICAgIC5yZXR1cm5pbmcoKGViKSA9PiBbXG4gICAgICAgIGViLmNhc3Q8Q1RJRGFzVGV4dD4oXCJjdGlkXCIsIFwidGV4dFwiKS5hcyhcImN0aWRcIiksXG4gICAgICAgIGViXG4gICAgICAgICAgLmNhc3Q8QmlnSW50U3RyaW5nPihlYi5mbihcImZsb29yXCIsIFtlYihlYi5mbihcImV4dHJhY3RcIiwgW3NxbGBlcG9jaCBmcm9tIG5vdygpYF0pLCBcIipcIiwgMV8wMDBfMDAwKV0pLCBcInRleHRcIilcbiAgICAgICAgICAuYXMoXCJfX3BzX3VwZGF0ZWRfYXRfX1wiKSxcbiAgICAgIF0pLFxuICApO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IGRlbGV0ZXMgYSBnaXZlbiBzZXQgb2Ygcm93cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlbGV0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyRGVsZXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgcm93cyxcbiAgICB0YWJsZTogeyBjb2x1bW5zLCBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0UG9zdGdyZVNRTEJ1aWxkZXI8UmVjb3JkPHN0cmluZywgeyBjdGlkOiB1bmtub3duIH0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoYnVpbGRlci53aXRoU2NoZW1hKHNjaGVtYSkuZGVsZXRlRnJvbSh0YWJsZU5hbWUpLiRjYWxsKGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzKHJvd3MsIGNvbHVtbnMpKSk7XG59XG4iLCAiaW1wb3J0IHsgdHlwZSBLeXNlbHksIFBvc3RncmVzQWRhcHRlciwgUG9zdGdyZXNRdWVyeUNvbXBpbGVyIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGdldEJ1aWxkZXIgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxEYXRhYmFzZSA9IGFueT4oXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pOiBLeXNlbHk8RGF0YWJhc2U+IHtcbiAgcmV0dXJuIGdldEJ1aWxkZXIoeyAuLi5yZXF1aXJlbWVudHMsIEFkYXB0ZXI6IFBvc3RncmVzQWRhcHRlciwgUXVlcnlDb21waWxlcjogUG9zdGdyZXNRdWVyeUNvbXBpbGVyIH0pO1xufVxuIiwgImltcG9ydCB7IHR5cGUgU2VsZWN0UXVlcnlCdWlsZGVyLCBzcWwgfSBmcm9tIFwia3lzZWx5XCI7XG5pbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSBcImt5c2VseS9oZWxwZXJzL3Bvc3RncmVzXCI7XG5cbmltcG9ydCB7IHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgY29tcGlsZSwgdHlwZSBRdWVyeVJlc3VsdCB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgZ2V0UG9zdGdyZVNRTEJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5cbmNvbnN0IFJFR1VMQVJfVEFCTEVfS0lORCA9IFwiclwiO1xuY29uc3QgVklFV19UQUJMRV9LSU5EID0gXCJ2XCI7XG5jb25zdCBUQUJMRV9LSU5EUyA9IFtSRUdVTEFSX1RBQkxFX0tJTkQsIFZJRVdfVEFCTEVfS0lORF0gYXMgY29uc3Q7XG50eXBlIFRhYmxlS2luZCA9ICh0eXBlb2YgVEFCTEVfS0lORFMpW251bWJlcl07XG5cbmludGVyZmFjZSBEYXRhYmFzZSB7XG4gIC8qKiBjb2x1bW5zICovXG4gIFwicGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGVcIjoge1xuICAgIC8qKiBjb2x1bW4gb3JkZXIgbnVtYmVyIGluIGl0cyB0YWJsZSAqL1xuICAgIGF0dG51bTogbnVtYmVyO1xuICAgIC8qKiB0YWJsZS92aWV3IGlkZW50aWZpZXIgKi9cbiAgICBhdHRyZWxpZDogc3RyaW5nO1xuICAgIC8qKiBjb2x1bW4gbmFtZSAqL1xuICAgIGF0dG5hbWU6IHN0cmluZztcbiAgICAvKiogd2FzIHRoZSBjb2x1bW4gZHJvcHBlZC4gZHJvcHBlZCBjb2x1bW5zIG1pZ2h0IG5vdCBiZSAxMDAlIHJlbW92ZWQgaW1tZWRpYXRlbHkuICovXG4gICAgYXR0aXNkcm9wcGVkOiBib29sZWFuO1xuICAgIC8qKiBjb2x1bW4gZGF0YXR5cGUgaWRlbnRpZmllciAqL1xuICAgIGF0dHR5cGlkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGlvbiBmbGFnIGZvciBjb21wdXRlZCBjb2x1bW5zOlxuICAgICAqICcnIChlbXB0eSkgZm9yIHJlZ3VsYXIgY29sdW1ucyxcbiAgICAgKiAncycgZm9yIFNUT1JFRCBnZW5lcmF0ZWQgY29sdW1ucyAoUG9zdGdyZXMgR0VORVJBVEVEIEFMV0FZUyBBUykuXG4gICAgICovXG4gICAgYXR0Z2VuZXJhdGVkOiBcIlwiIHwgXCJzXCI7XG4gICAgLyoqIE5PVCBOVUxMIGNvbnN0cmFpbnQ6IHRydWUgaWYgdGhlIGNvbHVtbiBoYXMgYSBOT1QgTlVMTCBjb25zdHJhaW50ICovXG4gICAgYXR0bm90bnVsbDogYm9vbGVhbjtcbiAgfTtcbiAgLyoqIHJlc291cmNlcywgZS5nLiB0YWJsZXMsIHNlcXVlbmNlcywgZXRjLiAqL1xuICBcInBnX2NhdGFsb2cucGdfY2xhc3NcIjoge1xuICAgIC8qKiByZXNvdXJjZSBpZCAqL1xuICAgIG9pZDogbnVtYmVyO1xuICAgIC8qKiByZXNvdXJjZSBuYW1lICovXG4gICAgcmVsbmFtZTogc3RyaW5nO1xuICAgIC8qKiBzY2hlbWEgaWQgKi9cbiAgICByZWxuYW1lc3BhY2U6IG51bWJlcjtcbiAgICAvKiogcmVzb3VyY2Uga2luZDogcmVndWxhciB0YWJsZSwgdmlldyAqL1xuICAgIHJlbGtpbmQ6IFRhYmxlS2luZDtcbiAgfTtcbiAgLyoqIGVudW0gdHlwZXMnIHZhbHVlcyAqL1xuICBcInBnX2NhdGFsb2cucGdfZW51bVwiOiB7XG4gICAgLyoqIGVudW0gdmFsdWUgKi9cbiAgICBlbnVtbGFiZWw6IHN0cmluZztcbiAgICAvKiogZW51bSdzIHR5cGUgaWQgKi9cbiAgICBlbnVtdHlwaWQ6IG51bWJlcjtcbiAgfTtcbiAgLyoqIHNjaGVtYXMgKi9cbiAgXCJwZ19jYXRhbG9nLnBnX25hbWVzcGFjZVwiOiB7XG4gICAgLyoqIHNjaGVtYSBuYW1lICovXG4gICAgbnNwbmFtZTogc3RyaW5nO1xuICAgIC8qKiBzY2hlbWEgaWQgKi9cbiAgICBvaWQ6IG51bWJlcjtcbiAgfTtcbiAgLyoqIGRhdGF0eXBlcyAqL1xuICBcInBnX2NhdGFsb2cucGdfdHlwZVwiOiB7XG4gICAgLyoqIHR5cGUgaWQgKi9cbiAgICBvaWQ6IG51bWJlcjtcbiAgICAvKiogdHlwZSBuYW1lICovXG4gICAgdHlwbmFtZTogc3RyaW5nO1xuICAgIC8qKiB0eXBlJ3Mgc2NoZW1hIChha2EgbmFtZXNwYWNlKSBpZCAqL1xuICAgIHR5cG5hbWVzcGFjZTogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIHR5cGUncyBraW5kXG4gICAgICpcbiAgICAgKiAnZScgLSBlbnVtIHR5cGVcbiAgICAgKi9cbiAgICB0eXB0eXBlOiBcImVcIiB8IChzdHJpbmcgJiB7fSk7XG4gIH07XG4gIC8qKiBjb25zdHJhaW50cyAqL1xuICBcInBnX2NhdGFsb2cucGdfY29uc3RyYWludFwiOiB7XG4gICAgLyoqIHJlbGF0aW9uICh0YWJsZSkgaWQgd2hpY2ggdGhpcyBjb25zdHJhaW50IHdhcyBjcmVhdGVkIGZvciAqL1xuICAgIGNvbnJlbGlkOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogY29uc3RyYWludCB0eXBlLlxuICAgICAqXG4gICAgICogYCdwJ2AgLSBwcmltYXJ5IGtleSBjb25zdHJhaW50LlxuICAgICAqIGAnZidgIC0gZm9yZWlnbiBrZXkgY29uc3RyYWludC5cbiAgICAgKi9cbiAgICBjb250eXBlOiBcInBcIiB8IFwiZlwiIHwgKHN0cmluZyAmIHt9KTtcbiAgICAvKipcbiAgICAgKiBhbiBvcmRlcmVkIGFycmF5IG9mIGNvbHVtbnMgaW5jbHVkZWQgaW4gdGhlIGNvbnN0cmFpbnQuXG4gICAgICpcbiAgICAgKiB0aGUgY29sdW1ucyBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlaXIgb3JkaW5hbCBudW1iZXIgKGBhdHRudW1gKSBpbiB0aGVpciByZWxhdGlvbiAodGFibGUpLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgYCd7MSwzfSdgIC0gYSBjb25zdHJhaW50IHdpdGggMiBjb2x1bW5zLCB0aGUgMXN0ICYgM3JkIGluIHRoZWlyIHRhYmxlLlxuICAgICAqL1xuICAgIGNvbmtleTogbnVtYmVyW107XG4gICAgLyoqIGlmIGEgZm9yZWlnbiBrZXksIHRoZSByZWZlcmVuY2VkIHRhYmxlICovXG4gICAgY29uZnJlbGlkOiBudW1iZXI7XG4gICAgLyoqIGlmIGEgZm9yZWlnbiBrZXksIHRoZSByZWZlcmVuY2VkIGNvbHVtbnMgKi9cbiAgICBjb25ma2V5OiBudW1iZXJbXTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCByZXR1cm5zIG1ldGFkYXRhIGZvciBhbGwgdXNlci1kZWZpbmVkIHRhYmxlcyBhbmQgdmlld3MgaW4gdGhlIGRhdGFiYXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPikge1xuICByZXR1cm4gY29tcGlsZShcbiAgICBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxEYXRhYmFzZT4ocmVxdWlyZW1lbnRzKVxuICAgICAgLnNlbGVjdEZyb20oXCJwZ19jYXRhbG9nLnBnX2NsYXNzIGFzIGNsc1wiKVxuICAgICAgLmlubmVySm9pbihcInBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIGFzIG5zXCIsIFwiY2xzLnJlbG5hbWVzcGFjZVwiLCBcIm5zLm9pZFwiKVxuICAgICAgLiRjYWxsKGV4Y2x1ZGVTeXN0ZW1UYWJsZXMpXG4gICAgICAvLyByZWd1bGFyIHRhYmxlcyBvciB2aWV3c1xuICAgICAgLndoZXJlKFwiY2xzLnJlbGtpbmRcIiwgXCJpblwiLCBUQUJMRV9LSU5EUylcbiAgICAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICAgIFwibnMubnNwbmFtZSBhcyBzY2hlbWFcIixcbiAgICAgICAgXCJjbHMucmVsbmFtZSBhcyBuYW1lXCIsXG4gICAgICAgIGpzb25BcnJheUZyb20oXG4gICAgICAgICAgZWJcbiAgICAgICAgICAgIC5zZWxlY3RGcm9tKFwicGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYXMgYXR0XCIpXG4gICAgICAgICAgICAuaW5uZXJKb2luKFwicGdfY2F0YWxvZy5wZ190eXBlIGFzIHR5cFwiLCBcInR5cC5vaWRcIiwgXCJhdHQuYXR0dHlwaWRcIilcbiAgICAgICAgICAgIC5pbm5lckpvaW4oXCJwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBhcyB0bnNcIiwgXCJ0bnMub2lkXCIsIFwidHlwLnR5cG5hbWVzcGFjZVwiKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwicGdfY2F0YWxvZy5wZ19jb25zdHJhaW50IGFzIHBrX2NvblwiLCAoamIpID0+XG4gICAgICAgICAgICAgIGpiXG4gICAgICAgICAgICAgICAgLm9uKFwicGtfY29uLmNvbnR5cGVcIiwgXCI9XCIsIFwicFwiKVxuICAgICAgICAgICAgICAgIC5vblJlZihcInBrX2Nvbi5jb25yZWxpZFwiLCBcIj1cIiwgXCJjbHMub2lkXCIpXG4gICAgICAgICAgICAgICAgLm9uKChlYikgPT4gZWIoXCJhdHQuYXR0bnVtXCIsIFwiPVwiLCBlYi5mbi5hbnkoXCJwa19jb24uY29ua2V5XCIpKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAubGVmdEpvaW4oXCJwZ19jYXRhbG9nLnBnX2NvbnN0cmFpbnQgYXMgZmtfY29uXCIsIChqYikgPT5cbiAgICAgICAgICAgICAgamJcbiAgICAgICAgICAgICAgICAub24oXCJma19jb24uY29udHlwZVwiLCBcIj1cIiwgXCJmXCIpXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwiZmtfY29uLmNvbnJlbGlkXCIsIFwiPVwiLCBcImNscy5vaWRcIilcbiAgICAgICAgICAgICAgICAub24oKGViKSA9PiBlYihcImF0dC5hdHRudW1cIiwgXCI9XCIsIGViLmZuLmFueShcImZrX2Nvbi5jb25rZXlcIikpKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcInBnX2NhdGFsb2cucGdfY2xhc3MgYXMgZmtfY2xzXCIsIFwiZmtfY2xzLm9pZFwiLCBcImZrX2Nvbi5jb25mcmVsaWRcIilcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcInBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIGFzIGZrX25zXCIsIFwiZmtfbnMub2lkXCIsIFwiZmtfY2xzLnJlbG5hbWVzcGFjZVwiKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwicGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYXMgZmtfYXR0XCIsIChqYikgPT5cbiAgICAgICAgICAgICAgamJcbiAgICAgICAgICAgICAgICAub25SZWYoXCJma19hdHQuYXR0cmVsaWRcIiwgXCI9XCIsIFwiZmtfY2xzLm9pZFwiKVxuICAgICAgICAgICAgICAgIC8vIFVzZSBhIGNhbGxiYWNrIGZvciB0aGUgLm9uKCkgY29uZGl0aW9uIHRvIGVuc3VyZSBjb3JyZWN0IGNvbnRleHQgZm9yIHR5cGVzXG4gICAgICAgICAgICAgICAgLm9uKChvbl9lYikgPT4gb25fZWIoXCJma19hdHQuYXR0bnVtXCIsIFwiPVwiLCBvbl9lYi5mbi5hbnkoXCJma19jb24uY29uZmtleVwiKSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLndoZXJlUmVmKFwiYXR0LmF0dHJlbGlkXCIsIFwiPVwiLCBcImNscy5vaWRcIilcbiAgICAgICAgICAgIC8vIGV4Y2x1ZGUgc3lzdGVtIGNvbHVtbnNcbiAgICAgICAgICAgIC53aGVyZShcImF0dC5hdHRudW1cIiwgXCI+PVwiLCAwKVxuICAgICAgICAgICAgLndoZXJlKFwiYXR0LmF0dGlzZHJvcHBlZFwiLCBcIiE9XCIsIHRydWUpXG4gICAgICAgICAgICAuc2VsZWN0KFtcbiAgICAgICAgICAgICAgXCJhdHQuYXR0bmFtZSBhcyBuYW1lXCIsXG4gICAgICAgICAgICAgIFwidHlwLnR5cG5hbWUgYXMgZGF0YXR5cGVcIixcbiAgICAgICAgICAgICAgXCJ0bnMubnNwbmFtZSBhcyBkYXRhdHlwZV9zY2hlbWFcIixcbiAgICAgICAgICAgICAgXCJma19ucy5uc3BuYW1lIGFzIGZvcmVpZ25fa2V5X3NjaGVtYVwiLFxuICAgICAgICAgICAgICBcImZrX2Nscy5yZWxuYW1lIGFzIGZvcmVpZ25fa2V5X3RhYmxlXCIsXG4gICAgICAgICAgICAgIFwiZmtfYXR0LmF0dG5hbWUgYXMgZm9yZWlnbl9rZXlfY29sdW1uXCIsXG4gICAgICAgICAgICBdKVxuICAgICAgICAgICAgLnNlbGVjdCgoZWIpID0+IFtcbiAgICAgICAgICAgICAgZWIoXCJwa19jb24uY29ua2V5XCIsIFwiaXMgbm90XCIsIG51bGwpLiRjYXN0VG88Ym9vbGVhbj4oKS5hcyhcInBrXCIpLFxuICAgICAgICAgICAgICBlYihcImF0dC5hdHRnZW5lcmF0ZWRcIiwgXCIhPVwiLCBcIlwiKS4kY2FzdFRvPGJvb2xlYW4+KCkuYXMoXCJjb21wdXRlZFwiKSxcbiAgICAgICAgICAgICAgZWIoXCJhdHQuYXR0bm90bnVsbFwiLCBcIiE9XCIsIHRydWUpLiRjYXN0VG88Ym9vbGVhbj4oKS5hcyhcIm51bGxhYmxlXCIpLFxuICAgICAgICAgICAgICBlYi5mblxuICAgICAgICAgICAgICAgIC5jb2FsZXNjZShcbiAgICAgICAgICAgICAgICAgIGViXG4gICAgICAgICAgICAgICAgICAgIC5zZWxlY3RGcm9tKFwicGdfY2F0YWxvZy5wZ19lbnVtIGFzIGVubVwiKVxuICAgICAgICAgICAgICAgICAgICAud2hlcmVSZWYoXCJlbm0uZW51bXR5cGlkXCIsIFwiPVwiLCBcInR5cC5vaWRcIilcbiAgICAgICAgICAgICAgICAgICAgLnNlbGVjdCgoZWIpID0+IGViLmZuLmpzb25BZ2coZWIucmVmKFwiZW5tLmVudW1sYWJlbFwiKSkuYXMoXCJvXCIpKSxcbiAgICAgICAgICAgICAgICAgIHNxbDxzdHJpbmdbXT5gJ1tdJ2AsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hcyhcIm9wdGlvbnNcIiksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgKS5hcyhcImNvbHVtbnNcIiksXG4gICAgICBdKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUYWJsZXNRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBzY2hlbWE6IFwiem9vXCIsXG4gICAgICBuYW1lOiBcImFuaW1hbHNcIixcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJpbnQ0XCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogdHJ1ZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NoZW1hOiBcInB1YmxpY1wiLFxuICAgICAgbmFtZTogXCJ1c2Vyc1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImludDRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiB0cnVlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJkZWxldGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInJvbGVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVfcm9sZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlZDogdHJ1ZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBzY2hlbWE6IFwicHVibGljXCIsXG4gICAgICBuYW1lOiBcImNvbXBvc2l0ZV9wa1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInV1aWRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiB0cnVlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiB0cnVlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgY3VycmVudCB0aW1lem9uZSBzZXR0aW5nIG9mIHRoZSBQb3N0Z3JlU1FMIGRhdGFiYXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZXpvbmVRdWVyeSgpIHtcbiAgY29uc3QgYnVpbGRlciA9IGdldFBvc3RncmVTUUxCdWlsZGVyKCk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoYnVpbGRlci5zZWxlY3ROb0Zyb20oYnVpbGRlci5mbjxzdHJpbmc+KFwiY3VycmVudF9zZXR0aW5nXCIsIFtzcWwubGl0KFwidGltZXpvbmVcIildKS5hcyhcInRpbWV6b25lXCIpKSk7XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVGltZXpvbmVRdWVyeSgpIHtcbiAgcmV0dXJuIFt7IHRpbWV6b25lOiBcIlVUQ1wiIH1dIGFzIGNvbnN0IHNhdGlzZmllcyBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGltZXpvbmVRdWVyeT47XG59XG5cbi8qKlxuICogV2UgZG9uJ3Qgd2FudCBQb3N0Z3JlU1FMIGludGVybmFscyBpbiBpbnRyb3NwZWN0aW9uIHJlc3VsdHMuIFRvIGJlIHVzZWQgaW4gYCRjYWxsYC5cbiAqL1xuZnVuY3Rpb24gZXhjbHVkZVN5c3RlbVRhYmxlczxcbiAgVCBleHRlbmRzIFNlbGVjdFF1ZXJ5QnVpbGRlcjxcbiAgICBEYXRhYmFzZSAmIHsgbnM6IERhdGFiYXNlW1wicGdfY2F0YWxvZy5wZ19uYW1lc3BhY2VcIl07IGNsczogRGF0YWJhc2VbXCJwZ19jYXRhbG9nLnBnX2NsYXNzXCJdIH0sXG4gICAgXCJuc1wiIHwgXCJjbHNcIixcbiAgICBvYmplY3RcbiAgPixcbj4ocWI6IFQpOiBUIHtcbiAgcmV0dXJuIHFiLndoZXJlKGBucy5uc3BuYW1lYCwgYCF+YCwgYF5wZ19gKS53aGVyZShgbnMubnNwbmFtZWAsIGAhPWAsIGBpbmZvcm1hdGlvbl9zY2hlbWFgKSBhcyBuZXZlcjtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcG9zdGdyZXMuZC50c1wiIC8+XG5pbXBvcnQgeyBzcWwgfSBmcm9tICcuLi9yYXctYnVpbGRlci9zcWwuanMnO1xuLyoqXG4gKiBBIHBvc3RncmVzIGhlbHBlciBmb3IgYWdncmVnYXRpbmcgYSBzdWJxdWVyeSAob3Igb3RoZXIgZXhwcmVzc2lvbikgaW50byBhIEpTT05CIGFycmF5LlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJzZWxlY3RcIiwgXCJOZXN0ZWQgYXJyYXlcIiwgMTEwKSAtLT5cbiAqXG4gKiBXaGlsZSBreXNlbHkgaXMgbm90IGFuIE9STSBhbmQgaXQgZG9lc24ndCBoYXZlIHRoZSBjb25jZXB0IG9mIHJlbGF0aW9ucywgd2UgZG8gcHJvdmlkZVxuICogaGVscGVycyBmb3IgZmV0Y2hpbmcgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cyBpbiBhIHNpbmdsZSBxdWVyeS4gSW4gdGhpcyBleGFtcGxlIHdlXG4gKiB1c2UgdGhlIGBqc29uQXJyYXlGcm9tYCBoZWxwZXIgdG8gZmV0Y2ggcGVyc29uJ3MgcGV0cyBhbG9uZyB3aXRoIHRoZSBwZXJzb24ncyBpZC5cbiAqXG4gKiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGhlbHBlcnMgdW5kZXIgdGhlIGBreXNlbHkvaGVscGVyc2AgZm9sZGVyLCBpbmNsdWRpbmdcbiAqIGBqc29uQXJyYXlGcm9tYCwgYXJlIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsgd2l0aCB0aGlyZCBwYXJ0eSBkaWFsZWN0cy4gSW4gb3JkZXIgZm9yXG4gKiB0aGVtIHRvIHdvcmssIHRoZSBkaWFsZWN0IG11c3QgYXV0b21hdGljYWxseSBwYXJzZSB0aGUgYGpzb25gIGRhdGEgdHlwZSBpbnRvXG4gKiBKYXZhU2NyaXB0IEpTT04gdmFsdWVzIGxpa2Ugb2JqZWN0cyBhbmQgYXJyYXlzLiBTb21lIGRpYWxlY3RzIG1pZ2h0IHNpbXBseSByZXR1cm5cbiAqIHRoZSBkYXRhIGFzIGEgSlNPTiBzdHJpbmcuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpbiBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmBcbiAqIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvcG9zdGdyZXMnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uQXJyYXlGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAub3JkZXJCeSgncGV0Lm5hbWUnKVxuICogICAgICkuYXMoJ3BldHMnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCAoXG4gKiAgIHNlbGVjdCBjb2FsZXNjZShqc29uX2FnZyhhZ2cpLCAnW10nKSBmcm9tIChcbiAqICAgICBzZWxlY3QgXCJwZXRcIi5cImlkXCIgYXMgXCJwZXRfaWRcIiwgXCJwZXRcIi5cIm5hbWVcIlxuICogICAgIGZyb20gXCJwZXRcIlxuICogICAgIHdoZXJlIFwicGV0XCIuXCJvd25lcl9pZFwiID0gXCJwZXJzb25cIi5cImlkXCJcbiAqICAgICBvcmRlciBieSBcInBldFwiLlwibmFtZVwiXG4gKiAgICkgYXMgYWdnXG4gKiApIGFzIFwicGV0c1wiXG4gKiBmcm9tIFwicGVyc29uXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbkFycmF5RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCBjb2FsZXNjZShqc29uX2FnZyhhZ2cpLCAnW10nKSBmcm9tICR7ZXhwcn0gYXMgYWdnKWA7XG59XG4vKipcbiAqIEEgcG9zdGdyZXMgaGVscGVyIGZvciB0dXJuaW5nIGEgc3VicXVlcnkgKG9yIG90aGVyIGV4cHJlc3Npb24pIGludG8gYSBKU09OIG9iamVjdC5cbiAqXG4gKiBUaGUgc3VicXVlcnkgbXVzdCBvbmx5IHJldHVybiBvbmUgcm93LlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJzZWxlY3RcIiwgXCJOZXN0ZWQgb2JqZWN0XCIsIDEyMCkgLS0+XG4gKlxuICogV2hpbGUga3lzZWx5IGlzIG5vdCBhbiBPUk0gYW5kIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgY29uY2VwdCBvZiByZWxhdGlvbnMsIHdlIGRvIHByb3ZpZGVcbiAqIGhlbHBlcnMgZm9yIGZldGNoaW5nIG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMgaW4gYSBzaW5nbGUgcXVlcnkuIEluIHRoaXMgZXhhbXBsZSB3ZVxuICogdXNlIHRoZSBganNvbk9iamVjdEZyb21gIGhlbHBlciB0byBmZXRjaCBwZXJzb24ncyBmYXZvcml0ZSBwZXQgYWxvbmcgd2l0aCB0aGUgcGVyc29uJ3MgaWQuXG4gKlxuICogUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBoZWxwZXJzIHVuZGVyIHRoZSBga3lzZWx5L2hlbHBlcnNgIGZvbGRlciwgaW5jbHVkaW5nXG4gKiBganNvbk9iamVjdEZyb21gLCBhcmUgbm90IGd1YXJhbnRlZWQgdG8gd29yayB3aXRoIHRoaXJkLXBhcnR5IGRpYWxlY3RzLiBJbiBvcmRlciBmb3JcbiAqIHRoZW0gdG8gd29yaywgdGhlIGRpYWxlY3QgbXVzdCBhdXRvbWF0aWNhbGx5IHBhcnNlIHRoZSBganNvbmAgZGF0YSB0eXBlIGludG9cbiAqIEphdmFTY3JpcHQgSlNPTiB2YWx1ZXMgbGlrZSBvYmplY3RzIGFuZCBhcnJheXMuIFNvbWUgZGlhbGVjdHMgbWlnaHQgc2ltcGx5IHJldHVyblxuICogdGhlIGRhdGEgYXMgYSBKU09OIHN0cmluZy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYFxuICogdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGpzb25PYmplY3RGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvcG9zdGdyZXMnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uT2JqZWN0RnJvbShcbiAqICAgICAgIGViLnNlbGVjdEZyb20oJ3BldCcpXG4gKiAgICAgICAgIC5zZWxlY3QoWydwZXQuaWQgYXMgcGV0X2lkJywgJ3BldC5uYW1lJ10pXG4gKiAgICAgICAgIC53aGVyZVJlZigncGV0Lm93bmVyX2lkJywgJz0nLCAncGVyc29uLmlkJylcbiAqICAgICAgICAgLndoZXJlKCdwZXQuaXNfZmF2b3JpdGUnLCAnPScsIHRydWUpXG4gKiAgICAgKS5hcygnZmF2b3JpdGVfcGV0JylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwgKFxuICogICBzZWxlY3QgdG9fanNvbihvYmopIGZyb20gKFxuICogICAgIHNlbGVjdCBcInBldFwiLlwiaWRcIiBhcyBcInBldF9pZFwiLCBcInBldFwiLlwibmFtZVwiXG4gKiAgICAgZnJvbSBcInBldFwiXG4gKiAgICAgd2hlcmUgXCJwZXRcIi5cIm93bmVyX2lkXCIgPSBcInBlcnNvblwiLlwiaWRcIlxuICogICAgIGFuZCBcInBldFwiLlwiaXNfZmF2b3JpdGVcIiA9ICQxXG4gKiAgICkgYXMgb2JqXG4gKiApIGFzIFwiZmF2b3JpdGVfcGV0XCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uT2JqZWN0RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCB0b19qc29uKG9iaikgZnJvbSAke2V4cHJ9IGFzIG9iailgO1xufVxuLyoqXG4gKiBUaGUgUG9zdGdyZVNRTCBganNvbl9idWlsZF9vYmplY3RgIGZ1bmN0aW9uLlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBmdWxseSB3b3JrIHdpdGggdGhlIGJ1aWx0LWluIGBQb3N0Z3Jlc0RpYWxlY3RgLlxuICogV2hpbGUgdGhlIHByb2R1Y2VkIFNRTCBpcyBjb21wYXRpYmxlIHdpdGggYWxsIFBvc3RncmVTUUwgZGF0YWJhc2VzLCBzb21lIHRoaXJkLXBhcnR5IGRpYWxlY3RzXG4gKiBtYXkgbm90IHBhcnNlIHRoZSBuZXN0ZWQgSlNPTiBpbnRvIG9iamVjdHMuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpblxuICogYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgeyBqc29uQnVpbGRPYmplY3QgfSBmcm9tICdreXNlbHkvaGVscGVycy9wb3N0Z3JlcydcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25CdWlsZE9iamVjdCh7XG4gKiAgICAgICBmaXJzdDogZWIucmVmKCdmaXJzdF9uYW1lJyksXG4gKiAgICAgICBsYXN0OiBlYi5yZWYoJ2xhc3RfbmFtZScpLFxuICogICAgICAgZnVsbDogc3FsPHN0cmluZz5gZmlyc3RfbmFtZSB8fFx1MDBBMCcgJyB8fCBsYXN0X25hbWVgXG4gKiAgICAgfSkuYXMoJ25hbWUnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5uYW1lLmZpcnN0XG4gKiByZXN1bHRbMF0/Lm5hbWUubGFzdFxuICogcmVzdWx0WzBdPy5uYW1lLmZ1bGxcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIGpzb25fYnVpbGRfb2JqZWN0KFxuICogICAnZmlyc3QnLCBmaXJzdF9uYW1lLFxuICogICAnbGFzdCcsIGxhc3RfbmFtZSxcbiAqICAgJ2Z1bGwnLCBmaXJzdF9uYW1lIHx8ICcgJyB8fCBsYXN0X25hbWVcbiAqICkgYXMgXCJuYW1lXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQnVpbGRPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIHNxbCBganNvbl9idWlsZF9vYmplY3QoJHtzcWwuam9pbihPYmplY3Qua2V5cyhvYmopLmZsYXRNYXAoKGspID0+IFtzcWwubGl0KGspLCBvYmpba11dKSl9KWA7XG59XG4vKipcbiAqIFRoZSBQb3N0Z3JlU1FMIGBtZXJnZV9hY3Rpb25gIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaW4gYSBgcmV0dXJuaW5nYCBjbGF1c2UgdG8gZ2V0IHRoZSBhY3Rpb24gdGhhdCB3YXNcbiAqIHBlcmZvcm1lZCBpbiBhIGBtZXJnZUludG9gIHF1ZXJ5LiBUaGUgZnVuY3Rpb24gcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZ1xuICogc3RyaW5nczogYCdJTlNFUlQnYCwgYCdVUERBVEUnYCwgb3IgYCdERUxFVEUnYC5cbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbWVyZ2VBY3Rpb24gfSBmcm9tICdreXNlbHkvaGVscGVycy9wb3N0Z3JlcydcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAubWVyZ2VJbnRvKCdwZXJzb24gYXMgcCcpXG4gKiAgIC51c2luZygncGVyc29uX2JhY2t1cCBhcyBwYicsICdwLmlkJywgJ3BiLmlkJylcbiAqICAgLndoZW5NYXRjaGVkKClcbiAqICAgLnRoZW5VcGRhdGVTZXQoKHsgcmVmIH0pID0+ICh7XG4gKiAgICAgZmlyc3RfbmFtZTogcmVmKCdwYi5maXJzdF9uYW1lJyksXG4gKiAgICAgdXBkYXRlZF9hdDogcmVmKCdwYi51cGRhdGVkX2F0JykuJGNhc3RUbzxzdHJpbmcgfCBudWxsPigpLFxuICogICB9KSlcbiAqICAgLndoZW5Ob3RNYXRjaGVkKClcbiAqICAgLnRoZW5JbnNlcnRWYWx1ZXMoKHsgcmVmfSkgPT4gKHtcbiAqICAgICBpZDogcmVmKCdwYi5pZCcpLFxuICogICAgIGZpcnN0X25hbWU6IHJlZigncGIuZmlyc3RfbmFtZScpLFxuICogICAgIGNyZWF0ZWRfYXQ6IHJlZigncGIudXBkYXRlZF9hdCcpLFxuICogICAgIHVwZGF0ZWRfYXQ6IHJlZigncGIudXBkYXRlZF9hdCcpLiRjYXN0VG88c3RyaW5nIHwgbnVsbD4oKSxcbiAqICAgfSkpXG4gKiAgIC5yZXR1cm5pbmcoW21lcmdlQWN0aW9uKCkuYXMoJ2FjdGlvbicpLCAncC5pZCcsICdwLnVwZGF0ZWRfYXQnXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXS5hY3Rpb25cbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIG1lcmdlIGludG8gXCJwZXJzb25cIiBhcyBcInBcIlxuICogdXNpbmcgXCJwZXJzb25fYmFja3VwXCIgYXMgXCJwYlwiIG9uIFwicFwiLlwiaWRcIiA9IFwicGJcIi5cImlkXCJcbiAqIHdoZW4gbWF0Y2hlZCB0aGVuIHVwZGF0ZSBzZXRcbiAqICAgXCJmaXJzdF9uYW1lXCIgPSBcInBiXCIuXCJmaXJzdF9uYW1lXCIsXG4gKiAgIFwidXBkYXRlZF9hdFwiID0gXCJwYlwiLlwidXBkYXRlZF9hdFwiOjp0ZXh0XG4gKiB3aGVuIG5vdCBtYXRjaGVkIHRoZW4gaW5zZXJ0IHZhbHVlcyAoXCJpZFwiLCBcImZpcnN0X25hbWVcIiwgXCJjcmVhdGVkX2F0XCIsIFwidXBkYXRlZF9hdFwiKVxuICogdmFsdWVzIChcInBiXCIuXCJpZFwiLCBcInBiXCIuXCJmaXJzdF9uYW1lXCIsIFwicGJcIi5cInVwZGF0ZWRfYXRcIiwgXCJwYlwiLlwidXBkYXRlZF9hdFwiKVxuICogcmV0dXJuaW5nIG1lcmdlX2FjdGlvbigpIGFzIFwiYWN0aW9uXCIsIFwicFwiLlwiaWRcIiwgXCJwXCIuXCJ1cGRhdGVkX2F0XCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBY3Rpb24oKSB7XG4gICAgcmV0dXJuIHNxbCBgbWVyZ2VfYWN0aW9uKClgO1xufVxuIiwgImltcG9ydCB7IGFzUXVlcnksIHR5cGUgUXVlcnkgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBJRFF1ZXJ5KCk6IFF1ZXJ5PHsgcGlkOiB1bmtub3duIH0+IHtcbiAgcmV0dXJuIGFzUXVlcnkoXCJzZWxlY3QgcGdfYmFja2VuZF9waWQoKSBhcyBwaWRcIik7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBmdW5jdGlvbiBnZXRDYW5jZWxRdWVyeShwaWQ6IHt9KTogUXVlcnk8dW5rbm93bj4ge1xuICByZXR1cm4ge1xuICAgIHBhcmFtZXRlcnM6IFtwaWRdLFxuICAgIHNxbDogXCJzZWxlY3QgcGdfY2FuY2VsX2JhY2tlbmQoJDEpO1wiLFxuICB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7d0lBQUFBLElDQUFDLElDQUFDLElBNlRPLFNBQVNDLEVBQW1CQyxFQUF1QyxDQUN4RSxHQUFNLENBQUUsTUFBQUMsRUFBTyxNQUFBQyxDQUFNLEVBQUlGLEVBRW5CRyxFQUFlRixFQUVyQixPQUFBRSxFQUFhLE1BQVFELEVBRWQsQ0FBQ0MsQ0FBWSxDQUN0QixDQ3JVQUMsSUFFTyxJQUFNQyxFQUE2RSxDQUN4RixLQUFNLENBQ0osTUFBTyxTQUNULEVB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QUNuQixlQUFnQkEsRUFBTyxHQUN2QixLQUFNRyxFQUNOLFNBQUFDLEVBQ0EsT0FBQU4sRUFDQSxNQUFPRCxFQUNQLFNBQVVHLEVBQU8sbUJBQ2pCLFFBQVNBLEVBQU8sa0JBQ2hCLFNBQVVBLEVBQU8sa0JBQ25CLENBQ0YsQ0FDRixFQUNBLENBQUMsQ0FDSCxFQUVBLE9BQUlMLEVBQVFHLENBQU0sSUFBTSxTQUN0QkgsRUFBUUcsQ0FBTSxFQUFJLENBQ2hCLEtBQU1BLEVBQ04sT0FBUSxDQUFDLENBQ1gsR0FHRkgsRUFBUUcsQ0FBTSxFQUFFLE9BQU9ELENBQVMsRUFBSSxDQUNsQyxRQUFTRSxFQUNULEtBQU1GLEVBQ04sT0FBQUMsQ0FDRixFQUVPSixDQUNULEVBQ0EsQ0FDRSxRQUFTLENBQUUsT0FBUSxDQUFFLE9BQVEsQ0FBQyxFQUFHLEtBQU0sUUFBUyxDQUFFLEVBQ2xELFNBQUFiLEVBQ0EsZ0JBQUEyQixFQUNBLE1BQUF2QixDQUNGLENBQ0YsQ0FDRixDQUVBLElBQU11QixFQUFrQixDQUN0QixJQUNBLEtBQ0EsSUFDQSxLQUNBLElBQ0EsS0FDQSxLQUNBLFNBQ0EsT0FDQSxXQUNBLFFBQ0EsV0FDRixFQUtPLFNBQVNDLElBQWlCLENBQy9CLElBQU1oQyxFQUFTaUMsRUFBZ0IsRUFDekIsQ0FBQyxDQUFFLFNBQUE3QixDQUFTLENBQUMsRUFBSThCLEVBQWtCLEVBR3pDLE9BQU83QixFQUFvQixDQUFFLE9BQUFMLEVBQVEsU0FBQUksRUFBVSxNQUZqQyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUssVUFBVyxDQUVLLENBQUMsQ0FjeEQsQ08xT0ErQixJQUVPLFNBQVNDLElBQXVDLENBQ3JELE9BQU9DLEVBQVEsZ0NBQWdDLENBQ2pELENBR08sU0FBU0MsR0FBZUMsRUFBeUIsQ0FDdEQsTUFBTyxDQUNMLFdBQVksQ0FBQ0EsQ0FBRyxFQUNoQixJQUFLLCtCQUNQLENBQ0YiLAogICJuYW1lcyI6IFsiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiY3JlYXRlQWRhcHRlckVycm9yIiwgImFyZ3MiLCAiZXJyb3IiLCAicXVlcnkiLCAiYWRhcHRlckVycm9yIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJnZXRQb3N0Z3JlU1FMQnVpbGRlciIsICJyZXF1aXJlbWVudHMiLCAiZ2V0QnVpbGRlciIsICJQb3N0Z3Jlc0FkYXB0ZXIiLCAiUG9zdGdyZXNRdWVyeUNvbXBpbGVyIiwgImdldEluc2VydFF1ZXJ5IiwgImRldGFpbHMiLCAicmVxdWlyZW1lbnRzIiwgInRhYmxlIiwgInJvd3MiLCAidGFibGVOYW1lIiwgInNjaGVtYSIsICJjb2x1bW5zIiwgImJ1aWxkZXIiLCAiZ2V0UG9zdGdyZVNRTEJ1aWxkZXIiLCAiY29scyIsICJjb21waWxlIiwgImFwcGx5VHJhbnNmb3JtYXRpb25zIiwgImViIiwgImdldFNlbGVjdFF1ZXJ5IiwgInBhZ2VJbmRleCIsICJwYWdlU2l6ZSIsICJzb3J0T3JkZXIiLCAiZmlsdGVyIiwgImZpbHRlckV4cHJlc3Npb24iLCAiZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbiIsICJjb3VudFF1ZXJ5IiwgInNxbCIsICJxYiIsICJpdGVtIiwgImJ1aWxkQmFzZUV4cHJlc3Npb25CdWlsZGVyIiwgInNwZWMiLCAiY29sdW1uIiwgIm9wZXJhdG9yIiwgInZhbHVlIiwgImNvbHVtbk1ldGEiLCAidHJhbnNmb3JtVmFsdWUiLCAiZmlsdGVycyIsICJvckdyb3Vwc09mQW5kQnVpbGRlcnMiLCAiY3VycmVudEFuZEdyb3VwQnVpbGRlcnMiLCAiaSIsICJhbmRFeHByZXNzaW9ucyIsICJncm91cCIsICJtb2NrU2VsZWN0UXVlcnkiLCAiZ2V0VXBkYXRlUXVlcnkiLCAiY2hhbmdlcyIsICJyb3ciLCAiYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMiLCAiZ2V0RGVsZXRlUXVlcnkiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAianNvbkFycmF5RnJvbSIsICJleHByIiwgInNxbCIsICJSRUdVTEFSX1RBQkxFX0tJTkQiLCAiVklFV19UQUJMRV9LSU5EIiwgIlRBQkxFX0tJTkRTIiwgImdldFRhYmxlc1F1ZXJ5IiwgInJlcXVpcmVtZW50cyIsICJjb21waWxlIiwgImdldFBvc3RncmVTUUxCdWlsZGVyIiwgImV4Y2x1ZGVTeXN0ZW1UYWJsZXMiLCAiZWIiLCAianNvbkFycmF5RnJvbSIsICJqYiIsICJvbl9lYiIsICJzcWwiLCAibW9ja1RhYmxlc1F1ZXJ5IiwgImdldFRpbWV6b25lUXVlcnkiLCAiYnVpbGRlciIsICJtb2NrVGltZXpvbmVRdWVyeSIsICJxYiIsICJjcmVhdGVQb3N0Z3Jlc0FkYXB0ZXIiLCAicmVxdWlyZW1lbnRzIiwgImV4ZWN1dG9yIiwgIm90aGVyUmVxdWlyZW1lbnRzIiwgIm9wdGlvbnMiLCAidGFibGVzUXVlcnkiLCAiZ2V0VGFibGVzUXVlcnkiLCAidGltZXpvbmVRdWVyeSIsICJnZXRUaW1lem9uZVF1ZXJ5IiwgInRhYmxlc0Vycm9yIiwgInRhYmxlcyIsICJ0aW1lem9uZUVycm9yIiwgInRpbWV6b25lcyIsICJjcmVhdGVBZGFwdGVyRXJyb3IiLCAidGltZXpvbmUiLCAiY3JlYXRlSW50cm9zcGVjdGlvbiIsICJlcnJvciIsICJkZXRhaWxzIiwgInF1ZXJ5IiwgImdldFNlbGVjdFF1ZXJ5IiwgInJlc3VsdHMiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAicm93cyIsICJnZXRVcGRhdGVRdWVyeSIsICJyb3ciLCAiZ2V0RGVsZXRlUXVlcnkiLCAiYXJncyIsICJyZXN1bHQiLCAic2NoZW1hcyIsICJjb2x1bW5zIiwgInRhYmxlTmFtZSIsICJzY2hlbWEiLCAiY29sdW1uc1JlY29yZCIsICJjb2x1bW4iLCAiZGF0YXR5cGUiLCAiZGF0YXR5cGVfc2NoZW1hIiwgImNvbHVtbk5hbWUiLCAibnVsbGFibGUiLCAiaXNBcnJheSIsICJzdHJpcHBlZERhdGFUeXBlIiwgIlBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSIsICJmaWx0ZXJPcGVyYXRvcnMiLCAibW9ja0ludHJvc3BlY3QiLCAibW9ja1RhYmxlc1F1ZXJ5IiwgIm1vY2tUaW1lem9uZVF1ZXJ5IiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImdldFBJRFF1ZXJ5IiwgImFzUXVlcnkiLCAiZ2V0Q2FuY2VsUXVlcnkiLCAicGlkIl0KfQo=