@prisma/studio-core 0.0.0-dev.202511082140 → 0.0.0-dev.202511102132
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/dist/chunk-4N45R6OG.js +10 -0
- package/dist/data/accelerate/index.d.cts +1 -2
- package/dist/data/accelerate/index.d.ts +1 -2
- package/dist/data/bff/index.d.cts +1 -2
- package/dist/data/bff/index.d.ts +1 -2
- package/dist/data/index.d.cts +1 -15
- package/dist/data/index.d.ts +1 -15
- package/dist/data/pglite/index.cjs +1 -1
- package/dist/data/pglite/index.d.cts +1 -2
- package/dist/data/pglite/index.d.ts +1 -2
- package/dist/data/pglite/index.js +1 -1
- package/dist/data/postgres-core/index.cjs +1 -1
- package/dist/data/postgres-core/index.d.cts +2 -6
- package/dist/data/postgres-core/index.d.ts +2 -6
- package/dist/data/postgres-core/index.js +1 -1
- package/dist/data/postgresjs/index.cjs +1 -1
- package/dist/data/postgresjs/index.d.cts +1 -2
- package/dist/data/postgresjs/index.d.ts +1 -2
- package/dist/data/postgresjs/index.js +1 -1
- package/dist/data/ppg/index.d.cts +1 -2
- package/dist/data/ppg/index.d.ts +1 -2
- package/dist/{query-DTHJwENg.d.cts → index-CkpN852N.d.cts} +16 -1
- package/dist/{query-DTHJwENg.d.ts → index-CkpN852N.d.ts} +16 -1
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/ui/index.d.cts +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/package.json +22 -2
- package/dist/chunk-WRNNFY3B.js +0 -10
|
@@ -0,0 +1,10 @@
|
|
|
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 m,b as E,c as D,d as S,e as q,f as g,g as Q,i as T,j as B}from"./chunk-AQXRIQHE.js";import{e as l}from"./chunk-GDQBQ7MK.js";l();l();l();function c(n){let{error:s,query:a}=n,e=s;return e.query=a,[e]}l();var O={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"}};l();l();function _(n){return S({...n,Adapter:D,QueryCompiler:E})}function I(n,s){let{table:a,rows:e}=n,{name:r,schema:t,columns:o}=a,i=_(s),u=Object.keys(o);return g(i.withSchema(t).insertInto(r).values(T("insert",e,o)).returning(u))}function C(n,s){let{pageIndex:a,pageSize:e,sortOrder:r,table:{name:t,schema:o,columns:i},filter:u={kind:"FilterGroup",after:"and",filters:[]}}=n,p=_(s),b=Object.keys(i),h=N(u.filters,i),y=p.withSchema(o).selectFrom(t).where(h).select(d=>d.cast(d.fn.coalesce(d.fn.countAll(),m.lit(0)),"text").as("oid"));return g(p.with("count",()=>y).withSchema(o).selectFrom([t,"count"]).select(m.ref("count.oid").$castTo().as("oid")).select(b).$call(d=>r.reduce((A,k)=>A.orderBy(k.column,k.direction),d)).where(h).limit(e).offset(m.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,B(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"),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"),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),u=Object.keys(r);return g(i.withSchema(o).updateTable(t).set(T("update",a,r)).$call(Q([e],r)).returning(u).returning(p=>p.cast(p.fn("floor",[p(p.fn("extract",[m`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(Q(a,e)))}l();l();function P(n){return m`(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")),m`'[]'`).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",[m.lit("timezone")]).as("timezone")))}function K(){return[{timezone:"UTC"}]}function W(n){return n.where("ns.nspname","!~","^pg_").where("ns.nspname","!=","information_schema")}function Te(n){let{executor:s,...a}=n;return{defaultSchema:"public",async introspect(e){try{let r=j(a),t=U(),[[o,i],[u,p]]=await Promise.all([s.execute(r,e),s.execute(t,e)]);if(o)return c({error:o,query:r});if(u)return c({error:u,query:t});let b=p[0]?.timezone;return b?[null,$({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=I(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[u]=i;return u?[null,{row:u,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 $(n){let{tables:s,timezone:a,query:e}=n;return s.reduce((r,t)=>{let{schemas:o}=r,{columns:i,name:u,schema:p}=t,b=i.reduce((h,y)=>{let{datatype:d,datatype_schema:A,name:k,options:w,nullable:J}=y,x=d.startsWith("_"),R=x?d.slice(1):d;return{...h,[k]:{datatype:{...O[R]||{group:w.length>0?"enum":"raw"},isArray:x,isNative:A==="pg_catalog",name:x?`${R}[]`:R,options:w,schema:A},isComputed:y.computed,isInPrimaryKey:y.pk,name:k,nullable:J,schema:p,table:u,fkSchema:y.foreign_key_schema,fkTable:y.foreign_key_table,fkColumn:y.foreign_key_column}}},{});return o[p]===void 0&&(o[p]={name:p,tables:{}}),o[p].tables[u]={columns:b,name:u,schema:p},r},{schemas:{public:{tables:{},name:"public"}},timezone:a,filterOperators:Y,query:e})}var Y=["=","!=",">",">=","<","<=","is","is not","like","not like","ilike","not ilike"];function we(){let n=G(),[{timezone:s}]=K();return $({tables:n,timezone:s,query:{parameters:[],sql:"<mocked>"}})}l();function qe(){return q("select pg_backend_pid() as pid")}function Be(n){return{parameters:[n],sql:"select pg_cancel_backend($1);"}}export{I as a,C as b,le as c,F as d,z as e,j as f,G as g,U as h,K as i,Te as j,we as k,qe as l,Be as m};
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL2luZGV4LnRzIiwgIi4uL2RhdGEvcG9zdGdyZXMtY29yZS9hZGFwdGVyLnRzIiwgIi4uL2RhdGEvYWRhcHRlci50cyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvZGF0YXR5cGUudHMiLCAiLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL2RtbC50cyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvYnVpbGRlci50cyIsICIuLi9kYXRhL3Bvc3RncmVzLWNvcmUvaW50cm9zcGVjdGlvbi50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2hlbHBlcnMvcG9zdGdyZXMuanMiLCAiLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL3V0aWxpdHkudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImV4cG9ydCAqIGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RtbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXRpbGl0eVwiO1xuIiwgImltcG9ydCB7XG4gIHR5cGUgQWRhcHRlcixcbiAgdHlwZSBBZGFwdGVyRGVsZXRlUmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJFcnJvcixcbiAgdHlwZSBBZGFwdGVySW5zZXJ0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJRdWVyeVJlc3VsdCxcbiAgQWRhcHRlclJlcXVpcmVtZW50cyxcbiAgdHlwZSBBZGFwdGVyVXBkYXRlUmVzdWx0LFxuICB0eXBlIENvbHVtbixcbiAgY3JlYXRlQWRhcHRlckVycm9yLFxuICB0eXBlIEZpbHRlck9wZXJhdG9yLFxuICB0eXBlIFRhYmxlLFxufSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuaW1wb3J0IHR5cGUgeyBRdWVyeSwgUXVlcnlSZXN1bHQgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgRWl0aGVyIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IFBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSB9IGZyb20gXCIuL2RhdGF0eXBlXCI7XG5pbXBvcnQgeyBnZXREZWxldGVRdWVyeSwgZ2V0SW5zZXJ0UXVlcnksIGdldFNlbGVjdFF1ZXJ5LCBnZXRVcGRhdGVRdWVyeSB9IGZyb20gXCIuL2RtbFwiO1xuaW1wb3J0IHsgZ2V0VGFibGVzUXVlcnksIGdldFRpbWV6b25lUXVlcnksIG1vY2tUYWJsZXNRdWVyeSwgbW9ja1RpbWV6b25lUXVlcnkgfSBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5cbmV4cG9ydCB0eXBlIFBvc3RncmVzQWRhcHRlclJlcXVpcmVtZW50cyA9IEFkYXB0ZXJSZXF1aXJlbWVudHM7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQb3N0Z3Jlc0FkYXB0ZXIocmVxdWlyZW1lbnRzOiBQb3N0Z3Jlc0FkYXB0ZXJSZXF1aXJlbWVudHMpOiBBZGFwdGVyIHtcbiAgY29uc3QgeyBleGVjdXRvciwgLi4ub3RoZXJSZXF1aXJlbWVudHMgfSA9IHJlcXVpcmVtZW50cztcblxuICByZXR1cm4ge1xuICAgIGRlZmF1bHRTY2hlbWE6IFwicHVibGljXCIsXG4gICAgYXN5bmMgaW50cm9zcGVjdChvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhYmxlc1F1ZXJ5ID0gZ2V0VGFibGVzUXVlcnkob3RoZXJSZXF1aXJlbWVudHMpO1xuICAgICAgICBjb25zdCB0aW1lem9uZVF1ZXJ5ID0gZ2V0VGltZXpvbmVRdWVyeSgpO1xuXG4gICAgICAgIGNvbnN0IFtbdGFibGVzRXJyb3IsIHRhYmxlc10sIFt0aW1lem9uZUVycm9yLCB0aW1lem9uZXNdXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICBleGVjdXRvci5leGVjdXRlKHRhYmxlc1F1ZXJ5LCBvcHRpb25zKSxcbiAgICAgICAgICBleGVjdXRvci5leGVjdXRlKHRpbWV6b25lUXVlcnksIG9wdGlvbnMpLFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAodGFibGVzRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRhYmxlc0Vycm9yLCBxdWVyeTogdGFibGVzUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGltZXpvbmVFcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogdGltZXpvbmVFcnJvciwgcXVlcnk6IHRpbWV6b25lUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lem9uZSA9IHRpbWV6b25lc1swXT8udGltZXpvbmU7XG5cbiAgICAgICAgaWYgKCF0aW1lem9uZSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogbmV3IEVycm9yKFwiVGltZXpvbmUgbm90IGZvdW5kXCIpLCBxdWVyeTogdGltZXpvbmVRdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgY3JlYXRlSW50cm9zcGVjdGlvbih7IHRhYmxlcywgdGltZXpvbmUsIHF1ZXJ5OiB0YWJsZXNRdWVyeSB9KV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgcHJvcGVybHlcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcXVlcnkoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclF1ZXJ5UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRTZWxlY3RRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IFtlcnJvciwgcmVzdWx0c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IGZpbHRlcmVkUm93Q291bnQ6IHJlc3VsdHNbMF0/Lm9pZCB8fCBcIjBcIiwgcm93czogcmVzdWx0cywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgcHJvcGVybHlcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgaW5zZXJ0KGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJJbnNlcnRSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldEluc2VydFF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgW2Vycm9yLCByb3dzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgcm93cywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGUoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclVwZGF0ZVJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0VXBkYXRlUXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtyb3ddID0gcmVzdWx0cztcblxuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgIC8vIFRPRE86IGN1c3RvbSBlcnJvcj9cbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IG5ldyBFcnJvcihcIlVwZGF0ZSBmYWlsZWRcIiksIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvdywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgZGVsZXRlKGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJEZWxldGVSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldERlbGV0ZVF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgLi4uZGV0YWlscywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludHJvc3BlY3Rpb24oYXJnczogeyB0YWJsZXM6IFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47IHRpbWV6b25lOiBzdHJpbmc7IHF1ZXJ5OiBRdWVyeSB9KSB7XG4gIGNvbnN0IHsgdGFibGVzLCB0aW1lem9uZSwgcXVlcnkgfSA9IGFyZ3M7XG5cbiAgcmV0dXJuIHRhYmxlcy5yZWR1Y2UoXG4gICAgKHJlc3VsdCwgcm93KSA9PiB7XG4gICAgICBjb25zdCB7IHNjaGVtYXMgfSA9IHJlc3VsdDtcbiAgICAgIGNvbnN0IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfSA9IHJvdztcblxuICAgICAgY29uc3QgY29sdW1uc1JlY29yZCA9IGNvbHVtbnMucmVkdWNlKFxuICAgICAgICAoY29sdW1ucywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBkYXRhdHlwZSwgZGF0YXR5cGVfc2NoZW1hLCBuYW1lOiBjb2x1bW5OYW1lLCBvcHRpb25zLCBudWxsYWJsZSB9ID0gY29sdW1uO1xuXG4gICAgICAgICAgY29uc3QgaXNBcnJheSA9IGRhdGF0eXBlLnN0YXJ0c1dpdGgoXCJfXCIpO1xuICAgICAgICAgIGNvbnN0IHN0cmlwcGVkRGF0YVR5cGUgPSBpc0FycmF5ID8gZGF0YXR5cGUuc2xpY2UoMSkgOiBkYXRhdHlwZTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jb2x1bW5zLFxuICAgICAgICAgICAgW2NvbHVtbk5hbWVdOiB7XG4gICAgICAgICAgICAgIGRhdGF0eXBlOiB7XG4gICAgICAgICAgICAgICAgLi4uKFBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQVtzdHJpcHBlZERhdGFUeXBlXSB8fCB7XG4gICAgICAgICAgICAgICAgICBncm91cDogb3B0aW9ucy5sZW5ndGggPiAwID8gXCJlbnVtXCIgOiBcInJhd1wiLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGlzQXJyYXksXG4gICAgICAgICAgICAgICAgaXNOYXRpdmU6IGRhdGF0eXBlX3NjaGVtYSA9PT0gXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgICAgICAgbmFtZTogaXNBcnJheSA/IGAke3N0cmlwcGVkRGF0YVR5cGV9W11gIDogc3RyaXBwZWREYXRhVHlwZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogZGF0YXR5cGVfc2NoZW1hLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpc0NvbXB1dGVkOiBjb2x1bW4uY29tcHV0ZWQsXG4gICAgICAgICAgICAgIGlzSW5QcmltYXJ5S2V5OiBjb2x1bW4ucGssXG4gICAgICAgICAgICAgIG5hbWU6IGNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgIG51bGxhYmxlLFxuICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgIGZrU2NoZW1hOiBjb2x1bW4uZm9yZWlnbl9rZXlfc2NoZW1hLFxuICAgICAgICAgICAgICBma1RhYmxlOiBjb2x1bW4uZm9yZWlnbl9rZXlfdGFibGUsXG4gICAgICAgICAgICAgIGZrQ29sdW1uOiBjb2x1bW4uZm9yZWlnbl9rZXlfY29sdW1uLFxuICAgICAgICAgICAgfSBhcyBjb25zdCBzYXRpc2ZpZXMgQ29sdW1uLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIHt9IGFzIFRhYmxlW1wiY29sdW1uc1wiXSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChzY2hlbWFzW3NjaGVtYV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY2hlbWFzW3NjaGVtYV0gPSB7XG4gICAgICAgICAgbmFtZTogc2NoZW1hLFxuICAgICAgICAgIHRhYmxlczoge30sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHNjaGVtYXNbc2NoZW1hXS50YWJsZXNbdGFibGVOYW1lXSA9IHtcbiAgICAgICAgY29sdW1uczogY29sdW1uc1JlY29yZCxcbiAgICAgICAgbmFtZTogdGFibGVOYW1lLFxuICAgICAgICBzY2hlbWEsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAge1xuICAgICAgc2NoZW1hczogeyBwdWJsaWM6IHsgdGFibGVzOiB7fSwgbmFtZTogXCJwdWJsaWNcIiB9IH0sXG4gICAgICB0aW1lem9uZSxcbiAgICAgIGZpbHRlck9wZXJhdG9ycyxcbiAgICAgIHF1ZXJ5LFxuICAgIH0gc2F0aXNmaWVzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0IGFzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICApO1xufVxuXG5jb25zdCBmaWx0ZXJPcGVyYXRvcnMgPSBbXG4gIFwiPVwiLFxuICBcIiE9XCIsXG4gIFwiPlwiLFxuICBcIj49XCIsXG4gIFwiPFwiLFxuICBcIjw9XCIsXG4gIFwiaXNcIixcbiAgXCJpcyBub3RcIixcbiAgXCJsaWtlXCIsXG4gIFwibm90IGxpa2VcIixcbiAgXCJpbGlrZVwiLFxuICBcIm5vdCBpbGlrZVwiLFxuXSBzYXRpc2ZpZXMgRmlsdGVyT3BlcmF0b3JbXTtcblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tJbnRyb3NwZWN0KCkge1xuICBjb25zdCB0YWJsZXMgPSBtb2NrVGFibGVzUXVlcnkoKTtcbiAgY29uc3QgW3sgdGltZXpvbmUgfV0gPSBtb2NrVGltZXpvbmVRdWVyeSgpO1xuICBjb25zdCBxdWVyeSA9IHsgcGFyYW1ldGVyczogW10sIHNxbDogXCI8bW9ja2VkPlwiIH0gYXMgUXVlcnk7XG5cbiAgcmV0dXJuIGNyZWF0ZUludHJvc3BlY3Rpb24oeyB0YWJsZXMsIHRpbWV6b25lLCBxdWVyeSB9KSBhcyB7XG4gICAgLy8gYmVzdCBlZmZvcnQsIG5vIG5lZWQgZ28gb3ZlcmJvYXJkLlxuICAgIHNjaGVtYXM6IHtcbiAgICAgIFtLIGluICh0eXBlb2YgdGFibGVzKVtudW1iZXJdW1wic2NoZW1hXCJdXToge1xuICAgICAgICBuYW1lOiBLO1xuICAgICAgICB0YWJsZXM6IHtcbiAgICAgICAgICBbVCBpbiAodHlwZW9mIHRhYmxlcylbbnVtYmVyXVtcIm5hbWVcIl1dOiBUYWJsZTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfTtcbiAgICB0aW1lem9uZTogdHlwZW9mIHRpbWV6b25lO1xuICAgIGZpbHRlck9wZXJhdG9yczogRmlsdGVyT3BlcmF0b3JbXTtcbiAgICBxdWVyeTogUXVlcnk7XG4gIH0gc2F0aXNmaWVzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRXhlY3V0b3IgfSBmcm9tIFwiLi9leGVjdXRvclwiO1xuaW1wb3J0IHR5cGUgeyBRdWVyeSB9IGZyb20gXCIuL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEJpZ0ludFN0cmluZywgRWl0aGVyLCBOdW1lcmljU3RyaW5nIH0gZnJvbSBcIi4vdHlwZS11dGlsc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJSZXF1aXJlbWVudHMge1xuICBleGVjdXRvcjogRXhlY3V0b3I7XG4gIG5vUGFyYW1ldGVycz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlciB7XG4gIC8qKlxuICAgKiBUaGUgc2NoZW1hIHN0dWRpbyB3aWxsIGNob29zZSBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBlLmcuIGBwdWJsaWNgIGZvciBQb3N0Z3JlU1FMXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0U2NoZW1hPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnRyb3NwZWN0cyB0aGUgZGF0YWJhc2UgYW5kIHJldHVybnMgc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2NoZW1hcywgdGFibGVzLCBldGMuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGludHJvc3BlY3Rpb24gcmVxdWVzdC5cbiAgICovXG4gIGludHJvc3BlY3Qob3B0aW9uczogQWRhcHRlckludHJvc3BlY3RPcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+O1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBhIHN0cnVjdHVyZWQgcXVlcnkgYWdhaW5zdCB0aGUgZGF0YWJhc2UuXG4gICAqL1xuICBxdWVyeShkZXRhaWxzOiBBZGFwdGVyUXVlcnlEZXRhaWxzLCBvcHRpb25zOiBBZGFwdGVyUXVlcnlPcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyUXVlcnlSZXN1bHQ+PjtcblxuICAvKipcbiAgICogSW5zZXJ0cyBhIHNpbmdsZSByb3cgaW50byB0aGUgZGF0YWJhc2UuXG4gICAqL1xuICBpbnNlcnQoXG4gICAgZGV0YWlsczogQWRhcHRlckluc2VydERldGFpbHMsXG4gICAgb3B0aW9uczogQWRhcHRlckluc2VydE9wdGlvbnMsXG4gICk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckluc2VydFJlc3VsdD4+O1xuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgZ2l2ZW4gcm93IGluIHRoZSBkYXRhYmFzZSB3aXRoIGdpdmVuIGNoYW5nZXMuXG4gICAqL1xuICB1cGRhdGUoXG4gICAgZGV0YWlsczogQWRhcHRlclVwZGF0ZURldGFpbHMsXG4gICAgb3B0aW9uczogQWRhcHRlclVwZGF0ZU9wdGlvbnMsXG4gICk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclVwZGF0ZVJlc3VsdD4+O1xuXG4gIC8qKlxuICAgKiBEZWxldGVzIGdpdmVuIHJvd3MgZnJvbSB0aGUgZGF0YWJhc2UuXG4gICAqL1xuICBkZWxldGUoXG4gICAgZGV0YWlsczogQWRhcHRlckRlbGV0ZURldGFpbHMsXG4gICAgb3B0aW9uczogQWRhcHRlckRlbGV0ZU9wdGlvbnMsXG4gICk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlckRlbGV0ZVJlc3VsdD4+O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJCYXNlT3B0aW9ucyB7fVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJJbnRyb3NwZWN0T3B0aW9ucyBleHRlbmRzIEFkYXB0ZXJCYXNlT3B0aW9ucyB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJRdWVyeU9wdGlvbnMgZXh0ZW5kcyBBZGFwdGVyQmFzZU9wdGlvbnMge1xuICBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckluc2VydE9wdGlvbnMgZXh0ZW5kcyBBZGFwdGVyQmFzZU9wdGlvbnMge31cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyVXBkYXRlT3B0aW9ucyBleHRlbmRzIEFkYXB0ZXJCYXNlT3B0aW9ucyB7fVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJEZWxldGVPcHRpb25zIGV4dGVuZHMgQWRhcHRlckJhc2VPcHRpb25zIHt9XG5cbnR5cGUgU2NoZW1hTmFtZSA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVySW50cm9zcGVjdFJlc3VsdCB7XG4gIHNjaGVtYXM6IFJlY29yZDxTY2hlbWFOYW1lLCBTY2hlbWE+O1xuICB0aW1lem9uZTogc3RyaW5nO1xuICBmaWx0ZXJPcGVyYXRvcnM6IEZpbHRlck9wZXJhdG9yW107XG4gIHF1ZXJ5OiBRdWVyeTtcbn1cblxudHlwZSBUYWJsZU5hbWUgPSBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0YWJsZXM6IFJlY29yZDxUYWJsZU5hbWUsIFRhYmxlPjtcbn1cblxudHlwZSBDb2x1bW5OYW1lID0gc3RyaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlIHtcbiAgY29sdW1uczogUmVjb3JkPENvbHVtbk5hbWUsIENvbHVtbj47XG4gIG5hbWU6IFRhYmxlTmFtZTtcbiAgc2NoZW1hOiBTY2hlbWFOYW1lO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbiB7XG4gIGRhdGF0eXBlOiBEYXRhVHlwZTtcbiAgaXNDb21wdXRlZDogYm9vbGVhbjtcbiAgaXNJblByaW1hcnlLZXk6IGJvb2xlYW47XG4gIG5hbWU6IENvbHVtbk5hbWU7XG4gIG51bGxhYmxlOiBib29sZWFuO1xuICBzY2hlbWE6IFNjaGVtYU5hbWU7XG4gIHRhYmxlOiBUYWJsZU5hbWU7XG4gIGZrU2NoZW1hOiBTY2hlbWFOYW1lIHwgbnVsbDtcbiAgZmtDb2x1bW46IENvbHVtbk5hbWUgfCBudWxsO1xuICBma1RhYmxlOiBUYWJsZU5hbWUgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFUeXBlIHtcbiAgLyoqXG4gICAqIEEgc2ltcGxpZmljYXRpb24vbm9ybWFsaXphdGlvbiBmb3IgVUkgdXNhZ2UuXG4gICAqXG4gICAqIGUuZy4gdmFyY2hhciBhbmQgY2hhciBhcmUgc3RyaW5ncy5cbiAgICovXG4gIGdyb3VwOiBEYXRhVHlwZUdyb3VwO1xuXG4gIC8qKlxuICAgKiBJcyB0aGlzIGEgbmF0aXZlIGFycmF5IHR5cGU/XG4gICAqL1xuICBpc0FycmF5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJcyBhIG5hdGl2ZSBkYXRhYmFzZSBkYXRhdHlwZSBvciBhIHVzZXItZGVmaW5lZCBkYXRhdHlwZT9cbiAgICpcbiAgICogZS5nLiBQb3N0Z3JlU1FMIGVudW1zIGFyZSB1c2VyLWRlZmluZWQgZGF0YXR5cGVzLCBidXQgYGludDRgIGlzIGEgbmF0aXZlIGRhdGF0eXBlLlxuICAgKi9cbiAgaXNOYXRpdmU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdpbGwgYmUgZGlzcGxheWVkIGFzLWlzLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbnVtIHZhbHVlcyBmb3IgZW51bSB0eXBlcy5cbiAgICovXG4gIG9wdGlvbnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NoZW1hIHRoZSBkYXRhdHlwZSBiZWxvbmdzIHRvLlxuICAgKi9cbiAgc2NoZW1hOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIERhdGFUeXBlR3JvdXAgPSBcInN0cmluZ1wiIHwgXCJkYXRldGltZVwiIHwgXCJib29sZWFuXCIgfCBcImVudW1cIiB8IFwidGltZVwiIHwgXCJyYXdcIiB8IFwibnVtZXJpY1wiIHwgXCJqc29uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlclF1ZXJ5RGV0YWlscyB7XG4gIC8qKlxuICAgKiBaZXJvLWJhc2VkIGluZGV4IG9mIHRoZSBwYWdlIHRvIGZldGNoLlxuICAgKi9cbiAgcGFnZUluZGV4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZmV0Y2ggZnJvbSB0aGUgZGF0YWJhc2UuXG4gICAqL1xuICBwYWdlU2l6ZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTb3J0IG9yZGVyIGZvciB0aGUgcXVlcnkuXG4gICAqL1xuICBzb3J0T3JkZXI6IFNvcnRPcmRlckl0ZW1bXTtcblxuICAvKipcbiAgICogVGhlIHRhYmxlIHRvIHNlbGVjdCBmcm9tLlxuICAgKi9cbiAgdGFibGU6IFRhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsdGVyIHRvIGJlIGFwcGxpZWQuXG4gICAqL1xuICBmaWx0ZXI/OiBGaWx0ZXJHcm91cDtcbn1cblxuZXhwb3J0IHR5cGUgRmlsdGVyT3BlcmF0b3IgPVxuICB8IFwiPVwiXG4gIHwgXCIhPVwiXG4gIHwgXCI+XCJcbiAgfCBcIj49XCJcbiAgfCBcIjxcIlxuICB8IFwiPD1cIlxuICB8IFwiaXNcIlxuICB8IFwiaXMgbm90XCJcbiAgfCBcImxpa2VcIlxuICB8IFwibm90IGxpa2VcIlxuICB8IFwiaWxpa2VcIlxuICB8IFwibm90IGlsaWtlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uRmlsdGVyIHtcbiAga2luZDogXCJDb2x1bW5GaWx0ZXJcIjtcbiAgY29sdW1uOiBzdHJpbmc7XG4gIG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvcjtcbiAgdmFsdWU6IHVua25vd247XG4gIGFmdGVyOiBcImFuZFwiIHwgXCJvclwiO1xuICBpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckdyb3VwIHtcbiAga2luZDogXCJGaWx0ZXJHcm91cFwiO1xuICBmaWx0ZXJzOiAoQ29sdW1uRmlsdGVyIHwgRmlsdGVyR3JvdXApW107XG4gIGFmdGVyOiBcImFuZFwiIHwgXCJvclwiO1xuICBpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRPcmRlckl0ZW0ge1xuICAvKipcbiAgICogVGhlIGNvbHVtbiB0byBzb3J0IGJ5LlxuICAgKi9cbiAgY29sdW1uOiBDb2x1bW5OYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0aW9uIHRvIHNvcnQgdGhlIGNvbHVtbiBieS5cbiAgICovXG4gIGRpcmVjdGlvbjogU29ydERpcmVjdGlvbjtcbn1cblxuZXhwb3J0IHR5cGUgU29ydERpcmVjdGlvbiA9IFwiYXNjXCIgfCBcImRlc2NcIjtcblxuZXhwb3J0IGNsYXNzIEFkYXB0ZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcXVlcnk/OiBRdWVyeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyUXVlcnlSZXN1bHQge1xuICAvKipcbiAgICogVGhlIHRvdGFsIG51bWJlciBvZiByb3dzIHRoZSBxdWVyeSB3b3VsZCByZXR1cm4gaWYgbm90IGxpbWl0ZWQuXG4gICAqXG4gICAqIElmIHRoZSBkYXRhYmFzZSBkb2VzIG5vdCBzdXBwb3J0IGNvdW50aW5nIHJvd3MsIHRoaXMgc2hvdWxkIGJlIHNldCB0byBgSW5maW5pdHlgLlxuICAgKi9cbiAgZmlsdGVyZWRSb3dDb3VudDogbnVtYmVyIHwgYmlnaW50IHwgTnVtZXJpY1N0cmluZyB8IEJpZ0ludFN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvd3MgcmV0dXJuZWQgYnkgdGhlIHF1ZXJ5LlxuICAgKi9cbiAgcm93czogUmVjb3JkPENvbHVtbk5hbWUsIHVua25vd24+W107XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRlZCBxdWVyeSBzdHJpbmcuXG4gICAqL1xuICBxdWVyeTogUXVlcnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckluc2VydERldGFpbHMge1xuICAvKipcbiAgICogVGhlIHRhYmxlIHRvIGluc2VydCBpbnRvLlxuICAgKi9cbiAgdGFibGU6IFRhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWVzIHRvIGluc2VydCBpbnRvIHRoZSB0YWJsZS5cbiAgICogLSBUaGUga2V5cyBzaG91bGQgbWF0Y2ggdGhlIGNvbHVtbiBuYW1lcyBpbiB0aGUgdGFibGUuXG4gICAqIC0gVGhlIHZhbHVlcyBzaG91bGQgYmUgdGhlIHZhbHVlcyB0byBpbnNlcnQgaW50byB0aGUgdGFibGUuXG4gICAqL1xuICByb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJJbnNlcnRSZXN1bHQge1xuICAvKipcbiAgICogVGhlIGZyZXNobHkgaW5zZXJ0ZWQgcm93IGRhdGEuXG4gICAqL1xuICByb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlY3V0ZWQgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgcXVlcnk6IFF1ZXJ5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJVcGRhdGVEZXRhaWxzIHtcbiAgLyoqXG4gICAqIENoYW5nZXMgdG8gYXBwbHkgdG8gdGhlIHJvdy5cbiAgICovXG4gIGNoYW5nZXM6IFJlY29yZDxDb2x1bW5OYW1lLCB1bmtub3duPjtcblxuICAvKipcbiAgICogVGhlIHJvdyB0byB1cGRhdGUuXG4gICAqL1xuICByb3c6IFJlY29yZDxDb2x1bW5OYW1lLCB1bmtub3duPjtcblxuICAvKipcbiAgICogVGhlIHRhYmxlIHRvIHVwZGF0ZSBpbi5cbiAgICovXG4gIHRhYmxlOiBUYWJsZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyVXBkYXRlUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSB1cGRhdGVkIHJvdyBkYXRhLlxuICAgKi9cbiAgcm93OiBSZWNvcmQ8Q29sdW1uTmFtZSwgdW5rbm93bj4gJiB7XG4gICAgLyoqXG4gICAgICogV2hlbiB0aGUgY2hhbmdlcyB3ZXJlIGFwcGxpZWQgaW4gZGF0YWJhc2UgdGltZS5cbiAgICAgKi9cbiAgICBfX3BzX3VwZGF0ZWRfYXRfXzogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZTtcbiAgfTtcblxuICAvKipcbiAgICogVGhlIGV4ZWN1dGVkIHF1ZXJ5IHN0cmluZy5cbiAgICovXG4gIHF1ZXJ5OiBRdWVyeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyRGVsZXRlRGV0YWlscyB7XG4gIC8qKlxuICAgKiBUaGUgcm93cyB0byBkZWxldGUuXG4gICAqL1xuICByb3dzOiBSZWNvcmQ8Q29sdW1uTmFtZSwgdW5rbm93bj5bXTtcblxuICAvKipcbiAgICogVGhlIHRhYmxlIHRvIGRlbGV0ZSBmcm9tLlxuICAgKi9cbiAgdGFibGU6IFRhYmxlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJEZWxldGVSZXN1bHQge1xuICByb3dzOiBSZWNvcmQ8Q29sdW1uTmFtZSwgdW5rbm93bj5bXTtcblxuICAvKipcbiAgICogVGhlIGV4ZWN1dGVkIHF1ZXJ5IHN0cmluZy5cbiAgICovXG4gIHF1ZXJ5OiBRdWVyeTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFkYXB0ZXJFcnJvcihhcmdzOiB7IGVycm9yOiBFcnJvcjsgcXVlcnk/OiBRdWVyeSB9KSB7XG4gIGNvbnN0IHsgZXJyb3IsIHF1ZXJ5IH0gPSBhcmdzO1xuXG4gIGNvbnN0IGFkYXB0ZXJFcnJvciA9IGVycm9yIGFzIEFkYXB0ZXJFcnJvcjtcblxuICBhZGFwdGVyRXJyb3IucXVlcnkgPSBxdWVyeTtcblxuICByZXR1cm4gW2FkYXB0ZXJFcnJvcl0gYXMgW0FkYXB0ZXJFcnJvcl07XG59XG4iLCAiaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5leHBvcnQgY29uc3QgUE9TVEdSRVNRTF9EQVRBX1RZUEVTX1RPX01FVEFEQVRBOiBSZWNvcmQ8c3RyaW5nLCBQaWNrPERhdGFUeXBlLCBcImdyb3VwXCI+PiA9IHtcbiAgYm9vbDoge1xuICAgIGdyb3VwOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgYm9vbGVhbjoge1xuICAgIGdyb3VwOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgYnl0ZWE6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgY2hhcjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBjaXRleHQ6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgLyoqXG4gICAqIEBleGFtcGxlICcyMDI1LTA0LTE0J1xuICAgKi9cbiAgZGF0ZToge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBAZXhhbXBsZSAnMSBkYXkgMiBob3VycydcbiAgICovXG4gIGludGVydmFsOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIG5hbWU6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgdmFyY2hhcjoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICB0ZXh0OiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBzaG9ydCBmb3JtIG9mIGB0aW1lIHdpdGhvdXQgdGltZSB6b25lYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzE0OjMwOjAwJ1xuICAgKi9cbiAgdGltZToge1xuICAgIGdyb3VwOiBcInRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIHNob3J0IGZvcm0gb2YgYHRpbWVzdGFtcCB3aXRob3V0IHRpbWUgem9uZWAuXG4gICAqXG4gICAqIEBleGFtcGxlICcyMDI1LTA0LTE0IDE0OjMwOjAwJ1xuICAgKi9cbiAgdGltZXN0YW1wOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIHNob3J0IGZvcm0gb2YgYHRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZWAuXG4gICAqXG4gICAqIEBleGFtcGxlICcyMDI1LTA0LTE0IDE0OjMwOjAwKzAwJ1xuICAgKi9cbiAgdGltZXN0YW1wdHo6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICAvKipcbiAgICogbG9uZyBmb3JtIG9mIGB0aW1lc3RhbXBgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMjAyNS0wNC0xNCAxNDozMDowMCdcbiAgICovXG4gIFwidGltZXN0YW1wIHdpdGhvdXQgdGltZSB6b25lXCI6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICAvKipcbiAgICogbG9uZyBmb3JtIG9mIGB0aW1lc3RhbXB0emAuXG4gICAqXG4gICAqIEBleGFtcGxlICcyMDI1LTA0LTE0IDE0OjMwOjAwKzAwJ1xuICAgKi9cbiAgXCJ0aW1lc3RhbXAgd2l0aCB0aW1lIHpvbmVcIjoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBzaG9ydCBmb3JtIG9mIGB0aW1lIHdpdGggdGltZSB6b25lYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzE0OjMwOjAwKzAwOjAwJ1xuICAgKi9cbiAgdGltZXR6OiB7XG4gICAgZ3JvdXA6IFwidGltZVwiLFxuICB9LFxuICAvKipcbiAgICogbG9uZyBmb3JtIG9mIGB0aW1lYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzE0OjMwOjAwJ1xuICAgKi9cbiAgXCJ0aW1lIHdpdGhvdXQgdGltZSB6b25lXCI6IHtcbiAgICBncm91cDogXCJ0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBsb25nIGZvcm0gb2YgYHRpbWV0emAuXG4gICAqXG4gICAqIEBleGFtcGxlICcyMDI1LTA0LTE0IDE0OjMwOjAwKzAwJ1xuICAgKi9cbiAgXCJ0aW1lIHdpdGggdGltZSB6b25lXCI6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICB1dWlkOiB7XG4gICAgLy8gVE9ETzogcG9zc2libHkgY2hhbmdlIHRvIGFub3RoZXIgZ3JvdXAgbGF0ZXIuXG4gICAgZ3JvdXA6IFwicmF3XCIsXG4gIH0sXG4gIC8vIE51bWVyaWMgdHlwZXNcbiAgaW50Mjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgaW50NDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgaW50ODoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgc21hbGxpbnQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGludGVnZXI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGJpZ2ludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZGVjaW1hbDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgbnVtZXJpYzoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgcmVhbDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgZmxvYXQ0OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBmbG9hdDg6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIFwiZG91YmxlIHByZWNpc2lvblwiOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBqc29uOiB7XG4gICAgZ3JvdXA6IFwianNvblwiLFxuICB9LFxuICBqc29uYjoge1xuICAgIGdyb3VwOiBcImpzb25cIixcbiAgfSxcbn07XG4iLCAiaW1wb3J0IHsgdHlwZSBFeHByZXNzaW9uLCB0eXBlIEV4cHJlc3Npb25CdWlsZGVyLCBzcWwsIHR5cGUgU3FsQm9vbCB9IGZyb20gXCJreXNlbHlcIjtcblxuaW1wb3J0IHR5cGUge1xuICBBZGFwdGVyRGVsZXRlRGV0YWlscyxcbiAgQWRhcHRlckluc2VydERldGFpbHMsXG4gIEFkYXB0ZXJRdWVyeURldGFpbHMsXG4gIEFkYXB0ZXJVcGRhdGVEZXRhaWxzLFxuICBDb2x1bW5GaWx0ZXIsXG4gIEZpbHRlckdyb3VwLFxuICBUYWJsZSxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB7XG4gIGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzLFxuICBhcHBseVRyYW5zZm9ybWF0aW9ucyxcbiAgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLFxuICBjb21waWxlLFxuICB0cmFuc2Zvcm1WYWx1ZSxcbn0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEJpZ0ludFN0cmluZyB9IGZyb20gXCIuLi90eXBlLXV0aWxzXCI7XG5pbXBvcnQgeyBnZXRQb3N0Z3JlU1FMQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcbmltcG9ydCB0eXBlIHsgbW9ja1RhYmxlc1F1ZXJ5IH0gZnJvbSBcIi4vaW50cm9zcGVjdGlvblwiO1xuXG4vKipcbiAqIEluc2VydHMgb25lIG9yIG1vcmUgcm93cyBpbnRvIGEgdGFibGUgYW5kIHJldHVybnMgdGhlIGluc2VydGVkIHJvd3MgYWxvbmcgd2l0aCB0aGVpciBgY3RpZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnNlcnRRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlckluc2VydERldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3QgeyB0YWJsZSwgcm93cyB9ID0gZGV0YWlscztcbiAgY29uc3QgeyBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSwgY29sdW1ucyB9ID0gdGFibGU7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFBvc3RncmVTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ocmVxdWlyZW1lbnRzKTtcbiAgY29uc3QgY29scyA9IE9iamVjdC5rZXlzKGNvbHVtbnMpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC5pbnNlcnRJbnRvKHRhYmxlTmFtZSlcbiAgICAgIC52YWx1ZXMoYXBwbHlUcmFuc2Zvcm1hdGlvbnMoXCJpbnNlcnRcIiwgcm93cywgY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGNvbHMpLFxuICApO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHNlbGVjdHMgYWxsIGNvbHVtbnMgZnJvbSBhIHRhYmxlLCBhbG9uZyB3aXRoIHRoZSBgY3RpZGAgY29sdW1uLCBhbmQgdW5ib3VuZCByb3cgY291bnQgYXMgYG9pZGAgKHJlc2VydmVkIGNvbHVtbiBuYW1lIHRoYXQgY2Fubm90IGNvbmZsaWN0IHdpdGggdXNlciBjb2x1bW5zKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdFF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyUXVlcnlEZXRhaWxzLFxuICByZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZVNpemUsXG4gICAgc29ydE9yZGVyLFxuICAgIHRhYmxlOiB7IG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hLCBjb2x1bW5zIH0sXG4gICAgZmlsdGVyID0geyBraW5kOiBcIkZpbHRlckdyb3VwXCIsIGFmdGVyOiBcImFuZFwiLCBmaWx0ZXJzOiBbXSB9LFxuICB9ID0gZGV0YWlscztcblxuICBjb25zdCBidWlsZGVyID0gZ2V0UG9zdGdyZVNRTEJ1aWxkZXI8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuICBjb25zdCBjb2xzID0gT2JqZWN0LmtleXMoY29sdW1ucyk7XG5cbiAgY29uc3QgZmlsdGVyRXhwcmVzc2lvbiA9IGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oZmlsdGVyLmZpbHRlcnMsIGNvbHVtbnMpO1xuXG4gIGNvbnN0IGNvdW50UXVlcnkgPSBidWlsZGVyXG4gICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgIC5zZWxlY3RGcm9tKHRhYmxlTmFtZSlcbiAgICAud2hlcmUoZmlsdGVyRXhwcmVzc2lvbilcbiAgICAuc2VsZWN0KChlYikgPT4gZWIuY2FzdDxCaWdJbnRTdHJpbmc+KGViLmZuLmNvYWxlc2NlKGViLmZuLmNvdW50QWxsKCksIHNxbC5saXQoMCkpLCBcInRleHRcIikuYXMoXCJvaWRcIikpO1xuXG4gIHJldHVybiBjb21waWxlKFxuICAgIGJ1aWxkZXJcbiAgICAgIC53aXRoKFwiY291bnRcIiwgKCkgPT4gY291bnRRdWVyeSlcbiAgICAgIC53aXRoU2NoZW1hKHNjaGVtYSlcbiAgICAgIC5zZWxlY3RGcm9tKFt0YWJsZU5hbWUsIFwiY291bnRcIl0pXG4gICAgICAvLyBgb2lkYCBpcyBhIHJlc2VydmVkIGNvbHVtbiBuYW1lIGluIFBvc3RncmVTUUwsIHNvIHdlIHVzZSBpdCBhcyBhbiBhbGlhcyBmb3IgdGhlIHJvdyBjb3VudCB0byBub3QgY29uZmxpY3Qgd2l0aCB1c2VyIGNvbHVtbnMuXG4gICAgICAuc2VsZWN0KHNxbC5yZWYoXCJjb3VudC5vaWRcIikuJGNhc3RUbzxCaWdJbnRTdHJpbmc+KCkuYXMoXCJvaWRcIikpXG4gICAgICAuc2VsZWN0KGNvbHMpXG4gICAgICAuJGNhbGwoKHFiKSA9PiBzb3J0T3JkZXIucmVkdWNlKChxYiwgaXRlbSkgPT4gcWIub3JkZXJCeShpdGVtLmNvbHVtbiwgaXRlbS5kaXJlY3Rpb24pLCBxYikpXG4gICAgICAvLyBUT0RPOiBjdXJzb3IgcGFnaW5hdGlvbj9cbiAgICAgIC53aGVyZShmaWx0ZXJFeHByZXNzaW9uKVxuICAgICAgLmxpbWl0KHBhZ2VTaXplKVxuICAgICAgLy8gd2UncmUgaW5qZWN0aW5nIHRoZSBvZmZzZXQgdmFsdWUgaGVyZSB0byBhdm9pZCBzZXJpYWxpemF0aW9uIGNvbXBsZXhpdHkgKGBiaWdpbnRgIGlzIGEgbm8tZ28gZm9yIGBKU09OLnN0cmluZ2lmeWApLlxuICAgICAgLm9mZnNldChzcWwubGl0KEJpZ0ludChwYWdlSW5kZXgpICogQmlnSW50KHBhZ2VTaXplKSkpLFxuICApO1xufVxuXG4vLyBIZWxwZXIgdG8gYnVpbGQgYW4gZXhwcmVzc2lvbiBidWlsZGVyIGZvciBhIHNpbmdsZSBmaWx0ZXIgb3IgYSBncm91cFxuZnVuY3Rpb24gYnVpbGRCYXNlRXhwcmVzc2lvbkJ1aWxkZXIoXG4gIHNwZWM6IENvbHVtbkZpbHRlciB8IEZpbHRlckdyb3VwLFxuICBjb2x1bW5zOiBUYWJsZVtcImNvbHVtbnNcIl0sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4pOiAoZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gRXhwcmVzc2lvbjxTcWxCb29sPiB7XG4gIGlmIChzcGVjLmtpbmQgPT09IFwiQ29sdW1uRmlsdGVyXCIpIHtcbiAgICByZXR1cm4gKGViKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbHVtbiwgb3BlcmF0b3IsIHZhbHVlIH0gPSBzcGVjO1xuXG4gICAgICBjb25zdCBjb2x1bW5NZXRhID0gY29sdW1uc1tjb2x1bW5dITtcblxuICAgICAgcmV0dXJuIGViKFxuICAgICAgICBjb2x1bW5NZXRhLmRhdGF0eXBlLmdyb3VwID09PSBcInJhd1wiID8gZWIuY2FzdChjb2x1bW4sIFwidGV4dFwiKSA6IGNvbHVtbixcbiAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgIHRyYW5zZm9ybVZhbHVlKHZhbHVlLCBjb2x1bW5NZXRhKSxcbiAgICAgICk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbihzcGVjLmZpbHRlcnMsIGNvbHVtbnMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oXG4gIGZpbHRlcnM6IChDb2x1bW5GaWx0ZXIgfCBGaWx0ZXJHcm91cClbXSxcbiAgY29sdW1uczogVGFibGVbXCJjb2x1bW5zXCJdLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuKTogKGViOiBFeHByZXNzaW9uQnVpbGRlcjxhbnksIGFueT4pID0+IEV4cHJlc3Npb248U3FsQm9vbD4ge1xuICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDApIHJldHVybiAoZWIpID0+IGViLmxpdCh0cnVlKTsgLy8gbm8gZmlsdGVycywgYWx3YXlzIHRydWVcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCBvckdyb3Vwc09mQW5kQnVpbGRlcnM6ICgoZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gRXhwcmVzc2lvbjxTcWxCb29sPilbXVtdID0gW107XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGxldCBjdXJyZW50QW5kR3JvdXBCdWlsZGVyczogKChlYjogRXhwcmVzc2lvbkJ1aWxkZXI8YW55LCBhbnk+KSA9PiBFeHByZXNzaW9uPFNxbEJvb2w+KVtdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgY3VycmVudEFuZEdyb3VwQnVpbGRlcnMucHVzaChidWlsZEJhc2VFeHByZXNzaW9uQnVpbGRlcihmaWx0ZXJzW2ldISwgY29sdW1ucykpO1xuXG4gICAgLy8gJm4gQU5EIGdyb3VwIGVuZHMgaWYgaXQncyB0aGUgbGFzdCBmaWx0ZXIsIG9yIHRoZSBpdGVtIGlzIGZvbGxvd2VkIGJ5IGFuICdvcidcbiAgICBpZiAoaSA9PT0gZmlsdGVycy5sZW5ndGggLSAxIHx8IGZpbHRlcnNbaV0hLmFmdGVyID09PSBcIm9yXCIpIHtcbiAgICAgIG9yR3JvdXBzT2ZBbmRCdWlsZGVycy5wdXNoKGN1cnJlbnRBbmRHcm91cEJ1aWxkZXJzKTtcbiAgICAgIGN1cnJlbnRBbmRHcm91cEJ1aWxkZXJzID0gW107IC8vIHN0YXJ0IGEgbmV3IGdyb3VwXG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcmV0dXJuIChlYjogRXhwcmVzc2lvbkJ1aWxkZXI8YW55LCBhbnk+KSA9PiB7XG4gICAgY29uc3QgYW5kRXhwcmVzc2lvbnMgPSBvckdyb3Vwc09mQW5kQnVpbGRlcnMubWFwKChncm91cCkgPT4ge1xuICAgICAgcmV0dXJuIGViLmFuZChncm91cC5tYXAoKGJ1aWxkZXIpID0+IGJ1aWxkZXIoZWIpKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZWIub3IoYW5kRXhwcmVzc2lvbnMpO1xuICB9O1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1NlbGVjdFF1ZXJ5KCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKFwiMjAyNS0wMS0yNlQyMTo1NjoxMi4zNDVaXCIpLFxuICAgICAgZGVsZXRlZF9hdDogbnVsbCxcbiAgICAgIGlkOiAxLFxuICAgICAgbmFtZTogXCJKb2huIERvZVwiLFxuICAgICAgb2lkOiBcIjJcIixcbiAgICAgIHJvbGU6IFwiYWRtaW5cIixcbiAgICAgIG5hbWVfcm9sZTogXCJKb25uIERvZSAtIGFkbWluXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShcIjIwMjUtMDEtMjZUMjA6NTY6MTIuMzQ1WlwiKSxcbiAgICAgIGRlbGV0ZWRfYXQ6IG51bGwsXG4gICAgICBpZDogMixcbiAgICAgIG5hbWU6IFwiSmFuZSBEb2VcIixcbiAgICAgIG9pZDogXCIyXCIsXG4gICAgICByb2xlOiBcInBvd2VydXNlclwiLFxuICAgICAgbmFtZV9yb2xlOiBcIkphbmUgRG9lIC0gcG93ZXJ1c2VyXCIsXG4gICAgfSxcbiAgXSBhcyBjb25zdCBzYXRpc2ZpZXMge1xuICAgIC8vIGJlc3QgZWZmb3J0IG5vIG5lZWQgdG8gZ28gb3ZlcmJvYXJkXG4gICAgW0sgaW4gUmV0dXJuVHlwZTx0eXBlb2YgbW9ja1RhYmxlc1F1ZXJ5PlsxXVtcImNvbHVtbnNcIl1bbnVtYmVyXVtcIm5hbWVcIl0gfCBcIm9pZFwiXTogdW5rbm93bjtcbiAgfVtdO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHVwZGF0ZXMgYSBnaXZlbiByb3cgaW4gYSB0YWJsZSB3aXRoIGdpdmVuIGNoYW5nZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcGRhdGVRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlclVwZGF0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIGNoYW5nZXMsXG4gICAgcm93LFxuICAgIHRhYmxlOiB7IGNvbHVtbnMsIG5hbWU6IHRhYmxlTmFtZSwgc2NoZW1hIH0sXG4gIH0gPSBkZXRhaWxzO1xuXG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+KHJlcXVpcmVtZW50cyk7XG4gIGNvbnN0IGNvbHMgPSBPYmplY3Qua2V5cyhjb2x1bW5zKTtcblxuICByZXR1cm4gY29tcGlsZShcbiAgICBidWlsZGVyXG4gICAgICAud2l0aFNjaGVtYShzY2hlbWEpXG4gICAgICAudXBkYXRlVGFibGUodGFibGVOYW1lKVxuICAgICAgLnNldChhcHBseVRyYW5zZm9ybWF0aW9ucyhcInVwZGF0ZVwiLCBjaGFuZ2VzLCBjb2x1bW5zKSlcbiAgICAgIC4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhbcm93XSwgY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGNvbHMpXG4gICAgICAucmV0dXJuaW5nKChlYikgPT5cbiAgICAgICAgZWJcbiAgICAgICAgICAuY2FzdDxCaWdJbnRTdHJpbmc+KGViLmZuKFwiZmxvb3JcIiwgW2ViKGViLmZuKFwiZXh0cmFjdFwiLCBbc3FsYGVwb2NoIGZyb20gbm93KClgXSksIFwiKlwiLCAxXzAwMF8wMDApXSksIFwidGV4dFwiKVxuICAgICAgICAgIC5hcyhcIl9fcHNfdXBkYXRlZF9hdF9fXCIpLFxuICAgICAgKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCBkZWxldGVzIGEgZ2l2ZW4gc2V0IG9mIHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlckRlbGV0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIHJvd3MsXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFBvc3RncmVTUUxCdWlsZGVyKHJlcXVpcmVtZW50cyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoYnVpbGRlci53aXRoU2NoZW1hKHNjaGVtYSkuZGVsZXRlRnJvbSh0YWJsZU5hbWUpLiRjYWxsKGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzKHJvd3MsIGNvbHVtbnMpKSk7XG59XG4iLCAiaW1wb3J0IHsgdHlwZSBLeXNlbHksIFBvc3RncmVzQWRhcHRlciwgUG9zdGdyZXNRdWVyeUNvbXBpbGVyIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGdldEJ1aWxkZXIgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxEYXRhYmFzZSA9IGFueT4oXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pOiBLeXNlbHk8RGF0YWJhc2U+IHtcbiAgcmV0dXJuIGdldEJ1aWxkZXIoeyAuLi5yZXF1aXJlbWVudHMsIEFkYXB0ZXI6IFBvc3RncmVzQWRhcHRlciwgUXVlcnlDb21waWxlcjogUG9zdGdyZXNRdWVyeUNvbXBpbGVyIH0pO1xufVxuIiwgImltcG9ydCB7IHR5cGUgU2VsZWN0UXVlcnlCdWlsZGVyLCBzcWwgfSBmcm9tIFwia3lzZWx5XCI7XG5pbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSBcImt5c2VseS9oZWxwZXJzL3Bvc3RncmVzXCI7XG5cbmltcG9ydCB7IHR5cGUgQnVpbGRlclJlcXVpcmVtZW50cywgY29tcGlsZSwgdHlwZSBRdWVyeVJlc3VsdCB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHsgZ2V0UG9zdGdyZVNRTEJ1aWxkZXIgfSBmcm9tIFwiLi9idWlsZGVyXCI7XG5cbmNvbnN0IFJFR1VMQVJfVEFCTEVfS0lORCA9IFwiclwiO1xuY29uc3QgVklFV19UQUJMRV9LSU5EID0gXCJ2XCI7XG5jb25zdCBUQUJMRV9LSU5EUyA9IFtSRUdVTEFSX1RBQkxFX0tJTkQsIFZJRVdfVEFCTEVfS0lORF0gYXMgY29uc3Q7XG50eXBlIFRhYmxlS2luZCA9ICh0eXBlb2YgVEFCTEVfS0lORFMpW251bWJlcl07XG5cbmludGVyZmFjZSBEYXRhYmFzZSB7XG4gIC8qKiBjb2x1bW5zICovXG4gIFwicGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGVcIjoge1xuICAgIC8qKiBjb2x1bW4gb3JkZXIgbnVtYmVyIGluIGl0cyB0YWJsZSAqL1xuICAgIGF0dG51bTogbnVtYmVyO1xuICAgIC8qKiB0YWJsZS92aWV3IGlkZW50aWZpZXIgKi9cbiAgICBhdHRyZWxpZDogc3RyaW5nO1xuICAgIC8qKiBjb2x1bW4gbmFtZSAqL1xuICAgIGF0dG5hbWU6IHN0cmluZztcbiAgICAvKiogd2FzIHRoZSBjb2x1bW4gZHJvcHBlZC4gZHJvcHBlZCBjb2x1bW5zIG1pZ2h0IG5vdCBiZSAxMDAlIHJlbW92ZWQgaW1tZWRpYXRlbHkuICovXG4gICAgYXR0aXNkcm9wcGVkOiBib29sZWFuO1xuICAgIC8qKiBjb2x1bW4gZGF0YXR5cGUgaWRlbnRpZmllciAqL1xuICAgIGF0dHR5cGlkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGlvbiBmbGFnIGZvciBjb21wdXRlZCBjb2x1bW5zOlxuICAgICAqICcnIChlbXB0eSkgZm9yIHJlZ3VsYXIgY29sdW1ucyxcbiAgICAgKiAncycgZm9yIFNUT1JFRCBnZW5lcmF0ZWQgY29sdW1ucyAoUG9zdGdyZXMgR0VORVJBVEVEIEFMV0FZUyBBUykuXG4gICAgICovXG4gICAgYXR0Z2VuZXJhdGVkOiBcIlwiIHwgXCJzXCI7XG4gICAgLyoqIE5PVCBOVUxMIGNvbnN0cmFpbnQ6IHRydWUgaWYgdGhlIGNvbHVtbiBoYXMgYSBOT1QgTlVMTCBjb25zdHJhaW50ICovXG4gICAgYXR0bm90bnVsbDogYm9vbGVhbjtcbiAgfTtcbiAgLyoqIHJlc291cmNlcywgZS5nLiB0YWJsZXMsIHNlcXVlbmNlcywgZXRjLiAqL1xuICBcInBnX2NhdGFsb2cucGdfY2xhc3NcIjoge1xuICAgIC8qKiByZXNvdXJjZSBpZCAqL1xuICAgIG9pZDogbnVtYmVyO1xuICAgIC8qKiByZXNvdXJjZSBuYW1lICovXG4gICAgcmVsbmFtZTogc3RyaW5nO1xuICAgIC8qKiBzY2hlbWEgaWQgKi9cbiAgICByZWxuYW1lc3BhY2U6IG51bWJlcjtcbiAgICAvKiogcmVzb3VyY2Uga2luZDogcmVndWxhciB0YWJsZSwgdmlldyAqL1xuICAgIHJlbGtpbmQ6IFRhYmxlS2luZDtcbiAgfTtcbiAgLyoqIGVudW0gdHlwZXMnIHZhbHVlcyAqL1xuICBcInBnX2NhdGFsb2cucGdfZW51bVwiOiB7XG4gICAgLyoqIGVudW0gdmFsdWUgKi9cbiAgICBlbnVtbGFiZWw6IHN0cmluZztcbiAgICAvKiogZW51bSdzIHR5cGUgaWQgKi9cbiAgICBlbnVtdHlwaWQ6IG51bWJlcjtcbiAgfTtcbiAgLyoqIHNjaGVtYXMgKi9cbiAgXCJwZ19jYXRhbG9nLnBnX25hbWVzcGFjZVwiOiB7XG4gICAgLyoqIHNjaGVtYSBuYW1lICovXG4gICAgbnNwbmFtZTogc3RyaW5nO1xuICAgIC8qKiBzY2hlbWEgaWQgKi9cbiAgICBvaWQ6IG51bWJlcjtcbiAgfTtcbiAgLyoqIGRhdGF0eXBlcyAqL1xuICBcInBnX2NhdGFsb2cucGdfdHlwZVwiOiB7XG4gICAgLyoqIHR5cGUgaWQgKi9cbiAgICBvaWQ6IG51bWJlcjtcbiAgICAvKiogdHlwZSBuYW1lICovXG4gICAgdHlwbmFtZTogc3RyaW5nO1xuICAgIC8qKiB0eXBlJ3Mgc2NoZW1hIChha2EgbmFtZXNwYWNlKSBpZCAqL1xuICAgIHR5cG5hbWVzcGFjZTogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIHR5cGUncyBraW5kXG4gICAgICpcbiAgICAgKiAnZScgLSBlbnVtIHR5cGVcbiAgICAgKi9cbiAgICB0eXB0eXBlOiBcImVcIiB8IChzdHJpbmcgJiB7fSk7XG4gIH07XG4gIC8qKiBjb25zdHJhaW50cyAqL1xuICBcInBnX2NhdGFsb2cucGdfY29uc3RyYWludFwiOiB7XG4gICAgLyoqIHJlbGF0aW9uICh0YWJsZSkgaWQgd2hpY2ggdGhpcyBjb25zdHJhaW50IHdhcyBjcmVhdGVkIGZvciAqL1xuICAgIGNvbnJlbGlkOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogY29uc3RyYWludCB0eXBlLlxuICAgICAqXG4gICAgICogYCdwJ2AgLSBwcmltYXJ5IGtleSBjb25zdHJhaW50LlxuICAgICAqIGAnZidgIC0gZm9yZWlnbiBrZXkgY29uc3RyYWludC5cbiAgICAgKi9cbiAgICBjb250eXBlOiBcInBcIiB8IFwiZlwiIHwgKHN0cmluZyAmIHt9KTtcbiAgICAvKipcbiAgICAgKiBhbiBvcmRlcmVkIGFycmF5IG9mIGNvbHVtbnMgaW5jbHVkZWQgaW4gdGhlIGNvbnN0cmFpbnQuXG4gICAgICpcbiAgICAgKiB0aGUgY29sdW1ucyBhcmUgcmVwcmVzZW50ZWQgYnkgdGhlaXIgb3JkaW5hbCBudW1iZXIgKGBhdHRudW1gKSBpbiB0aGVpciByZWxhdGlvbiAodGFibGUpLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgYCd7MSwzfSdgIC0gYSBjb25zdHJhaW50IHdpdGggMiBjb2x1bW5zLCB0aGUgMXN0ICYgM3JkIGluIHRoZWlyIHRhYmxlLlxuICAgICAqL1xuICAgIGNvbmtleTogbnVtYmVyW107XG4gICAgLyoqIGlmIGEgZm9yZWlnbiBrZXksIHRoZSByZWZlcmVuY2VkIHRhYmxlICovXG4gICAgY29uZnJlbGlkOiBudW1iZXI7XG4gICAgLyoqIGlmIGEgZm9yZWlnbiBrZXksIHRoZSByZWZlcmVuY2VkIGNvbHVtbnMgKi9cbiAgICBjb25ma2V5OiBudW1iZXJbXTtcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCByZXR1cm5zIG1ldGFkYXRhIGZvciBhbGwgdXNlci1kZWZpbmVkIHRhYmxlcyBhbmQgdmlld3MgaW4gdGhlIGRhdGFiYXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVzUXVlcnkocmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPikge1xuICByZXR1cm4gY29tcGlsZShcbiAgICBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxEYXRhYmFzZT4ocmVxdWlyZW1lbnRzKVxuICAgICAgLnNlbGVjdEZyb20oXCJwZ19jYXRhbG9nLnBnX2NsYXNzIGFzIGNsc1wiKVxuICAgICAgLmlubmVySm9pbihcInBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIGFzIG5zXCIsIFwiY2xzLnJlbG5hbWVzcGFjZVwiLCBcIm5zLm9pZFwiKVxuICAgICAgLiRjYWxsKGV4Y2x1ZGVTeXN0ZW1UYWJsZXMpXG4gICAgICAvLyByZWd1bGFyIHRhYmxlcyBvciB2aWV3c1xuICAgICAgLndoZXJlKFwiY2xzLnJlbGtpbmRcIiwgXCJpblwiLCBUQUJMRV9LSU5EUylcbiAgICAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICAgIFwibnMubnNwbmFtZSBhcyBzY2hlbWFcIixcbiAgICAgICAgXCJjbHMucmVsbmFtZSBhcyBuYW1lXCIsXG4gICAgICAgIGpzb25BcnJheUZyb20oXG4gICAgICAgICAgZWJcbiAgICAgICAgICAgIC5zZWxlY3RGcm9tKFwicGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYXMgYXR0XCIpXG4gICAgICAgICAgICAuaW5uZXJKb2luKFwicGdfY2F0YWxvZy5wZ190eXBlIGFzIHR5cFwiLCBcInR5cC5vaWRcIiwgXCJhdHQuYXR0dHlwaWRcIilcbiAgICAgICAgICAgIC5pbm5lckpvaW4oXCJwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBhcyB0bnNcIiwgXCJ0bnMub2lkXCIsIFwidHlwLnR5cG5hbWVzcGFjZVwiKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwicGdfY2F0YWxvZy5wZ19jb25zdHJhaW50IGFzIHBrX2NvblwiLCAoamIpID0+XG4gICAgICAgICAgICAgIGpiXG4gICAgICAgICAgICAgICAgLm9uKFwicGtfY29uLmNvbnR5cGVcIiwgXCI9XCIsIFwicFwiKVxuICAgICAgICAgICAgICAgIC5vblJlZihcInBrX2Nvbi5jb25yZWxpZFwiLCBcIj1cIiwgXCJjbHMub2lkXCIpXG4gICAgICAgICAgICAgICAgLm9uKChlYikgPT4gZWIoXCJhdHQuYXR0bnVtXCIsIFwiPVwiLCBlYi5mbi5hbnkoXCJwa19jb24uY29ua2V5XCIpKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAubGVmdEpvaW4oXCJwZ19jYXRhbG9nLnBnX2NvbnN0cmFpbnQgYXMgZmtfY29uXCIsIChqYikgPT5cbiAgICAgICAgICAgICAgamJcbiAgICAgICAgICAgICAgICAub24oXCJma19jb24uY29udHlwZVwiLCBcIj1cIiwgXCJmXCIpXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwiZmtfY29uLmNvbnJlbGlkXCIsIFwiPVwiLCBcImNscy5vaWRcIilcbiAgICAgICAgICAgICAgICAub24oKGViKSA9PiBlYihcImF0dC5hdHRudW1cIiwgXCI9XCIsIGViLmZuLmFueShcImZrX2Nvbi5jb25rZXlcIikpKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcInBnX2NhdGFsb2cucGdfY2xhc3MgYXMgZmtfY2xzXCIsIFwiZmtfY2xzLm9pZFwiLCBcImZrX2Nvbi5jb25mcmVsaWRcIilcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcInBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIGFzIGZrX25zXCIsIFwiZmtfbnMub2lkXCIsIFwiZmtfY2xzLnJlbG5hbWVzcGFjZVwiKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwicGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYXMgZmtfYXR0XCIsIChqYikgPT5cbiAgICAgICAgICAgICAgamJcbiAgICAgICAgICAgICAgICAub25SZWYoXCJma19hdHQuYXR0cmVsaWRcIiwgXCI9XCIsIFwiZmtfY2xzLm9pZFwiKVxuICAgICAgICAgICAgICAgIC8vIFVzZSBhIGNhbGxiYWNrIGZvciB0aGUgLm9uKCkgY29uZGl0aW9uIHRvIGVuc3VyZSBjb3JyZWN0IGNvbnRleHQgZm9yIHR5cGVzXG4gICAgICAgICAgICAgICAgLm9uKChvbl9lYikgPT4gb25fZWIoXCJma19hdHQuYXR0bnVtXCIsIFwiPVwiLCBvbl9lYi5mbi5hbnkoXCJma19jb24uY29uZmtleVwiKSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLndoZXJlUmVmKFwiYXR0LmF0dHJlbGlkXCIsIFwiPVwiLCBcImNscy5vaWRcIilcbiAgICAgICAgICAgIC8vIGV4Y2x1ZGUgc3lzdGVtIGNvbHVtbnNcbiAgICAgICAgICAgIC53aGVyZShcImF0dC5hdHRudW1cIiwgXCI+PVwiLCAwKVxuICAgICAgICAgICAgLndoZXJlKFwiYXR0LmF0dGlzZHJvcHBlZFwiLCBcIiE9XCIsIHRydWUpXG4gICAgICAgICAgICAuc2VsZWN0KFtcbiAgICAgICAgICAgICAgXCJhdHQuYXR0bmFtZSBhcyBuYW1lXCIsXG4gICAgICAgICAgICAgIFwidHlwLnR5cG5hbWUgYXMgZGF0YXR5cGVcIixcbiAgICAgICAgICAgICAgXCJ0bnMubnNwbmFtZSBhcyBkYXRhdHlwZV9zY2hlbWFcIixcbiAgICAgICAgICAgICAgXCJma19ucy5uc3BuYW1lIGFzIGZvcmVpZ25fa2V5X3NjaGVtYVwiLFxuICAgICAgICAgICAgICBcImZrX2Nscy5yZWxuYW1lIGFzIGZvcmVpZ25fa2V5X3RhYmxlXCIsXG4gICAgICAgICAgICAgIFwiZmtfYXR0LmF0dG5hbWUgYXMgZm9yZWlnbl9rZXlfY29sdW1uXCIsXG4gICAgICAgICAgICBdKVxuICAgICAgICAgICAgLnNlbGVjdCgoZWIpID0+IFtcbiAgICAgICAgICAgICAgZWIoXCJwa19jb24uY29ua2V5XCIsIFwiaXMgbm90XCIsIG51bGwpLiRjYXN0VG88Ym9vbGVhbj4oKS5hcyhcInBrXCIpLFxuICAgICAgICAgICAgICBlYihcImF0dC5hdHRnZW5lcmF0ZWRcIiwgXCIhPVwiLCBcIlwiKS4kY2FzdFRvPGJvb2xlYW4+KCkuYXMoXCJjb21wdXRlZFwiKSxcbiAgICAgICAgICAgICAgZWIoXCJhdHQuYXR0bm90bnVsbFwiLCBcIiE9XCIsIHRydWUpLiRjYXN0VG88Ym9vbGVhbj4oKS5hcyhcIm51bGxhYmxlXCIpLFxuICAgICAgICAgICAgICBlYi5mblxuICAgICAgICAgICAgICAgIC5jb2FsZXNjZShcbiAgICAgICAgICAgICAgICAgIGViXG4gICAgICAgICAgICAgICAgICAgIC5zZWxlY3RGcm9tKFwicGdfY2F0YWxvZy5wZ19lbnVtIGFzIGVubVwiKVxuICAgICAgICAgICAgICAgICAgICAud2hlcmVSZWYoXCJlbm0uZW51bXR5cGlkXCIsIFwiPVwiLCBcInR5cC5vaWRcIilcbiAgICAgICAgICAgICAgICAgICAgLnNlbGVjdCgoZWIpID0+IGViLmZuLmpzb25BZ2coZWIucmVmKFwiZW5tLmVudW1sYWJlbFwiKSkuYXMoXCJvXCIpKSxcbiAgICAgICAgICAgICAgICAgIHNxbDxzdHJpbmdbXT5gJ1tdJ2AsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hcyhcIm9wdGlvbnNcIiksXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgKS5hcyhcImNvbHVtbnNcIiksXG4gICAgICBdKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tUYWJsZXNRdWVyeSgpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBzY2hlbWE6IFwiem9vXCIsXG4gICAgICBuYW1lOiBcImFuaW1hbHNcIixcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiaWRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJpbnQ0XCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogdHJ1ZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgc2NoZW1hOiBcInB1YmxpY1wiLFxuICAgICAgbmFtZTogXCJ1c2Vyc1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImludDRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiB0cnVlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY3JlYXRlZF9hdFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRpbWVzdGFtcFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJkZWxldGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInJvbGVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ2YXJjaGFyXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIm5hbWVfcm9sZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlZDogdHJ1ZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBzY2hlbWE6IFwicHVibGljXCIsXG4gICAgICBuYW1lOiBcImNvbXBvc2l0ZV9wa1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInV1aWRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiB0cnVlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiB0cnVlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF0gYXMgY29uc3Qgc2F0aXNmaWVzIFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgY3VycmVudCB0aW1lem9uZSBzZXR0aW5nIG9mIHRoZSBQb3N0Z3JlU1FMIGRhdGFiYXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZXpvbmVRdWVyeSgpIHtcbiAgY29uc3QgYnVpbGRlciA9IGdldFBvc3RncmVTUUxCdWlsZGVyKCk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoYnVpbGRlci5zZWxlY3ROb0Zyb20oYnVpbGRlci5mbjxzdHJpbmc+KFwiY3VycmVudF9zZXR0aW5nXCIsIFtzcWwubGl0KFwidGltZXpvbmVcIildKS5hcyhcInRpbWV6b25lXCIpKSk7XG59XG5cbi8qKlxuICogRm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrVGltZXpvbmVRdWVyeSgpIHtcbiAgcmV0dXJuIFt7IHRpbWV6b25lOiBcIlVUQ1wiIH1dIGFzIGNvbnN0IHNhdGlzZmllcyBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGltZXpvbmVRdWVyeT47XG59XG5cbi8qKlxuICogV2UgZG9uJ3Qgd2FudCBQb3N0Z3JlU1FMIGludGVybmFscyBpbiBpbnRyb3NwZWN0aW9uIHJlc3VsdHMuIFRvIGJlIHVzZWQgaW4gYCRjYWxsYC5cbiAqL1xuZnVuY3Rpb24gZXhjbHVkZVN5c3RlbVRhYmxlczxcbiAgVCBleHRlbmRzIFNlbGVjdFF1ZXJ5QnVpbGRlcjxcbiAgICBEYXRhYmFzZSAmIHsgbnM6IERhdGFiYXNlW1wicGdfY2F0YWxvZy5wZ19uYW1lc3BhY2VcIl07IGNsczogRGF0YWJhc2VbXCJwZ19jYXRhbG9nLnBnX2NsYXNzXCJdIH0sXG4gICAgXCJuc1wiIHwgXCJjbHNcIixcbiAgICBvYmplY3RcbiAgPixcbj4ocWI6IFQpOiBUIHtcbiAgcmV0dXJuIHFiLndoZXJlKGBucy5uc3BuYW1lYCwgYCF+YCwgYF5wZ19gKS53aGVyZShgbnMubnNwbmFtZWAsIGAhPWAsIGBpbmZvcm1hdGlvbl9zY2hlbWFgKSBhcyBuZXZlcjtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcG9zdGdyZXMuZC50c1wiIC8+XG5pbXBvcnQgeyBzcWwgfSBmcm9tICcuLi9yYXctYnVpbGRlci9zcWwuanMnO1xuLyoqXG4gKiBBIHBvc3RncmVzIGhlbHBlciBmb3IgYWdncmVnYXRpbmcgYSBzdWJxdWVyeSAob3Igb3RoZXIgZXhwcmVzc2lvbikgaW50byBhIEpTT05CIGFycmF5LlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJzZWxlY3RcIiwgXCJOZXN0ZWQgYXJyYXlcIiwgMTEwKSAtLT5cbiAqXG4gKiBXaGlsZSBreXNlbHkgaXMgbm90IGFuIE9STSBhbmQgaXQgZG9lc24ndCBoYXZlIHRoZSBjb25jZXB0IG9mIHJlbGF0aW9ucywgd2UgZG8gcHJvdmlkZVxuICogaGVscGVycyBmb3IgZmV0Y2hpbmcgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cyBpbiBhIHNpbmdsZSBxdWVyeS4gSW4gdGhpcyBleGFtcGxlIHdlXG4gKiB1c2UgdGhlIGBqc29uQXJyYXlGcm9tYCBoZWxwZXIgdG8gZmV0Y2ggcGVyc29uJ3MgcGV0cyBhbG9uZyB3aXRoIHRoZSBwZXJzb24ncyBpZC5cbiAqXG4gKiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGhlbHBlcnMgdW5kZXIgdGhlIGBreXNlbHkvaGVscGVyc2AgZm9sZGVyLCBpbmNsdWRpbmdcbiAqIGBqc29uQXJyYXlGcm9tYCwgYXJlIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsgd2l0aCB0aGlyZCBwYXJ0eSBkaWFsZWN0cy4gSW4gb3JkZXIgZm9yXG4gKiB0aGVtIHRvIHdvcmssIHRoZSBkaWFsZWN0IG11c3QgYXV0b21hdGljYWxseSBwYXJzZSB0aGUgYGpzb25gIGRhdGEgdHlwZSBpbnRvXG4gKiBKYXZhU2NyaXB0IEpTT04gdmFsdWVzIGxpa2Ugb2JqZWN0cyBhbmQgYXJyYXlzLiBTb21lIGRpYWxlY3RzIG1pZ2h0IHNpbXBseSByZXR1cm5cbiAqIHRoZSBkYXRhIGFzIGEgSlNPTiBzdHJpbmcuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpbiBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmBcbiAqIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBqc29uQXJyYXlGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvcG9zdGdyZXMnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uQXJyYXlGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAub3JkZXJCeSgncGV0Lm5hbWUnKVxuICogICAgICkuYXMoJ3BldHMnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCAoXG4gKiAgIHNlbGVjdCBjb2FsZXNjZShqc29uX2FnZyhhZ2cpLCAnW10nKSBmcm9tIChcbiAqICAgICBzZWxlY3QgXCJwZXRcIi5cImlkXCIgYXMgXCJwZXRfaWRcIiwgXCJwZXRcIi5cIm5hbWVcIlxuICogICAgIGZyb20gXCJwZXRcIlxuICogICAgIHdoZXJlIFwicGV0XCIuXCJvd25lcl9pZFwiID0gXCJwZXJzb25cIi5cImlkXCJcbiAqICAgICBvcmRlciBieSBcInBldFwiLlwibmFtZVwiXG4gKiAgICkgYXMgYWdnXG4gKiApIGFzIFwicGV0c1wiXG4gKiBmcm9tIFwicGVyc29uXCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvbkFycmF5RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCBjb2FsZXNjZShqc29uX2FnZyhhZ2cpLCAnW10nKSBmcm9tICR7ZXhwcn0gYXMgYWdnKWA7XG59XG4vKipcbiAqIEEgcG9zdGdyZXMgaGVscGVyIGZvciB0dXJuaW5nIGEgc3VicXVlcnkgKG9yIG90aGVyIGV4cHJlc3Npb24pIGludG8gYSBKU09OIG9iamVjdC5cbiAqXG4gKiBUaGUgc3VicXVlcnkgbXVzdCBvbmx5IHJldHVybiBvbmUgcm93LlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJzZWxlY3RcIiwgXCJOZXN0ZWQgb2JqZWN0XCIsIDEyMCkgLS0+XG4gKlxuICogV2hpbGUga3lzZWx5IGlzIG5vdCBhbiBPUk0gYW5kIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgY29uY2VwdCBvZiByZWxhdGlvbnMsIHdlIGRvIHByb3ZpZGVcbiAqIGhlbHBlcnMgZm9yIGZldGNoaW5nIG5lc3RlZCBvYmplY3RzIGFuZCBhcnJheXMgaW4gYSBzaW5nbGUgcXVlcnkuIEluIHRoaXMgZXhhbXBsZSB3ZVxuICogdXNlIHRoZSBganNvbk9iamVjdEZyb21gIGhlbHBlciB0byBmZXRjaCBwZXJzb24ncyBmYXZvcml0ZSBwZXQgYWxvbmcgd2l0aCB0aGUgcGVyc29uJ3MgaWQuXG4gKlxuICogUGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBoZWxwZXJzIHVuZGVyIHRoZSBga3lzZWx5L2hlbHBlcnNgIGZvbGRlciwgaW5jbHVkaW5nXG4gKiBganNvbk9iamVjdEZyb21gLCBhcmUgbm90IGd1YXJhbnRlZWQgdG8gd29yayB3aXRoIHRoaXJkLXBhcnR5IGRpYWxlY3RzLiBJbiBvcmRlciBmb3JcbiAqIHRoZW0gdG8gd29yaywgdGhlIGRpYWxlY3QgbXVzdCBhdXRvbWF0aWNhbGx5IHBhcnNlIHRoZSBganNvbmAgZGF0YSB0eXBlIGludG9cbiAqIEphdmFTY3JpcHQgSlNPTiB2YWx1ZXMgbGlrZSBvYmplY3RzIGFuZCBhcnJheXMuIFNvbWUgZGlhbGVjdHMgbWlnaHQgc2ltcGx5IHJldHVyblxuICogdGhlIGRhdGEgYXMgYSBKU09OIHN0cmluZy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYFxuICogdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGpzb25PYmplY3RGcm9tIH0gZnJvbSAna3lzZWx5L2hlbHBlcnMvcG9zdGdyZXMnXG4gKlxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gKiAgICAgJ2lkJyxcbiAqICAgICBqc29uT2JqZWN0RnJvbShcbiAqICAgICAgIGViLnNlbGVjdEZyb20oJ3BldCcpXG4gKiAgICAgICAgIC5zZWxlY3QoWydwZXQuaWQgYXMgcGV0X2lkJywgJ3BldC5uYW1lJ10pXG4gKiAgICAgICAgIC53aGVyZVJlZigncGV0Lm93bmVyX2lkJywgJz0nLCAncGVyc29uLmlkJylcbiAqICAgICAgICAgLndoZXJlKCdwZXQuaXNfZmF2b3JpdGUnLCAnPScsIHRydWUpXG4gKiAgICAgKS5hcygnZmF2b3JpdGVfcGV0JylcbiAqICAgXSlcbiAqICAgLmV4ZWN1dGUoKVxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwgKFxuICogICBzZWxlY3QgdG9fanNvbihvYmopIGZyb20gKFxuICogICAgIHNlbGVjdCBcInBldFwiLlwiaWRcIiBhcyBcInBldF9pZFwiLCBcInBldFwiLlwibmFtZVwiXG4gKiAgICAgZnJvbSBcInBldFwiXG4gKiAgICAgd2hlcmUgXCJwZXRcIi5cIm93bmVyX2lkXCIgPSBcInBlcnNvblwiLlwiaWRcIlxuICogICAgIGFuZCBcInBldFwiLlwiaXNfZmF2b3JpdGVcIiA9ICQxXG4gKiAgICkgYXMgb2JqXG4gKiApIGFzIFwiZmF2b3JpdGVfcGV0XCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uT2JqZWN0RnJvbShleHByKSB7XG4gICAgcmV0dXJuIHNxbCBgKHNlbGVjdCB0b19qc29uKG9iaikgZnJvbSAke2V4cHJ9IGFzIG9iailgO1xufVxuLyoqXG4gKiBUaGUgUG9zdGdyZVNRTCBganNvbl9idWlsZF9vYmplY3RgIGZ1bmN0aW9uLlxuICpcbiAqIE5PVEU6IFRoaXMgaGVscGVyIGlzIG9ubHkgZ3VhcmFudGVlZCB0byBmdWxseSB3b3JrIHdpdGggdGhlIGJ1aWx0LWluIGBQb3N0Z3Jlc0RpYWxlY3RgLlxuICogV2hpbGUgdGhlIHByb2R1Y2VkIFNRTCBpcyBjb21wYXRpYmxlIHdpdGggYWxsIFBvc3RncmVTUUwgZGF0YWJhc2VzLCBzb21lIHRoaXJkLXBhcnR5IGRpYWxlY3RzXG4gKiBtYXkgbm90IHBhcnNlIHRoZSBuZXN0ZWQgSlNPTiBpbnRvIG9iamVjdHMuIEluIHRoZXNlIGNhc2VzIHlvdSBjYW4gdXNlIHRoZSBidWlsdCBpblxuICogYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gIHRvIHBhcnNlIHRoZSByZXN1bHRzLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgeyBqc29uQnVpbGRPYmplY3QgfSBmcm9tICdreXNlbHkvaGVscGVycy9wb3N0Z3JlcydcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25CdWlsZE9iamVjdCh7XG4gKiAgICAgICBmaXJzdDogZWIucmVmKCdmaXJzdF9uYW1lJyksXG4gKiAgICAgICBsYXN0OiBlYi5yZWYoJ2xhc3RfbmFtZScpLFxuICogICAgICAgZnVsbDogc3FsPHN0cmluZz5gZmlyc3RfbmFtZSB8fFx1MDBBMCcgJyB8fCBsYXN0X25hbWVgXG4gKiAgICAgfSkuYXMoJ25hbWUnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdPy5pZFxuICogcmVzdWx0WzBdPy5uYW1lLmZpcnN0XG4gKiByZXN1bHRbMF0/Lm5hbWUubGFzdFxuICogcmVzdWx0WzBdPy5uYW1lLmZ1bGxcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIGpzb25fYnVpbGRfb2JqZWN0KFxuICogICAnZmlyc3QnLCBmaXJzdF9uYW1lLFxuICogICAnbGFzdCcsIGxhc3RfbmFtZSxcbiAqICAgJ2Z1bGwnLCBmaXJzdF9uYW1lIHx8ICcgJyB8fCBsYXN0X25hbWVcbiAqICkgYXMgXCJuYW1lXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQnVpbGRPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIHNxbCBganNvbl9idWlsZF9vYmplY3QoJHtzcWwuam9pbihPYmplY3Qua2V5cyhvYmopLmZsYXRNYXAoKGspID0+IFtzcWwubGl0KGspLCBvYmpba11dKSl9KWA7XG59XG4vKipcbiAqIFRoZSBQb3N0Z3JlU1FMIGBtZXJnZV9hY3Rpb25gIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaW4gYSBgcmV0dXJuaW5nYCBjbGF1c2UgdG8gZ2V0IHRoZSBhY3Rpb24gdGhhdCB3YXNcbiAqIHBlcmZvcm1lZCBpbiBhIGBtZXJnZUludG9gIHF1ZXJ5LiBUaGUgZnVuY3Rpb24gcmV0dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZ1xuICogc3RyaW5nczogYCdJTlNFUlQnYCwgYCdVUERBVEUnYCwgb3IgYCdERUxFVEUnYC5cbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbWVyZ2VBY3Rpb24gfSBmcm9tICdreXNlbHkvaGVscGVycy9wb3N0Z3JlcydcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAubWVyZ2VJbnRvKCdwZXJzb24gYXMgcCcpXG4gKiAgIC51c2luZygncGVyc29uX2JhY2t1cCBhcyBwYicsICdwLmlkJywgJ3BiLmlkJylcbiAqICAgLndoZW5NYXRjaGVkKClcbiAqICAgLnRoZW5VcGRhdGVTZXQoKHsgcmVmIH0pID0+ICh7XG4gKiAgICAgZmlyc3RfbmFtZTogcmVmKCdwYi5maXJzdF9uYW1lJyksXG4gKiAgICAgdXBkYXRlZF9hdDogcmVmKCdwYi51cGRhdGVkX2F0JykuJGNhc3RUbzxzdHJpbmcgfCBudWxsPigpLFxuICogICB9KSlcbiAqICAgLndoZW5Ob3RNYXRjaGVkKClcbiAqICAgLnRoZW5JbnNlcnRWYWx1ZXMoKHsgcmVmfSkgPT4gKHtcbiAqICAgICBpZDogcmVmKCdwYi5pZCcpLFxuICogICAgIGZpcnN0X25hbWU6IHJlZigncGIuZmlyc3RfbmFtZScpLFxuICogICAgIGNyZWF0ZWRfYXQ6IHJlZigncGIudXBkYXRlZF9hdCcpLFxuICogICAgIHVwZGF0ZWRfYXQ6IHJlZigncGIudXBkYXRlZF9hdCcpLiRjYXN0VG88c3RyaW5nIHwgbnVsbD4oKSxcbiAqICAgfSkpXG4gKiAgIC5yZXR1cm5pbmcoW21lcmdlQWN0aW9uKCkuYXMoJ2FjdGlvbicpLCAncC5pZCcsICdwLnVwZGF0ZWRfYXQnXSlcbiAqICAgLmV4ZWN1dGUoKVxuICpcbiAqIHJlc3VsdFswXS5hY3Rpb25cbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIG1lcmdlIGludG8gXCJwZXJzb25cIiBhcyBcInBcIlxuICogdXNpbmcgXCJwZXJzb25fYmFja3VwXCIgYXMgXCJwYlwiIG9uIFwicFwiLlwiaWRcIiA9IFwicGJcIi5cImlkXCJcbiAqIHdoZW4gbWF0Y2hlZCB0aGVuIHVwZGF0ZSBzZXRcbiAqICAgXCJmaXJzdF9uYW1lXCIgPSBcInBiXCIuXCJmaXJzdF9uYW1lXCIsXG4gKiAgIFwidXBkYXRlZF9hdFwiID0gXCJwYlwiLlwidXBkYXRlZF9hdFwiOjp0ZXh0XG4gKiB3aGVuIG5vdCBtYXRjaGVkIHRoZW4gaW5zZXJ0IHZhbHVlcyAoXCJpZFwiLCBcImZpcnN0X25hbWVcIiwgXCJjcmVhdGVkX2F0XCIsIFwidXBkYXRlZF9hdFwiKVxuICogdmFsdWVzIChcInBiXCIuXCJpZFwiLCBcInBiXCIuXCJmaXJzdF9uYW1lXCIsIFwicGJcIi5cInVwZGF0ZWRfYXRcIiwgXCJwYlwiLlwidXBkYXRlZF9hdFwiKVxuICogcmV0dXJuaW5nIG1lcmdlX2FjdGlvbigpIGFzIFwiYWN0aW9uXCIsIFwicFwiLlwiaWRcIiwgXCJwXCIuXCJ1cGRhdGVkX2F0XCJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBY3Rpb24oKSB7XG4gICAgcmV0dXJuIHNxbCBgbWVyZ2VfYWN0aW9uKClgO1xufVxuIiwgImltcG9ydCB7IGFzUXVlcnksIHR5cGUgUXVlcnkgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBJRFF1ZXJ5KCk6IFF1ZXJ5PHsgcGlkOiB1bmtub3duIH0+IHtcbiAgcmV0dXJuIGFzUXVlcnkoXCJzZWxlY3QgcGdfYmFja2VuZF9waWQoKSBhcyBwaWRcIik7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBmdW5jdGlvbiBnZXRDYW5jZWxRdWVyeShwaWQ6IHt9KTogUXVlcnk8dW5rbm93bj4ge1xuICByZXR1cm4ge1xuICAgIHBhcmFtZXRlcnM6IFtwaWRdLFxuICAgIHNxbDogXCJzZWxlY3QgcGdfY2FuY2VsX2JhY2tlbmQoJDEpO1wiLFxuICB9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7d0lBQUFBLElDQUFDLElDQUFDLElBbVVPLFNBQVNDLEVB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LFNBQUFDLEVBQ0EsT0FBQU4sRUFDQSxNQUFPRCxFQUNQLFNBQVVHLEVBQU8sbUJBQ2pCLFFBQVNBLEVBQU8sa0JBQ2hCLFNBQVVBLEVBQU8sa0JBQ25CLENBQ0YsQ0FDRixFQUNBLENBQUMsQ0FDSCxFQUVBLE9BQUlMLEVBQVFHLENBQU0sSUFBTSxTQUN0QkgsRUFBUUcsQ0FBTSxFQUFJLENBQ2hCLEtBQU1BLEVBQ04sT0FBUSxDQUFDLENBQ1gsR0FHRkgsRUFBUUcsQ0FBTSxFQUFFLE9BQU9ELENBQVMsRUFBSSxDQUNsQyxRQUFTRSxFQUNULEtBQU1GLEVBQ04sT0FBQUMsQ0FDRixFQUVPSixDQUNULEVBQ0EsQ0FDRSxRQUFTLENBQUUsT0FBUSxDQUFFLE9BQVEsQ0FBQyxFQUFHLEtBQU0sUUFBUyxDQUFFLEVBQ2xELFNBQUFiLEVBQ0EsZ0JBQUEyQixFQUNBLE1BQUF2QixDQUNGLENBQ0YsQ0FDRixDQUVBLElBQU11QixFQUFrQixDQUN0QixJQUNBLEtBQ0EsSUFDQSxLQUNBLElBQ0EsS0FDQSxLQUNBLFNBQ0EsT0FDQSxXQUNBLFFBQ0EsV0FDRixFQUtPLFNBQVNDLElBQWlCLENBQy9CLElBQU1oQyxFQUFTaUMsRUFBZ0IsRUFDekIsQ0FBQyxDQUFFLFNBQUE3QixDQUFTLENBQUMsRUFBSThCLEVBQWtCLEVBR3pDLE9BQU83QixFQUFvQixDQUFFLE9BQUFMLEVBQVEsU0FBQUksRUFBVSxNQUZqQyxDQUFFLFdBQVksQ0FBQyxFQUFHLElBQUssVUFBVyxDQUVLLENBQUMsQ0FjeEQsQ092T0ErQixJQUVPLFNBQVNDLElBQXVDLENBQ3JELE9BQU9DLEVBQVEsZ0NBQWdDLENBQ2pELENBR08sU0FBU0MsR0FBZUMsRUFBeUIsQ0FDdEQsTUFBTyxDQUNMLFdBQVksQ0FBQ0EsQ0FBRyxFQUNoQixJQUFLLCtCQUNQLENBQ0YiLAogICJuYW1lcyI6IFsiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiY3JlYXRlQWRhcHRlckVycm9yIiwgImFyZ3MiLCAiZXJyb3IiLCAicXVlcnkiLCAiYWRhcHRlckVycm9yIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJnZXRQb3N0Z3JlU1FMQnVpbGRlciIsICJyZXF1aXJlbWVudHMiLCAiZ2V0QnVpbGRlciIsICJQb3N0Z3Jlc0FkYXB0ZXIiLCAiUG9zdGdyZXNRdWVyeUNvbXBpbGVyIiwgImdldEluc2VydFF1ZXJ5IiwgImRldGFpbHMiLCAicmVxdWlyZW1lbnRzIiwgInRhYmxlIiwgInJvd3MiLCAidGFibGVOYW1lIiwgInNjaGVtYSIsICJjb2x1bW5zIiwgImJ1aWxkZXIiLCAiZ2V0UG9zdGdyZVNRTEJ1aWxkZXIiLCAiY29scyIsICJjb21waWxlIiwgImFwcGx5VHJhbnNmb3JtYXRpb25zIiwgImdldFNlbGVjdFF1ZXJ5IiwgInBhZ2VJbmRleCIsICJwYWdlU2l6ZSIsICJzb3J0T3JkZXIiLCAiZmlsdGVyIiwgImZpbHRlckV4cHJlc3Npb24iLCAiZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbiIsICJjb3VudFF1ZXJ5IiwgImViIiwgInNxbCIsICJxYiIsICJpdGVtIiwgImJ1aWxkQmFzZUV4cHJlc3Npb25CdWlsZGVyIiwgInNwZWMiLCAiY29sdW1uIiwgIm9wZXJhdG9yIiwgInZhbHVlIiwgImNvbHVtbk1ldGEiLCAidHJhbnNmb3JtVmFsdWUiLCAiZmlsdGVycyIsICJvckdyb3Vwc09mQW5kQnVpbGRlcnMiLCAiY3VycmVudEFuZEdyb3VwQnVpbGRlcnMiLCAiaSIsICJhbmRFeHByZXNzaW9ucyIsICJncm91cCIsICJtb2NrU2VsZWN0UXVlcnkiLCAiZ2V0VXBkYXRlUXVlcnkiLCAiY2hhbmdlcyIsICJyb3ciLCAiYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMiLCAiZ2V0RGVsZXRlUXVlcnkiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAianNvbkFycmF5RnJvbSIsICJleHByIiwgInNxbCIsICJSRUdVTEFSX1RBQkxFX0tJTkQiLCAiVklFV19UQUJMRV9LSU5EIiwgIlRBQkxFX0tJTkRTIiwgImdldFRhYmxlc1F1ZXJ5IiwgInJlcXVpcmVtZW50cyIsICJjb21waWxlIiwgImdldFBvc3RncmVTUUxCdWlsZGVyIiwgImV4Y2x1ZGVTeXN0ZW1UYWJsZXMiLCAiZWIiLCAianNvbkFycmF5RnJvbSIsICJqYiIsICJvbl9lYiIsICJzcWwiLCAibW9ja1RhYmxlc1F1ZXJ5IiwgImdldFRpbWV6b25lUXVlcnkiLCAiYnVpbGRlciIsICJtb2NrVGltZXpvbmVRdWVyeSIsICJxYiIsICJjcmVhdGVQb3N0Z3Jlc0FkYXB0ZXIiLCAicmVxdWlyZW1lbnRzIiwgImV4ZWN1dG9yIiwgIm90aGVyUmVxdWlyZW1lbnRzIiwgIm9wdGlvbnMiLCAidGFibGVzUXVlcnkiLCAiZ2V0VGFibGVzUXVlcnkiLCAidGltZXpvbmVRdWVyeSIsICJnZXRUaW1lem9uZVF1ZXJ5IiwgInRhYmxlc0Vycm9yIiwgInRhYmxlcyIsICJ0aW1lem9uZUVycm9yIiwgInRpbWV6b25lcyIsICJjcmVhdGVBZGFwdGVyRXJyb3IiLCAidGltZXpvbmUiLCAiY3JlYXRlSW50cm9zcGVjdGlvbiIsICJlcnJvciIsICJkZXRhaWxzIiwgInF1ZXJ5IiwgImdldFNlbGVjdFF1ZXJ5IiwgInJlc3VsdHMiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAicm93cyIsICJnZXRVcGRhdGVRdWVyeSIsICJyb3ciLCAiZ2V0RGVsZXRlUXVlcnkiLCAiYXJncyIsICJyZXN1bHQiLCAic2NoZW1hcyIsICJjb2x1bW5zIiwgInRhYmxlTmFtZSIsICJzY2hlbWEiLCAiY29sdW1uc1JlY29yZCIsICJjb2x1bW4iLCAiZGF0YXR5cGUiLCAiZGF0YXR5cGVfc2NoZW1hIiwgImNvbHVtbk5hbWUiLCAibnVsbGFibGUiLCAiaXNBcnJheSIsICJzdHJpcHBlZERhdGFUeXBlIiwgIlBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSIsICJmaWx0ZXJPcGVyYXRvcnMiLCAibW9ja0ludHJvc3BlY3QiLCAibW9ja1RhYmxlc1F1ZXJ5IiwgIm1vY2tUaW1lem9uZVF1ZXJ5IiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImdldFBJRFF1ZXJ5IiwgImFzUXVlcnkiLCAiZ2V0Q2FuY2VsUXVlcnkiLCAicGlkIl0KfQo=
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { Executor, ExecuteOptions } from '
|
|
2
|
-
import { Q as Query, E as Either, a as QueryResult } from '../../query-DTHJwENg.cjs';
|
|
1
|
+
import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-CkpN852N.cjs';
|
|
3
2
|
import 'kysely';
|
|
4
3
|
|
|
5
4
|
declare function deserializeRawResult(response: RawResponse, valueDeserializerFn?: (value: unknown, type: QueryIntrospectionBuiltinType, column: string) => unknown): DeserializedResponse;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { Executor, ExecuteOptions } from '
|
|
2
|
-
import { Q as Query, E as Either, a as QueryResult } from '../../query-DTHJwENg.js';
|
|
1
|
+
import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-CkpN852N.js';
|
|
3
2
|
import 'kysely';
|
|
4
3
|
|
|
5
4
|
declare function deserializeRawResult(response: RawResponse, valueDeserializerFn?: (value: unknown, type: QueryIntrospectionBuiltinType, column: string) => unknown): DeserializedResponse;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { Executor, ExecuteOptions } from '
|
|
2
|
-
import { Q as Query, E as Either, a as QueryResult } from '../../query-DTHJwENg.cjs';
|
|
1
|
+
import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-CkpN852N.cjs';
|
|
3
2
|
import 'kysely';
|
|
4
3
|
|
|
5
4
|
interface StudioBFFClientProps {
|
package/dist/data/bff/index.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { Executor, ExecuteOptions } from '
|
|
2
|
-
import { Q as Query, E as Either, a as QueryResult } from '../../query-DTHJwENg.js';
|
|
1
|
+
import { E as Executor, Q as Query, a as ExecuteOptions, b as Either, c as QueryResult } from '../../index-CkpN852N.js';
|
|
3
2
|
import 'kysely';
|
|
4
3
|
|
|
5
4
|
interface StudioBFFClientProps {
|
package/dist/data/index.d.cts
CHANGED
|
@@ -1,16 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export { A as Adapter, h as AdapterBaseOptions, f as AdapterDeleteDetails, m as AdapterDeleteOptions, w as AdapterDeleteResult, b as AdapterError, c as AdapterInsertDetails, k as AdapterInsertOptions, u as AdapterInsertResult, i as AdapterIntrospectOptions, n as AdapterIntrospectResult, d as AdapterQueryDetails, j as AdapterQueryOptions, t as AdapterQueryResult, e as AdapterUpdateDetails, l as AdapterUpdateOptions, v as AdapterUpdateResult, y as BigIntString, C as Column, p as ColumnFilter, D as DataType, o as DataTypeGroup, q as FilterGroup, F as FilterOperator, N as NumericString, S as Schema, s as SortDirection, r as SortOrderItem, T as Table, g as applyInferredRowFilters, x as createAdapterError } from '../query-DTHJwENg.cjs';
|
|
1
|
+
export { H as AbortError, A as Adapter, k as AdapterBaseOptions, i as AdapterDeleteDetails, p as AdapterDeleteOptions, z as AdapterDeleteResult, d as AdapterError, f as AdapterInsertDetails, n as AdapterInsertOptions, x as AdapterInsertResult, l as AdapterIntrospectOptions, q as AdapterIntrospectResult, g as AdapterQueryDetails, m as AdapterQueryOptions, w as AdapterQueryResult, e as AdapterRequirements, h as AdapterUpdateDetails, o as AdapterUpdateOptions, y as AdapterUpdateResult, J as BigIntString, C as Column, s as ColumnFilter, D as DataType, r as DataTypeGroup, b as Either, a as ExecuteOptions, E as Executor, t as FilterGroup, F as FilterOperator, N as NumericString, Q as Query, c as QueryResult, S as Schema, v as SortDirection, u as SortOrderItem, T as Table, j as applyInferredRowFilters, G as createAdapterError, I as getAbortResult } from '../index-CkpN852N.cjs';
|
|
3
2
|
import 'kysely';
|
|
4
|
-
|
|
5
|
-
interface Executor {
|
|
6
|
-
execute<Q extends Query>(query: Q, options?: ExecuteOptions): Promise<Either<Error, QueryResult<Q>>>;
|
|
7
|
-
}
|
|
8
|
-
interface ExecuteOptions {
|
|
9
|
-
abortSignal?: AbortSignal;
|
|
10
|
-
}
|
|
11
|
-
declare class AbortError extends Error {
|
|
12
|
-
constructor();
|
|
13
|
-
}
|
|
14
|
-
declare function getAbortResult(): [AbortError];
|
|
15
|
-
|
|
16
|
-
export { AbortError, Either, type ExecuteOptions, type Executor, Query, QueryResult, getAbortResult };
|
package/dist/data/index.d.ts
CHANGED
|
@@ -1,16 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export { A as Adapter, h as AdapterBaseOptions, f as AdapterDeleteDetails, m as AdapterDeleteOptions, w as AdapterDeleteResult, b as AdapterError, c as AdapterInsertDetails, k as AdapterInsertOptions, u as AdapterInsertResult, i as AdapterIntrospectOptions, n as AdapterIntrospectResult, d as AdapterQueryDetails, j as AdapterQueryOptions, t as AdapterQueryResult, e as AdapterUpdateDetails, l as AdapterUpdateOptions, v as AdapterUpdateResult, y as BigIntString, C as Column, p as ColumnFilter, D as DataType, o as DataTypeGroup, q as FilterGroup, F as FilterOperator, N as NumericString, S as Schema, s as SortDirection, r as SortOrderItem, T as Table, g as applyInferredRowFilters, x as createAdapterError } from '../query-DTHJwENg.js';
|
|
1
|
+
export { H as AbortError, A as Adapter, k as AdapterBaseOptions, i as AdapterDeleteDetails, p as AdapterDeleteOptions, z as AdapterDeleteResult, d as AdapterError, f as AdapterInsertDetails, n as AdapterInsertOptions, x as AdapterInsertResult, l as AdapterIntrospectOptions, q as AdapterIntrospectResult, g as AdapterQueryDetails, m as AdapterQueryOptions, w as AdapterQueryResult, e as AdapterRequirements, h as AdapterUpdateDetails, o as AdapterUpdateOptions, y as AdapterUpdateResult, J as BigIntString, C as Column, s as ColumnFilter, D as DataType, r as DataTypeGroup, b as Either, a as ExecuteOptions, E as Executor, t as FilterGroup, F as FilterOperator, N as NumericString, Q as Query, c as QueryResult, S as Schema, v as SortDirection, u as SortOrderItem, T as Table, j as applyInferredRowFilters, G as createAdapterError, I as getAbortResult } from '../index-CkpN852N.js';
|
|
3
2
|
import 'kysely';
|
|
4
|
-
|
|
5
|
-
interface Executor {
|
|
6
|
-
execute<Q extends Query>(query: Q, options?: ExecuteOptions): Promise<Either<Error, QueryResult<Q>>>;
|
|
7
|
-
}
|
|
8
|
-
interface ExecuteOptions {
|
|
9
|
-
abortSignal?: AbortSignal;
|
|
10
|
-
}
|
|
11
|
-
declare class AbortError extends Error {
|
|
12
|
-
constructor();
|
|
13
|
-
}
|
|
14
|
-
declare function getAbortResult(): [AbortError];
|
|
15
|
-
|
|
16
|
-
export { AbortError, Either, type ExecuteOptions, type Executor, Query, QueryResult, getAbortResult };
|