@prisma/studio-core 0.1.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-BUOKRYKO.js +10 -0
- package/dist/chunk-FRW62KTF.js +10 -0
- package/dist/chunk-P5LRZ6C2.js +10 -0
- package/dist/chunk-T2BEVNT5.js +10 -0
- package/dist/data/accelerate/index.cjs +2 -1
- package/dist/data/accelerate/index.d.cts +10 -2
- package/dist/data/accelerate/index.d.ts +10 -2
- package/dist/data/accelerate/index.js +10 -1
- package/dist/data/bff/index.cjs +2 -1
- package/dist/data/bff/index.d.cts +10 -3
- package/dist/data/bff/index.d.ts +10 -3
- package/dist/data/bff/index.js +10 -1
- package/dist/data/index.cjs +2 -1
- package/dist/data/index.d.cts +11 -2
- package/dist/data/index.d.ts +11 -2
- package/dist/data/index.js +10 -1
- package/dist/data/pglite/index.cjs +2 -1
- package/dist/data/pglite/index.d.cts +22 -5
- package/dist/data/pglite/index.d.ts +22 -5
- package/dist/data/pglite/index.js +10 -1
- package/dist/data/postgres-core/index.cjs +2 -1
- package/dist/data/postgres-core/index.d.cts +103 -18
- package/dist/data/postgres-core/index.d.ts +103 -18
- package/dist/data/postgres-core/index.js +10 -1
- package/dist/metafile-cjs.json +1 -0
- package/dist/metafile-esm.json +1 -0
- package/dist/query-Q-ZKX_Vr.d.cts +288 -0
- package/dist/query-Q-ZKX_Vr.d.ts +288 -0
- package/dist/ui/index.cjs +263 -1367
- package/dist/ui/index.css +1327 -680
- package/dist/ui/index.d.cts +69 -3
- package/dist/ui/index.d.ts +69 -3
- package/dist/ui/index.js +274 -41
- package/package.json +38 -31
- package/dist/CPIOZS5X-NALOZFPD.js +0 -1
- package/dist/OKF6E45R-6KC3BLVB.js +0 -1
- package/dist/adapter-Co8KY8Hi.d.cts +0 -166
- package/dist/adapter-Co8KY8Hi.d.ts +0 -166
- package/dist/chunk-2FW6TKD6.js +0 -1
- package/dist/chunk-5MNS4IJC.js +0 -1332
- package/dist/chunk-N2MLAUEV.js +0 -1
- package/dist/chunk-RGBMDID6.js +0 -1
- package/dist/chunk-ZCFLMQMM.js +0 -1
- package/dist/index-CnVNNyod.d.cts +0 -35
- package/dist/index-M4EjPWNJ.d.ts +0 -35
|
@@ -1 +1,2 @@
|
|
|
1
|
-
"use strict";var jr=Object.defineProperty;var Vo=Object.getOwnPropertyDescriptor;var Uo=Object.getOwnPropertyNames;var Jo=Object.prototype.hasOwnProperty;var $o=(t,e)=>{for(var i in e)jr(t,i,{get:e[i],enumerable:!0})},Ko=(t,e,i,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Uo(e))!Jo.call(t,s)&&s!==i&&jr(t,s,{get:()=>e[s],enumerable:!(o=Vo(e,s))||o.enumerable});return t};var jo=t=>Ko(jr({},"__esModule",{value:!0}),t);var Bn={};$o(Bn,{createPGLiteAdapter:()=>Dn,createPGLiteExecutor:()=>Mo});module.exports=jo(Bn);var Bi={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:"string"}};function J(t){return typeof t>"u"||t===void 0}function W(t){return typeof t=="string"}function ve(t){return typeof t=="number"}function Le(t){return typeof t=="boolean"}function je(t){return t===null}function Qi(t){return t instanceof Date}function Ge(t){return typeof t=="bigint"}function C(t){return typeof t=="function"}function F(t){return typeof t=="object"&&t!==null}function r(t){return Object.freeze(t)}function xt(t){return B(t)?t:[t]}function B(t){return Array.isArray(t)}function se(t){return t}var f=r({is(t){return t.kind==="AlterTableNode"},create(t){return r({kind:"AlterTableNode",table:t})},cloneWithTableProps(t,e){return r({...t,...e})},cloneWithColumnAlteration(t,e){return r({...t,columnAlterations:t.columnAlterations?[...t.columnAlterations,e]:[e]})}});var c=r({is(t){return t.kind==="IdentifierNode"},create(t){return r({kind:"IdentifierNode",name:t})}});var Z=r({is(t){return t.kind==="CreateIndexNode"},create(t){return r({kind:"CreateIndexNode",name:c.create(t)})},cloneWith(t,e){return r({...t,...e})},cloneWithColumns(t,e){return r({...t,columns:[...t.columns||[],...e]})}});var Zt=r({is(t){return t.kind==="CreateSchemaNode"},create(t,e){return r({kind:"CreateSchemaNode",schema:c.create(t),...e})},cloneWith(t,e){return r({...t,...e})}});var Li=["preserve rows","delete rows","drop"],Q=r({is(t){return t.kind==="CreateTableNode"},create(t){return r({kind:"CreateTableNode",table:t,columns:r([])})},cloneWithColumn(t,e){return r({...t,columns:r([...t.columns,e])})},cloneWithConstraint(t,e){return r({...t,constraints:t.constraints?r([...t.constraints,e]):r([e])})},cloneWithFrontModifier(t,e){return r({...t,frontModifiers:t.frontModifiers?r([...t.frontModifiers,e]):r([e])})},cloneWithEndModifier(t,e){return r({...t,endModifiers:t.endModifiers?r([...t.endModifiers,e]):r([e])})},cloneWith(t,e){return r({...t,...e})}});var M=r({is(t){return t.kind==="SchemableIdentifierNode"},create(t){return r({kind:"SchemableIdentifierNode",identifier:c.create(t)})},createWithSchema(t,e){return r({kind:"SchemableIdentifierNode",schema:c.create(t),identifier:c.create(e)})}});var Ce=r({is(t){return t.kind==="DropIndexNode"},create(t,e){return r({kind:"DropIndexNode",name:M.create(t),...e})},cloneWith(t,e){return r({...t,...e})}});var gt=r({is(t){return t.kind==="DropSchemaNode"},create(t,e){return r({kind:"DropSchemaNode",schema:c.create(t),...e})},cloneWith(t,e){return r({...t,...e})}});var Ot=r({is(t){return t.kind==="DropTableNode"},create(t,e){return r({kind:"DropTableNode",table:t,...e})},cloneWith(t,e){return r({...t,...e})}});var L=r({is(t){return t.kind==="AliasNode"},create(t,e){return r({kind:"AliasNode",node:t,alias:e})}});var H=r({is(t){return t.kind==="TableNode"},create(t){return r({kind:"TableNode",table:M.create(t)})},createWithSchema(t,e){return r({kind:"TableNode",table:M.createWithSchema(t,e)})}});function v(t){return F(t)&&C(t.toOperationNode)}function Pi(t){return F(t)&&"expressionType"in t&&v(t)}function Fi(t){return F(t)&&"expression"in t&&W(t.alias)&&v(t)}var ae=r({is(t){return t.kind==="SelectModifierNode"},create(t,e){return r({kind:"SelectModifierNode",modifier:t,of:e})},createWithExpression(t){return r({kind:"SelectModifierNode",rawModifier:t})}});var V=r({is(t){return t.kind==="AndNode"},create(t,e){return r({kind:"AndNode",left:t,right:e})}});var _=r({is(t){return t.kind==="OrNode"},create(t,e){return r({kind:"OrNode",left:t,right:e})}});var _t=r({is(t){return t.kind==="OnNode"},create(t){return r({kind:"OnNode",on:t})},cloneWithOperation(t,e,i){return r({...t,on:e==="And"?V.create(t.on,i):_.create(t.on,i)})}});var We=r({is(t){return t.kind==="JoinNode"},create(t,e){return r({kind:"JoinNode",joinType:t,table:e,on:void 0})},createWithOn(t,e,i){return r({kind:"JoinNode",joinType:t,table:e,on:_t.create(i)})},cloneWithOn(t,e){return r({...t,on:t.on?_t.cloneWithOperation(t.on,"And",e):_t.create(e)})}});var Te=r({is(t){return t.kind==="BinaryOperationNode"},create(t,e,i){return r({kind:"BinaryOperationNode",leftOperand:t,operator:e,rightOperand:i})}});var Go=["=","==","!=","<>",">",">=","<","<=","in","not in","is","is not","like","not like","match","ilike","not ilike","@>","<@","^@","&&","?","?&","?|","!<","!>","<=>","!~","~","~*","!~*","@@","@@@","!!","<->","regexp","is distinct from","is not distinct from"],Ho=["+","-","*","/","%","^","&","|","#","<<",">>"],zi=["->","->>"],Yo=[...Go,...Ho,"&&","||"],Xo=["exists","not exists"],Zo=["not","-",...Xo],Mi=[...Yo,...zi,...Zo,"between","between symmetric"],$=r({is(t){return t.kind==="OperatorNode"},create(t){return r({kind:"OperatorNode",operator:t})}});function Gr(t){return W(t)&&zi.includes(t)}var l=r({is(t){return t.kind==="ColumnNode"},create(t){return r({kind:"ColumnNode",column:c.create(t)})}});var He=r({is(t){return t.kind==="SelectAllNode"},create(){return r({kind:"SelectAllNode"})}});var Ye=r({is(t){return t.kind==="ReferenceNode"},create(t,e){return r({kind:"ReferenceNode",table:e,column:t})},createSelectAll(t){return r({kind:"ReferenceNode",table:t,column:He.create()})}});var er=class{#e;get dynamicReference(){return this.#e}get refType(){}constructor(e){this.#e=e}toOperationNode(){return Hr(this.#e)}};function tr(t){return F(t)&&v(t)&&W(t.dynamicReference)}var rr=r({is(t){return t.kind==="OrderByItemNode"},create(t,e){return r({kind:"OrderByItemNode",orderBy:t,direction:e})}});var T=r({is(t){return t.kind==="RawNode"},create(t,e){return r({kind:"RawNode",sqlFragments:r(t),parameters:r(e)})},createWithSql(t){return T.create([t],[])},createWithChild(t){return T.create(["",""],[t])},createWithChildren(t){return T.create(new Array(t.length+1).fill(""),t)}});function Xr(t){return t==="asc"||t==="desc"}function qe(t){if(t.length===2)return[Yr(t[0],t[1])];if(t.length===1){let[e]=t;return Array.isArray(e)?e.map(i=>Yr(i)):[Yr(e)]}throw new Error(`Invalid number of arguments at order by! expected 1-2, received ${t.length}`)}function Yr(t,e){let i=_o(t);if(rr.is(i)){if(e)throw new Error("Cannot specify direction twice!");return i}return rr.create(i,Vi(e))}function _o(t){if(Ne(t))return U(t);if(tr(t))return t.toOperationNode();let[e,i]=t.split(" ");if(i){if(!Xr(i))throw new Error(`Invalid order by direction: ${i}`);return rr.create(K(e),Vi(i))}return K(t)}function Vi(t){if(t)return t==="asc"||t==="desc"?T.createWithSql(t):t.toOperationNode()}var Xe=r({is(t){return t.kind==="JSONReferenceNode"},create(t,e){return r({kind:"JSONReferenceNode",reference:t,traversal:e})},cloneWithTraversal(t,e){return r({...t,traversal:e})}});var ir=r({is(t){return t.kind==="JSONOperatorChainNode"},create(t){return r({kind:"JSONOperatorChainNode",operator:t,values:r([])})},cloneWithValue(t,e){return r({...t,values:r([...t.values,e])})}});var Ie=r({is(t){return t.kind==="JSONPathNode"},create(t){return r({kind:"JSONPathNode",inOperator:t,pathLegs:r([])})},cloneWithLeg(t,e){return r({...t,pathLegs:r([...t.pathLegs,e])})}});function Hr(t){return W(t)?K(t):t.toOperationNode()}function ye(t){return B(t)?t.map(e=>E(e)):[E(t)]}function E(t){return Ne(t)?U(t):Hr(t)}function Ui(t,e){let i=K(t);if(Gr(e))return Xe.create(i,ir.create($.create(e)));let o=e.slice(0,-1);if(Gr(o))return Xe.create(i,Ie.create($.create(o)));throw new Error(`Invalid JSON operator: ${e}`)}function K(t){let e=".";if(!t.includes(e))return Ye.create(l.create(t));let i=t.split(e).map(_r);if(i.length===3)return en(i);if(i.length===2)return tn(i);throw new Error(`invalid column reference ${t}`)}function Ji(t){let e=" as ";if(t.includes(e)){let[i,o]=t.split(e).map(_r);return L.create(K(i),c.create(o))}else return K(t)}function Zr(t){return l.create(t)}function Ze(t){let e=" ";if(t.includes(e)){let[i,o]=t.split(e).map(_r);if(!Xr(o))throw new Error(`invalid order direction "${o}" next to "${i}"`);return qe([i,o])[0]}else return Zr(t)}function en(t){let[e,i,o]=t;return Ye.create(l.create(o),H.createWithSchema(e,i))}function tn(t){let[e,i]=t;return Ye.create(l.create(i),H.create(e))}function _r(t){return t.trim()}var or=r({is(t){return t.kind==="PrimitiveValueListNode"},create(t){return r({kind:"PrimitiveValueListNode",values:r([...t])})}});var Se=r({is(t){return t.kind==="ValueListNode"},create(t){return r({kind:"ValueListNode",values:r(t)})}});var q=r({is(t){return t.kind==="ValueNode"},create(t){return r({kind:"ValueNode",value:t})},createImmediate(t){return r({kind:"ValueNode",value:t,immediate:!0})}});function $i(t){return B(t)?rn(t):g(t)}function g(t){return Ne(t)?U(t):q.create(t)}function nr(t){return ve(t)||Le(t)||je(t)}function bt(t){if(!nr(t))throw new Error(`unsafe immediate value ${JSON.stringify(t)}`);return q.createImmediate(t)}function rn(t){return t.some(Ne)?Se.create(t.map(e=>g(e))):or.create(t)}var ue=r({is(t){return t.kind==="ParensNode"},create(t){return r({kind:"ParensNode",node:t})}});function O(t){if(t.length===3)return sr(t[0],t[1],t[2]);if(t.length===1)return g(t[0]);throw new Error(`invalid arguments: ${JSON.stringify(t)}`)}function sr(t,e,i){return on(e)&&ji(i)?Te.create(E(t),ei(e),q.createImmediate(i)):Te.create(E(t),ei(e),$i(i))}function S(t,e,i){return Te.create(E(t),ei(e),E(i))}function ti(t,e){return _e(Object.entries(t).filter(([,i])=>!J(i)).map(([i,o])=>sr(i,ji(o)?"is":"=",o)),e)}function _e(t,e,i=!0){let o=e==="and"?V.create:_.create;if(t.length===0)return Te.create(q.createImmediate(1),$.create("="),q.createImmediate(e==="and"?1:0));let s=Ki(t[0]);for(let a=1;a<t.length;++a)s=o(s,Ki(t[a]));return t.length>1&&i?ue.create(s):s}function on(t){return t==="is"||t==="is not"}function ji(t){return je(t)||Le(t)}function ei(t){if(W(t)&&Mi.includes(t))return $.create(t);if(v(t))return t.toOperationNode();throw new Error(`invalid operator ${JSON.stringify(t)}`)}function Ki(t){return v(t)?t.toOperationNode():t}var we=r({is(t){return t.kind==="OrderByNode"},create(t){return r({kind:"OrderByNode",items:r([...t])})},cloneWithItems(t,e){return r({...t,items:r([...t.items,...e])})}});var ri=r({is(t){return t.kind==="PartitionByNode"},create(t){return r({kind:"PartitionByNode",items:r(t)})},cloneWithItems(t,e){return r({...t,items:r([...t.items,...e])})}});var vt=r({is(t){return t.kind==="OverNode"},create(){return r({kind:"OverNode"})},cloneWithOrderByItems(t,e){return r({...t,orderBy:t.orderBy?we.cloneWithItems(t.orderBy,e):we.create(e)})},cloneWithPartitionByItems(t,e){return r({...t,partitionBy:t.partitionBy?ri.cloneWithItems(t.partitionBy,e):ri.create(e)})}});var Pe=r({is(t){return t.kind==="FromNode"},create(t){return r({kind:"FromNode",froms:r(t)})},cloneWithFroms(t,e){return r({...t,froms:r([...t.froms,...e])})}});var ii=r({is(t){return t.kind==="GroupByNode"},create(t){return r({kind:"GroupByNode",items:r(t)})},cloneWithItems(t,e){return r({...t,items:r([...t.items,...e])})}});var oi=r({is(t){return t.kind==="HavingNode"},create(t){return r({kind:"HavingNode",having:t})},cloneWithOperation(t,e,i){return r({...t,having:e==="And"?V.create(t.having,i):_.create(t.having,i)})}});var m=r({is(t){return t.kind==="SelectQueryNode"},create(t){return r({kind:"SelectQueryNode",...t&&{with:t}})},createFrom(t,e){return r({kind:"SelectQueryNode",from:Pe.create(t),...e&&{with:e}})},cloneWithSelections(t,e){return r({...t,selections:t.selections?r([...t.selections,...e]):r(e)})},cloneWithDistinctOn(t,e){return r({...t,distinctOn:t.distinctOn?r([...t.distinctOn,...e]):r(e)})},cloneWithFrontModifier(t,e){return r({...t,frontModifiers:t.frontModifiers?r([...t.frontModifiers,e]):r([e])})},cloneWithEndModifier(t,e){return r({...t,endModifiers:t.endModifiers?r([...t.endModifiers,e]):r([e])})},cloneWithOrderByItems(t,e){return r({...t,orderBy:t.orderBy?we.cloneWithItems(t.orderBy,e):we.create(e)})},cloneWithGroupByItems(t,e){return r({...t,groupBy:t.groupBy?ii.cloneWithItems(t.groupBy,e):ii.create(e)})},cloneWithLimit(t,e){return r({...t,limit:e})},cloneWithOffset(t,e){return r({...t,offset:e})},cloneWithFetch(t,e){return r({...t,fetch:e})},cloneWithHaving(t,e){return r({...t,having:t.having?oi.cloneWithOperation(t.having,"And",e):oi.create(e)})},cloneWithSetOperations(t,e){return r({...t,setOperations:t.setOperations?r([...t.setOperations,...e]):r([...e])})},cloneWithoutSelections(t){return r({...t,selections:[]})},cloneWithoutLimit(t){return r({...t,limit:void 0})},cloneWithoutOffset(t){return r({...t,offset:void 0})},cloneWithoutOrderBy(t){return r({...t,orderBy:void 0})},cloneWithoutGroupBy(t){return r({...t,groupBy:void 0})}});function u(t,e){Object.defineProperties(t.prototype,{then:{enumerable:!1,value:()=>{throw new Error(e)}}})}var Ct=class t{#e;constructor(e){this.#e=r(e)}on(...e){return new t({...this.#e,joinNode:We.cloneWithOn(this.#e.joinNode,O(e))})}onRef(e,i,o){return new t({...this.#e,joinNode:We.cloneWithOn(this.#e.joinNode,S(e,i,o))})}onTrue(){return new t({...this.#e,joinNode:We.cloneWithOn(this.#e.joinNode,T.createWithSql("true"))})}$call(e){return e(this)}toOperationNode(){return this.#e.joinNode}};u(Ct,"don't await JoinBuilder instances. They are never executed directly and are always just a part of a query.");var Gi=r({is(t){return t.kind==="PartitionByItemNode"},create(t){return r({kind:"PartitionByItemNode",partitionBy:t})}});function Hi(t){return ye(t).map(Gi.create)}var Wt=class t{#e;constructor(e){this.#e=r(e)}orderBy(e,i){return new t({overNode:vt.cloneWithOrderByItems(this.#e.overNode,qe([e,i]))})}partitionBy(e){return new t({overNode:vt.cloneWithPartitionByItems(this.#e.overNode,Hi(e))})}$call(e){return e(this)}toOperationNode(){return this.#e.overNode}};u(Wt,"don't await OverBuilder instances. They are never executed directly and are always just a part of a query.");var et=r({is(t){return t.kind==="SelectionNode"},create(t){return r({kind:"SelectionNode",selection:t})},createSelectAll(){return r({kind:"SelectionNode",selection:He.create()})},createSelectAllFromTable(t){return r({kind:"SelectionNode",selection:Ye.createSelectAll(t)})}});function R(t){return C(t)?R(t(ee())):B(t)?t.map(e=>Yi(e)):[Yi(t)]}function Yi(t){return W(t)?et.create(Ji(t)):tr(t)?et.create(t.toOperationNode()):et.create(ar(t))}function P(t){return t?Array.isArray(t)?t.map(Xi):[Xi(t)]:[et.createSelectAll()]}function Xi(t){if(W(t))return et.createSelectAllFromTable(y(t));throw new Error(`invalid value selectAll expression: ${JSON.stringify(t)}`)}var Zi=r({is(t){return t.kind==="ValuesNode"},create(t){return r({kind:"ValuesNode",values:r(t)})}});var _i=r({is(t){return t.kind==="DefaultInsertValueNode"},create(){return r({kind:"DefaultInsertValueNode"})}});function ur(t){let e=C(t)?t(ee()):t,i=B(e)?e:r([e]);return nn(i)}function nn(t){let e=sn(t);return[r([...e.keys()].map(l.create)),Zi.create(t.map(i=>an(i,e)))]}function sn(t){let e=new Map;for(let i of t){let o=Object.keys(i);for(let s of o)!e.has(s)&&i[s]!==void 0&&e.set(s,e.size)}return e}function an(t,e){let i=Object.keys(t),o=Array.from({length:e.size}),s=!1;for(let p of i){let h=e.get(p);if(J(h))continue;let w=t[p];(J(w)||Ne(w))&&(s=!0),o[h]=w}if(i.length<e.size||s){let p=_i.create();return Se.create(o.map(h=>J(h)?p:g(h)))}return or.create(o)}var k=r({is(t){return t.kind==="InsertQueryNode"},create(t,e,i){return r({kind:"InsertQueryNode",into:t,...e&&{with:e},replace:i})},createWithoutInto(){return r({kind:"InsertQueryNode"})},cloneWith(t,e){return r({...t,...e})}});var de=r({is(t){return t.kind==="UpdateQueryNode"},create(t,e){return r({kind:"UpdateQueryNode",table:t,...e&&{with:e}})},createWithoutTable(){return r({kind:"UpdateQueryNode"})},cloneWithFromItems(t,e){return r({...t,from:t.from?Pe.cloneWithFroms(t.from,e):Pe.create(e)})},cloneWithUpdates(t,e){return r({...t,updates:t.updates?r([...t.updates,...e]):e})},cloneWithLimit(t,e){return r({...t,limit:e})}});var ni=r({is(t){return t.kind==="UsingNode"},create(t){return r({kind:"UsingNode",tables:r(t)})},cloneWithTables(t,e){return r({...t,tables:r([...t.tables,...e])})}});var pe=r({is(t){return t.kind==="DeleteQueryNode"},create(t,e){return r({kind:"DeleteQueryNode",from:Pe.create(t),...e&&{with:e}})},cloneWithOrderByItems(t,e){return r({...t,orderBy:t.orderBy?we.cloneWithItems(t.orderBy,e):we.create(e)})},cloneWithoutOrderBy(t){return r({...t,orderBy:void 0})},cloneWithLimit(t,e){return r({...t,limit:e})},cloneWithoutLimit(t){return r({...t,limit:void 0})},cloneWithUsing(t,e){return r({...t,using:t.using!==void 0?ni.cloneWithTables(t.using,e):ni.create(e)})}});var D=r({is(t){return t.kind==="WhereNode"},create(t){return r({kind:"WhereNode",where:t})},cloneWithOperation(t,e,i){return r({...t,where:e==="And"?V.create(t.where,i):_.create(t.where,i)})}});var si=r({is(t){return t.kind==="ReturningNode"},create(t){return r({kind:"ReturningNode",selections:r(t)})},cloneWithSelections(t,e){return r({...t,selections:t.selections?r([...t.selections,...e]):r(e)})}});var eo=r({is(t){return t.kind==="ExplainNode"},create(t,e){return r({kind:"ExplainNode",format:t,options:e})}});var xe=r({is(t){return t.kind==="WhenNode"},create(t){return r({kind:"WhenNode",condition:t})},cloneWithResult(t,e){return r({...t,result:e})}});var A=r({is(t){return t.kind==="MergeQueryNode"},create(t,e){return r({kind:"MergeQueryNode",into:t,...e&&{with:e}})},cloneWithUsing(t,e){return r({...t,using:e})},cloneWithWhen(t,e){return r({...t,whens:t.whens?r([...t.whens,e]):r([e])})},cloneWithThen(t,e){return r({...t,whens:t.whens?r([...t.whens.slice(0,-1),xe.cloneWithResult(t.whens[t.whens.length-1],e)]):void 0})}});var ai=r({is(t){return t.kind==="OutputNode"},create(t){return r({kind:"OutputNode",selections:r(t)})},cloneWithSelections(t,e){return r({...t,selections:t.selections?r([...t.selections,...e]):r(e)})}});var d=r({is(t){return m.is(t)||k.is(t)||de.is(t)||pe.is(t)||A.is(t)},cloneWithWhere(t,e){return r({...t,where:t.where?D.cloneWithOperation(t.where,"And",e):D.create(e)})},cloneWithJoin(t,e){return r({...t,joins:t.joins?r([...t.joins,e]):r([e])})},cloneWithReturning(t,e){return r({...t,returning:t.returning?si.cloneWithSelections(t.returning,e):si.create(e)})},cloneWithoutReturning(t){return r({...t,returning:void 0})},cloneWithoutWhere(t){return r({...t,where:void 0})},cloneWithExplain(t,e,i){return r({...t,explain:eo.create(e,i?.toOperationNode())})},cloneWithTop(t,e){return r({...t,top:e})},cloneWithOutput(t,e){return r({...t,output:t.output?ai.cloneWithSelections(t.output,e):ai.create(e)})}});var ui=r({is(t){return t.kind==="ColumnUpdateNode"},create(t,e){return r({kind:"ColumnUpdateNode",column:t,value:e})}});function to(...t){return t.length===2?[ui.create(E(t[0]),g(t[1]))]:Tt(t[0])}function Tt(t){let e=C(t)?t(ee()):t;return Object.entries(e).filter(([i,o])=>o!==void 0).map(([i,o])=>ui.create(l.create(i),g(o)))}var ro=r({is(t){return t.kind==="OnDuplicateKeyNode"},create(t){return r({kind:"OnDuplicateKeyNode",updates:t})}});var dr=class{insertId;numInsertedOrUpdatedRows;constructor(e,i){this.insertId=e,this.numInsertedOrUpdatedRows=i}};var Y=class extends Error{node;constructor(e){super("no result"),this.node=e}};function ce(t){return Object.prototype.hasOwnProperty.call(t,"prototype")}var z=r({is(t){return t.kind==="OnConflictNode"},create(){return r({kind:"OnConflictNode"})},cloneWith(t,e){return r({...t,...e})},cloneWithIndexWhere(t,e){return r({...t,indexWhere:t.indexWhere?D.cloneWithOperation(t.indexWhere,"And",e):D.create(e)})},cloneWithIndexOrWhere(t,e){return r({...t,indexWhere:t.indexWhere?D.cloneWithOperation(t.indexWhere,"Or",e):D.create(e)})},cloneWithUpdateWhere(t,e){return r({...t,updateWhere:t.updateWhere?D.cloneWithOperation(t.updateWhere,"And",e):D.create(e)})},cloneWithUpdateOrWhere(t,e){return r({...t,updateWhere:t.updateWhere?D.cloneWithOperation(t.updateWhere,"Or",e):D.create(e)})},cloneWithoutIndexWhere(t){return r({...t,indexWhere:void 0})},cloneWithoutUpdateWhere(t){return r({...t,updateWhere:void 0})}});var qt=class t{#e;constructor(e){this.#e=r(e)}column(e){let i=l.create(e);return new t({...this.#e,onConflictNode:z.cloneWith(this.#e.onConflictNode,{columns:this.#e.onConflictNode.columns?r([...this.#e.onConflictNode.columns,i]):r([i])})})}columns(e){let i=e.map(l.create);return new t({...this.#e,onConflictNode:z.cloneWith(this.#e.onConflictNode,{columns:this.#e.onConflictNode.columns?r([...this.#e.onConflictNode.columns,...i]):r(i)})})}constraint(e){return new t({...this.#e,onConflictNode:z.cloneWith(this.#e.onConflictNode,{constraint:c.create(e)})})}expression(e){return new t({...this.#e,onConflictNode:z.cloneWith(this.#e.onConflictNode,{indexExpression:e.toOperationNode()})})}where(...e){return new t({...this.#e,onConflictNode:z.cloneWithIndexWhere(this.#e.onConflictNode,O(e))})}whereRef(e,i,o){return new t({...this.#e,onConflictNode:z.cloneWithIndexWhere(this.#e.onConflictNode,S(e,i,o))})}clearWhere(){return new t({...this.#e,onConflictNode:z.cloneWithoutIndexWhere(this.#e.onConflictNode)})}doNothing(){return new pr({...this.#e,onConflictNode:z.cloneWith(this.#e.onConflictNode,{doNothing:!0})})}doUpdateSet(e){return new cr({...this.#e,onConflictNode:z.cloneWith(this.#e.onConflictNode,{updates:Tt(e)})})}$call(e){return e(this)}};u(qt,"don't await OnConflictBuilder instances.");var pr=class{#e;constructor(e){this.#e=r(e)}toOperationNode(){return this.#e.onConflictNode}};u(pr,"don't await OnConflictDoNothingBuilder instances.");var cr=class t{#e;constructor(e){this.#e=r(e)}where(...e){return new t({...this.#e,onConflictNode:z.cloneWithUpdateWhere(this.#e.onConflictNode,O(e))})}whereRef(e,i,o){return new t({...this.#e,onConflictNode:z.cloneWithUpdateWhere(this.#e.onConflictNode,S(e,i,o))})}clearWhere(){return new t({...this.#e,onConflictNode:z.cloneWithoutUpdateWhere(this.#e.onConflictNode)})}$call(e){return e(this)}toOperationNode(){return this.#e.onConflictNode}};u(cr,"don't await OnConflictUpdateBuilder instances.");var io=r({is(t){return t.kind==="TopNode"},create(t,e){return r({kind:"TopNode",expression:t,modifiers:e})}});function te(t,e){if(!ve(t)&&!Ge(t))throw new Error(`Invalid top expression: ${t}`);if(!J(e)&&!un(e))throw new Error(`Invalid top modifiers: ${e}`);return io.create(t,e)}function un(t){return t==="percent"||t==="with ties"||t==="percent with ties"}var tt=class t{#e;constructor(e){this.#e=r(e)}values(e){let[i,o]=ur(e);return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{columns:i,values:o})})}columns(e){return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{columns:r(e.map(l.create))})})}expression(e){return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{values:U(e)})})}defaultValues(){return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{defaultValues:!0})})}ignore(){return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{ignore:!0})})}top(e,i){return new t({...this.#e,queryNode:d.cloneWithTop(this.#e.queryNode,te(e,i))})}onConflict(e){return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{onConflict:e(new qt({onConflictNode:z.create()})).toOperationNode()})})}onDuplicateKeyUpdate(e){return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{onDuplicateKey:ro.create(Tt(e))})})}returning(e){return new t({...this.#e,queryNode:d.cloneWithReturning(this.#e.queryNode,R(e))})}returningAll(){return new t({...this.#e,queryNode:d.cloneWithReturning(this.#e.queryNode,P())})}output(e){return new t({...this.#e,queryNode:d.cloneWithOutput(this.#e.queryNode,R(e))})}outputAll(e){return new t({...this.#e,queryNode:d.cloneWithOutput(this.#e.queryNode,P(e))})}clearReturning(){return new t({...this.#e,queryNode:d.cloneWithoutReturning(this.#e.queryNode)})}$call(e){return e(this)}$if(e,i){return e?i(this):new t({...this.#e})}$castTo(){return new t(this.#e)}$narrowType(){return new t(this.#e)}$assertType(){return new t(this.#e)}withPlugin(e){return new t({...this.#e,executor:this.#e.executor.withPlugin(e)})}toOperationNode(){return this.#e.executor.transformQuery(this.#e.queryNode,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){let e=this.compile(),i=await this.#e.executor.executeQuery(e,this.#e.queryId),{adapter:o}=this.#e.executor,s=e.query;return s.returning&&o.supportsReturning||s.output&&o.supportsOutput?i.rows:[new dr(i.insertId,i.numAffectedRows??i.numUpdatedOrDeletedRows)]}async executeTakeFirst(){let[e]=await this.execute();return e}async executeTakeFirstOrThrow(e=Y){let i=await this.executeTakeFirst();if(i===void 0)throw ce(e)?new e(this.toOperationNode()):e(this.toOperationNode());return i}async*stream(e=100){let i=this.compile(),o=this.#e.executor.stream(i,e,this.#e.queryId);for await(let s of o)yield*s.rows}async explain(e,i){return await new t({...this.#e,queryNode:d.cloneWithExplain(this.#e.queryNode,e,i)}).execute()}};u(tt,"don't await InsertQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");var hr=class{numDeletedRows;constructor(e){this.numDeletedRows=e}};var rt=r({is(t){return t.kind==="LimitNode"},create(t){return r({kind:"LimitNode",limit:t})}});var It=class t{#e;constructor(e){this.#e=r(e)}where(...e){return new t({...this.#e,queryNode:d.cloneWithWhere(this.#e.queryNode,O(e))})}whereRef(e,i,o){return new t({...this.#e,queryNode:d.cloneWithWhere(this.#e.queryNode,S(e,i,o))})}clearWhere(){return new t({...this.#e,queryNode:d.cloneWithoutWhere(this.#e.queryNode)})}top(e,i){return new t({...this.#e,queryNode:d.cloneWithTop(this.#e.queryNode,te(e,i))})}using(e){return new t({...this.#e,queryNode:pe.cloneWithUsing(this.#e.queryNode,he(e))})}innerJoin(...e){return new t({...this.#e,queryNode:d.cloneWithJoin(this.#e.queryNode,I("InnerJoin",e))})}leftJoin(...e){return new t({...this.#e,queryNode:d.cloneWithJoin(this.#e.queryNode,I("LeftJoin",e))})}rightJoin(...e){return new t({...this.#e,queryNode:d.cloneWithJoin(this.#e.queryNode,I("RightJoin",e))})}fullJoin(...e){return new t({...this.#e,queryNode:d.cloneWithJoin(this.#e.queryNode,I("FullJoin",e))})}returning(e){return new t({...this.#e,queryNode:d.cloneWithReturning(this.#e.queryNode,R(e))})}returningAll(e){return new t({...this.#e,queryNode:d.cloneWithReturning(this.#e.queryNode,P(e))})}output(e){return new t({...this.#e,queryNode:d.cloneWithOutput(this.#e.queryNode,R(e))})}outputAll(e){return new t({...this.#e,queryNode:d.cloneWithOutput(this.#e.queryNode,P(e))})}clearReturning(){return new t({...this.#e,queryNode:d.cloneWithoutReturning(this.#e.queryNode)})}clearLimit(){return new t({...this.#e,queryNode:pe.cloneWithoutLimit(this.#e.queryNode)})}clearOrderBy(){return new t({...this.#e,queryNode:pe.cloneWithoutOrderBy(this.#e.queryNode)})}orderBy(e,i){return new t({...this.#e,queryNode:pe.cloneWithOrderByItems(this.#e.queryNode,qe([e,i]))})}limit(e){return new t({...this.#e,queryNode:pe.cloneWithLimit(this.#e.queryNode,rt.create(g(e)))})}$call(e){return e(this)}$if(e,i){return e?i(this):new t({...this.#e})}$castTo(){return new t(this.#e)}$narrowType(){return new t(this.#e)}$assertType(){return new t(this.#e)}withPlugin(e){return new t({...this.#e,executor:this.#e.executor.withPlugin(e)})}toOperationNode(){return this.#e.executor.transformQuery(this.#e.queryNode,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){let e=this.compile(),i=await this.#e.executor.executeQuery(e,this.#e.queryId),{adapter:o}=this.#e.executor,s=e.query;return s.returning&&o.supportsReturning||s.output&&o.supportsOutput?i.rows:[new hr(i.numAffectedRows??i.numUpdatedOrDeletedRows??BigInt(0))]}async executeTakeFirst(){let[e]=await this.execute();return e}async executeTakeFirstOrThrow(e=Y){let i=await this.executeTakeFirst();if(i===void 0)throw ce(e)?new e(this.toOperationNode()):e(this.toOperationNode());return i}async*stream(e=100){let i=this.compile(),o=this.#e.executor.stream(i,e,this.#e.queryId);for await(let s of o)yield*s.rows}async explain(e,i){return await new t({...this.#e,queryNode:d.cloneWithExplain(this.#e.queryNode,e,i)}).execute()}};u(It,"don't await DeleteQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");var mr=class{numUpdatedRows;numChangedRows;constructor(e,i){this.numUpdatedRows=e,this.numChangedRows=i}};var Fe=class t{#e;constructor(e){this.#e=r(e)}where(...e){return new t({...this.#e,queryNode:d.cloneWithWhere(this.#e.queryNode,O(e))})}whereRef(e,i,o){return new t({...this.#e,queryNode:d.cloneWithWhere(this.#e.queryNode,S(e,i,o))})}clearWhere(){return new t({...this.#e,queryNode:d.cloneWithoutWhere(this.#e.queryNode)})}top(e,i){return new t({...this.#e,queryNode:d.cloneWithTop(this.#e.queryNode,te(e,i))})}from(e){return new t({...this.#e,queryNode:de.cloneWithFromItems(this.#e.queryNode,he(e))})}innerJoin(...e){return new t({...this.#e,queryNode:d.cloneWithJoin(this.#e.queryNode,I("InnerJoin",e))})}leftJoin(...e){return new t({...this.#e,queryNode:d.cloneWithJoin(this.#e.queryNode,I("LeftJoin",e))})}rightJoin(...e){return new t({...this.#e,queryNode:d.cloneWithJoin(this.#e.queryNode,I("RightJoin",e))})}fullJoin(...e){return new t({...this.#e,queryNode:d.cloneWithJoin(this.#e.queryNode,I("FullJoin",e))})}limit(e){return new t({...this.#e,queryNode:de.cloneWithLimit(this.#e.queryNode,rt.create(g(e)))})}set(...e){return new t({...this.#e,queryNode:de.cloneWithUpdates(this.#e.queryNode,to(...e))})}returning(e){return new t({...this.#e,queryNode:d.cloneWithReturning(this.#e.queryNode,R(e))})}returningAll(e){return new t({...this.#e,queryNode:d.cloneWithReturning(this.#e.queryNode,P(e))})}output(e){return new t({...this.#e,queryNode:d.cloneWithOutput(this.#e.queryNode,R(e))})}outputAll(e){return new t({...this.#e,queryNode:d.cloneWithOutput(this.#e.queryNode,P(e))})}clearReturning(){return new t({...this.#e,queryNode:d.cloneWithoutReturning(this.#e.queryNode)})}$call(e){return e(this)}$if(e,i){return e?i(this):new t({...this.#e})}$castTo(){return new t(this.#e)}$narrowType(){return new t(this.#e)}$assertType(){return new t(this.#e)}withPlugin(e){return new t({...this.#e,executor:this.#e.executor.withPlugin(e)})}toOperationNode(){return this.#e.executor.transformQuery(this.#e.queryNode,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){let e=this.compile(),i=await this.#e.executor.executeQuery(e,this.#e.queryId),{adapter:o}=this.#e.executor,s=e.query;return s.returning&&o.supportsReturning||s.output&&o.supportsOutput?i.rows:[new mr(i.numAffectedRows??i.numUpdatedOrDeletedRows??BigInt(0),i.numChangedRows)]}async executeTakeFirst(){let[e]=await this.execute();return e}async executeTakeFirstOrThrow(e=Y){let i=await this.executeTakeFirst();if(i===void 0)throw ce(e)?new e(this.toOperationNode()):e(this.toOperationNode());return i}async*stream(e=100){let i=this.compile(),o=this.#e.executor.stream(i,e,this.#e.queryId);for await(let s of o)yield*s.rows}async explain(e,i){return await new t({...this.#e,queryNode:d.cloneWithExplain(this.#e.queryNode,e,i)}).execute()}};u(Fe,"don't await UpdateQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");var di=r({is(t){return t.kind==="CommonTableExpressionNameNode"},create(t,e){return r({kind:"CommonTableExpressionNameNode",table:H.create(t),columns:e?r(e.map(l.create)):void 0})}});var it=r({is(t){return t.kind==="CommonTableExpressionNode"},create(t,e){return r({kind:"CommonTableExpressionNode",name:t,expression:e})},cloneWith(t,e){return r({...t,...e})}});var St=class t{#e;constructor(e){this.#e=r(e)}materialized(){return new t({...this.#e,node:it.cloneWith(this.#e.node,{materialized:!0})})}notMaterialized(){return new t({...this.#e,node:it.cloneWith(this.#e.node,{materialized:!1})})}toOperationNode(){return this.#e.node}};u(St,"don't await CTEBuilder instances. They are never executed directly and are always just a part of a query.");function pi(t,e){let i=e(no()).toOperationNode();return C(t)?t(dn(i)).toOperationNode():it.create(oo(t),i)}function dn(t){return e=>new St({node:it.create(oo(e),t)})}function oo(t){if(t.includes("(")){let e=t.split(/[\(\)]/),i=e[0],o=e[1].split(",").map(s=>s.trim());return di.create(i,o)}else return di.create(t)}var kt=r({is(t){return t.kind==="WithNode"},create(t,e){return r({kind:"WithNode",expressions:r([t]),...e})},cloneWithExpression(t,e){return r({...t,expressions:r([...t.expressions,e])})}});var so=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9"];function ao(t){let e="";for(let i=0;i<t;++i)e+=pn();return e}function pn(){return so[~~(Math.random()*so.length)]}function N(){return new ci}var ci=class{#e;get queryId(){return this.#e===void 0&&(this.#e=ao(8)),this.#e}};var ke=class{nodeStack=[];#e=r({AliasNode:this.transformAlias.bind(this),ColumnNode:this.transformColumn.bind(this),IdentifierNode:this.transformIdentifier.bind(this),SchemableIdentifierNode:this.transformSchemableIdentifier.bind(this),RawNode:this.transformRaw.bind(this),ReferenceNode:this.transformReference.bind(this),SelectQueryNode:this.transformSelectQuery.bind(this),SelectionNode:this.transformSelection.bind(this),TableNode:this.transformTable.bind(this),FromNode:this.transformFrom.bind(this),SelectAllNode:this.transformSelectAll.bind(this),AndNode:this.transformAnd.bind(this),OrNode:this.transformOr.bind(this),ValueNode:this.transformValue.bind(this),ValueListNode:this.transformValueList.bind(this),PrimitiveValueListNode:this.transformPrimitiveValueList.bind(this),ParensNode:this.transformParens.bind(this),JoinNode:this.transformJoin.bind(this),OperatorNode:this.transformOperator.bind(this),WhereNode:this.transformWhere.bind(this),InsertQueryNode:this.transformInsertQuery.bind(this),DeleteQueryNode:this.transformDeleteQuery.bind(this),ReturningNode:this.transformReturning.bind(this),CreateTableNode:this.transformCreateTable.bind(this),AddColumnNode:this.transformAddColumn.bind(this),ColumnDefinitionNode:this.transformColumnDefinition.bind(this),DropTableNode:this.transformDropTable.bind(this),DataTypeNode:this.transformDataType.bind(this),OrderByNode:this.transformOrderBy.bind(this),OrderByItemNode:this.transformOrderByItem.bind(this),GroupByNode:this.transformGroupBy.bind(this),GroupByItemNode:this.transformGroupByItem.bind(this),UpdateQueryNode:this.transformUpdateQuery.bind(this),ColumnUpdateNode:this.transformColumnUpdate.bind(this),LimitNode:this.transformLimit.bind(this),OffsetNode:this.transformOffset.bind(this),OnConflictNode:this.transformOnConflict.bind(this),OnDuplicateKeyNode:this.transformOnDuplicateKey.bind(this),CreateIndexNode:this.transformCreateIndex.bind(this),DropIndexNode:this.transformDropIndex.bind(this),ListNode:this.transformList.bind(this),PrimaryKeyConstraintNode:this.transformPrimaryKeyConstraint.bind(this),UniqueConstraintNode:this.transformUniqueConstraint.bind(this),ReferencesNode:this.transformReferences.bind(this),CheckConstraintNode:this.transformCheckConstraint.bind(this),WithNode:this.transformWith.bind(this),CommonTableExpressionNode:this.transformCommonTableExpression.bind(this),CommonTableExpressionNameNode:this.transformCommonTableExpressionName.bind(this),HavingNode:this.transformHaving.bind(this),CreateSchemaNode:this.transformCreateSchema.bind(this),DropSchemaNode:this.transformDropSchema.bind(this),AlterTableNode:this.transformAlterTable.bind(this),DropColumnNode:this.transformDropColumn.bind(this),RenameColumnNode:this.transformRenameColumn.bind(this),AlterColumnNode:this.transformAlterColumn.bind(this),ModifyColumnNode:this.transformModifyColumn.bind(this),AddConstraintNode:this.transformAddConstraint.bind(this),DropConstraintNode:this.transformDropConstraint.bind(this),ForeignKeyConstraintNode:this.transformForeignKeyConstraint.bind(this),CreateViewNode:this.transformCreateView.bind(this),DropViewNode:this.transformDropView.bind(this),GeneratedNode:this.transformGenerated.bind(this),DefaultValueNode:this.transformDefaultValue.bind(this),OnNode:this.transformOn.bind(this),ValuesNode:this.transformValues.bind(this),SelectModifierNode:this.transformSelectModifier.bind(this),CreateTypeNode:this.transformCreateType.bind(this),DropTypeNode:this.transformDropType.bind(this),ExplainNode:this.transformExplain.bind(this),DefaultInsertValueNode:this.transformDefaultInsertValue.bind(this),AggregateFunctionNode:this.transformAggregateFunction.bind(this),OverNode:this.transformOver.bind(this),PartitionByNode:this.transformPartitionBy.bind(this),PartitionByItemNode:this.transformPartitionByItem.bind(this),SetOperationNode:this.transformSetOperation.bind(this),BinaryOperationNode:this.transformBinaryOperation.bind(this),UnaryOperationNode:this.transformUnaryOperation.bind(this),UsingNode:this.transformUsing.bind(this),FunctionNode:this.transformFunction.bind(this),CaseNode:this.transformCase.bind(this),WhenNode:this.transformWhen.bind(this),JSONReferenceNode:this.transformJSONReference.bind(this),JSONPathNode:this.transformJSONPath.bind(this),JSONPathLegNode:this.transformJSONPathLeg.bind(this),JSONOperatorChainNode:this.transformJSONOperatorChain.bind(this),TupleNode:this.transformTuple.bind(this),MergeQueryNode:this.transformMergeQuery.bind(this),MatchedNode:this.transformMatched.bind(this),AddIndexNode:this.transformAddIndex.bind(this),CastNode:this.transformCast.bind(this),FetchNode:this.transformFetch.bind(this),TopNode:this.transformTop.bind(this),OutputNode:this.transformOutput.bind(this)});transformNode(e){if(!e)return e;this.nodeStack.push(e);let i=this.transformNodeImpl(e);return this.nodeStack.pop(),r(i)}transformNodeImpl(e){return this.#e[e.kind](e)}transformNodeList(e){return e&&r(e.map(i=>this.transformNode(i)))}transformSelectQuery(e){return{kind:"SelectQueryNode",from:this.transformNode(e.from),selections:this.transformNodeList(e.selections),distinctOn:this.transformNodeList(e.distinctOn),joins:this.transformNodeList(e.joins),groupBy:this.transformNode(e.groupBy),orderBy:this.transformNode(e.orderBy),where:this.transformNode(e.where),frontModifiers:this.transformNodeList(e.frontModifiers),endModifiers:this.transformNodeList(e.endModifiers),limit:this.transformNode(e.limit),offset:this.transformNode(e.offset),with:this.transformNode(e.with),having:this.transformNode(e.having),explain:this.transformNode(e.explain),setOperations:this.transformNodeList(e.setOperations),fetch:this.transformNode(e.fetch),top:this.transformNode(e.top)}}transformSelection(e){return{kind:"SelectionNode",selection:this.transformNode(e.selection)}}transformColumn(e){return{kind:"ColumnNode",column:this.transformNode(e.column)}}transformAlias(e){return{kind:"AliasNode",node:this.transformNode(e.node),alias:this.transformNode(e.alias)}}transformTable(e){return{kind:"TableNode",table:this.transformNode(e.table)}}transformFrom(e){return{kind:"FromNode",froms:this.transformNodeList(e.froms)}}transformReference(e){return{kind:"ReferenceNode",column:this.transformNode(e.column),table:this.transformNode(e.table)}}transformAnd(e){return{kind:"AndNode",left:this.transformNode(e.left),right:this.transformNode(e.right)}}transformOr(e){return{kind:"OrNode",left:this.transformNode(e.left),right:this.transformNode(e.right)}}transformValueList(e){return{kind:"ValueListNode",values:this.transformNodeList(e.values)}}transformParens(e){return{kind:"ParensNode",node:this.transformNode(e.node)}}transformJoin(e){return{kind:"JoinNode",joinType:e.joinType,table:this.transformNode(e.table),on:this.transformNode(e.on)}}transformRaw(e){return{kind:"RawNode",sqlFragments:r([...e.sqlFragments]),parameters:this.transformNodeList(e.parameters)}}transformWhere(e){return{kind:"WhereNode",where:this.transformNode(e.where)}}transformInsertQuery(e){return{kind:"InsertQueryNode",into:this.transformNode(e.into),columns:this.transformNodeList(e.columns),values:this.transformNode(e.values),returning:this.transformNode(e.returning),onConflict:this.transformNode(e.onConflict),onDuplicateKey:this.transformNode(e.onDuplicateKey),with:this.transformNode(e.with),ignore:e.ignore,replace:e.replace,explain:this.transformNode(e.explain),defaultValues:e.defaultValues,top:this.transformNode(e.top),output:this.transformNode(e.output)}}transformValues(e){return{kind:"ValuesNode",values:this.transformNodeList(e.values)}}transformDeleteQuery(e){return{kind:"DeleteQueryNode",from:this.transformNode(e.from),using:this.transformNode(e.using),joins:this.transformNodeList(e.joins),where:this.transformNode(e.where),returning:this.transformNode(e.returning),with:this.transformNode(e.with),orderBy:this.transformNode(e.orderBy),limit:this.transformNode(e.limit),explain:this.transformNode(e.explain),top:this.transformNode(e.top),output:this.transformNode(e.output)}}transformReturning(e){return{kind:"ReturningNode",selections:this.transformNodeList(e.selections)}}transformCreateTable(e){return{kind:"CreateTableNode",table:this.transformNode(e.table),columns:this.transformNodeList(e.columns),constraints:this.transformNodeList(e.constraints),temporary:e.temporary,ifNotExists:e.ifNotExists,onCommit:e.onCommit,frontModifiers:this.transformNodeList(e.frontModifiers),endModifiers:this.transformNodeList(e.endModifiers),selectQuery:this.transformNode(e.selectQuery)}}transformColumnDefinition(e){return{kind:"ColumnDefinitionNode",column:this.transformNode(e.column),dataType:this.transformNode(e.dataType),references:this.transformNode(e.references),primaryKey:e.primaryKey,autoIncrement:e.autoIncrement,unique:e.unique,notNull:e.notNull,unsigned:e.unsigned,defaultTo:this.transformNode(e.defaultTo),check:this.transformNode(e.check),generated:this.transformNode(e.generated),frontModifiers:this.transformNodeList(e.frontModifiers),endModifiers:this.transformNodeList(e.endModifiers),nullsNotDistinct:e.nullsNotDistinct,identity:e.identity,ifNotExists:e.ifNotExists}}transformAddColumn(e){return{kind:"AddColumnNode",column:this.transformNode(e.column)}}transformDropTable(e){return{kind:"DropTableNode",table:this.transformNode(e.table),ifExists:e.ifExists,cascade:e.cascade}}transformOrderBy(e){return{kind:"OrderByNode",items:this.transformNodeList(e.items)}}transformOrderByItem(e){return{kind:"OrderByItemNode",orderBy:this.transformNode(e.orderBy),direction:this.transformNode(e.direction)}}transformGroupBy(e){return{kind:"GroupByNode",items:this.transformNodeList(e.items)}}transformGroupByItem(e){return{kind:"GroupByItemNode",groupBy:this.transformNode(e.groupBy)}}transformUpdateQuery(e){return{kind:"UpdateQueryNode",table:this.transformNode(e.table),from:this.transformNode(e.from),joins:this.transformNodeList(e.joins),where:this.transformNode(e.where),updates:this.transformNodeList(e.updates),returning:this.transformNode(e.returning),with:this.transformNode(e.with),explain:this.transformNode(e.explain),limit:this.transformNode(e.limit),top:this.transformNode(e.top),output:this.transformNode(e.output)}}transformColumnUpdate(e){return{kind:"ColumnUpdateNode",column:this.transformNode(e.column),value:this.transformNode(e.value)}}transformLimit(e){return{kind:"LimitNode",limit:this.transformNode(e.limit)}}transformOffset(e){return{kind:"OffsetNode",offset:this.transformNode(e.offset)}}transformOnConflict(e){return{kind:"OnConflictNode",columns:this.transformNodeList(e.columns),constraint:this.transformNode(e.constraint),indexExpression:this.transformNode(e.indexExpression),indexWhere:this.transformNode(e.indexWhere),updates:this.transformNodeList(e.updates),updateWhere:this.transformNode(e.updateWhere),doNothing:e.doNothing}}transformOnDuplicateKey(e){return{kind:"OnDuplicateKeyNode",updates:this.transformNodeList(e.updates)}}transformCreateIndex(e){return{kind:"CreateIndexNode",name:this.transformNode(e.name),table:this.transformNode(e.table),columns:this.transformNodeList(e.columns),unique:e.unique,using:this.transformNode(e.using),ifNotExists:e.ifNotExists,where:this.transformNode(e.where),nullsNotDistinct:e.nullsNotDistinct}}transformList(e){return{kind:"ListNode",items:this.transformNodeList(e.items)}}transformDropIndex(e){return{kind:"DropIndexNode",name:this.transformNode(e.name),table:this.transformNode(e.table),ifExists:e.ifExists,cascade:e.cascade}}transformPrimaryKeyConstraint(e){return{kind:"PrimaryKeyConstraintNode",columns:this.transformNodeList(e.columns),name:this.transformNode(e.name)}}transformUniqueConstraint(e){return{kind:"UniqueConstraintNode",columns:this.transformNodeList(e.columns),name:this.transformNode(e.name),nullsNotDistinct:e.nullsNotDistinct}}transformForeignKeyConstraint(e){return{kind:"ForeignKeyConstraintNode",columns:this.transformNodeList(e.columns),references:this.transformNode(e.references),name:this.transformNode(e.name),onDelete:e.onDelete,onUpdate:e.onUpdate}}transformSetOperation(e){return{kind:"SetOperationNode",operator:e.operator,expression:this.transformNode(e.expression),all:e.all}}transformReferences(e){return{kind:"ReferencesNode",table:this.transformNode(e.table),columns:this.transformNodeList(e.columns),onDelete:e.onDelete,onUpdate:e.onUpdate}}transformCheckConstraint(e){return{kind:"CheckConstraintNode",expression:this.transformNode(e.expression),name:this.transformNode(e.name)}}transformWith(e){return{kind:"WithNode",expressions:this.transformNodeList(e.expressions),recursive:e.recursive}}transformCommonTableExpression(e){return{kind:"CommonTableExpressionNode",name:this.transformNode(e.name),materialized:e.materialized,expression:this.transformNode(e.expression)}}transformCommonTableExpressionName(e){return{kind:"CommonTableExpressionNameNode",table:this.transformNode(e.table),columns:this.transformNodeList(e.columns)}}transformHaving(e){return{kind:"HavingNode",having:this.transformNode(e.having)}}transformCreateSchema(e){return{kind:"CreateSchemaNode",schema:this.transformNode(e.schema),ifNotExists:e.ifNotExists}}transformDropSchema(e){return{kind:"DropSchemaNode",schema:this.transformNode(e.schema),ifExists:e.ifExists,cascade:e.cascade}}transformAlterTable(e){return{kind:"AlterTableNode",table:this.transformNode(e.table),renameTo:this.transformNode(e.renameTo),setSchema:this.transformNode(e.setSchema),columnAlterations:this.transformNodeList(e.columnAlterations),addConstraint:this.transformNode(e.addConstraint),dropConstraint:this.transformNode(e.dropConstraint),addIndex:this.transformNode(e.addIndex),dropIndex:this.transformNode(e.dropIndex)}}transformDropColumn(e){return{kind:"DropColumnNode",column:this.transformNode(e.column)}}transformRenameColumn(e){return{kind:"RenameColumnNode",column:this.transformNode(e.column),renameTo:this.transformNode(e.renameTo)}}transformAlterColumn(e){return{kind:"AlterColumnNode",column:this.transformNode(e.column),dataType:this.transformNode(e.dataType),dataTypeExpression:this.transformNode(e.dataTypeExpression),setDefault:this.transformNode(e.setDefault),dropDefault:e.dropDefault,setNotNull:e.setNotNull,dropNotNull:e.dropNotNull}}transformModifyColumn(e){return{kind:"ModifyColumnNode",column:this.transformNode(e.column)}}transformAddConstraint(e){return{kind:"AddConstraintNode",constraint:this.transformNode(e.constraint)}}transformDropConstraint(e){return{kind:"DropConstraintNode",constraintName:this.transformNode(e.constraintName),ifExists:e.ifExists,modifier:e.modifier}}transformCreateView(e){return{kind:"CreateViewNode",name:this.transformNode(e.name),temporary:e.temporary,orReplace:e.orReplace,ifNotExists:e.ifNotExists,materialized:e.materialized,columns:this.transformNodeList(e.columns),as:this.transformNode(e.as)}}transformDropView(e){return{kind:"DropViewNode",name:this.transformNode(e.name),ifExists:e.ifExists,materialized:e.materialized,cascade:e.cascade}}transformGenerated(e){return{kind:"GeneratedNode",byDefault:e.byDefault,always:e.always,identity:e.identity,stored:e.stored,expression:this.transformNode(e.expression)}}transformDefaultValue(e){return{kind:"DefaultValueNode",defaultValue:this.transformNode(e.defaultValue)}}transformOn(e){return{kind:"OnNode",on:this.transformNode(e.on)}}transformSelectModifier(e){return{kind:"SelectModifierNode",modifier:e.modifier,rawModifier:this.transformNode(e.rawModifier),of:this.transformNodeList(e.of)}}transformCreateType(e){return{kind:"CreateTypeNode",name:this.transformNode(e.name),enum:this.transformNode(e.enum)}}transformDropType(e){return{kind:"DropTypeNode",name:this.transformNode(e.name),ifExists:e.ifExists}}transformExplain(e){return{kind:"ExplainNode",format:e.format,options:this.transformNode(e.options)}}transformSchemableIdentifier(e){return{kind:"SchemableIdentifierNode",schema:this.transformNode(e.schema),identifier:this.transformNode(e.identifier)}}transformAggregateFunction(e){return{kind:"AggregateFunctionNode",aggregated:this.transformNodeList(e.aggregated),distinct:e.distinct,filter:this.transformNode(e.filter),func:e.func,over:this.transformNode(e.over)}}transformOver(e){return{kind:"OverNode",orderBy:this.transformNode(e.orderBy),partitionBy:this.transformNode(e.partitionBy)}}transformPartitionBy(e){return{kind:"PartitionByNode",items:this.transformNodeList(e.items)}}transformPartitionByItem(e){return{kind:"PartitionByItemNode",partitionBy:this.transformNode(e.partitionBy)}}transformBinaryOperation(e){return{kind:"BinaryOperationNode",leftOperand:this.transformNode(e.leftOperand),operator:this.transformNode(e.operator),rightOperand:this.transformNode(e.rightOperand)}}transformUnaryOperation(e){return{kind:"UnaryOperationNode",operator:this.transformNode(e.operator),operand:this.transformNode(e.operand)}}transformUsing(e){return{kind:"UsingNode",tables:this.transformNodeList(e.tables)}}transformFunction(e){return{kind:"FunctionNode",func:e.func,arguments:this.transformNodeList(e.arguments)}}transformCase(e){return{kind:"CaseNode",value:this.transformNode(e.value),when:this.transformNodeList(e.when),else:this.transformNode(e.else),isStatement:e.isStatement}}transformWhen(e){return{kind:"WhenNode",condition:this.transformNode(e.condition),result:this.transformNode(e.result)}}transformJSONReference(e){return{kind:"JSONReferenceNode",reference:this.transformNode(e.reference),traversal:this.transformNode(e.traversal)}}transformJSONPath(e){return{kind:"JSONPathNode",inOperator:this.transformNode(e.inOperator),pathLegs:this.transformNodeList(e.pathLegs)}}transformJSONPathLeg(e){return{kind:"JSONPathLegNode",type:e.type,value:e.value}}transformJSONOperatorChain(e){return{kind:"JSONOperatorChainNode",operator:this.transformNode(e.operator),values:this.transformNodeList(e.values)}}transformTuple(e){return{kind:"TupleNode",values:this.transformNodeList(e.values)}}transformMergeQuery(e){return{kind:"MergeQueryNode",into:this.transformNode(e.into),using:this.transformNode(e.using),whens:this.transformNodeList(e.whens),with:this.transformNode(e.with),top:this.transformNode(e.top),output:this.transformNode(e.output)}}transformMatched(e){return{kind:"MatchedNode",not:e.not,bySource:e.bySource}}transformAddIndex(e){return{kind:"AddIndexNode",name:this.transformNode(e.name),columns:this.transformNodeList(e.columns),unique:e.unique,using:this.transformNode(e.using),ifNotExists:e.ifNotExists}}transformCast(e){return{kind:"CastNode",expression:this.transformNode(e.expression),dataType:this.transformNode(e.dataType)}}transformFetch(e){return{kind:"FetchNode",rowCount:this.transformNode(e.rowCount),modifier:e.modifier}}transformTop(e){return{kind:"TopNode",expression:e.expression,modifiers:e.modifiers}}transformOutput(e){return{kind:"OutputNode",selections:this.transformNodeList(e.selections)}}transformDataType(e){return e}transformSelectAll(e){return e}transformIdentifier(e){return e}transformValue(e){return e}transformPrimitiveValueList(e){return e}transformOperator(e){return e}transformDefaultInsertValue(e){return e}};var cn=r({AlterTableNode:!0,CreateIndexNode:!0,CreateSchemaNode:!0,CreateTableNode:!0,CreateTypeNode:!0,CreateViewNode:!0,DeleteQueryNode:!0,DropIndexNode:!0,DropSchemaNode:!0,DropTableNode:!0,DropTypeNode:!0,DropViewNode:!0,InsertQueryNode:!0,RawNode:!0,SelectQueryNode:!0,UpdateQueryNode:!0,MergeQueryNode:!0}),lr=class extends ke{#e;#t=new Set;#r=new Set;constructor(e){super(),this.#e=e}transformNodeImpl(e){if(!this.#i(e))return super.transformNodeImpl(e);let i=this.#s(e);for(let a of i)this.#r.add(a);let o=this.#o(e);for(let a of o)this.#t.add(a);let s=super.transformNodeImpl(e);for(let a of o)this.#t.delete(a);for(let a of i)this.#r.delete(a);return s}transformSchemableIdentifier(e){let i=super.transformSchemableIdentifier(e);return i.schema||!this.#t.has(e.identifier.name)?i:{...i,schema:c.create(this.#e)}}transformReferences(e){let i=super.transformReferences(e);return i.table.table.schema?i:{...i,table:H.createWithSchema(this.#e,i.table.table.identifier.name)}}#i(e){return e.kind in cn}#o(e){let i=new Set;if("name"in e&&e.name&&M.is(e.name)&&this.#a(e.name,i),"from"in e&&e.from)for(let o of e.from.froms)this.#n(o,i);if("into"in e&&e.into&&this.#n(e.into,i),"table"in e&&e.table&&this.#n(e.table,i),"joins"in e&&e.joins)for(let o of e.joins)this.#n(o.table,i);return"using"in e&&e.using&&this.#n(e.using,i),i}#s(e){let i=new Set;return"with"in e&&e.with&&this.#u(e.with,i),i}#n(e,i){let o=H.is(e)?e:L.is(e)&&H.is(e.node)?e.node:null;o&&this.#a(o.table,i)}#a(e,i){let o=e.identifier.name;!this.#t.has(o)&&!this.#r.has(o)&&i.add(o)}#u(e,i){for(let o of e.expressions){let s=o.name.table.table.identifier.name;this.#r.has(s)||i.add(s)}}};var re=class{#e;constructor(e){this.#e=new lr(e)}transformQuery(e){return this.#e.transformNode(e.node)}async transformResult(e){return e.result}};var uo=r({is(t){return t.kind==="MatchedNode"},create(t,e=!1){return r({kind:"MatchedNode",not:t,bySource:e})}});function hi(t,e,i){return xe.create(_e([uo.create(!t.isMatched,t.bySource),...e&&e.length>0?[e.length===3&&i?S(e[0],e[1],e[2]):O(e)]:[]],"and",!1))}function ot(t){return W(t)?T.create([t],[]):v(t)?t.toOperationNode():t}var At=class{#e;#t;#r;constructor(){this.#e=new Promise((e,i)=>{this.#r=i,this.#t=e})}get promise(){return this.#e}resolve=e=>{this.#t&&this.#t(e)};reject=e=>{this.#r&&this.#r(e)}};var po=new Set;function co(t){po.has(t)||(po.add(t),console.log(t))}var hn=r([]),nt=class{#e;constructor(e=hn){this.#e=e}get plugins(){return this.#e}transformQuery(e,i){for(let o of this.#e){let s=o.transformQuery({node:e,queryId:i});if(s.kind===e.kind)e=s;else throw new Error(["KyselyPlugin.transformQuery must return a node","of the same kind that was given to it.",`The plugin was given a ${e.kind}`,`but it returned a ${s.kind}`].join(" "))}return e}async executeQuery(e,i){return await this.provideConnection(async o=>{let s=await o.executeQuery(e),a=await this.#t(s,i);return mn(s,a),a})}async*stream(e,i,o){let s=new At,a=new At;this.provideConnection(async h=>(s.resolve(h),await a.promise)).catch(h=>s.reject(h));let p=await s.promise;try{for await(let h of p.streamQuery(e,i))yield await this.#t(h,o)}finally{a.resolve()}}async#t(e,i){for(let o of this.#e)e=await o.transformResult({result:e,queryId:i});return e}};function mn(t,e){let{numAffectedRows:i}=t;i===void 0&&t.numUpdatedOrDeletedRows===void 0||i!==void 0&&e.numAffectedRows!==void 0||co("kysely:warning: outdated driver/plugin detected! QueryResult.numUpdatedOrDeletedRows is deprecated and will be removed in a future release.")}var mi=class t extends nt{get adapter(){throw new Error("this query cannot be compiled to SQL")}compileQuery(){throw new Error("this query cannot be compiled to SQL")}provideConnection(){throw new Error("this query cannot be executed")}withConnectionProvider(){throw new Error("this query cannot have a connection provider")}withPlugin(e){return new t([...this.plugins,e])}withPlugins(e){return new t([...this.plugins,...e])}withPluginAtFront(e){return new t([e,...this.plugins])}withoutPlugins(){return new t([])}},Ae=new mi;var fr=class{numChangedRows;constructor(e){this.numChangedRows=e}};var Et=class t{#e;constructor(e){this.#e=r(e)}top(e,i){return new t({...this.#e,queryNode:d.cloneWithTop(this.#e.queryNode,te(e,i))})}using(...e){return new ge({...this.#e,queryNode:A.cloneWithUsing(this.#e.queryNode,I("Using",e))})}output(e){return new t({...this.#e,queryNode:d.cloneWithOutput(this.#e.queryNode,R(e))})}outputAll(e){return new t({...this.#e,queryNode:d.cloneWithOutput(this.#e.queryNode,P(e))})}};u(Et,"don't await MergeQueryBuilder instances directly. To execute the query you need to call `execute` when available.");var ge=class t{#e;constructor(e){this.#e=r(e)}top(e,i){return new t({...this.#e,queryNode:d.cloneWithTop(this.#e.queryNode,te(e,i))})}whenMatched(){return this.#t([])}whenMatchedAnd(...e){return this.#t(e)}whenMatchedAndRef(e,i,o){return this.#t([e,i,o],!0)}#t(e,i){return new Rt({...this.#e,queryNode:A.cloneWithWhen(this.#e.queryNode,hi({isMatched:!0},e,i))})}whenNotMatched(){return this.#r([])}whenNotMatchedAnd(...e){return this.#r(e)}whenNotMatchedAndRef(e,i,o){return this.#r([e,i,o],!0)}whenNotMatchedBySource(){return this.#r([],!1,!0)}whenNotMatchedBySourceAnd(...e){return this.#r(e,!1,!0)}whenNotMatchedBySourceAndRef(e,i,o){return this.#r([e,i,o],!0,!0)}output(e){return new t({...this.#e,queryNode:d.cloneWithOutput(this.#e.queryNode,R(e))})}outputAll(e){return new t({...this.#e,queryNode:d.cloneWithOutput(this.#e.queryNode,P(e))})}#r(e,i=!1,o=!1){let s={...this.#e,queryNode:A.cloneWithWhen(this.#e.queryNode,hi({isMatched:!1,bySource:o},e,i))},a=o?Rt:Nr;return new a(s)}$call(e){return e(this)}$if(e,i){return e?i(this):new t({...this.#e})}toOperationNode(){return this.#e.executor.transformQuery(this.#e.queryNode,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){let e=this.compile(),i=await this.#e.executor.executeQuery(e,this.#e.queryId);return e.query.output&&this.#e.executor.adapter.supportsOutput?i.rows:[new fr(i.numAffectedRows)]}async executeTakeFirst(){let[e]=await this.execute();return e}async executeTakeFirstOrThrow(e=Y){let i=await this.executeTakeFirst();if(i===void 0)throw ce(e)?new e(this.toOperationNode()):e(this.toOperationNode());return i}};u(ge,"don't await WheneableMergeQueryBuilder instances directly. To execute the query you need to call `execute`.");var Rt=class{#e;constructor(e){this.#e=r(e)}thenDelete(){return new ge({...this.#e,queryNode:A.cloneWithThen(this.#e.queryNode,ot("delete"))})}thenDoNothing(){return new ge({...this.#e,queryNode:A.cloneWithThen(this.#e.queryNode,ot("do nothing"))})}thenUpdate(e){return new ge({...this.#e,queryNode:A.cloneWithThen(this.#e.queryNode,ot(e(new Fe({queryId:this.#e.queryId,executor:Ae,queryNode:de.createWithoutTable()}))))})}thenUpdateSet(...e){return this.thenUpdate(i=>i.set(...e))}};u(Rt,"don't await MatchedThenableMergeQueryBuilder instances directly. To execute the query you need to call `execute` when available.");var Nr=class{#e;constructor(e){this.#e=r(e)}thenDoNothing(){return new ge({...this.#e,queryNode:A.cloneWithThen(this.#e.queryNode,ot("do nothing"))})}thenInsertValues(e){let[i,o]=ur(e);return new ge({...this.#e,queryNode:A.cloneWithThen(this.#e.queryNode,ot(k.cloneWith(k.createWithoutInto(),{columns:i,values:o})))})}};u(Nr,"don't await NotMatchedThenableMergeQueryBuilder instances directly. To execute the query you need to call `execute` when available.");var st=class t{#e;constructor(e){this.#e=r(e)}selectFrom(e){return Dt({queryId:N(),executor:this.#e.executor,queryNode:m.createFrom(he(e),this.#e.withNode)})}selectNoFrom(e){return Dt({queryId:N(),executor:this.#e.executor,queryNode:m.cloneWithSelections(m.create(this.#e.withNode),R(e))})}insertInto(e){return new tt({queryId:N(),executor:this.#e.executor,queryNode:k.create(y(e),this.#e.withNode)})}replaceInto(e){return new tt({queryId:N(),executor:this.#e.executor,queryNode:k.create(y(e),this.#e.withNode,!0)})}deleteFrom(e){return new It({queryId:N(),executor:this.#e.executor,queryNode:pe.create(he(e),this.#e.withNode)})}updateTable(e){return new Fe({queryId:N(),executor:this.#e.executor,queryNode:de.create(Ee(e),this.#e.withNode)})}mergeInto(e){return new Et({queryId:N(),executor:this.#e.executor,queryNode:A.create(li(e),this.#e.withNode)})}with(e,i){let o=pi(e,i);return new t({...this.#e,withNode:this.#e.withNode?kt.cloneWithExpression(this.#e.withNode,o):kt.create(o)})}withRecursive(e,i){let o=pi(e,i);return new t({...this.#e,withNode:this.#e.withNode?kt.cloneWithExpression(this.#e.withNode,o):kt.create(o,{recursive:!0})})}withPlugin(e){return new t({...this.#e,executor:this.#e.executor.withPlugin(e)})}withoutPlugins(){return new t({...this.#e,executor:this.#e.executor.withoutPlugins()})}withSchema(e){return new t({...this.#e,executor:this.#e.executor.withPluginAtFront(new re(e))})}};function no(){return new st({executor:Ae})}function ho(t,e){return new Ct({joinNode:We.create(t,Ee(e))})}function mo(){return new Wt({overNode:vt.create()})}function I(t,e){if(e.length===3)return fn(t,e[0],e[1],e[2]);if(e.length===2)return ln(t,e[0],e[1]);throw new Error("not implemented")}function ln(t,e,i){return i(ho(t,e)).toOperationNode()}function fn(t,e,i,o){return We.createWithOn(t,Ee(e),S(i,"=",o))}var lo=r({is(t){return t.kind==="OffsetNode"},create(t){return r({kind:"OffsetNode",offset:t})}});var fo=r({is(t){return t.kind==="GroupByItemNode"},create(t){return r({kind:"GroupByItemNode",groupBy:t})}});function No(t){return t=C(t)?t(ee()):t,ye(t).map(fo.create)}var yr=r({is(t){return t.kind==="SetOperationNode"},create(t,e,i){return r({kind:"SetOperationNode",operator:t,expression:e,all:i})}});function ze(t,e,i){return C(e)&&(e=e(wr())),B(e)||(e=[e]),e.map(o=>yr.create(t,U(o),i))}var x=class t{#e;constructor(e){this.#e=e}get expressionType(){}as(e){return new Bt(this,e)}or(...e){return new fi(_.create(this.#e,O(e)))}and(...e){return new Ni(V.create(this.#e,O(e)))}$castTo(){return new t(this.#e)}$notNull(){return new t(this.#e)}toOperationNode(){return this.#e}},Bt=class{#e;#t;constructor(e,i){this.#e=e,this.#t=i}get expression(){return this.#e}get alias(){return this.#t}toOperationNode(){return L.create(this.#e.toOperationNode(),v(this.#t)?this.#t.toOperationNode():c.create(this.#t))}},fi=class t{#e;constructor(e){this.#e=e}get expressionType(){}as(e){return new Bt(this,e)}or(...e){return new t(_.create(this.#e,O(e)))}$castTo(){return new t(this.#e)}toOperationNode(){return ue.create(this.#e)}},Ni=class t{#e;constructor(e){this.#e=e}get expressionType(){}as(e){return new Bt(this,e)}and(...e){return new t(V.create(this.#e,O(e)))}$castTo(){return new t(this.#e)}toOperationNode(){return ue.create(this.#e)}};var yo={is(t){return t.kind==="FetchNode"},create(t,e){return{kind:"FetchNode",rowCount:q.create(t),modifier:e}}};function wo(t,e){if(!ve(t)&&!Ge(t))throw new Error(`Invalid fetch row count: ${t}`);if(!Nn(e))throw new Error(`Invalid fetch modifier: ${e}`);return yo.create(t,e)}function Nn(t){return t==="only"||t==="with ties"}var xr=class t{#e;constructor(e){this.#e=r(e)}get expressionType(){}get isSelectQueryBuilder(){return!0}where(...e){return new t({...this.#e,queryNode:d.cloneWithWhere(this.#e.queryNode,O(e))})}whereRef(e,i,o){return new t({...this.#e,queryNode:d.cloneWithWhere(this.#e.queryNode,S(e,i,o))})}having(...e){return new t({...this.#e,queryNode:m.cloneWithHaving(this.#e.queryNode,O(e))})}havingRef(e,i,o){return new t({...this.#e,queryNode:m.cloneWithHaving(this.#e.queryNode,S(e,i,o))})}select(e){return new t({...this.#e,queryNode:m.cloneWithSelections(this.#e.queryNode,R(e))})}distinctOn(e){return new t({...this.#e,queryNode:m.cloneWithDistinctOn(this.#e.queryNode,ye(e))})}modifyFront(e){return new t({...this.#e,queryNode:m.cloneWithFrontModifier(this.#e.queryNode,ae.createWithExpression(e.toOperationNode()))})}modifyEnd(e){return new t({...this.#e,queryNode:m.cloneWithEndModifier(this.#e.queryNode,ae.createWithExpression(e.toOperationNode()))})}distinct(){return new t({...this.#e,queryNode:m.cloneWithFrontModifier(this.#e.queryNode,ae.create("Distinct"))})}forUpdate(e){return new t({...this.#e,queryNode:m.cloneWithEndModifier(this.#e.queryNode,ae.create("ForUpdate",e?xt(e).map(y):void 0))})}forShare(e){return new t({...this.#e,queryNode:m.cloneWithEndModifier(this.#e.queryNode,ae.create("ForShare",e?xt(e).map(y):void 0))})}forKeyShare(e){return new t({...this.#e,queryNode:m.cloneWithEndModifier(this.#e.queryNode,ae.create("ForKeyShare",e?xt(e).map(y):void 0))})}forNoKeyUpdate(e){return new t({...this.#e,queryNode:m.cloneWithEndModifier(this.#e.queryNode,ae.create("ForNoKeyUpdate",e?xt(e).map(y):void 0))})}skipLocked(){return new t({...this.#e,queryNode:m.cloneWithEndModifier(this.#e.queryNode,ae.create("SkipLocked"))})}noWait(){return new t({...this.#e,queryNode:m.cloneWithEndModifier(this.#e.queryNode,ae.create("NoWait"))})}selectAll(e){return new t({...this.#e,queryNode:m.cloneWithSelections(this.#e.queryNode,P(e))})}innerJoin(...e){return new t({...this.#e,queryNode:d.cloneWithJoin(this.#e.queryNode,I("InnerJoin",e))})}leftJoin(...e){return new t({...this.#e,queryNode:d.cloneWithJoin(this.#e.queryNode,I("LeftJoin",e))})}rightJoin(...e){return new t({...this.#e,queryNode:d.cloneWithJoin(this.#e.queryNode,I("RightJoin",e))})}fullJoin(...e){return new t({...this.#e,queryNode:d.cloneWithJoin(this.#e.queryNode,I("FullJoin",e))})}innerJoinLateral(...e){return new t({...this.#e,queryNode:d.cloneWithJoin(this.#e.queryNode,I("LateralInnerJoin",e))})}leftJoinLateral(...e){return new t({...this.#e,queryNode:d.cloneWithJoin(this.#e.queryNode,I("LateralLeftJoin",e))})}orderBy(...e){return new t({...this.#e,queryNode:m.cloneWithOrderByItems(this.#e.queryNode,qe(e))})}groupBy(e){return new t({...this.#e,queryNode:m.cloneWithGroupByItems(this.#e.queryNode,No(e))})}limit(e){return new t({...this.#e,queryNode:m.cloneWithLimit(this.#e.queryNode,rt.create(g(e)))})}offset(e){return new t({...this.#e,queryNode:m.cloneWithOffset(this.#e.queryNode,lo.create(g(e)))})}fetch(e,i="only"){return new t({...this.#e,queryNode:m.cloneWithFetch(this.#e.queryNode,wo(e,i))})}top(e,i){return new t({...this.#e,queryNode:d.cloneWithTop(this.#e.queryNode,te(e,i))})}union(e){return new t({...this.#e,queryNode:m.cloneWithSetOperations(this.#e.queryNode,ze("union",e,!1))})}unionAll(e){return new t({...this.#e,queryNode:m.cloneWithSetOperations(this.#e.queryNode,ze("union",e,!0))})}intersect(e){return new t({...this.#e,queryNode:m.cloneWithSetOperations(this.#e.queryNode,ze("intersect",e,!1))})}intersectAll(e){return new t({...this.#e,queryNode:m.cloneWithSetOperations(this.#e.queryNode,ze("intersect",e,!0))})}except(e){return new t({...this.#e,queryNode:m.cloneWithSetOperations(this.#e.queryNode,ze("except",e,!1))})}exceptAll(e){return new t({...this.#e,queryNode:m.cloneWithSetOperations(this.#e.queryNode,ze("except",e,!0))})}as(e){return new gr(this,e)}clearSelect(){return new t({...this.#e,queryNode:m.cloneWithoutSelections(this.#e.queryNode)})}clearWhere(){return new t({...this.#e,queryNode:d.cloneWithoutWhere(this.#e.queryNode)})}clearLimit(){return new t({...this.#e,queryNode:m.cloneWithoutLimit(this.#e.queryNode)})}clearOffset(){return new t({...this.#e,queryNode:m.cloneWithoutOffset(this.#e.queryNode)})}clearOrderBy(){return new t({...this.#e,queryNode:m.cloneWithoutOrderBy(this.#e.queryNode)})}clearGroupBy(){return new t({...this.#e,queryNode:m.cloneWithoutGroupBy(this.#e.queryNode)})}$call(e){return e(this)}$if(e,i){return e?i(this):new t({...this.#e})}$castTo(){return new t(this.#e)}$narrowType(){return new t(this.#e)}$assertType(){return new t(this.#e)}$asTuple(){return new x(this.toOperationNode())}withPlugin(e){return new t({...this.#e,executor:this.#e.executor.withPlugin(e)})}toOperationNode(){return this.#e.executor.transformQuery(this.#e.queryNode,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){let e=this.compile();return(await this.#e.executor.executeQuery(e,this.#e.queryId)).rows}async executeTakeFirst(){let[e]=await this.execute();return e}async executeTakeFirstOrThrow(e=Y){let i=await this.executeTakeFirst();if(i===void 0)throw ce(e)?new e(this.toOperationNode()):e(this.toOperationNode());return i}async*stream(e=100){let i=this.compile(),o=this.#e.executor.stream(i,e,this.#e.queryId);for await(let s of o)yield*s.rows}async explain(e,i){return await new t({...this.#e,queryNode:d.cloneWithExplain(this.#e.queryNode,e,i)}).execute()}};u(xr,"don't await SelectQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");function Dt(t){return new xr(t)}var gr=class{#e;#t;constructor(e,i){this.#e=e,this.#t=i}get expression(){return this.#e}get alias(){return this.#t}get isAliasedSelectQueryBuilder(){return!0}toOperationNode(){return L.create(this.#e.toOperationNode(),c.create(this.#t))}};u(gr,"don't await AliasedSelectQueryBuilder instances directly. AliasedSelectQueryBuilder should never be executed directly since it's always a part of another query.");var Oe=r({is(t){return t.kind==="AggregateFunctionNode"},create(t,e=[]){return r({kind:"AggregateFunctionNode",func:t,aggregated:e})},cloneWithDistinct(t){return r({...t,distinct:!0})},cloneWithFilter(t,e){return r({...t,filter:t.filter?D.cloneWithOperation(t.filter,"And",e):D.create(e)})},cloneWithOrFilter(t,e){return r({...t,filter:t.filter?D.cloneWithOperation(t.filter,"Or",e):D.create(e)})},cloneWithOver(t,e){return r({...t,over:e})}});var yi=r({is(t){return t.kind==="FunctionNode"},create(t,e){return r({kind:"FunctionNode",func:t,arguments:e})}});var Me=class t{#e;constructor(e){this.#e=r(e)}get expressionType(){}as(e){return new wi(this,e)}distinct(){return new t({...this.#e,aggregateFunctionNode:Oe.cloneWithDistinct(this.#e.aggregateFunctionNode)})}filterWhere(...e){return new t({...this.#e,aggregateFunctionNode:Oe.cloneWithFilter(this.#e.aggregateFunctionNode,O(e))})}filterWhereRef(e,i,o){return new t({...this.#e,aggregateFunctionNode:Oe.cloneWithFilter(this.#e.aggregateFunctionNode,S(e,i,o))})}over(e){let i=mo();return new t({...this.#e,aggregateFunctionNode:Oe.cloneWithOver(this.#e.aggregateFunctionNode,(e?e(i):i).toOperationNode())})}$call(e){return e(this)}$castTo(){return new t(this.#e)}$notNull(){return new t(this.#e)}toOperationNode(){return this.#e.aggregateFunctionNode}};u(Me,"don't await AggregateFunctionBuilder instances. They are never executed directly and are always just a part of a query.");var wi=class{#e;#t;constructor(e,i){this.#e=e,this.#t=i}get expression(){return this.#e}get alias(){return this.#t}toOperationNode(){return L.create(this.#e.toOperationNode(),c.create(this.#t))}};function Or(){let t=(i,o)=>new x(yi.create(i,ye(o??[]))),e=(i,o)=>new Me({aggregateFunctionNode:Oe.create(i,o?ye(o):void 0)});return Object.assign(t,{agg:e,avg(i){return e("avg",[i])},coalesce(...i){return t("coalesce",i)},count(i){return e("count",[i])},countAll(i){return new Me({aggregateFunctionNode:Oe.create("count",P(i))})},max(i){return e("max",[i])},min(i){return e("min",[i])},sum(i){return e("sum",[i])},any(i){return t("any",[i])},jsonAgg(i){return new Me({aggregateFunctionNode:Oe.create("json_agg",[W(i)?y(i):i.toOperationNode()])})},toJson(i){return new x(yi.create("to_json",[W(i)?y(i):i.toOperationNode()]))}})}var xo=r({is(t){return t.kind==="UnaryOperationNode"},create(t,e){return r({kind:"UnaryOperationNode",operator:t,operand:e})}});function go(t,e){return xo.create($.create(t),E(e))}var j=r({is(t){return t.kind==="CaseNode"},create(t){return r({kind:"CaseNode",value:t})},cloneWithWhen(t,e){return r({...t,when:r(t.when?[...t.when,e]:[e])})},cloneWithThen(t,e){return r({...t,when:t.when?r([...t.when.slice(0,-1),xe.cloneWithResult(t.when[t.when.length-1],e)]):void 0})},cloneWith(t,e){return r({...t,...e})}});var at=class{#e;constructor(e){this.#e=r(e)}when(...e){return new br({...this.#e,node:j.cloneWithWhen(this.#e.node,xe.create(O(e)))})}},br=class{#e;constructor(e){this.#e=r(e)}then(e){return new xi({...this.#e,node:j.cloneWithThen(this.#e.node,nr(e)?bt(e):g(e))})}},xi=class{#e;constructor(e){this.#e=r(e)}when(...e){return new br({...this.#e,node:j.cloneWithWhen(this.#e.node,xe.create(O(e)))})}else(e){return new gi({...this.#e,node:j.cloneWith(this.#e.node,{else:nr(e)?bt(e):g(e)})})}end(){return new x(j.cloneWith(this.#e.node,{isStatement:!1}))}endCase(){return new x(j.cloneWith(this.#e.node,{isStatement:!0}))}},gi=class{#e;constructor(e){this.#e=r(e)}end(){return new x(j.cloneWith(this.#e.node,{isStatement:!1}))}endCase(){return new x(j.cloneWith(this.#e.node,{isStatement:!0}))}};var Oi=r({is(t){return t.kind==="JSONPathLegNode"},create(t,e){return r({kind:"JSONPathLegNode",type:t,value:e})}});var Re=class{#e;constructor(e){this.#e=e}at(e){return this.#t("ArrayLocation",e)}key(e){return this.#t("Member",e)}#t(e,i){return Xe.is(this.#e)?new vr(Xe.cloneWithTraversal(this.#e,Ie.is(this.#e.traversal)?Ie.cloneWithLeg(this.#e.traversal,Oi.create(e,i)):ir.cloneWithValue(this.#e.traversal,q.createImmediate(i)))):new vr(Ie.cloneWithLeg(this.#e,Oi.create(e,i)))}},vr=class extends Re{#e;constructor(e){super(e),this.#e=e}get expressionType(){}as(e){return new bi(this,e)}$castTo(){return new Re(this.#e)}$notNull(){return new Re(this.#e)}toOperationNode(){return this.#e}},bi=class{#e;#t;constructor(e,i){this.#e=e,this.#t=i}get expression(){return this.#e}get alias(){return this.#t}toOperationNode(){return L.create(this.#e.toOperationNode(),v(this.#t)?this.#t.toOperationNode():c.create(this.#t))}};var vi=r({is(t){return t.kind==="TupleNode"},create(t){return r({kind:"TupleNode",values:r(t)})}});var yn=["varchar","char","text","integer","int2","int4","int8","smallint","bigint","boolean","real","double precision","float4","float8","decimal","numeric","binary","bytea","date","datetime","time","timetz","timestamp","timestamptz","serial","bigserial","uuid","json","jsonb","blob","varbinary"],wn=[/^varchar\(\d+\)$/,/^char\(\d+\)$/,/^decimal\(\d+, \d+\)$/,/^numeric\(\d+, \d+\)$/,/^binary\(\d+\)$/,/^datetime\(\d+\)$/,/^time\(\d+\)$/,/^timetz\(\d+\)$/,/^timestamp\(\d+\)$/,/^timestamptz\(\d+\)$/,/^varbinary\(\d+\)$/],Oo=r({is(t){return t.kind==="DataTypeNode"},create(t){return r({kind:"DataTypeNode",dataType:t})}});function bo(t){return!!(yn.includes(t)||wn.some(e=>e.test(t)))}function ie(t){if(v(t))return t.toOperationNode();if(bo(t))return Oo.create(t);throw new Error(`invalid column data type ${JSON.stringify(t)}`)}var vo=r({is(t){return t.kind==="CastNode"},create(t,e){return r({kind:"CastNode",expression:t,dataType:e})}});function wr(t=Ae){function e(s,a,p){return new x(sr(s,a,p))}function i(s,a){return new x(go(s,a))}let o=Object.assign(e,{fn:void 0,eb:void 0,selectFrom(s){return Dt({queryId:N(),executor:t,queryNode:m.createFrom(he(s))})},case(s){return new at({node:j.create(J(s)?void 0:E(s))})},ref(s,a){return J(a)?new x(K(s)):new Re(Ui(s,a))},jsonPath(){return new Re(Ie.create())},table(s){return new x(y(s))},val(s){return new x(g(s))},refTuple(...s){return new x(vi.create(s.map(E)))},tuple(...s){return new x(vi.create(s.map(g)))},lit(s){return new x(bt(s))},unary:i,not(s){return i("not",s)},exists(s){return i("exists",s)},neg(s){return i("-",s)},between(s,a,p){return new x(Te.create(E(s),$.create("between"),V.create(g(a),g(p))))},betweenSymmetric(s,a,p){return new x(Te.create(E(s),$.create("between symmetric"),V.create(g(a),g(p))))},and(s){return B(s)?new x(_e(s,"and")):new x(ti(s,"and"))},or(s){return B(s)?new x(_e(s,"or")):new x(ti(s,"or"))},parens(...s){let a=O(s);return ue.is(a)?new x(a):new x(ue.create(a))},cast(s,a){return new x(vo.create(E(s),ie(a)))},withSchema(s){return wr(t.withPluginAtFront(new re(s)))}});return o.fn=Or(),o.eb=o,o}function ee(t){return wr()}function U(t){if(v(t))return t.toOperationNode();if(C(t))return t(ee()).toOperationNode();throw new Error(`invalid expression: ${JSON.stringify(t)}`)}function ar(t){if(v(t))return t.toOperationNode();if(C(t))return t(ee()).toOperationNode();throw new Error(`invalid aliased expression: ${JSON.stringify(t)}`)}function Ne(t){return Pi(t)||Fi(t)||C(t)}function he(t){return B(t)?t.map(e=>Ee(e)):[Ee(t)]}function Ee(t){return W(t)?li(t):ar(t)}function li(t){let e=" as ";if(t.includes(e)){let[i,o]=t.split(e).map(Co);return L.create(y(i),c.create(o))}else return y(t)}function y(t){let e=".";if(t.includes(e)){let[i,o]=t.split(e).map(Co);return H.createWithSchema(i,o)}else return H.create(t)}function Co(t){return t.trim()}var Ci=r({is(t){return t.kind==="AddColumnNode"},create(t){return r({kind:"AddColumnNode",column:t})}});var b=r({is(t){return t.kind==="ColumnDefinitionNode"},create(t,e){return r({kind:"ColumnDefinitionNode",column:l.create(t),dataType:e})},cloneWithFrontModifier(t,e){return r({...t,frontModifiers:t.frontModifiers?r([...t.frontModifiers,e]):[e]})},cloneWithEndModifier(t,e){return r({...t,endModifiers:t.endModifiers?r([...t.endModifiers,e]):[e]})},cloneWith(t,e){return r({...t,...e})}});var Wi=r({is(t){return t.kind==="DropColumnNode"},create(t){return r({kind:"DropColumnNode",column:l.create(t)})}});var Ti=r({is(t){return t.kind==="RenameColumnNode"},create(t,e){return r({kind:"RenameColumnNode",column:l.create(t),renameTo:l.create(e)})}});var ut=r({is(t){return t.kind==="CheckConstraintNode"},create(t,e){return r({kind:"CheckConstraintNode",expression:t,name:e?c.create(e):void 0})}});var Wo=["no action","restrict","cascade","set null","set default"],dt=r({is(t){return t.kind==="ReferencesNode"},create(t,e){return r({kind:"ReferencesNode",table:t,columns:r([...e])})},cloneWithOnDelete(t,e){return r({...t,onDelete:e})},cloneWithOnUpdate(t,e){return r({...t,onUpdate:e})}});function Cr(t){return v(t)?t.toOperationNode():q.createImmediate(t)}var Qt=r({is(t){return t.kind==="GeneratedNode"},create(t){return r({kind:"GeneratedNode",...t})},createWithExpression(t){return r({kind:"GeneratedNode",always:!0,expression:t})},cloneWith(t,e){return r({...t,...e})}});var To=r({is(t){return t.kind==="DefaultValueNode"},create(t){return r({kind:"DefaultValueNode",defaultValue:t})}});function pt(t){if(Wo.includes(t))return t;throw new Error(`invalid OnModifyForeignAction ${t}`)}var me=class t{#e;constructor(e){this.#e=e}autoIncrement(){return new t(b.cloneWith(this.#e,{autoIncrement:!0}))}identity(){return new t(b.cloneWith(this.#e,{identity:!0}))}primaryKey(){return new t(b.cloneWith(this.#e,{primaryKey:!0}))}references(e){let i=K(e);if(!i.table||He.is(i.column))throw new Error(`invalid call references('${e}'). The reference must have format table.column or schema.table.column`);return new t(b.cloneWith(this.#e,{references:dt.create(i.table,[i.column])}))}onDelete(e){if(!this.#e.references)throw new Error("on delete constraint can only be added for foreign keys");return new t(b.cloneWith(this.#e,{references:dt.cloneWithOnDelete(this.#e.references,pt(e))}))}onUpdate(e){if(!this.#e.references)throw new Error("on update constraint can only be added for foreign keys");return new t(b.cloneWith(this.#e,{references:dt.cloneWithOnUpdate(this.#e.references,pt(e))}))}unique(){return new t(b.cloneWith(this.#e,{unique:!0}))}notNull(){return new t(b.cloneWith(this.#e,{notNull:!0}))}unsigned(){return new t(b.cloneWith(this.#e,{unsigned:!0}))}defaultTo(e){return new t(b.cloneWith(this.#e,{defaultTo:To.create(Cr(e))}))}check(e){return new t(b.cloneWith(this.#e,{check:ut.create(e.toOperationNode())}))}generatedAlwaysAs(e){return new t(b.cloneWith(this.#e,{generated:Qt.createWithExpression(e.toOperationNode())}))}generatedAlwaysAsIdentity(){return new t(b.cloneWith(this.#e,{generated:Qt.create({identity:!0,always:!0})}))}generatedByDefaultAsIdentity(){return new t(b.cloneWith(this.#e,{generated:Qt.create({identity:!0,byDefault:!0})}))}stored(){if(!this.#e.generated)throw new Error("stored() can only be called after generatedAlwaysAs");return new t(b.cloneWith(this.#e,{generated:Qt.cloneWith(this.#e.generated,{stored:!0})}))}modifyFront(e){return new t(b.cloneWithFrontModifier(this.#e,e.toOperationNode()))}nullsNotDistinct(){return new t(b.cloneWith(this.#e,{nullsNotDistinct:!0}))}ifNotExists(){return new t(b.cloneWith(this.#e,{ifNotExists:!0}))}modifyEnd(e){return new t(b.cloneWithEndModifier(this.#e,e.toOperationNode()))}$call(e){return e(this)}toOperationNode(){return this.#e}};u(me,"don't await ColumnDefinitionBuilder instances directly.");var qi=r({is(t){return t.kind==="ModifyColumnNode"},create(t){return r({kind:"ModifyColumnNode",column:t})}});var Ve=r({is(t){return t.kind==="ForeignKeyConstraintNode"},create(t,e,i,o){return r({kind:"ForeignKeyConstraintNode",columns:t,references:dt.create(e,i),name:o?c.create(o):void 0})},cloneWith(t,e){return r({...t,...e})}});var Ue=class t{#e;constructor(e){this.#e=e}onDelete(e){return new t(Ve.cloneWith(this.#e,{onDelete:pt(e)}))}onUpdate(e){return new t(Ve.cloneWith(this.#e,{onUpdate:pt(e)}))}$call(e){return e(this)}toOperationNode(){return this.#e}};u(Ue,"don't await ForeignKeyConstraintBuilder instances directly.");var ct=r({is(t){return t.kind==="AddConstraintNode"},create(t){return r({kind:"AddConstraintNode",constraint:t})}});var ht=r({is(t){return t.kind==="UniqueConstraintNode"},create(t,e,i){return r({kind:"UniqueConstraintNode",columns:r(t.map(l.create)),name:e?c.create(e):void 0,nullsNotDistinct:i})},cloneWith(t,e){return r({...t,...e})}});var mt=r({is(t){return t.kind==="DropConstraintNode"},create(t){return r({kind:"DropConstraintNode",constraintName:c.create(t)})},cloneWith(t,e){return r({...t,...e})}});var lt=r({is(t){return t.kind==="AlterColumnNode"},create(t,e,i){return r({kind:"AlterColumnNode",column:l.create(t),[e]:i})}});var ft=class{#e;constructor(e){this.#e=e}setDataType(e){return new De(lt.create(this.#e,"dataType",ie(e)))}setDefault(e){return new De(lt.create(this.#e,"setDefault",Cr(e)))}dropDefault(){return new De(lt.create(this.#e,"dropDefault",!0))}setNotNull(){return new De(lt.create(this.#e,"setNotNull",!0))}dropNotNull(){return new De(lt.create(this.#e,"dropNotNull",!0))}$call(e){return e(this)}};u(ft,"don't await AlterColumnBuilder instances");var De=class{#e;constructor(e){this.#e=e}toOperationNode(){return this.#e}};u(De,"don't await AlteredColumnBuilder instances");var le=class{#e;constructor(e){this.#e=r(e)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};u(le,"don't await AlterTableExecutor instances directly. To execute the query you need to call `execute`");var Lt=class t{#e;constructor(e){this.#e=r(e)}onDelete(e){return new t({...this.#e,constraintBuilder:this.#e.constraintBuilder.onDelete(e)})}onUpdate(e){return new t({...this.#e,constraintBuilder:this.#e.constraintBuilder.onUpdate(e)})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(f.cloneWithTableProps(this.#e.node,{addConstraint:ct.create(this.#e.constraintBuilder.toOperationNode())}),this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};u(Lt,"don't await AlterTableAddForeignKeyConstraintBuilder instances directly. To execute the query you need to call `execute`");var Pt=class t{#e;constructor(e){this.#e=r(e)}ifExists(){return new t({...this.#e,node:f.cloneWithTableProps(this.#e.node,{dropConstraint:mt.cloneWith(this.#e.node.dropConstraint,{ifExists:!0})})})}cascade(){return new t({...this.#e,node:f.cloneWithTableProps(this.#e.node,{dropConstraint:mt.cloneWith(this.#e.node.dropConstraint,{modifier:"cascade"})})})}restrict(){return new t({...this.#e,node:f.cloneWithTableProps(this.#e.node,{dropConstraint:mt.cloneWith(this.#e.node.dropConstraint,{modifier:"restrict"})})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};u(Pt,"don't await AlterTableDropConstraintBuilder instances directly. To execute the query you need to call `execute`");var Wr=r({is(t){return t.kind==="PrimaryKeyConstraintNode"},create(t,e){return r({kind:"PrimaryKeyConstraintNode",columns:r(t.map(l.create)),name:e?c.create(e):void 0})}});var Be=r({is(t){return t.kind==="AddIndexNode"},create(t){return r({kind:"AddIndexNode",name:c.create(t)})},cloneWith(t,e){return r({...t,...e})},cloneWithColumns(t,e){return r({...t,columns:[...t.columns||[],...e]})}});var Ft=class t{#e;constructor(e){this.#e=r(e)}unique(){return new t({...this.#e,node:f.cloneWithTableProps(this.#e.node,{addIndex:Be.cloneWith(this.#e.node.addIndex,{unique:!0})})})}column(e){return new t({...this.#e,node:f.cloneWithTableProps(this.#e.node,{addIndex:Be.cloneWithColumns(this.#e.node.addIndex,[Ze(e)])})})}columns(e){return new t({...this.#e,node:f.cloneWithTableProps(this.#e.node,{addIndex:Be.cloneWithColumns(this.#e.node.addIndex,e.map(Ze))})})}expression(e){return new t({...this.#e,node:f.cloneWithTableProps(this.#e.node,{addIndex:Be.cloneWithColumns(this.#e.node.addIndex,[e.toOperationNode()])})})}using(e){return new t({...this.#e,node:f.cloneWithTableProps(this.#e.node,{addIndex:Be.cloneWith(this.#e.node.addIndex,{using:T.createWithSql(e)})})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};u(Ft,"don't await AlterTableAddIndexBuilder instances directly. To execute the query you need to call `execute`");var Je=class t{#e;constructor(e){this.#e=e}toOperationNode(){return this.#e}nullsNotDistinct(){return new t(ht.cloneWith(this.#e,{nullsNotDistinct:!0}))}};u(Je,"don't await UniqueConstraintNodeBuilder instances directly.");var zt=class{#e;constructor(e){this.#e=r(e)}renameTo(e){return new le({...this.#e,node:f.cloneWithTableProps(this.#e.node,{renameTo:y(e)})})}setSchema(e){return new le({...this.#e,node:f.cloneWithTableProps(this.#e.node,{setSchema:c.create(e)})})}alterColumn(e,i){let o=i(new ft(e));return new Qe({...this.#e,node:f.cloneWithColumnAlteration(this.#e.node,o.toOperationNode())})}dropColumn(e){return new Qe({...this.#e,node:f.cloneWithColumnAlteration(this.#e.node,Wi.create(e))})}renameColumn(e,i){return new Qe({...this.#e,node:f.cloneWithColumnAlteration(this.#e.node,Ti.create(e,i))})}addColumn(e,i,o=se){let s=o(new me(b.create(e,ie(i))));return new Qe({...this.#e,node:f.cloneWithColumnAlteration(this.#e.node,Ci.create(s.toOperationNode()))})}modifyColumn(e,i,o=se){let s=o(new me(b.create(e,ie(i))));return new Qe({...this.#e,node:f.cloneWithColumnAlteration(this.#e.node,qi.create(s.toOperationNode()))})}addUniqueConstraint(e,i,o=se){let s=o(new Je(ht.create(i,e)));return new le({...this.#e,node:f.cloneWithTableProps(this.#e.node,{addConstraint:ct.create(s.toOperationNode())})})}addCheckConstraint(e,i){return new le({...this.#e,node:f.cloneWithTableProps(this.#e.node,{addConstraint:ct.create(ut.create(i.toOperationNode(),e))})})}addForeignKeyConstraint(e,i,o,s){return new Lt({...this.#e,constraintBuilder:new Ue(Ve.create(i.map(l.create),y(o),s.map(l.create),e))})}addPrimaryKeyConstraint(e,i){return new le({...this.#e,node:f.cloneWithTableProps(this.#e.node,{addConstraint:ct.create(Wr.create(i,e))})})}dropConstraint(e){return new Pt({...this.#e,node:f.cloneWithTableProps(this.#e.node,{dropConstraint:mt.create(e)})})}addIndex(e){return new Ft({...this.#e,node:f.cloneWithTableProps(this.#e.node,{addIndex:Be.create(e)})})}dropIndex(e){return new le({...this.#e,node:f.cloneWithTableProps(this.#e.node,{dropIndex:Ce.create(e)})})}$call(e){return e(this)}};u(zt,"don't await AlterTableBuilder instances");var Qe=class t{#e;constructor(e){this.#e=r(e)}alterColumn(e,i){let o=i(new ft(e));return new t({...this.#e,node:f.cloneWithColumnAlteration(this.#e.node,o.toOperationNode())})}dropColumn(e){return new t({...this.#e,node:f.cloneWithColumnAlteration(this.#e.node,Wi.create(e))})}renameColumn(e,i){return new t({...this.#e,node:f.cloneWithColumnAlteration(this.#e.node,Ti.create(e,i))})}addColumn(e,i,o=se){let s=o(new me(b.create(e,ie(i))));return new t({...this.#e,node:f.cloneWithColumnAlteration(this.#e.node,Ci.create(s.toOperationNode()))})}modifyColumn(e,i,o=se){let s=o(new me(b.create(e,ie(i))));return new t({...this.#e,node:f.cloneWithColumnAlteration(this.#e.node,qi.create(s.toOperationNode()))})}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};u(Qe,"don't await AlterTableColumnAlteringBuilder instances directly. To execute the query you need to call `execute`");var Nt=class extends ke{transformValue(e){return{...super.transformValue(e),immediate:!0}}};var Mt=class t{#e;constructor(e){this.#e=r(e)}ifNotExists(){return new t({...this.#e,node:Z.cloneWith(this.#e.node,{ifNotExists:!0})})}unique(){return new t({...this.#e,node:Z.cloneWith(this.#e.node,{unique:!0})})}nullsNotDistinct(){return new t({...this.#e,node:Z.cloneWith(this.#e.node,{nullsNotDistinct:!0})})}on(e){return new t({...this.#e,node:Z.cloneWith(this.#e.node,{table:y(e)})})}column(e){return new t({...this.#e,node:Z.cloneWithColumns(this.#e.node,[Ze(e)])})}columns(e){return new t({...this.#e,node:Z.cloneWithColumns(this.#e.node,e.map(Ze))})}expression(e){return new t({...this.#e,node:Z.cloneWithColumns(this.#e.node,[e.toOperationNode()])})}using(e){return new t({...this.#e,node:Z.cloneWith(this.#e.node,{using:T.createWithSql(e)})})}where(...e){let i=new Nt;return new t({...this.#e,node:d.cloneWithWhere(this.#e.node,i.transformNode(O(e)))})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};u(Mt,"don't await CreateIndexBuilder instances directly. To execute the query you need to call `execute`");var Vt=class t{#e;constructor(e){this.#e=r(e)}ifNotExists(){return new t({...this.#e,node:Zt.cloneWith(this.#e.node,{ifNotExists:!0})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};u(Vt,"don't await CreateSchemaBuilder instances directly. To execute the query you need to call `execute`");function qo(t){if(Li.includes(t))return t;throw new Error(`invalid OnCommitAction ${t}`)}var Ut=class t{#e;constructor(e){this.#e=r(e)}temporary(){return new t({...this.#e,node:Q.cloneWith(this.#e.node,{temporary:!0})})}onCommit(e){return new t({...this.#e,node:Q.cloneWith(this.#e.node,{onCommit:qo(e)})})}ifNotExists(){return new t({...this.#e,node:Q.cloneWith(this.#e.node,{ifNotExists:!0})})}addColumn(e,i,o=se){let s=o(new me(b.create(e,ie(i))));return new t({...this.#e,node:Q.cloneWithColumn(this.#e.node,s.toOperationNode())})}addPrimaryKeyConstraint(e,i){return new t({...this.#e,node:Q.cloneWithConstraint(this.#e.node,Wr.create(i,e))})}addUniqueConstraint(e,i,o=se){let s=o(new Je(ht.create(i,e)));return new t({...this.#e,node:Q.cloneWithConstraint(this.#e.node,s.toOperationNode())})}addCheckConstraint(e,i){return new t({...this.#e,node:Q.cloneWithConstraint(this.#e.node,ut.create(i.toOperationNode(),e))})}addForeignKeyConstraint(e,i,o,s,a=se){let p=a(new Ue(Ve.create(i.map(l.create),y(o),s.map(l.create),e)));return new t({...this.#e,node:Q.cloneWithConstraint(this.#e.node,p.toOperationNode())})}modifyFront(e){return new t({...this.#e,node:Q.cloneWithFrontModifier(this.#e.node,e.toOperationNode())})}modifyEnd(e){return new t({...this.#e,node:Q.cloneWithEndModifier(this.#e.node,e.toOperationNode())})}as(e){return new t({...this.#e,node:Q.cloneWith(this.#e.node,{selectQuery:U(e)})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};u(Ut,"don't await CreateTableBuilder instances directly. To execute the query you need to call `execute`");var Jt=class t{#e;constructor(e){this.#e=r(e)}on(e){return new t({...this.#e,node:Ce.cloneWith(this.#e.node,{table:y(e)})})}ifExists(){return new t({...this.#e,node:Ce.cloneWith(this.#e.node,{ifExists:!0})})}cascade(){return new t({...this.#e,node:Ce.cloneWith(this.#e.node,{cascade:!0})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};u(Jt,"don't await DropIndexBuilder instances directly. To execute the query you need to call `execute`");var $t=class t{#e;constructor(e){this.#e=r(e)}ifExists(){return new t({...this.#e,node:gt.cloneWith(this.#e.node,{ifExists:!0})})}cascade(){return new t({...this.#e,node:gt.cloneWith(this.#e.node,{cascade:!0})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};u($t,"don't await DropSchemaBuilder instances directly. To execute the query you need to call `execute`");var Kt=class t{#e;constructor(e){this.#e=r(e)}ifExists(){return new t({...this.#e,node:Ot.cloneWith(this.#e.node,{ifExists:!0})})}cascade(){return new t({...this.#e,node:Ot.cloneWith(this.#e.node,{cascade:!0})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};u(Kt,"don't await DropTableBuilder instances directly. To execute the query you need to call `execute`");var oe=r({is(t){return t.kind==="CreateViewNode"},create(t){return r({kind:"CreateViewNode",name:M.create(t)})},cloneWith(t,e){return r({...t,...e})}});var Tr=class{#e=new Nt;transformQuery(e){return this.#e.transformNode(e.node)}transformResult(e){return Promise.resolve(e.result)}};var jt=class t{#e;constructor(e){this.#e=r(e)}temporary(){return new t({...this.#e,node:oe.cloneWith(this.#e.node,{temporary:!0})})}materialized(){return new t({...this.#e,node:oe.cloneWith(this.#e.node,{materialized:!0})})}ifNotExists(){return new t({...this.#e,node:oe.cloneWith(this.#e.node,{ifNotExists:!0})})}orReplace(){return new t({...this.#e,node:oe.cloneWith(this.#e.node,{orReplace:!0})})}columns(e){return new t({...this.#e,node:oe.cloneWith(this.#e.node,{columns:e.map(Zr)})})}as(e){let i=e.withPlugin(new Tr).toOperationNode();return new t({...this.#e,node:oe.cloneWith(this.#e.node,{as:i})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};u(jt,"don't await CreateViewBuilder instances directly. To execute the query you need to call `execute`");var yt=r({is(t){return t.kind==="DropViewNode"},create(t){return r({kind:"DropViewNode",name:M.create(t)})},cloneWith(t,e){return r({...t,...e})}});var Gt=class t{#e;constructor(e){this.#e=r(e)}materialized(){return new t({...this.#e,node:yt.cloneWith(this.#e.node,{materialized:!0})})}ifExists(){return new t({...this.#e,node:yt.cloneWith(this.#e.node,{ifExists:!0})})}cascade(){return new t({...this.#e,node:yt.cloneWith(this.#e.node,{cascade:!0})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};u(Gt,"don't await DropViewBuilder instances directly. To execute the query you need to call `execute`");var qr=r({is(t){return t.kind==="CreateTypeNode"},create(t){return r({kind:"CreateTypeNode",name:t})},cloneWithEnum(t,e){return r({...t,enum:Se.create(e.map(i=>q.createImmediate(i)))})}});var Ht=class t{#e;constructor(e){this.#e=r(e)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}asEnum(e){return new t({...this.#e,node:qr.cloneWithEnum(this.#e.node,e)})}$call(e){return e(this)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};u(Ht,"don't await CreateTypeBuilder instances directly. To execute the query you need to call `execute`");var Ir=r({is(t){return t.kind==="DropTypeNode"},create(t){return r({kind:"DropTypeNode",name:t})},cloneWith(t,e){return r({...t,...e})}});var Yt=class t{#e;constructor(e){this.#e=r(e)}ifExists(){return new t({...this.#e,node:Ir.cloneWith(this.#e.node,{ifExists:!0})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};u(Yt,"don't await DropTypeBuilder instances directly. To execute the query you need to call `execute`");function Ii(t){let e=".";if(t.includes(e)){let i=t.split(e).map(xn);if(i.length===2)return M.createWithSchema(i[0],i[1]);throw new Error(`invalid schemable identifier ${t}`)}else return M.create(t)}function xn(t){return t.trim()}var Sr=class t{#e;constructor(e){this.#e=e}createTable(e){return new Ut({queryId:N(),executor:this.#e,node:Q.create(y(e))})}dropTable(e){return new Kt({queryId:N(),executor:this.#e,node:Ot.create(y(e))})}createIndex(e){return new Mt({queryId:N(),executor:this.#e,node:Z.create(e)})}dropIndex(e){return new Jt({queryId:N(),executor:this.#e,node:Ce.create(e)})}createSchema(e){return new Vt({queryId:N(),executor:this.#e,node:Zt.create(e)})}dropSchema(e){return new $t({queryId:N(),executor:this.#e,node:gt.create(e)})}alterTable(e){return new zt({queryId:N(),executor:this.#e,node:f.create(y(e))})}createView(e){return new jt({queryId:N(),executor:this.#e,node:oe.create(e)})}dropView(e){return new Gt({queryId:N(),executor:this.#e,node:yt.create(e)})}createType(e){return new Ht({queryId:N(),executor:this.#e,node:qr.create(Ii(e))})}dropType(e){return new Yt({queryId:N(),executor:this.#e,node:Ir.create(Ii(e))})}withPlugin(e){return new t(this.#e.withPlugin(e))}withoutPlugins(){return new t(this.#e.withoutPlugins())}withSchema(e){return new t(this.#e.withPluginAtFront(new re(e)))}};var kr=class{ref(e){return new er(e)}};var Ar=class{#e;constructor(e){this.#e=e}async provideConnection(e){let i=await this.#e.acquireConnection();try{return await e(i)}finally{await this.#e.releaseConnection(i)}}};var Er=class t extends nt{#e;#t;#r;constructor(e,i,o,s=[]){super(s),this.#e=e,this.#t=i,this.#r=o}get adapter(){return this.#t}compileQuery(e){return this.#e.compileQuery(e)}provideConnection(e){return this.#r.provideConnection(e)}withPlugins(e){return new t(this.#e,this.#t,this.#r,[...this.plugins,...e])}withPlugin(e){return new t(this.#e,this.#t,this.#r,[...this.plugins,e])}withPluginAtFront(e){return new t(this.#e,this.#t,this.#r,[e,...this.plugins])}withConnectionProvider(e){return new t(this.#e,this.#t,e,[...this.plugins])}withoutPlugins(){return new t(this.#e,this.#t,this.#r,[])}};function Si(){return typeof performance<"u"&&C(performance.now)?performance.now():Date.now()}var Rr=class{#e;#t;#r;#i;#o;#s=new WeakSet;constructor(e,i){this.#i=!1,this.#e=e,this.#t=i}async init(){if(this.#o)throw new Error("driver has already been destroyed");this.#r||(this.#r=this.#e.init().then(()=>{this.#i=!0}).catch(e=>(this.#r=void 0,Promise.reject(e)))),await this.#r}async acquireConnection(){if(this.#o)throw new Error("driver has already been destroyed");this.#i||await this.init();let e=await this.#e.acquireConnection();return this.#s.has(e)||(this.#n()&&this.#a(e),this.#s.add(e)),e}async releaseConnection(e){await this.#e.releaseConnection(e)}beginTransaction(e,i){return this.#e.beginTransaction(e,i)}commitTransaction(e){return this.#e.commitTransaction(e)}rollbackTransaction(e){return this.#e.rollbackTransaction(e)}async destroy(){this.#r&&(await this.#r,this.#o||(this.#o=this.#e.destroy().catch(e=>(this.#o=void 0,Promise.reject(e)))),await this.#o)}#n(){return this.#t.isLevelEnabled("query")||this.#t.isLevelEnabled("error")}#a(e){let i=e.executeQuery;e.executeQuery=async o=>{let s,a=Si();try{return await i.call(e,o)}catch(p){throw s=p,await this.#u(p,o,a),p}finally{s||await this.#p(o,a)}}}async#u(e,i,o){await this.#t.error(()=>({level:"error",error:e,query:i,queryDurationMillis:this.#d(o)}))}async#p(e,i){await this.#t.query(()=>({level:"query",query:e,queryDurationMillis:this.#d(i)}))}#d(e){return Si()-e}};var gn=()=>{},Xt=class{#e;#t;constructor(e){this.#e=e}async provideConnection(e){for(;this.#t;)await this.#t.catch(gn);return this.#t=this.#r(e).finally(()=>{this.#t=void 0}),this.#t}async#r(e){return await e(this.#e)}};var Io=["read uncommitted","read committed","repeatable read","serializable","snapshot"];var Bv=r(["query","error"]),Dr=class{#e;#t;constructor(e){C(e)?(this.#t=e,this.#e=r({query:!0,error:!0})):(this.#t=On,this.#e=r({query:e.includes("query"),error:e.includes("error")}))}isLevelEnabled(e){return this.#e[e]}async query(e){this.#e.query&&await this.#t(e())}async error(e){this.#e.error&&await this.#t(e())}};function On(t){t.level==="query"?(console.log(`kysely:query: ${t.query.sql}`),console.log(`kysely:query: duration: ${t.queryDurationMillis.toFixed(1)}ms`)):t.level==="error"&&(t.error instanceof Error?console.error(`kysely:error: ${t.error.stack??t.error.message}`):console.error(`kysely:error: ${JSON.stringify({error:t.error,query:t.query.sql,queryDurationMillis:t.queryDurationMillis})}`))}function So(t){return F(t)&&C(t.compile)}var wt=class t extends st{#e;constructor(e){let i,o;if(bn(e))i={executor:e.executor},o={...e};else{let s=e.dialect,a=s.createDriver(),p=s.createQueryCompiler(),h=s.createAdapter(),w=new Dr(e.log??[]),ne=new Rr(a,w),X=new Ar(ne),fe=new Er(p,h,X,e.plugins??[]);i={executor:fe},o={config:e,executor:fe,dialect:s,driver:ne}}super(i),this.#e=r(o)}get schema(){return new Sr(this.#e.executor)}get dynamic(){return new kr}get introspection(){return this.#e.dialect.createIntrospector(this.withoutPlugins())}case(e){return new at({node:j.create(J(e)?void 0:U(e))})}get fn(){return Or()}transaction(){return new Qr({...this.#e})}connection(){return new Br({...this.#e})}withPlugin(e){return new t({...this.#e,executor:this.#e.executor.withPlugin(e)})}withoutPlugins(){return new t({...this.#e,executor:this.#e.executor.withoutPlugins()})}withSchema(e){return new t({...this.#e,executor:this.#e.executor.withPluginAtFront(new re(e))})}withTables(){return new t({...this.#e})}async destroy(){await this.#e.driver.destroy()}get isTransaction(){return!1}getExecutor(){return this.#e.executor}executeQuery(e,i=N()){let o=So(e)?e.compile():e;return this.getExecutor().executeQuery(o,i)}},ki=class t extends wt{#e;constructor(e){super(e),this.#e=e}get isTransaction(){return!0}transaction(){throw new Error("calling the transaction method for a Transaction is not supported")}connection(){throw new Error("calling the connection method for a Transaction is not supported")}async destroy(){throw new Error("calling the destroy method for a Transaction is not supported")}withPlugin(e){return new t({...this.#e,executor:this.#e.executor.withPlugin(e)})}withoutPlugins(){return new t({...this.#e,executor:this.#e.executor.withoutPlugins()})}withSchema(e){return new t({...this.#e,executor:this.#e.executor.withPluginAtFront(new re(e))})}withTables(){return new t({...this.#e})}};function bn(t){return F(t)&&F(t.config)&&F(t.driver)&&F(t.executor)&&F(t.dialect)}var Br=class{#e;constructor(e){this.#e=r(e)}async execute(e){return this.#e.executor.provideConnection(async i=>{let o=this.#e.executor.withConnectionProvider(new Xt(i)),s=new wt({...this.#e,executor:o});return await e(s)})}};u(Br,"don't await ConnectionBuilder instances directly. To execute the query you need to call the `execute` method");var Qr=class t{#e;constructor(e){this.#e=r(e)}setIsolationLevel(e){return new t({...this.#e,isolationLevel:e})}async execute(e){let{isolationLevel:i,...o}=this.#e,s={isolationLevel:i};return vn(s),this.#e.executor.provideConnection(async a=>{let p=this.#e.executor.withConnectionProvider(new Xt(a)),h=new ki({...o,executor:p});try{await this.#e.driver.beginTransaction(a,s);let w=await e(h);return await this.#e.driver.commitTransaction(a),w}catch(w){throw await this.#e.driver.rollbackTransaction(a),w}})}};u(Qr,"don't await TransactionBuilder instances directly. To execute the transaction you need to call the `execute` method");function vn(t){if(t.isolationLevel&&!Io.includes(t.isolationLevel))throw new Error(`invalid transaction isolation level ${t.isolationLevel}`)}var Lr=class t{#e;constructor(e){this.#e=r(e)}get expressionType(){}get isRawBuilder(){return!0}as(e){return new Pr(this,e)}$castTo(){return new t({...this.#e})}$notNull(){return new t(this.#e)}withPlugin(e){return new t({...this.#e,plugins:this.#e.plugins!==void 0?r([...this.#e.plugins,e]):r([e])})}toOperationNode(){return this.#r(this.#t())}compile(e){return this.#i(this.#t(e))}async execute(e){let i=this.#t(e);return i.executeQuery(this.#i(i),this.#e.queryId)}#t(e){let i=e!==void 0?e.getExecutor():Ae;return this.#e.plugins!==void 0?i.withPlugins(this.#e.plugins):i}#r(e){return e.transformQuery(this.#e.rawNode,this.#e.queryId)}#i(e){return e.compileQuery(this.#r(e),this.#e.queryId)}};function be(t){return new Lr(t)}u(Lr,"don't await RawBuilder instances directly. To execute the query you need to call `execute`");var Pr=class{#e;#t;constructor(e,i){this.#e=e,this.#t=i}get expression(){return this.#e}get alias(){return this.#t}get rawBuilder(){return this.#e}toOperationNode(){return L.create(this.#e.toOperationNode(),v(this.#t)?this.#t.toOperationNode():c.create(this.#t))}};u(Pr,"don't await AliasedRawBuilder instances directly. AliasedRawBuilder should never be executed directly since it's always a part of another query.");var G=Object.assign((t,...e)=>be({queryId:N(),rawNode:T.create(t,e?.map(ko)??[])}),{ref(t){return be({queryId:N(),rawNode:T.createWithChild(K(t))})},val(t){return be({queryId:N(),rawNode:T.createWithChild(g(t))})},value(t){return this.val(t)},table(t){return be({queryId:N(),rawNode:T.createWithChild(y(t))})},id(...t){let e=new Array(t.length+1).fill(".");return e[0]="",e[e.length-1]="",be({queryId:N(),rawNode:T.create(e,t.map(c.create))})},lit(t){return be({queryId:N(),rawNode:T.createWithChild(q.createImmediate(t))})},literal(t){return this.lit(t)},raw(t){return be({queryId:N(),rawNode:T.createWithSql(t)})},join(t,e=G`, `){let i=new Array(2*t.length-1),o=e.toOperationNode();for(let s=0;s<t.length;++s)i[2*s]=ko(t[s]),s!==t.length-1&&(i[2*s+1]=o);return be({queryId:N(),rawNode:T.createWithChildren(i)})}});function ko(t){return v(t)?t.toOperationNode():g(t)}var Fr=class{nodeStack=[];get parentNode(){return this.nodeStack[this.nodeStack.length-2]}#e=r({AliasNode:this.visitAlias.bind(this),ColumnNode:this.visitColumn.bind(this),IdentifierNode:this.visitIdentifier.bind(this),SchemableIdentifierNode:this.visitSchemableIdentifier.bind(this),RawNode:this.visitRaw.bind(this),ReferenceNode:this.visitReference.bind(this),SelectQueryNode:this.visitSelectQuery.bind(this),SelectionNode:this.visitSelection.bind(this),TableNode:this.visitTable.bind(this),FromNode:this.visitFrom.bind(this),SelectAllNode:this.visitSelectAll.bind(this),AndNode:this.visitAnd.bind(this),OrNode:this.visitOr.bind(this),ValueNode:this.visitValue.bind(this),ValueListNode:this.visitValueList.bind(this),PrimitiveValueListNode:this.visitPrimitiveValueList.bind(this),ParensNode:this.visitParens.bind(this),JoinNode:this.visitJoin.bind(this),OperatorNode:this.visitOperator.bind(this),WhereNode:this.visitWhere.bind(this),InsertQueryNode:this.visitInsertQuery.bind(this),DeleteQueryNode:this.visitDeleteQuery.bind(this),ReturningNode:this.visitReturning.bind(this),CreateTableNode:this.visitCreateTable.bind(this),AddColumnNode:this.visitAddColumn.bind(this),ColumnDefinitionNode:this.visitColumnDefinition.bind(this),DropTableNode:this.visitDropTable.bind(this),DataTypeNode:this.visitDataType.bind(this),OrderByNode:this.visitOrderBy.bind(this),OrderByItemNode:this.visitOrderByItem.bind(this),GroupByNode:this.visitGroupBy.bind(this),GroupByItemNode:this.visitGroupByItem.bind(this),UpdateQueryNode:this.visitUpdateQuery.bind(this),ColumnUpdateNode:this.visitColumnUpdate.bind(this),LimitNode:this.visitLimit.bind(this),OffsetNode:this.visitOffset.bind(this),OnConflictNode:this.visitOnConflict.bind(this),OnDuplicateKeyNode:this.visitOnDuplicateKey.bind(this),CreateIndexNode:this.visitCreateIndex.bind(this),DropIndexNode:this.visitDropIndex.bind(this),ListNode:this.visitList.bind(this),PrimaryKeyConstraintNode:this.visitPrimaryKeyConstraint.bind(this),UniqueConstraintNode:this.visitUniqueConstraint.bind(this),ReferencesNode:this.visitReferences.bind(this),CheckConstraintNode:this.visitCheckConstraint.bind(this),WithNode:this.visitWith.bind(this),CommonTableExpressionNode:this.visitCommonTableExpression.bind(this),CommonTableExpressionNameNode:this.visitCommonTableExpressionName.bind(this),HavingNode:this.visitHaving.bind(this),CreateSchemaNode:this.visitCreateSchema.bind(this),DropSchemaNode:this.visitDropSchema.bind(this),AlterTableNode:this.visitAlterTable.bind(this),DropColumnNode:this.visitDropColumn.bind(this),RenameColumnNode:this.visitRenameColumn.bind(this),AlterColumnNode:this.visitAlterColumn.bind(this),ModifyColumnNode:this.visitModifyColumn.bind(this),AddConstraintNode:this.visitAddConstraint.bind(this),DropConstraintNode:this.visitDropConstraint.bind(this),ForeignKeyConstraintNode:this.visitForeignKeyConstraint.bind(this),CreateViewNode:this.visitCreateView.bind(this),DropViewNode:this.visitDropView.bind(this),GeneratedNode:this.visitGenerated.bind(this),DefaultValueNode:this.visitDefaultValue.bind(this),OnNode:this.visitOn.bind(this),ValuesNode:this.visitValues.bind(this),SelectModifierNode:this.visitSelectModifier.bind(this),CreateTypeNode:this.visitCreateType.bind(this),DropTypeNode:this.visitDropType.bind(this),ExplainNode:this.visitExplain.bind(this),DefaultInsertValueNode:this.visitDefaultInsertValue.bind(this),AggregateFunctionNode:this.visitAggregateFunction.bind(this),OverNode:this.visitOver.bind(this),PartitionByNode:this.visitPartitionBy.bind(this),PartitionByItemNode:this.visitPartitionByItem.bind(this),SetOperationNode:this.visitSetOperation.bind(this),BinaryOperationNode:this.visitBinaryOperation.bind(this),UnaryOperationNode:this.visitUnaryOperation.bind(this),UsingNode:this.visitUsing.bind(this),FunctionNode:this.visitFunction.bind(this),CaseNode:this.visitCase.bind(this),WhenNode:this.visitWhen.bind(this),JSONReferenceNode:this.visitJSONReference.bind(this),JSONPathNode:this.visitJSONPath.bind(this),JSONPathLegNode:this.visitJSONPathLeg.bind(this),JSONOperatorChainNode:this.visitJSONOperatorChain.bind(this),TupleNode:this.visitTuple.bind(this),MergeQueryNode:this.visitMergeQuery.bind(this),MatchedNode:this.visitMatched.bind(this),AddIndexNode:this.visitAddIndex.bind(this),CastNode:this.visitCast.bind(this),FetchNode:this.visitFetch.bind(this),TopNode:this.visitTop.bind(this),OutputNode:this.visitOutput.bind(this)});visitNode=e=>{this.nodeStack.push(e),this.#e[e.kind](e),this.nodeStack.pop()}};var zr=class extends Fr{#e="";#t=[];get numParameters(){return this.#t.length}compileQuery(e){return this.#e="",this.#t=[],this.nodeStack.splice(0,this.nodeStack.length),this.visitNode(e),r({query:e,sql:this.getSql(),parameters:[...this.#t]})}getSql(){return this.#e}visitSelectQuery(e){let i=this.parentNode!==void 0&&!ue.is(this.parentNode)&&!k.is(this.parentNode)&&!Q.is(this.parentNode)&&!oe.is(this.parentNode)&&!yr.is(this.parentNode);this.parentNode===void 0&&e.explain&&(this.visitNode(e.explain),this.append(" ")),i&&this.append("("),e.with&&(this.visitNode(e.with),this.append(" ")),this.append("select"),e.distinctOn&&(this.append(" "),this.compileDistinctOn(e.distinctOn)),e.frontModifiers?.length&&(this.append(" "),this.compileList(e.frontModifiers," ")),e.top&&(this.append(" "),this.visitNode(e.top)),e.selections&&(this.append(" "),this.compileList(e.selections)),e.from&&(this.append(" "),this.visitNode(e.from)),e.joins&&(this.append(" "),this.compileList(e.joins," ")),e.where&&(this.append(" "),this.visitNode(e.where)),e.groupBy&&(this.append(" "),this.visitNode(e.groupBy)),e.having&&(this.append(" "),this.visitNode(e.having)),e.setOperations&&(this.append(" "),this.compileList(e.setOperations," ")),e.orderBy&&(this.append(" "),this.visitNode(e.orderBy)),e.limit&&(this.append(" "),this.visitNode(e.limit)),e.offset&&(this.append(" "),this.visitNode(e.offset)),e.fetch&&(this.append(" "),this.visitNode(e.fetch)),e.endModifiers?.length&&(this.append(" "),this.compileList(this.sortSelectModifiers([...e.endModifiers])," ")),i&&this.append(")")}visitFrom(e){this.append("from "),this.compileList(e.froms)}visitSelection(e){this.visitNode(e.selection)}visitColumn(e){this.visitNode(e.column)}compileDistinctOn(e){this.append("distinct on ("),this.compileList(e),this.append(")")}compileList(e,i=", "){let o=e.length-1;for(let s=0;s<=o;s++)this.visitNode(e[s]),s<o&&this.append(i)}visitWhere(e){this.append("where "),this.visitNode(e.where)}visitHaving(e){this.append("having "),this.visitNode(e.having)}visitInsertQuery(e){let i=this.nodeStack.find(d.is),o=i!==e;!o&&e.explain&&(this.visitNode(e.explain),this.append(" ")),o&&!A.is(i)&&this.append("("),e.with&&(this.visitNode(e.with),this.append(" ")),this.append(e.replace?"replace":"insert"),e.ignore&&this.append(" ignore"),e.top&&(this.append(" "),this.visitNode(e.top)),e.into&&(this.append(" into "),this.visitNode(e.into)),e.columns&&(this.append(" ("),this.compileList(e.columns),this.append(")")),e.output&&(this.append(" "),this.visitNode(e.output)),e.values&&(this.append(" "),this.visitNode(e.values)),e.defaultValues&&(this.append(" "),this.append("default values")),e.onConflict&&(this.append(" "),this.visitNode(e.onConflict)),e.onDuplicateKey&&(this.append(" "),this.visitNode(e.onDuplicateKey)),e.returning&&(this.append(" "),this.visitNode(e.returning)),o&&!A.is(i)&&this.append(")")}visitValues(e){this.append("values "),this.compileList(e.values)}visitDeleteQuery(e){let i=this.nodeStack.find(d.is)!==e;!i&&e.explain&&(this.visitNode(e.explain),this.append(" ")),i&&this.append("("),e.with&&(this.visitNode(e.with),this.append(" ")),this.append("delete "),e.top&&(this.visitNode(e.top),this.append(" ")),this.visitNode(e.from),e.output&&(this.append(" "),this.visitNode(e.output)),e.using&&(this.append(" "),this.visitNode(e.using)),e.joins&&(this.append(" "),this.compileList(e.joins," ")),e.where&&(this.append(" "),this.visitNode(e.where)),e.orderBy&&(this.append(" "),this.visitNode(e.orderBy)),e.limit&&(this.append(" "),this.visitNode(e.limit)),e.returning&&(this.append(" "),this.visitNode(e.returning)),i&&this.append(")")}visitReturning(e){this.append("returning "),this.compileList(e.selections)}visitAlias(e){this.visitNode(e.node),this.append(" as "),this.visitNode(e.alias)}visitReference(e){e.table&&(this.visitNode(e.table),this.append(".")),this.visitNode(e.column)}visitSelectAll(e){this.append("*")}visitIdentifier(e){this.append(this.getLeftIdentifierWrapper()),this.compileUnwrappedIdentifier(e),this.append(this.getRightIdentifierWrapper())}compileUnwrappedIdentifier(e){if(!W(e.name))throw new Error("a non-string identifier was passed to compileUnwrappedIdentifier.");this.append(this.sanitizeIdentifier(e.name))}visitAnd(e){this.visitNode(e.left),this.append(" and "),this.visitNode(e.right)}visitOr(e){this.visitNode(e.left),this.append(" or "),this.visitNode(e.right)}visitValue(e){e.immediate?this.appendImmediateValue(e.value):this.appendValue(e.value)}visitValueList(e){this.append("("),this.compileList(e.values),this.append(")")}visitTuple(e){this.append("("),this.compileList(e.values),this.append(")")}visitPrimitiveValueList(e){this.append("(");let{values:i}=e;for(let o=0;o<i.length;++o)this.appendValue(i[o]),o!==i.length-1&&this.append(", ");this.append(")")}visitParens(e){this.append("("),this.visitNode(e.node),this.append(")")}visitJoin(e){this.append(Wn[e.joinType]),this.append(" "),this.visitNode(e.table),e.on&&(this.append(" "),this.visitNode(e.on))}visitOn(e){this.append("on "),this.visitNode(e.on)}visitRaw(e){let{sqlFragments:i,parameters:o}=e;for(let s=0;s<i.length;++s)this.append(i[s]),o.length>s&&this.visitNode(o[s])}visitOperator(e){this.append(e.operator)}visitTable(e){this.visitNode(e.table)}visitSchemableIdentifier(e){e.schema&&(this.visitNode(e.schema),this.append(".")),this.visitNode(e.identifier)}visitCreateTable(e){this.append("create "),e.frontModifiers&&e.frontModifiers.length>0&&(this.compileList(e.frontModifiers," "),this.append(" ")),e.temporary&&this.append("temporary "),this.append("table "),e.ifNotExists&&this.append("if not exists "),this.visitNode(e.table),e.selectQuery?(this.append(" as "),this.visitNode(e.selectQuery)):(this.append(" ("),this.compileList([...e.columns,...e.constraints??[]]),this.append(")"),e.onCommit&&(this.append(" on commit "),this.append(e.onCommit)),e.endModifiers&&e.endModifiers.length>0&&(this.append(" "),this.compileList(e.endModifiers," ")))}visitColumnDefinition(e){e.ifNotExists&&this.append("if not exists "),this.visitNode(e.column),this.append(" "),this.visitNode(e.dataType),e.unsigned&&this.append(" unsigned"),e.frontModifiers&&e.frontModifiers.length>0&&(this.append(" "),this.compileList(e.frontModifiers," ")),e.generated&&(this.append(" "),this.visitNode(e.generated)),e.identity&&this.append(" identity"),e.defaultTo&&(this.append(" "),this.visitNode(e.defaultTo)),e.notNull&&this.append(" not null"),e.unique&&this.append(" unique"),e.nullsNotDistinct&&this.append(" nulls not distinct"),e.primaryKey&&this.append(" primary key"),e.autoIncrement&&(this.append(" "),this.append(this.getAutoIncrement())),e.references&&(this.append(" "),this.visitNode(e.references)),e.check&&(this.append(" "),this.visitNode(e.check)),e.endModifiers&&e.endModifiers.length>0&&(this.append(" "),this.compileList(e.endModifiers," "))}getAutoIncrement(){return"auto_increment"}visitReferences(e){this.append("references "),this.visitNode(e.table),this.append(" ("),this.compileList(e.columns),this.append(")"),e.onDelete&&(this.append(" on delete "),this.append(e.onDelete)),e.onUpdate&&(this.append(" on update "),this.append(e.onUpdate))}visitDropTable(e){this.append("drop table "),e.ifExists&&this.append("if exists "),this.visitNode(e.table),e.cascade&&this.append(" cascade")}visitDataType(e){this.append(e.dataType)}visitOrderBy(e){this.append("order by "),this.compileList(e.items)}visitOrderByItem(e){this.visitNode(e.orderBy),e.direction&&(this.append(" "),this.visitNode(e.direction))}visitGroupBy(e){this.append("group by "),this.compileList(e.items)}visitGroupByItem(e){this.visitNode(e.groupBy)}visitUpdateQuery(e){let i=this.nodeStack.find(d.is),o=i!==e;!o&&e.explain&&(this.visitNode(e.explain),this.append(" ")),o&&!A.is(i)&&this.append("("),e.with&&(this.visitNode(e.with),this.append(" ")),this.append("update "),e.top&&(this.visitNode(e.top),this.append(" ")),e.table&&(this.visitNode(e.table),this.append(" ")),this.append("set "),e.updates&&this.compileList(e.updates),e.output&&(this.append(" "),this.visitNode(e.output)),e.from&&(this.append(" "),this.visitNode(e.from)),e.joins&&(this.append(" "),this.compileList(e.joins," ")),e.where&&(this.append(" "),this.visitNode(e.where)),e.limit&&(this.append(" "),this.visitNode(e.limit)),e.returning&&(this.append(" "),this.visitNode(e.returning)),o&&!A.is(i)&&this.append(")")}visitColumnUpdate(e){this.visitNode(e.column),this.append(" = "),this.visitNode(e.value)}visitLimit(e){this.append("limit "),this.visitNode(e.limit)}visitOffset(e){this.append("offset "),this.visitNode(e.offset)}visitOnConflict(e){this.append("on conflict"),e.columns?(this.append(" ("),this.compileList(e.columns),this.append(")")):e.constraint?(this.append(" on constraint "),this.visitNode(e.constraint)):e.indexExpression&&(this.append(" ("),this.visitNode(e.indexExpression),this.append(")")),e.indexWhere&&(this.append(" "),this.visitNode(e.indexWhere)),e.doNothing===!0?this.append(" do nothing"):e.updates&&(this.append(" do update set "),this.compileList(e.updates),e.updateWhere&&(this.append(" "),this.visitNode(e.updateWhere)))}visitOnDuplicateKey(e){this.append("on duplicate key update "),this.compileList(e.updates)}visitCreateIndex(e){this.append("create "),e.unique&&this.append("unique "),this.append("index "),e.ifNotExists&&this.append("if not exists "),this.visitNode(e.name),e.table&&(this.append(" on "),this.visitNode(e.table)),e.using&&(this.append(" using "),this.visitNode(e.using)),e.columns&&(this.append(" ("),this.compileList(e.columns),this.append(")")),e.nullsNotDistinct&&this.append(" nulls not distinct"),e.where&&(this.append(" "),this.visitNode(e.where))}visitDropIndex(e){this.append("drop index "),e.ifExists&&this.append("if exists "),this.visitNode(e.name),e.table&&(this.append(" on "),this.visitNode(e.table)),e.cascade&&this.append(" cascade")}visitCreateSchema(e){this.append("create schema "),e.ifNotExists&&this.append("if not exists "),this.visitNode(e.schema)}visitDropSchema(e){this.append("drop schema "),e.ifExists&&this.append("if exists "),this.visitNode(e.schema),e.cascade&&this.append(" cascade")}visitPrimaryKeyConstraint(e){e.name&&(this.append("constraint "),this.visitNode(e.name),this.append(" ")),this.append("primary key ("),this.compileList(e.columns),this.append(")")}visitUniqueConstraint(e){e.name&&(this.append("constraint "),this.visitNode(e.name),this.append(" ")),this.append("unique"),e.nullsNotDistinct&&this.append(" nulls not distinct"),this.append(" ("),this.compileList(e.columns),this.append(")")}visitCheckConstraint(e){e.name&&(this.append("constraint "),this.visitNode(e.name),this.append(" ")),this.append("check ("),this.visitNode(e.expression),this.append(")")}visitForeignKeyConstraint(e){e.name&&(this.append("constraint "),this.visitNode(e.name),this.append(" ")),this.append("foreign key ("),this.compileList(e.columns),this.append(") "),this.visitNode(e.references),e.onDelete&&(this.append(" on delete "),this.append(e.onDelete)),e.onUpdate&&(this.append(" on update "),this.append(e.onUpdate))}visitList(e){this.compileList(e.items)}visitWith(e){this.append("with "),e.recursive&&this.append("recursive "),this.compileList(e.expressions)}visitCommonTableExpression(e){this.visitNode(e.name),this.append(" as "),Le(e.materialized)&&(e.materialized||this.append("not "),this.append("materialized ")),this.visitNode(e.expression)}visitCommonTableExpressionName(e){this.visitNode(e.table),e.columns&&(this.append("("),this.compileList(e.columns),this.append(")"))}visitAlterTable(e){this.append("alter table "),this.visitNode(e.table),this.append(" "),e.renameTo&&(this.append("rename to "),this.visitNode(e.renameTo)),e.setSchema&&(this.append("set schema "),this.visitNode(e.setSchema)),e.addConstraint&&this.visitNode(e.addConstraint),e.dropConstraint&&this.visitNode(e.dropConstraint),e.columnAlterations&&this.compileColumnAlterations(e.columnAlterations),e.addIndex&&this.visitNode(e.addIndex),e.dropIndex&&this.visitNode(e.dropIndex)}visitAddColumn(e){this.append("add column "),this.visitNode(e.column)}visitRenameColumn(e){this.append("rename column "),this.visitNode(e.column),this.append(" to "),this.visitNode(e.renameTo)}visitDropColumn(e){this.append("drop column "),this.visitNode(e.column)}visitAlterColumn(e){this.append("alter column "),this.visitNode(e.column),this.append(" "),e.dataType&&(this.announcesNewColumnDataType()&&this.append("type "),this.visitNode(e.dataType),e.dataTypeExpression&&(this.append("using "),this.visitNode(e.dataTypeExpression))),e.setDefault&&(this.append("set default "),this.visitNode(e.setDefault)),e.dropDefault&&this.append("drop default"),e.setNotNull&&this.append("set not null"),e.dropNotNull&&this.append("drop not null")}visitModifyColumn(e){this.append("modify column "),this.visitNode(e.column)}visitAddConstraint(e){this.append("add "),this.visitNode(e.constraint)}visitDropConstraint(e){this.append("drop constraint "),e.ifExists&&this.append("if exists "),this.visitNode(e.constraintName),e.modifier==="cascade"?this.append(" cascade"):e.modifier==="restrict"&&this.append(" restrict")}visitSetOperation(e){this.append(e.operator),this.append(" "),e.all&&this.append("all "),this.visitNode(e.expression)}visitCreateView(e){this.append("create "),e.orReplace&&this.append("or replace "),e.materialized&&this.append("materialized "),e.temporary&&this.append("temporary "),this.append("view "),e.ifNotExists&&this.append("if not exists "),this.visitNode(e.name),this.append(" "),e.columns&&(this.append("("),this.compileList(e.columns),this.append(") ")),e.as&&(this.append("as "),this.visitNode(e.as))}visitDropView(e){this.append("drop "),e.materialized&&this.append("materialized "),this.append("view "),e.ifExists&&this.append("if exists "),this.visitNode(e.name),e.cascade&&this.append(" cascade")}visitGenerated(e){this.append("generated "),e.always&&this.append("always "),e.byDefault&&this.append("by default "),this.append("as "),e.identity&&this.append("identity"),e.expression&&(this.append("("),this.visitNode(e.expression),this.append(")")),e.stored&&this.append(" stored")}visitDefaultValue(e){this.append("default "),this.visitNode(e.defaultValue)}visitSelectModifier(e){e.rawModifier?this.visitNode(e.rawModifier):this.append(Cn[e.modifier]),e.of&&(this.append(" of "),this.compileList(e.of,", "))}visitCreateType(e){this.append("create type "),this.visitNode(e.name),e.enum&&(this.append(" as enum "),this.visitNode(e.enum))}visitDropType(e){this.append("drop type "),e.ifExists&&this.append("if exists "),this.visitNode(e.name)}visitExplain(e){this.append("explain"),(e.options||e.format)&&(this.append(" "),this.append(this.getLeftExplainOptionsWrapper()),e.options&&(this.visitNode(e.options),e.format&&this.append(this.getExplainOptionsDelimiter())),e.format&&(this.append("format"),this.append(this.getExplainOptionAssignment()),this.append(e.format)),this.append(this.getRightExplainOptionsWrapper()))}visitDefaultInsertValue(e){this.append("default")}visitAggregateFunction(e){this.append(e.func),this.append("("),e.distinct&&this.append("distinct "),this.compileList(e.aggregated),this.append(")"),e.filter&&(this.append(" filter("),this.visitNode(e.filter),this.append(")")),e.over&&(this.append(" "),this.visitNode(e.over))}visitOver(e){this.append("over("),e.partitionBy&&(this.visitNode(e.partitionBy),e.orderBy&&this.append(" ")),e.orderBy&&this.visitNode(e.orderBy),this.append(")")}visitPartitionBy(e){this.append("partition by "),this.compileList(e.items)}visitPartitionByItem(e){this.visitNode(e.partitionBy)}visitBinaryOperation(e){this.visitNode(e.leftOperand),this.append(" "),this.visitNode(e.operator),this.append(" "),this.visitNode(e.rightOperand)}visitUnaryOperation(e){this.visitNode(e.operator),this.isMinusOperator(e.operator)||this.append(" "),this.visitNode(e.operand)}isMinusOperator(e){return $.is(e)&&e.operator==="-"}visitUsing(e){this.append("using "),this.compileList(e.tables)}visitFunction(e){this.append(e.func),this.append("("),this.compileList(e.arguments),this.append(")")}visitCase(e){this.append("case"),e.value&&(this.append(" "),this.visitNode(e.value)),e.when&&(this.append(" "),this.compileList(e.when," ")),e.else&&(this.append(" else "),this.visitNode(e.else)),this.append(" end"),e.isStatement&&this.append(" case")}visitWhen(e){this.append("when "),this.visitNode(e.condition),e.result&&(this.append(" then "),this.visitNode(e.result))}visitJSONReference(e){this.visitNode(e.reference),this.visitNode(e.traversal)}visitJSONPath(e){e.inOperator&&this.visitNode(e.inOperator),this.append("'$");for(let i of e.pathLegs)this.visitNode(i);this.append("'")}visitJSONPathLeg(e){let i=e.type==="ArrayLocation";this.append(i?"[":"."),this.append(String(e.value)),i&&this.append("]")}visitJSONOperatorChain(e){for(let i=0,o=e.values.length;i<o;i++)i===o-1?this.visitNode(e.operator):this.append("->"),this.visitNode(e.values[i])}visitMergeQuery(e){e.with&&(this.visitNode(e.with),this.append(" ")),this.append("merge "),e.top&&(this.visitNode(e.top),this.append(" ")),this.append("into "),this.visitNode(e.into),e.using&&(this.append(" "),this.visitNode(e.using)),e.whens&&(this.append(" "),this.compileList(e.whens," ")),e.output&&(this.append(" "),this.visitNode(e.output))}visitMatched(e){e.not&&this.append("not "),this.append("matched"),e.bySource&&this.append(" by source")}visitAddIndex(e){this.append("add "),e.unique&&this.append("unique "),this.append("index "),this.visitNode(e.name),e.columns&&(this.append(" ("),this.compileList(e.columns),this.append(")")),e.using&&(this.append(" using "),this.visitNode(e.using))}visitCast(e){this.append("cast("),this.visitNode(e.expression),this.append(" as "),this.visitNode(e.dataType),this.append(")")}visitFetch(e){this.append("fetch next "),this.visitNode(e.rowCount),this.append(` rows ${e.modifier}`)}visitOutput(e){this.append("output "),this.compileList(e.selections)}visitTop(e){this.append(`top(${e.expression})`),e.modifiers&&this.append(` ${e.modifiers}`)}append(e){this.#e+=e}appendValue(e){this.addParameter(e),this.append(this.getCurrentParameterPlaceholder())}getLeftIdentifierWrapper(){return'"'}getRightIdentifierWrapper(){return'"'}getCurrentParameterPlaceholder(){return"$"+this.numParameters}getLeftExplainOptionsWrapper(){return"("}getExplainOptionAssignment(){return" "}getExplainOptionsDelimiter(){return", "}getRightExplainOptionsWrapper(){return")"}sanitizeIdentifier(e){let i=this.getLeftIdentifierWrapper(),o=this.getRightIdentifierWrapper(),s="";for(let a of e)s+=a,a===i?s+=i:a===o&&(s+=o);return s}addParameter(e){this.#t.push(e)}appendImmediateValue(e){if(W(e))this.append(`'${e}'`);else if(ve(e)||Le(e))this.append(e.toString());else if(je(e))this.append("null");else if(Qi(e))this.appendImmediateValue(e.toISOString());else if(Ge(e))this.appendImmediateValue(e.toString());else throw new Error(`invalid immediate value ${e}`)}sortSelectModifiers(e){return e.sort((i,o)=>i.modifier&&o.modifier?Ao[i.modifier]-Ao[o.modifier]:1),r(e)}compileColumnAlterations(e){this.compileList(e)}announcesNewColumnDataType(){return!0}},Cn=r({ForKeyShare:"for key share",ForNoKeyUpdate:"for no key update",ForUpdate:"for update",ForShare:"for share",NoWait:"nowait",SkipLocked:"skip locked",Distinct:"distinct"}),Ao=r({ForKeyShare:1,ForNoKeyUpdate:1,ForUpdate:1,ForShare:1,NoWait:2,SkipLocked:2,Distinct:0}),Wn=r({InnerJoin:"inner join",LeftJoin:"left join",RightJoin:"right join",FullJoin:"full join",LateralInnerJoin:"inner join lateral",LateralLeftJoin:"left join lateral",Using:"using"});var Mr=class{async init(){}async acquireConnection(){return new Ai}async beginTransaction(){}async commitTransaction(){}async rollbackTransaction(){}async releaseConnection(){}async destroy(){}},Ai=class{async executeQuery(){return{rows:[]}}async*streamQuery(){}};var Vr=class{get supportsCreateIfNotExists(){return!0}get supportsTransactionalDdl(){return!1}get supportsReturning(){return!1}get supportsOutput(){return!1}};var Tn=/"/g,Ur=class extends zr{sanitizeIdentifier(e){return e.replace(Tn,'""')}};var qn=BigInt("3853314791062309107"),Jr=class extends Vr{get supportsTransactionalDdl(){return!0}get supportsReturning(){return!0}async acquireMigrationLock(e,i){await G`select pg_advisory_xact_lock(${G.lit(qn)})`.execute(e)}async releaseMigrationLock(e,i){}};function Eo(t){return new wt({dialect:{createAdapter:()=>new t.Adapter,createDriver:()=>new Mr,createIntrospector:()=>null,createQueryCompiler:()=>new t.QueryCompiler},plugins:[...t.noParameters?[new Ei]:[]]})}var Ei=class{#e=new Ri;transformQuery(e){return this.#e.transformNode(e.node)}transformResult(e){return Promise.resolve(e.result)}},Ri=class extends ke{transformPrimitiveValueList(e){return Se.create(e.values.map(q.createImmediate))}transformValue(e){return{...super.transformValue(e),immediate:!0}}};function $e(t){let e=t.compile();return{parameters:e.parameters,sql:e.sql}}function Ro(t,e){let i=In(t,e);return o=>o.where(s=>s.and(i.map(([a,p])=>s(a,p===null?"is":"=",p))))}function In(t,e){return Object.entries(Object.values(e).reduce((i,o)=>{let{isInPrimaryKey:s,name:a}=o;return s&&(i[a]=t[a]),i},{}))}function Ke(t){return Eo({...t,Adapter:Jr,QueryCompiler:Ur})}function Do(t,e){let{table:i,row:o}=t,{name:s,schema:a}=i,p=Ke(e);return $e(p.withSchema(a).insertInto(s).values(o).returningAll().returning(h=>[h.cast("ctid","text").as("ctid")]))}function Bo(t,e){let{pageIndex:i,pageSize:o,sortOrder:s,table:{name:a,schema:p}}=t,h=Ke(e);return $e(h.with("count",w=>w.withSchema(p).selectFrom(a).select(ne=>ne.cast(h.fn.coalesce(h.fn.countAll(),G.lit(0)),"text").as("oid"))).withSchema(p).selectFrom([a,"count"]).select(w=>[w.cast("ctid","text").as("ctid"),w.ref("count.oid").as("oid")]).selectAll(a).$call(w=>s.reduce((ne,X)=>ne.orderBy(X.column,X.direction),w)).limit(o).offset(G.lit(BigInt(i)*BigInt(o))))}function Qo(t,e){let{changes:i,row:o,table:{columns:s,name:a,schema:p}}=t,h=Ke(e);return $e(h.withSchema(p).updateTable(a).set(i).$call(Ro(o,s)).returningAll(a).returning(w=>[w.cast("ctid","text").as("ctid"),w.cast(w.fn("floor",[w(w.fn("extract",[G`epoch from now()`]),"*",1e6)]),"text").as("__ps_updated_at__")]))}function Lo(t){return G`(select coalesce(json_agg(agg), '[]') from ${t} as agg)`}var Sn="r",kn="v",An=[Sn,kn];function Po(t){return $e(Ke(t).selectFrom("pg_catalog.pg_class as cls").innerJoin("pg_catalog.pg_namespace as ns","cls.relnamespace","ns.oid").$call(En).where("cls.relkind","in",An).select(e=>["ns.nspname as schema","cls.relname as name",Lo(e.selectFrom("pg_catalog.pg_attribute as att").innerJoin("pg_catalog.pg_type as typ","typ.oid","att.atttypid").leftJoin("pg_catalog.pg_constraint as con",i=>i.on("con.contype","=","p").onRef("con.conrelid","=","cls.oid").on(o=>G`${o.ref("att.attnum")} = ANY(${o.ref("con.conkey")})`)).whereRef("att.attrelid","=","cls.oid").where("att.attnum",">=",0).where("att.attisdropped","!=",!0).select(i=>["att.attname as name","typ.typname as datatype",i("con.conkey","is not",null).$castTo().as("pk")])).as("columns")]))}function Fo(){let t=Ke();return $e(t.selectNoFrom(t.fn("current_setting",[G.lit("timezone")]).as("timezone")))}function En(t){return t.where("ns.nspname","!~","^pg_").where("ns.nspname","!=","information_schema")}function zo(t){let{executor:e,...i}=t;return{defaultSchema:"public",async introspect(o){try{let s=Po(i),a=Fo(),[[p,h],[w,ne]]=await Promise.all([e.execute(s,o),e.execute(a,o)]),X=p||w;if(X)return[X];let[fe]=ne;return fe?[null,Rn(h,fe.timezone)]:[new Error("Timezone not found")]}catch(s){return[s]}},async query(o,s){try{let a=Bo(o,i),[p,h]=await e.execute(a,s);return p?[p]:[null,{filteredRowCount:h[0]?.oid||"0",rows:h}]}catch(a){return[a]}},async insert(o,s){try{let a=Do(o,i),[p,h]=await e.execute(a,s);return p?[p]:[null,{row:h[0]}]}catch(a){return[a]}},async update(o,s){try{let a=Qo(o,i),[p,h]=await e.execute(a,s);if(p)return[p];let[w]=h;return w?[null,{row:w}]:[new Error("Update failed")]}catch(a){return[a]}}}}function Rn(t,e){return t.reduce((i,o)=>{let{schemas:s}=i,{columns:a,name:p,schema:h}=o,w=a.reduce((ne,{datatype:X,name:fe,pk:Di})=>{let $r=X.startsWith("_"),Kr=$r?X.slice(1):X;return{...ne,[fe]:{name:fe,schema:h,table:fe,isInPrimaryKey:Di,datatype:{...Bi[Kr]||{group:"raw"},isArray:$r,name:$r?`${Kr}[]`:Kr}}}},{});return(s[h]||={tables:{}}).tables[p]={columns:w,name:p,schema:h},i},{schemas:{public:{tables:{}}},timezone:e})}function Mo(t){return{execute:async(e,i)=>{let{abortSignal:o}=i||{},s,a=new Promise((h,w)=>s=w);function p(){let h=new Error("This operation was aborted");h.name="AbortError",s(h)}o?.addEventListener("abort",p);try{return[null,(await Promise.race([t.query(e.sql,e.parameters,{rowMode:"object"}),a])).rows]}catch(h){return[h]}finally{o?.removeEventListener("abort",p)}}}}function Dn(t){return zo({executor:Mo(t)})}0&&(module.exports={createPGLiteAdapter,createPGLiteExecutor});
|
|
1
|
+
"use strict";var ni=Object.defineProperty;var mn=Object.getOwnPropertyDescriptor;var fn=Object.getOwnPropertyNames;var Nn=Object.prototype.hasOwnProperty;var yn=(t,e)=>{for(var r in e)ni(t,r,{get:e[r],enumerable:!0})},wn=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of fn(e))!Nn.call(t,n)&&n!==r&&ni(t,n,{get:()=>e[n],enumerable:!(o=mn(e,n))||o.enumerable});return t};var xn=t=>wn(ni({},"__esModule",{value:!0}),t);var hs={};yn(hs,{createPGLiteAdapter:()=>cs,createPGLiteExecutor:()=>ln});module.exports=xn(hs);function G(t){let{error:e,query:r}=t,o=e;return o.query=r,[o]}var no={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:"string"},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"}};function H(t){return typeof t>"u"||t===void 0}function v(t){return typeof t=="string"}function Ee(t){return typeof t=="number"}function Ue(t){return typeof t=="boolean"}function Ze(t){return t===null}function so(t){return t instanceof Date}function _e(t){return typeof t=="bigint"}function k(t){return typeof t=="function"}function q(t){return typeof t=="object"&&t!==null}function i(t){return Object.freeze(t)}function Et(t){return M(t)?t:[t]}function M(t){return Array.isArray(t)}function U(t){return t}var N=i({is(t){return t.kind==="AlterTableNode"},create(t){return i({kind:"AlterTableNode",table:t})},cloneWithTableProps(t,e){return i({...t,...e})},cloneWithColumnAlteration(t,e){return i({...t,columnAlterations:t.columnAlterations?[...t.columnAlterations,e]:[e]})}});var p=i({is(t){return t.kind==="IdentifierNode"},create(t){return i({kind:"IdentifierNode",name:t})}});var ie=i({is(t){return t.kind==="CreateIndexNode"},create(t){return i({kind:"CreateIndexNode",name:p.create(t)})},cloneWith(t,e){return i({...t,...e})},cloneWithColumns(t,e){return i({...t,columns:[...t.columns||[],...e]})}});var Gt=i({is(t){return t.kind==="CreateSchemaNode"},create(t,e){return i({kind:"CreateSchemaNode",schema:p.create(t),...e})},cloneWith(t,e){return i({...t,...e})}});var ao=["preserve rows","delete rows","drop"],z=i({is(t){return t.kind==="CreateTableNode"},create(t){return i({kind:"CreateTableNode",table:t,columns:i([])})},cloneWithColumn(t,e){return i({...t,columns:i([...t.columns,e])})},cloneWithConstraint(t,e){return i({...t,constraints:t.constraints?i([...t.constraints,e]):i([e])})},cloneWithFrontModifier(t,e){return i({...t,frontModifiers:t.frontModifiers?i([...t.frontModifiers,e]):i([e])})},cloneWithEndModifier(t,e){return i({...t,endModifiers:t.endModifiers?i([...t.endModifiers,e]):i([e])})},cloneWith(t,e){return i({...t,...e})}});var V=i({is(t){return t.kind==="SchemableIdentifierNode"},create(t){return i({kind:"SchemableIdentifierNode",identifier:p.create(t)})},createWithSchema(t,e){return i({kind:"SchemableIdentifierNode",schema:p.create(t),identifier:p.create(e)})}});var Re=i({is(t){return t.kind==="DropIndexNode"},create(t,e){return i({kind:"DropIndexNode",name:V.create(t),...e})},cloneWith(t,e){return i({...t,...e})}});var Rt=i({is(t){return t.kind==="DropSchemaNode"},create(t,e){return i({kind:"DropSchemaNode",schema:p.create(t),...e})},cloneWith(t,e){return i({...t,...e})}});var It=i({is(t){return t.kind==="DropTableNode"},create(t,e){return i({kind:"DropTableNode",table:t,...e})},cloneWith(t,e){return i({...t,...e})}});var E=i({is(t){return t.kind==="AliasNode"},create(t,e){return i({kind:"AliasNode",node:t,alias:e})}});var Y=i({is(t){return t.kind==="TableNode"},create(t){return i({kind:"TableNode",table:V.create(t)})},createWithSchema(t,e){return i({kind:"TableNode",table:V.createWithSchema(t,e)})}});function b(t){return q(t)&&k(t.toOperationNode)}function Kt(t){return q(t)&&"expressionType"in t&&b(t)}function uo(t){return q(t)&&"expression"in t&&v(t.alias)&&b(t)}var le=i({is(t){return t.kind==="SelectModifierNode"},create(t,e){return i({kind:"SelectModifierNode",modifier:t,of:e})},createWithExpression(t){return i({kind:"SelectModifierNode",rawModifier:t})}});var K=i({is(t){return t.kind==="AndNode"},create(t,e){return i({kind:"AndNode",left:t,right:e})}});var oe=i({is(t){return t.kind==="OrNode"},create(t,e){return i({kind:"OrNode",left:t,right:e})}});var jt=i({is(t){return t.kind==="OnNode"},create(t){return i({kind:"OnNode",on:t})},cloneWithOperation(t,e,r){return i({...t,on:e==="And"?K.create(t.on,r):oe.create(t.on,r)})}});var Oe=i({is(t){return t.kind==="JoinNode"},create(t,e){return i({kind:"JoinNode",joinType:t,table:e,on:void 0})},createWithOn(t,e,r){return i({kind:"JoinNode",joinType:t,table:e,on:jt.create(r)})},cloneWithOn(t,e){return i({...t,on:t.on?jt.cloneWithOperation(t.on,"And",e):jt.create(e)})}});var Ie=i({is(t){return t.kind==="BinaryOperationNode"},create(t,e,r){return i({kind:"BinaryOperationNode",leftOperand:t,operator:e,rightOperand:r})}});var gn=["=","==","!=","<>",">",">=","<","<=","in","not in","is","is not","like","not like","match","ilike","not ilike","@>","<@","^@","&&","?","?&","?|","!<","!>","<=>","!~","~","~*","!~*","@@","@@@","!!","<->","regexp","is distinct from","is not distinct from"],On=["+","-","*","/","%","^","&","|","#","<<",">>"],po=["->","->>"],bn=[...gn,...On,"&&","||"],Cn=["exists","not exists"],vn=["not","-",...Cn],co=[...bn,...po,...vn,"between","between symmetric"],X=i({is(t){return t.kind==="OperatorNode"},create(t){return i({kind:"OperatorNode",operator:t})}});function si(t){return v(t)&&po.includes(t)}var m=i({is(t){return t.kind==="ColumnNode"},create(t){return i({kind:"ColumnNode",column:p.create(t)})}});var et=i({is(t){return t.kind==="SelectAllNode"},create(){return i({kind:"SelectAllNode"})}});var tt=i({is(t){return t.kind==="ReferenceNode"},create(t,e){return i({kind:"ReferenceNode",table:e,column:t})},createSelectAll(t){return i({kind:"ReferenceNode",table:t,column:et.create()})}});var Ht=class{#e;get dynamicReference(){return this.#e}get refType(){}constructor(e){this.#e=e}toOperationNode(){return ai(this.#e)}};function Yt(t){return q(t)&&b(t)&&v(t.dynamicReference)}var ne=i({is(t){return t.kind==="OrderByItemNode"},create(t,e){return i({kind:"OrderByItemNode",orderBy:t,direction:e})},cloneWith(t,e){return i({...t,...e})}});var W=i({is(t){return t.kind==="RawNode"},create(t,e){return i({kind:"RawNode",sqlFragments:i(t),parameters:i(e)})},createWithSql(t){return W.create([t],[])},createWithChild(t){return W.create(["",""],[t])},createWithChildren(t){return W.create(new Array(t.length+1).fill(""),t)}});var ho={is(t){return t.kind==="CollateNode"},create(t){return i({kind:"CollateNode",collation:p.create(t)})}};var Xt=class t{#e;constructor(e){this.#e=i(e)}desc(){return new t({node:ne.cloneWith(this.#e.node,{direction:W.createWithSql("desc")})})}asc(){return new t({node:ne.cloneWith(this.#e.node,{direction:W.createWithSql("asc")})})}nullsLast(){return new t({node:ne.cloneWith(this.#e.node,{nulls:"last"})})}nullsFirst(){return new t({node:ne.cloneWith(this.#e.node,{nulls:"first"})})}collate(e){return new t({node:ne.cloneWith(this.#e.node,{collation:ho.create(e)})})}toOperationNode(){return this.#e.node}};var lo=new Set;function De(t){lo.has(t)||(lo.add(t),console.log(t))}function di(t){return t==="asc"||t==="desc"}function _(t){if(t.length===2)return[ui(t[0],t[1])];if(t.length===1){let[e]=t;return Array.isArray(e)?(De("orderBy(array) is deprecated, use multiple orderBy calls instead."),e.map(r=>ui(r))):[ui(e)]}throw new Error(`Invalid number of arguments at order by! expected 1-2, received ${t.length}`)}function ui(t,e){let r=Wn(t);if(ne.is(r)){if(e)throw new Error("Cannot specify direction twice!");return r}return mo(r,e)}function Wn(t){if(be(t))return j(t);if(Yt(t))return t.toOperationNode();let[e,r]=t.split(" ");return r?(De("`orderBy('column asc')` is deprecated. Use `orderBy('column', 'asc')` instead."),mo(Z(e),r)):Z(t)}function mo(t,e){if(typeof e=="string"){if(!di(e))throw new Error(`Invalid order by direction: ${e}`);return ne.create(t,W.createWithSql(e))}if(Kt(e))return De("`orderBy(..., expr)` is deprecated. Use `orderBy(..., 'asc')` or `orderBy(..., (ob) => ...)` instead."),ne.create(t,e.toOperationNode());let r=ne.create(t);return e?e(new Xt({node:r})).toOperationNode():r}var rt=i({is(t){return t.kind==="JSONReferenceNode"},create(t,e){return i({kind:"JSONReferenceNode",reference:t,traversal:e})},cloneWithTraversal(t,e){return i({...t,traversal:e})}});var Zt=i({is(t){return t.kind==="JSONOperatorChainNode"},create(t){return i({kind:"JSONOperatorChainNode",operator:t,values:i([])})},cloneWithValue(t,e){return i({...t,values:i([...t.values,e])})}});var qe=i({is(t){return t.kind==="JSONPathNode"},create(t){return i({kind:"JSONPathNode",inOperator:t,pathLegs:i([])})},cloneWithLeg(t,e){return i({...t,pathLegs:i([...t.pathLegs,e])})}});function ai(t){return v(t)?Z(t):t.toOperationNode()}function Ce(t){return M(t)?t.map(e=>B(e)):[B(t)]}function B(t){return be(t)?j(t):ai(t)}function fo(t,e){let r=Z(t);if(si(e))return rt.create(r,Zt.create(X.create(e)));let o=e.slice(0,-1);if(si(o))return rt.create(r,qe.create(X.create(o)));throw new Error(`Invalid JSON operator: ${e}`)}function Z(t){let e=".";if(!t.includes(e))return tt.create(m.create(t));let r=t.split(e).map(ci);if(r.length===3)return kn(r);if(r.length===2)return Sn(r);throw new Error(`invalid column reference ${t}`)}function No(t){let e=" as ";if(t.includes(e)){let[r,o]=t.split(e).map(ci);return E.create(Z(r),p.create(o))}else return Z(t)}function pi(t){return m.create(t)}function it(t){let e=" ";if(t.includes(e)){let[r,o]=t.split(e).map(ci);if(!di(o))throw new Error(`invalid order direction "${o}" next to "${r}"`);return _([r,o])[0]}else return pi(t)}function kn(t){let[e,r,o]=t;return tt.create(m.create(o),Y.createWithSchema(e,r))}function Sn(t){let[e,r]=t;return tt.create(m.create(r),Y.create(e))}function ci(t){return t.trim()}var _t=i({is(t){return t.kind==="PrimitiveValueListNode"},create(t){return i({kind:"PrimitiveValueListNode",values:i([...t])})}});var me=i({is(t){return t.kind==="ValueListNode"},create(t){return i({kind:"ValueListNode",values:i(t)})}});var T=i({is(t){return t.kind==="ValueNode"},create(t){return i({kind:"ValueNode",value:t})},createImmediate(t){return i({kind:"ValueNode",value:t,immediate:!0})}});function yo(t){return M(t)?Tn(t):g(t)}function g(t){return be(t)?j(t):T.create(t)}function er(t){return Ee(t)||Ue(t)||Ze(t)}function Dt(t){if(!er(t))throw new Error(`unsafe immediate value ${JSON.stringify(t)}`);return T.createImmediate(t)}function Tn(t){return t.some(be)?me.create(t.map(e=>g(e))):_t.create(t)}var fe=i({is(t){return t.kind==="ParensNode"},create(t){return i({kind:"ParensNode",node:t})}});function O(t){if(t.length===3)return tr(t[0],t[1],t[2]);if(t.length===1)return g(t[0]);throw new Error(`invalid arguments: ${JSON.stringify(t)}`)}function tr(t,e,r){return An(e)&&xo(r)?Ie.create(B(t),hi(e),T.createImmediate(r)):Ie.create(B(t),hi(e),yo(r))}function R(t,e,r){return Ie.create(B(t),hi(e),B(r))}function li(t,e){return ot(Object.entries(t).filter(([,r])=>!H(r)).map(([r,o])=>tr(r,xo(o)?"is":"=",o)),e)}function ot(t,e,r=!0){let o=e==="and"?K.create:oe.create;if(t.length===0)return Ie.create(T.createImmediate(1),X.create("="),T.createImmediate(e==="and"?1:0));let n=wo(t[0]);for(let a=1;a<t.length;++a)n=o(n,wo(t[a]));return t.length>1&&r?fe.create(n):n}function An(t){return t==="is"||t==="is not"}function xo(t){return Ze(t)||Ue(t)}function hi(t){if(v(t)&&co.includes(t))return X.create(t);if(b(t))return t.toOperationNode();throw new Error(`invalid operator ${JSON.stringify(t)}`)}function wo(t){return b(t)?t.toOperationNode():t}var ve=i({is(t){return t.kind==="OrderByNode"},create(t){return i({kind:"OrderByNode",items:i([...t])})},cloneWithItems(t,e){return i({...t,items:i([...t.items,...e])})}});var mi=i({is(t){return t.kind==="PartitionByNode"},create(t){return i({kind:"PartitionByNode",items:i(t)})},cloneWithItems(t,e){return i({...t,items:i([...t.items,...e])})}});var qt=i({is(t){return t.kind==="OverNode"},create(){return i({kind:"OverNode"})},cloneWithOrderByItems(t,e){return i({...t,orderBy:t.orderBy?ve.cloneWithItems(t.orderBy,e):ve.create(e)})},cloneWithPartitionByItems(t,e){return i({...t,partitionBy:t.partitionBy?mi.cloneWithItems(t.partitionBy,e):mi.create(e)})}});var Je=i({is(t){return t.kind==="FromNode"},create(t){return i({kind:"FromNode",froms:i(t)})},cloneWithFroms(t,e){return i({...t,froms:i([...t.froms,...e])})}});var fi=i({is(t){return t.kind==="GroupByNode"},create(t){return i({kind:"GroupByNode",items:i(t)})},cloneWithItems(t,e){return i({...t,items:i([...t.items,...e])})}});var Ni=i({is(t){return t.kind==="HavingNode"},create(t){return i({kind:"HavingNode",having:t})},cloneWithOperation(t,e,r){return i({...t,having:e==="And"?K.create(t.having,r):oe.create(t.having,r)})}});var S=i({is(t){return t.kind==="InsertQueryNode"},create(t,e,r){return i({kind:"InsertQueryNode",into:t,...e&&{with:e},replace:r})},createWithoutInto(){return i({kind:"InsertQueryNode"})},cloneWith(t,e){return i({...t,...e})}});var rr=i({is(t){return t.kind==="ListNode"},create(t){return i({kind:"ListNode",items:i(t)})}});var Ne=i({is(t){return t.kind==="UpdateQueryNode"},create(t,e){return i({kind:"UpdateQueryNode",table:t.length===1?t[0]:rr.create(t),...e&&{with:e}})},createWithoutTable(){return i({kind:"UpdateQueryNode"})},cloneWithFromItems(t,e){return i({...t,from:t.from?Je.cloneWithFroms(t.from,e):Je.create(e)})},cloneWithUpdates(t,e){return i({...t,updates:t.updates?i([...t.updates,...e]):e})},cloneWithLimit(t,e){return i({...t,limit:e})}});var yi=i({is(t){return t.kind==="UsingNode"},create(t){return i({kind:"UsingNode",tables:i(t)})},cloneWithTables(t,e){return i({...t,tables:i([...t.tables,...e])})}});var Be=i({is(t){return t.kind==="DeleteQueryNode"},create(t,e){return i({kind:"DeleteQueryNode",from:Je.create(t),...e&&{with:e}})},cloneWithOrderByItems:(t,e)=>u.cloneWithOrderByItems(t,e),cloneWithoutOrderBy:t=>u.cloneWithoutOrderBy(t),cloneWithLimit(t,e){return i({...t,limit:e})},cloneWithoutLimit(t){return i({...t,limit:void 0})},cloneWithUsing(t,e){return i({...t,using:t.using!==void 0?yi.cloneWithTables(t.using,e):yi.create(e)})}});var Q=i({is(t){return t.kind==="WhereNode"},create(t){return i({kind:"WhereNode",where:t})},cloneWithOperation(t,e,r){return i({...t,where:e==="And"?K.create(t.where,r):oe.create(t.where,r)})}});var wi=i({is(t){return t.kind==="ReturningNode"},create(t){return i({kind:"ReturningNode",selections:i(t)})},cloneWithSelections(t,e){return i({...t,selections:t.selections?i([...t.selections,...e]):i(e)})}});var go=i({is(t){return t.kind==="ExplainNode"},create(t,e){return i({kind:"ExplainNode",format:t,options:e})}});var We=i({is(t){return t.kind==="WhenNode"},create(t){return i({kind:"WhenNode",condition:t})},cloneWithResult(t,e){return i({...t,result:e})}});var I=i({is(t){return t.kind==="MergeQueryNode"},create(t,e){return i({kind:"MergeQueryNode",into:t,...e&&{with:e}})},cloneWithUsing(t,e){return i({...t,using:e})},cloneWithWhen(t,e){return i({...t,whens:t.whens?i([...t.whens,e]):i([e])})},cloneWithThen(t,e){return i({...t,whens:t.whens?i([...t.whens.slice(0,-1),We.cloneWithResult(t.whens[t.whens.length-1],e)]):void 0})}});var xi=i({is(t){return t.kind==="OutputNode"},create(t){return i({kind:"OutputNode",selections:i(t)})},cloneWithSelections(t,e){return i({...t,selections:t.selections?i([...t.selections,...e]):i(e)})}});var u=i({is(t){return x.is(t)||S.is(t)||Ne.is(t)||Be.is(t)||I.is(t)},cloneWithEndModifier(t,e){return i({...t,endModifiers:t.endModifiers?i([...t.endModifiers,e]):i([e])})},cloneWithWhere(t,e){return i({...t,where:t.where?Q.cloneWithOperation(t.where,"And",e):Q.create(e)})},cloneWithJoin(t,e){return i({...t,joins:t.joins?i([...t.joins,e]):i([e])})},cloneWithReturning(t,e){return i({...t,returning:t.returning?wi.cloneWithSelections(t.returning,e):wi.create(e)})},cloneWithoutReturning(t){return i({...t,returning:void 0})},cloneWithoutWhere(t){return i({...t,where:void 0})},cloneWithExplain(t,e,r){return i({...t,explain:go.create(e,r?.toOperationNode())})},cloneWithTop(t,e){return i({...t,top:e})},cloneWithOutput(t,e){return i({...t,output:t.output?xi.cloneWithSelections(t.output,e):xi.create(e)})},cloneWithOrderByItems(t,e){return i({...t,orderBy:t.orderBy?ve.cloneWithItems(t.orderBy,e):ve.create(e)})},cloneWithoutOrderBy(t){return i({...t,orderBy:void 0})}});var x=i({is(t){return t.kind==="SelectQueryNode"},create(t){return i({kind:"SelectQueryNode",...t&&{with:t}})},createFrom(t,e){return i({kind:"SelectQueryNode",from:Je.create(t),...e&&{with:e}})},cloneWithSelections(t,e){return i({...t,selections:t.selections?i([...t.selections,...e]):i(e)})},cloneWithDistinctOn(t,e){return i({...t,distinctOn:t.distinctOn?i([...t.distinctOn,...e]):i(e)})},cloneWithFrontModifier(t,e){return i({...t,frontModifiers:t.frontModifiers?i([...t.frontModifiers,e]):i([e])})},cloneWithOrderByItems:(t,e)=>u.cloneWithOrderByItems(t,e),cloneWithGroupByItems(t,e){return i({...t,groupBy:t.groupBy?fi.cloneWithItems(t.groupBy,e):fi.create(e)})},cloneWithLimit(t,e){return i({...t,limit:e})},cloneWithOffset(t,e){return i({...t,offset:e})},cloneWithFetch(t,e){return i({...t,fetch:e})},cloneWithHaving(t,e){return i({...t,having:t.having?Ni.cloneWithOperation(t.having,"And",e):Ni.create(e)})},cloneWithSetOperations(t,e){return i({...t,setOperations:t.setOperations?i([...t.setOperations,...e]):i([...e])})},cloneWithoutSelections(t){return i({...t,selections:[]})},cloneWithoutLimit(t){return i({...t,limit:void 0})},cloneWithoutOffset(t){return i({...t,offset:void 0})},cloneWithoutOrderBy:t=>u.cloneWithoutOrderBy(t),cloneWithoutGroupBy(t){return i({...t,groupBy:void 0})}});var ir=class t{#e;constructor(e){this.#e=i(e)}on(...e){return new t({...this.#e,joinNode:Oe.cloneWithOn(this.#e.joinNode,O(e))})}onRef(e,r,o){return new t({...this.#e,joinNode:Oe.cloneWithOn(this.#e.joinNode,R(e,r,o))})}onTrue(){return new t({...this.#e,joinNode:Oe.cloneWithOn(this.#e.joinNode,W.createWithSql("true"))})}$call(e){return e(this)}toOperationNode(){return this.#e.joinNode}};var Oo=i({is(t){return t.kind==="PartitionByItemNode"},create(t){return i({kind:"PartitionByItemNode",partitionBy:t})}});function bo(t){return Ce(t).map(Oo.create)}var or=class t{#e;constructor(e){this.#e=i(e)}orderBy(...e){return new t({overNode:qt.cloneWithOrderByItems(this.#e.overNode,_(e))})}clearOrderBy(){return new t({overNode:u.cloneWithoutOrderBy(this.#e.overNode)})}partitionBy(e){return new t({overNode:qt.cloneWithPartitionByItems(this.#e.overNode,bo(e))})}$call(e){return e(this)}toOperationNode(){return this.#e.overNode}};var nt=i({is(t){return t.kind==="SelectionNode"},create(t){return i({kind:"SelectionNode",selection:t})},createSelectAll(){return i({kind:"SelectionNode",selection:et.create()})},createSelectAllFromTable(t){return i({kind:"SelectionNode",selection:tt.createSelectAll(t)})}});function A(t){return k(t)?A(t(se())):M(t)?t.map(e=>Co(e)):[Co(t)]}function Co(t){return v(t)?nt.create(No(t)):Yt(t)?nt.create(t.toOperationNode()):nt.create(nr(t))}function D(t){return t?Array.isArray(t)?t.map(vo):[vo(t)]:[nt.createSelectAll()]}function vo(t){if(v(t))return nt.createSelectAllFromTable(y(t));throw new Error(`invalid value selectAll expression: ${JSON.stringify(t)}`)}var Wo=i({is(t){return t.kind==="ValuesNode"},create(t){return i({kind:"ValuesNode",values:i(t)})}});var ko=i({is(t){return t.kind==="DefaultInsertValueNode"},create(){return i({kind:"DefaultInsertValueNode"})}});function sr(t){let e=k(t)?t(se()):t,r=M(e)?e:i([e]);return En(r)}function En(t){let e=Rn(t);return[i([...e.keys()].map(m.create)),Wo.create(t.map(r=>In(r,e)))]}function Rn(t){let e=new Map;for(let r of t){let o=Object.keys(r);for(let n of o)!e.has(n)&&r[n]!==void 0&&e.set(n,e.size)}return e}function In(t,e){let r=Object.keys(t),o=Array.from({length:e.size}),n=!1,a=r.length;for(let h of r){let l=e.get(h);if(H(l)){a--;continue}let c=t[h];(H(c)||be(c))&&(n=!0),o[l]=c}if(a<e.size||n){let h=ko.create();return me.create(o.map(l=>H(l)?h:g(l)))}return _t.create(o)}var gi=i({is(t){return t.kind==="ColumnUpdateNode"},create(t,e){return i({kind:"ColumnUpdateNode",column:t,value:e})}});function So(...t){return t.length===2?[gi.create(B(t[0]),g(t[1]))]:Bt(t[0])}function Bt(t){let e=k(t)?t(se()):t;return Object.entries(e).filter(([r,o])=>o!==void 0).map(([r,o])=>gi.create(m.create(r),g(o)))}var To=i({is(t){return t.kind==="OnDuplicateKeyNode"},create(t){return i({kind:"OnDuplicateKeyNode",updates:t})}});var ar=class{insertId;numInsertedOrUpdatedRows;constructor(e,r){this.insertId=e,this.numInsertedOrUpdatedRows=r}};var te=class extends Error{node;constructor(e){super("no result"),this.node=e}};function ye(t){return Object.prototype.hasOwnProperty.call(t,"prototype")}var J=i({is(t){return t.kind==="OnConflictNode"},create(){return i({kind:"OnConflictNode"})},cloneWith(t,e){return i({...t,...e})},cloneWithIndexWhere(t,e){return i({...t,indexWhere:t.indexWhere?Q.cloneWithOperation(t.indexWhere,"And",e):Q.create(e)})},cloneWithIndexOrWhere(t,e){return i({...t,indexWhere:t.indexWhere?Q.cloneWithOperation(t.indexWhere,"Or",e):Q.create(e)})},cloneWithUpdateWhere(t,e){return i({...t,updateWhere:t.updateWhere?Q.cloneWithOperation(t.updateWhere,"And",e):Q.create(e)})},cloneWithUpdateOrWhere(t,e){return i({...t,updateWhere:t.updateWhere?Q.cloneWithOperation(t.updateWhere,"Or",e):Q.create(e)})},cloneWithoutIndexWhere(t){return i({...t,indexWhere:void 0})},cloneWithoutUpdateWhere(t){return i({...t,updateWhere:void 0})}});var ur=class t{#e;constructor(e){this.#e=i(e)}column(e){let r=m.create(e);return new t({...this.#e,onConflictNode:J.cloneWith(this.#e.onConflictNode,{columns:this.#e.onConflictNode.columns?i([...this.#e.onConflictNode.columns,r]):i([r])})})}columns(e){let r=e.map(m.create);return new t({...this.#e,onConflictNode:J.cloneWith(this.#e.onConflictNode,{columns:this.#e.onConflictNode.columns?i([...this.#e.onConflictNode.columns,...r]):i(r)})})}constraint(e){return new t({...this.#e,onConflictNode:J.cloneWith(this.#e.onConflictNode,{constraint:p.create(e)})})}expression(e){return new t({...this.#e,onConflictNode:J.cloneWith(this.#e.onConflictNode,{indexExpression:e.toOperationNode()})})}where(...e){return new t({...this.#e,onConflictNode:J.cloneWithIndexWhere(this.#e.onConflictNode,O(e))})}whereRef(e,r,o){return new t({...this.#e,onConflictNode:J.cloneWithIndexWhere(this.#e.onConflictNode,R(e,r,o))})}clearWhere(){return new t({...this.#e,onConflictNode:J.cloneWithoutIndexWhere(this.#e.onConflictNode)})}doNothing(){return new Oi({...this.#e,onConflictNode:J.cloneWith(this.#e.onConflictNode,{doNothing:!0})})}doUpdateSet(e){return new bi({...this.#e,onConflictNode:J.cloneWith(this.#e.onConflictNode,{updates:Bt(e)})})}$call(e){return e(this)}},Oi=class{#e;constructor(e){this.#e=i(e)}toOperationNode(){return this.#e.onConflictNode}},bi=class t{#e;constructor(e){this.#e=i(e)}where(...e){return new t({...this.#e,onConflictNode:J.cloneWithUpdateWhere(this.#e.onConflictNode,O(e))})}whereRef(e,r,o){return new t({...this.#e,onConflictNode:J.cloneWithUpdateWhere(this.#e.onConflictNode,R(e,r,o))})}clearWhere(){return new t({...this.#e,onConflictNode:J.cloneWithoutUpdateWhere(this.#e.onConflictNode)})}$call(e){return e(this)}toOperationNode(){return this.#e.onConflictNode}};var Ao=i({is(t){return t.kind==="TopNode"},create(t,e){return i({kind:"TopNode",expression:t,modifiers:e})}});function ae(t,e){if(!Ee(t)&&!_e(t))throw new Error(`Invalid top expression: ${t}`);if(!H(e)&&!Dn(e))throw new Error(`Invalid top modifiers: ${e}`);return Ao.create(t,e)}function Dn(t){return t==="percent"||t==="with ties"||t==="percent with ties"}var $e=i({is(t){return t.kind==="OrActionNode"},create(t){return i({kind:"OrActionNode",action:t})}});var Qt=class t{#e;constructor(e){this.#e=i(e)}values(e){let[r,o]=sr(e);return new t({...this.#e,queryNode:S.cloneWith(this.#e.queryNode,{columns:r,values:o})})}columns(e){return new t({...this.#e,queryNode:S.cloneWith(this.#e.queryNode,{columns:i(e.map(m.create))})})}expression(e){return new t({...this.#e,queryNode:S.cloneWith(this.#e.queryNode,{values:j(e)})})}defaultValues(){return new t({...this.#e,queryNode:S.cloneWith(this.#e.queryNode,{defaultValues:!0})})}modifyEnd(e){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,e.toOperationNode())})}ignore(){return new t({...this.#e,queryNode:S.cloneWith(this.#e.queryNode,{orAction:$e.create("ignore")})})}orIgnore(){return new t({...this.#e,queryNode:S.cloneWith(this.#e.queryNode,{orAction:$e.create("ignore")})})}orAbort(){return new t({...this.#e,queryNode:S.cloneWith(this.#e.queryNode,{orAction:$e.create("abort")})})}orFail(){return new t({...this.#e,queryNode:S.cloneWith(this.#e.queryNode,{orAction:$e.create("fail")})})}orReplace(){return new t({...this.#e,queryNode:S.cloneWith(this.#e.queryNode,{orAction:$e.create("replace")})})}orRollback(){return new t({...this.#e,queryNode:S.cloneWith(this.#e.queryNode,{orAction:$e.create("rollback")})})}top(e,r){return new t({...this.#e,queryNode:u.cloneWithTop(this.#e.queryNode,ae(e,r))})}onConflict(e){return new t({...this.#e,queryNode:S.cloneWith(this.#e.queryNode,{onConflict:e(new ur({onConflictNode:J.create()})).toOperationNode()})})}onDuplicateKeyUpdate(e){return new t({...this.#e,queryNode:S.cloneWith(this.#e.queryNode,{onDuplicateKey:To.create(Bt(e))})})}returning(e){return new t({...this.#e,queryNode:u.cloneWithReturning(this.#e.queryNode,A(e))})}returningAll(){return new t({...this.#e,queryNode:u.cloneWithReturning(this.#e.queryNode,D())})}output(e){return new t({...this.#e,queryNode:u.cloneWithOutput(this.#e.queryNode,A(e))})}outputAll(e){return new t({...this.#e,queryNode:u.cloneWithOutput(this.#e.queryNode,D(e))})}clearReturning(){return new t({...this.#e,queryNode:u.cloneWithoutReturning(this.#e.queryNode)})}$call(e){return e(this)}$if(e,r){return e?r(this):new t({...this.#e})}$castTo(){return new t(this.#e)}$narrowType(){return new t(this.#e)}$assertType(){return new t(this.#e)}withPlugin(e){return new t({...this.#e,executor:this.#e.executor.withPlugin(e)})}toOperationNode(){return this.#e.executor.transformQuery(this.#e.queryNode,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){let e=this.compile(),r=await this.#e.executor.executeQuery(e,this.#e.queryId),{adapter:o}=this.#e.executor,n=e.query;return n.returning&&o.supportsReturning||n.output&&o.supportsOutput?r.rows:[new ar(r.insertId,r.numAffectedRows??BigInt(0))]}async executeTakeFirst(){let[e]=await this.execute();return e}async executeTakeFirstOrThrow(e=te){let r=await this.executeTakeFirst();if(r===void 0)throw ye(e)?new e(this.toOperationNode()):e(this.toOperationNode());return r}async*stream(e=100){let r=this.compile(),o=this.#e.executor.stream(r,e,this.#e.queryId);for await(let n of o)yield*n.rows}async explain(e,r){return await new t({...this.#e,queryNode:u.cloneWithExplain(this.#e.queryNode,e,r)}).execute()}};var dr=class{numDeletedRows;constructor(e){this.numDeletedRows=e}};var st=i({is(t){return t.kind==="LimitNode"},create(t){return i({kind:"LimitNode",limit:t})}});var pr=class t{#e;constructor(e){this.#e=i(e)}where(...e){return new t({...this.#e,queryNode:u.cloneWithWhere(this.#e.queryNode,O(e))})}whereRef(e,r,o){return new t({...this.#e,queryNode:u.cloneWithWhere(this.#e.queryNode,R(e,r,o))})}clearWhere(){return new t({...this.#e,queryNode:u.cloneWithoutWhere(this.#e.queryNode)})}top(e,r){return new t({...this.#e,queryNode:u.cloneWithTop(this.#e.queryNode,ae(e,r))})}using(e){return new t({...this.#e,queryNode:Be.cloneWithUsing(this.#e.queryNode,ue(e))})}innerJoin(...e){return this.#t("InnerJoin",e)}leftJoin(...e){return this.#t("LeftJoin",e)}rightJoin(...e){return this.#t("RightJoin",e)}fullJoin(...e){return this.#t("FullJoin",e)}#t(e,r){return new t({...this.#e,queryNode:u.cloneWithJoin(this.#e.queryNode,Qe(e,r))})}returning(e){return new t({...this.#e,queryNode:u.cloneWithReturning(this.#e.queryNode,A(e))})}returningAll(e){return new t({...this.#e,queryNode:u.cloneWithReturning(this.#e.queryNode,D(e))})}output(e){return new t({...this.#e,queryNode:u.cloneWithOutput(this.#e.queryNode,A(e))})}outputAll(e){return new t({...this.#e,queryNode:u.cloneWithOutput(this.#e.queryNode,D(e))})}clearReturning(){return new t({...this.#e,queryNode:u.cloneWithoutReturning(this.#e.queryNode)})}clearLimit(){return new t({...this.#e,queryNode:Be.cloneWithoutLimit(this.#e.queryNode)})}orderBy(...e){return new t({...this.#e,queryNode:u.cloneWithOrderByItems(this.#e.queryNode,_(e))})}clearOrderBy(){return new t({...this.#e,queryNode:u.cloneWithoutOrderBy(this.#e.queryNode)})}limit(e){return new t({...this.#e,queryNode:Be.cloneWithLimit(this.#e.queryNode,st.create(g(e)))})}modifyEnd(e){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,e.toOperationNode())})}$call(e){return e(this)}$if(e,r){return e?r(this):new t({...this.#e})}$castTo(){return new t(this.#e)}$narrowType(){return new t(this.#e)}$assertType(){return new t(this.#e)}withPlugin(e){return new t({...this.#e,executor:this.#e.executor.withPlugin(e)})}toOperationNode(){return this.#e.executor.transformQuery(this.#e.queryNode,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){let e=this.compile(),r=await this.#e.executor.executeQuery(e,this.#e.queryId),{adapter:o}=this.#e.executor,n=e.query;return n.returning&&o.supportsReturning||n.output&&o.supportsOutput?r.rows:[new dr(r.numAffectedRows??BigInt(0))]}async executeTakeFirst(){let[e]=await this.execute();return e}async executeTakeFirstOrThrow(e=te){let r=await this.executeTakeFirst();if(r===void 0)throw ye(e)?new e(this.toOperationNode()):e(this.toOperationNode());return r}async*stream(e=100){let r=this.compile(),o=this.#e.executor.stream(r,e,this.#e.queryId);for await(let n of o)yield*n.rows}async explain(e,r){return await new t({...this.#e,queryNode:u.cloneWithExplain(this.#e.queryNode,e,r)}).execute()}};var cr=class{numUpdatedRows;numChangedRows;constructor(e,r){this.numUpdatedRows=e,this.numChangedRows=r}};var at=class t{#e;constructor(e){this.#e=i(e)}where(...e){return new t({...this.#e,queryNode:u.cloneWithWhere(this.#e.queryNode,O(e))})}whereRef(e,r,o){return new t({...this.#e,queryNode:u.cloneWithWhere(this.#e.queryNode,R(e,r,o))})}clearWhere(){return new t({...this.#e,queryNode:u.cloneWithoutWhere(this.#e.queryNode)})}top(e,r){return new t({...this.#e,queryNode:u.cloneWithTop(this.#e.queryNode,ae(e,r))})}from(e){return new t({...this.#e,queryNode:Ne.cloneWithFromItems(this.#e.queryNode,ue(e))})}innerJoin(...e){return this.#t("InnerJoin",e)}leftJoin(...e){return this.#t("LeftJoin",e)}rightJoin(...e){return this.#t("RightJoin",e)}fullJoin(...e){return this.#t("FullJoin",e)}#t(e,r){return new t({...this.#e,queryNode:u.cloneWithJoin(this.#e.queryNode,Qe(e,r))})}orderBy(...e){return new t({...this.#e,queryNode:u.cloneWithOrderByItems(this.#e.queryNode,_(e))})}clearOrderBy(){return new t({...this.#e,queryNode:u.cloneWithoutOrderBy(this.#e.queryNode)})}limit(e){return new t({...this.#e,queryNode:Ne.cloneWithLimit(this.#e.queryNode,st.create(g(e)))})}set(...e){return new t({...this.#e,queryNode:Ne.cloneWithUpdates(this.#e.queryNode,So(...e))})}returning(e){return new t({...this.#e,queryNode:u.cloneWithReturning(this.#e.queryNode,A(e))})}returningAll(e){return new t({...this.#e,queryNode:u.cloneWithReturning(this.#e.queryNode,D(e))})}output(e){return new t({...this.#e,queryNode:u.cloneWithOutput(this.#e.queryNode,A(e))})}outputAll(e){return new t({...this.#e,queryNode:u.cloneWithOutput(this.#e.queryNode,D(e))})}modifyEnd(e){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,e.toOperationNode())})}clearReturning(){return new t({...this.#e,queryNode:u.cloneWithoutReturning(this.#e.queryNode)})}$call(e){return e(this)}$if(e,r){return e?r(this):new t({...this.#e})}$castTo(){return new t(this.#e)}$narrowType(){return new t(this.#e)}$assertType(){return new t(this.#e)}withPlugin(e){return new t({...this.#e,executor:this.#e.executor.withPlugin(e)})}toOperationNode(){return this.#e.executor.transformQuery(this.#e.queryNode,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){let e=this.compile(),r=await this.#e.executor.executeQuery(e,this.#e.queryId),{adapter:o}=this.#e.executor,n=e.query;return n.returning&&o.supportsReturning||n.output&&o.supportsOutput?r.rows:[new cr(r.numAffectedRows??BigInt(0),r.numChangedRows)]}async executeTakeFirst(){let[e]=await this.execute();return e}async executeTakeFirstOrThrow(e=te){let r=await this.executeTakeFirst();if(r===void 0)throw ye(e)?new e(this.toOperationNode()):e(this.toOperationNode());return r}async*stream(e=100){let r=this.compile(),o=this.#e.executor.stream(r,e,this.#e.queryId);for await(let n of o)yield*n.rows}async explain(e,r){return await new t({...this.#e,queryNode:u.cloneWithExplain(this.#e.queryNode,e,r)}).execute()}};var Ci=i({is(t){return t.kind==="CommonTableExpressionNameNode"},create(t,e){return i({kind:"CommonTableExpressionNameNode",table:Y.create(t),columns:e?i(e.map(m.create)):void 0})}});var ut=i({is(t){return t.kind==="CommonTableExpressionNode"},create(t,e){return i({kind:"CommonTableExpressionNode",name:t,expression:e})},cloneWith(t,e){return i({...t,...e})}});var hr=class t{#e;constructor(e){this.#e=i(e)}materialized(){return new t({...this.#e,node:ut.cloneWith(this.#e.node,{materialized:!0})})}notMaterialized(){return new t({...this.#e,node:ut.cloneWith(this.#e.node,{materialized:!1})})}toOperationNode(){return this.#e.node}};function vi(t,e){let r=e(Ro()).toOperationNode();return k(t)?t(qn(r)).toOperationNode():ut.create(Eo(t),r)}function qn(t){return e=>new hr({node:ut.create(Eo(e),t)})}function Eo(t){if(t.includes("(")){let e=t.split(/[\(\)]/),r=e[0],o=e[1].split(",").map(n=>n.trim());return Ci.create(r,o)}else return Ci.create(t)}var Lt=i({is(t){return t.kind==="WithNode"},create(t,e){return i({kind:"WithNode",expressions:i([t]),...e})},cloneWithExpression(t,e){return i({...t,expressions:i([...t.expressions,e])})}});var Io=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9"];function Do(t){let e="";for(let r=0;r<t;++r)e+=Bn();return e}function Bn(){return Io[~~(Math.random()*Io.length)]}function f(){return new Wi}var Wi=class{#e;get queryId(){return this.#e===void 0&&(this.#e=Do(8)),this.#e}};var Le=class{nodeStack=[];#e=i({AliasNode:this.transformAlias.bind(this),ColumnNode:this.transformColumn.bind(this),IdentifierNode:this.transformIdentifier.bind(this),SchemableIdentifierNode:this.transformSchemableIdentifier.bind(this),RawNode:this.transformRaw.bind(this),ReferenceNode:this.transformReference.bind(this),SelectQueryNode:this.transformSelectQuery.bind(this),SelectionNode:this.transformSelection.bind(this),TableNode:this.transformTable.bind(this),FromNode:this.transformFrom.bind(this),SelectAllNode:this.transformSelectAll.bind(this),AndNode:this.transformAnd.bind(this),OrNode:this.transformOr.bind(this),ValueNode:this.transformValue.bind(this),ValueListNode:this.transformValueList.bind(this),PrimitiveValueListNode:this.transformPrimitiveValueList.bind(this),ParensNode:this.transformParens.bind(this),JoinNode:this.transformJoin.bind(this),OperatorNode:this.transformOperator.bind(this),WhereNode:this.transformWhere.bind(this),InsertQueryNode:this.transformInsertQuery.bind(this),DeleteQueryNode:this.transformDeleteQuery.bind(this),ReturningNode:this.transformReturning.bind(this),CreateTableNode:this.transformCreateTable.bind(this),AddColumnNode:this.transformAddColumn.bind(this),ColumnDefinitionNode:this.transformColumnDefinition.bind(this),DropTableNode:this.transformDropTable.bind(this),DataTypeNode:this.transformDataType.bind(this),OrderByNode:this.transformOrderBy.bind(this),OrderByItemNode:this.transformOrderByItem.bind(this),GroupByNode:this.transformGroupBy.bind(this),GroupByItemNode:this.transformGroupByItem.bind(this),UpdateQueryNode:this.transformUpdateQuery.bind(this),ColumnUpdateNode:this.transformColumnUpdate.bind(this),LimitNode:this.transformLimit.bind(this),OffsetNode:this.transformOffset.bind(this),OnConflictNode:this.transformOnConflict.bind(this),OnDuplicateKeyNode:this.transformOnDuplicateKey.bind(this),CreateIndexNode:this.transformCreateIndex.bind(this),DropIndexNode:this.transformDropIndex.bind(this),ListNode:this.transformList.bind(this),PrimaryKeyConstraintNode:this.transformPrimaryKeyConstraint.bind(this),UniqueConstraintNode:this.transformUniqueConstraint.bind(this),ReferencesNode:this.transformReferences.bind(this),CheckConstraintNode:this.transformCheckConstraint.bind(this),WithNode:this.transformWith.bind(this),CommonTableExpressionNode:this.transformCommonTableExpression.bind(this),CommonTableExpressionNameNode:this.transformCommonTableExpressionName.bind(this),HavingNode:this.transformHaving.bind(this),CreateSchemaNode:this.transformCreateSchema.bind(this),DropSchemaNode:this.transformDropSchema.bind(this),AlterTableNode:this.transformAlterTable.bind(this),DropColumnNode:this.transformDropColumn.bind(this),RenameColumnNode:this.transformRenameColumn.bind(this),AlterColumnNode:this.transformAlterColumn.bind(this),ModifyColumnNode:this.transformModifyColumn.bind(this),AddConstraintNode:this.transformAddConstraint.bind(this),DropConstraintNode:this.transformDropConstraint.bind(this),RenameConstraintNode:this.transformRenameConstraint.bind(this),ForeignKeyConstraintNode:this.transformForeignKeyConstraint.bind(this),CreateViewNode:this.transformCreateView.bind(this),RefreshMaterializedViewNode:this.transformRefreshMaterializedView.bind(this),DropViewNode:this.transformDropView.bind(this),GeneratedNode:this.transformGenerated.bind(this),DefaultValueNode:this.transformDefaultValue.bind(this),OnNode:this.transformOn.bind(this),ValuesNode:this.transformValues.bind(this),SelectModifierNode:this.transformSelectModifier.bind(this),CreateTypeNode:this.transformCreateType.bind(this),DropTypeNode:this.transformDropType.bind(this),ExplainNode:this.transformExplain.bind(this),DefaultInsertValueNode:this.transformDefaultInsertValue.bind(this),AggregateFunctionNode:this.transformAggregateFunction.bind(this),OverNode:this.transformOver.bind(this),PartitionByNode:this.transformPartitionBy.bind(this),PartitionByItemNode:this.transformPartitionByItem.bind(this),SetOperationNode:this.transformSetOperation.bind(this),BinaryOperationNode:this.transformBinaryOperation.bind(this),UnaryOperationNode:this.transformUnaryOperation.bind(this),UsingNode:this.transformUsing.bind(this),FunctionNode:this.transformFunction.bind(this),CaseNode:this.transformCase.bind(this),WhenNode:this.transformWhen.bind(this),JSONReferenceNode:this.transformJSONReference.bind(this),JSONPathNode:this.transformJSONPath.bind(this),JSONPathLegNode:this.transformJSONPathLeg.bind(this),JSONOperatorChainNode:this.transformJSONOperatorChain.bind(this),TupleNode:this.transformTuple.bind(this),MergeQueryNode:this.transformMergeQuery.bind(this),MatchedNode:this.transformMatched.bind(this),AddIndexNode:this.transformAddIndex.bind(this),CastNode:this.transformCast.bind(this),FetchNode:this.transformFetch.bind(this),TopNode:this.transformTop.bind(this),OutputNode:this.transformOutput.bind(this),OrActionNode:this.transformOrAction.bind(this),CollateNode:this.transformCollate.bind(this)});transformNode(e,r){if(!e)return e;this.nodeStack.push(e);let o=this.transformNodeImpl(e,r);return this.nodeStack.pop(),i(o)}transformNodeImpl(e,r){return this.#e[e.kind](e,r)}transformNodeList(e,r){return e&&i(e.map(o=>this.transformNode(o,r)))}transformSelectQuery(e,r){return{kind:"SelectQueryNode",from:this.transformNode(e.from,r),selections:this.transformNodeList(e.selections,r),distinctOn:this.transformNodeList(e.distinctOn,r),joins:this.transformNodeList(e.joins,r),groupBy:this.transformNode(e.groupBy,r),orderBy:this.transformNode(e.orderBy,r),where:this.transformNode(e.where,r),frontModifiers:this.transformNodeList(e.frontModifiers,r),endModifiers:this.transformNodeList(e.endModifiers,r),limit:this.transformNode(e.limit,r),offset:this.transformNode(e.offset,r),with:this.transformNode(e.with,r),having:this.transformNode(e.having,r),explain:this.transformNode(e.explain,r),setOperations:this.transformNodeList(e.setOperations,r),fetch:this.transformNode(e.fetch,r),top:this.transformNode(e.top,r)}}transformSelection(e,r){return{kind:"SelectionNode",selection:this.transformNode(e.selection,r)}}transformColumn(e,r){return{kind:"ColumnNode",column:this.transformNode(e.column,r)}}transformAlias(e,r){return{kind:"AliasNode",node:this.transformNode(e.node,r),alias:this.transformNode(e.alias,r)}}transformTable(e,r){return{kind:"TableNode",table:this.transformNode(e.table,r)}}transformFrom(e,r){return{kind:"FromNode",froms:this.transformNodeList(e.froms,r)}}transformReference(e,r){return{kind:"ReferenceNode",column:this.transformNode(e.column,r),table:this.transformNode(e.table,r)}}transformAnd(e,r){return{kind:"AndNode",left:this.transformNode(e.left,r),right:this.transformNode(e.right,r)}}transformOr(e,r){return{kind:"OrNode",left:this.transformNode(e.left,r),right:this.transformNode(e.right,r)}}transformValueList(e,r){return{kind:"ValueListNode",values:this.transformNodeList(e.values,r)}}transformParens(e,r){return{kind:"ParensNode",node:this.transformNode(e.node,r)}}transformJoin(e,r){return{kind:"JoinNode",joinType:e.joinType,table:this.transformNode(e.table,r),on:this.transformNode(e.on,r)}}transformRaw(e,r){return{kind:"RawNode",sqlFragments:i([...e.sqlFragments]),parameters:this.transformNodeList(e.parameters,r)}}transformWhere(e,r){return{kind:"WhereNode",where:this.transformNode(e.where,r)}}transformInsertQuery(e,r){return{kind:"InsertQueryNode",into:this.transformNode(e.into,r),columns:this.transformNodeList(e.columns,r),values:this.transformNode(e.values,r),returning:this.transformNode(e.returning,r),onConflict:this.transformNode(e.onConflict,r),onDuplicateKey:this.transformNode(e.onDuplicateKey,r),endModifiers:this.transformNodeList(e.endModifiers,r),with:this.transformNode(e.with,r),ignore:e.ignore,orAction:this.transformNode(e.orAction,r),replace:e.replace,explain:this.transformNode(e.explain,r),defaultValues:e.defaultValues,top:this.transformNode(e.top,r),output:this.transformNode(e.output,r)}}transformValues(e,r){return{kind:"ValuesNode",values:this.transformNodeList(e.values,r)}}transformDeleteQuery(e,r){return{kind:"DeleteQueryNode",from:this.transformNode(e.from,r),using:this.transformNode(e.using,r),joins:this.transformNodeList(e.joins,r),where:this.transformNode(e.where,r),returning:this.transformNode(e.returning,r),endModifiers:this.transformNodeList(e.endModifiers,r),with:this.transformNode(e.with,r),orderBy:this.transformNode(e.orderBy,r),limit:this.transformNode(e.limit,r),explain:this.transformNode(e.explain,r),top:this.transformNode(e.top,r),output:this.transformNode(e.output,r)}}transformReturning(e,r){return{kind:"ReturningNode",selections:this.transformNodeList(e.selections,r)}}transformCreateTable(e,r){return{kind:"CreateTableNode",table:this.transformNode(e.table,r),columns:this.transformNodeList(e.columns,r),constraints:this.transformNodeList(e.constraints,r),temporary:e.temporary,ifNotExists:e.ifNotExists,onCommit:e.onCommit,frontModifiers:this.transformNodeList(e.frontModifiers,r),endModifiers:this.transformNodeList(e.endModifiers,r),selectQuery:this.transformNode(e.selectQuery,r)}}transformColumnDefinition(e,r){return{kind:"ColumnDefinitionNode",column:this.transformNode(e.column,r),dataType:this.transformNode(e.dataType,r),references:this.transformNode(e.references,r),primaryKey:e.primaryKey,autoIncrement:e.autoIncrement,unique:e.unique,notNull:e.notNull,unsigned:e.unsigned,defaultTo:this.transformNode(e.defaultTo,r),check:this.transformNode(e.check,r),generated:this.transformNode(e.generated,r),frontModifiers:this.transformNodeList(e.frontModifiers,r),endModifiers:this.transformNodeList(e.endModifiers,r),nullsNotDistinct:e.nullsNotDistinct,identity:e.identity,ifNotExists:e.ifNotExists}}transformAddColumn(e,r){return{kind:"AddColumnNode",column:this.transformNode(e.column,r)}}transformDropTable(e,r){return{kind:"DropTableNode",table:this.transformNode(e.table,r),ifExists:e.ifExists,cascade:e.cascade}}transformOrderBy(e,r){return{kind:"OrderByNode",items:this.transformNodeList(e.items,r)}}transformOrderByItem(e,r){return{kind:"OrderByItemNode",orderBy:this.transformNode(e.orderBy,r),direction:this.transformNode(e.direction,r),collation:this.transformNode(e.collation,r),nulls:e.nulls}}transformGroupBy(e,r){return{kind:"GroupByNode",items:this.transformNodeList(e.items,r)}}transformGroupByItem(e,r){return{kind:"GroupByItemNode",groupBy:this.transformNode(e.groupBy,r)}}transformUpdateQuery(e,r){return{kind:"UpdateQueryNode",table:this.transformNode(e.table,r),from:this.transformNode(e.from,r),joins:this.transformNodeList(e.joins,r),where:this.transformNode(e.where,r),updates:this.transformNodeList(e.updates,r),returning:this.transformNode(e.returning,r),endModifiers:this.transformNodeList(e.endModifiers,r),with:this.transformNode(e.with,r),explain:this.transformNode(e.explain,r),limit:this.transformNode(e.limit,r),top:this.transformNode(e.top,r),output:this.transformNode(e.output,r),orderBy:this.transformNode(e.orderBy,r)}}transformColumnUpdate(e,r){return{kind:"ColumnUpdateNode",column:this.transformNode(e.column,r),value:this.transformNode(e.value,r)}}transformLimit(e,r){return{kind:"LimitNode",limit:this.transformNode(e.limit,r)}}transformOffset(e,r){return{kind:"OffsetNode",offset:this.transformNode(e.offset,r)}}transformOnConflict(e,r){return{kind:"OnConflictNode",columns:this.transformNodeList(e.columns,r),constraint:this.transformNode(e.constraint,r),indexExpression:this.transformNode(e.indexExpression,r),indexWhere:this.transformNode(e.indexWhere,r),updates:this.transformNodeList(e.updates,r),updateWhere:this.transformNode(e.updateWhere,r),doNothing:e.doNothing}}transformOnDuplicateKey(e,r){return{kind:"OnDuplicateKeyNode",updates:this.transformNodeList(e.updates,r)}}transformCreateIndex(e,r){return{kind:"CreateIndexNode",name:this.transformNode(e.name,r),table:this.transformNode(e.table,r),columns:this.transformNodeList(e.columns,r),unique:e.unique,using:this.transformNode(e.using,r),ifNotExists:e.ifNotExists,where:this.transformNode(e.where,r),nullsNotDistinct:e.nullsNotDistinct}}transformList(e,r){return{kind:"ListNode",items:this.transformNodeList(e.items,r)}}transformDropIndex(e,r){return{kind:"DropIndexNode",name:this.transformNode(e.name,r),table:this.transformNode(e.table,r),ifExists:e.ifExists,cascade:e.cascade}}transformPrimaryKeyConstraint(e,r){return{kind:"PrimaryKeyConstraintNode",columns:this.transformNodeList(e.columns,r),name:this.transformNode(e.name,r),deferrable:e.deferrable,initiallyDeferred:e.initiallyDeferred}}transformUniqueConstraint(e,r){return{kind:"UniqueConstraintNode",columns:this.transformNodeList(e.columns,r),name:this.transformNode(e.name,r),nullsNotDistinct:e.nullsNotDistinct,deferrable:e.deferrable,initiallyDeferred:e.initiallyDeferred}}transformForeignKeyConstraint(e,r){return{kind:"ForeignKeyConstraintNode",columns:this.transformNodeList(e.columns,r),references:this.transformNode(e.references,r),name:this.transformNode(e.name,r),onDelete:e.onDelete,onUpdate:e.onUpdate,deferrable:e.deferrable,initiallyDeferred:e.initiallyDeferred}}transformSetOperation(e,r){return{kind:"SetOperationNode",operator:e.operator,expression:this.transformNode(e.expression,r),all:e.all}}transformReferences(e,r){return{kind:"ReferencesNode",table:this.transformNode(e.table,r),columns:this.transformNodeList(e.columns,r),onDelete:e.onDelete,onUpdate:e.onUpdate}}transformCheckConstraint(e,r){return{kind:"CheckConstraintNode",expression:this.transformNode(e.expression,r),name:this.transformNode(e.name,r)}}transformWith(e,r){return{kind:"WithNode",expressions:this.transformNodeList(e.expressions,r),recursive:e.recursive}}transformCommonTableExpression(e,r){return{kind:"CommonTableExpressionNode",name:this.transformNode(e.name,r),materialized:e.materialized,expression:this.transformNode(e.expression,r)}}transformCommonTableExpressionName(e,r){return{kind:"CommonTableExpressionNameNode",table:this.transformNode(e.table,r),columns:this.transformNodeList(e.columns,r)}}transformHaving(e,r){return{kind:"HavingNode",having:this.transformNode(e.having,r)}}transformCreateSchema(e,r){return{kind:"CreateSchemaNode",schema:this.transformNode(e.schema,r),ifNotExists:e.ifNotExists}}transformDropSchema(e,r){return{kind:"DropSchemaNode",schema:this.transformNode(e.schema,r),ifExists:e.ifExists,cascade:e.cascade}}transformAlterTable(e,r){return{kind:"AlterTableNode",table:this.transformNode(e.table,r),renameTo:this.transformNode(e.renameTo,r),setSchema:this.transformNode(e.setSchema,r),columnAlterations:this.transformNodeList(e.columnAlterations,r),addConstraint:this.transformNode(e.addConstraint,r),dropConstraint:this.transformNode(e.dropConstraint,r),renameConstraint:this.transformNode(e.renameConstraint,r),addIndex:this.transformNode(e.addIndex,r),dropIndex:this.transformNode(e.dropIndex,r)}}transformDropColumn(e,r){return{kind:"DropColumnNode",column:this.transformNode(e.column,r)}}transformRenameColumn(e,r){return{kind:"RenameColumnNode",column:this.transformNode(e.column,r),renameTo:this.transformNode(e.renameTo,r)}}transformAlterColumn(e,r){return{kind:"AlterColumnNode",column:this.transformNode(e.column,r),dataType:this.transformNode(e.dataType,r),dataTypeExpression:this.transformNode(e.dataTypeExpression,r),setDefault:this.transformNode(e.setDefault,r),dropDefault:e.dropDefault,setNotNull:e.setNotNull,dropNotNull:e.dropNotNull}}transformModifyColumn(e,r){return{kind:"ModifyColumnNode",column:this.transformNode(e.column,r)}}transformAddConstraint(e,r){return{kind:"AddConstraintNode",constraint:this.transformNode(e.constraint,r)}}transformDropConstraint(e,r){return{kind:"DropConstraintNode",constraintName:this.transformNode(e.constraintName,r),ifExists:e.ifExists,modifier:e.modifier}}transformRenameConstraint(e,r){return{kind:"RenameConstraintNode",oldName:this.transformNode(e.oldName,r),newName:this.transformNode(e.newName,r)}}transformCreateView(e,r){return{kind:"CreateViewNode",name:this.transformNode(e.name,r),temporary:e.temporary,orReplace:e.orReplace,ifNotExists:e.ifNotExists,materialized:e.materialized,columns:this.transformNodeList(e.columns,r),as:this.transformNode(e.as,r)}}transformRefreshMaterializedView(e,r){return{kind:"RefreshMaterializedViewNode",name:this.transformNode(e.name,r),concurrently:e.concurrently,withNoData:e.withNoData}}transformDropView(e,r){return{kind:"DropViewNode",name:this.transformNode(e.name,r),ifExists:e.ifExists,materialized:e.materialized,cascade:e.cascade}}transformGenerated(e,r){return{kind:"GeneratedNode",byDefault:e.byDefault,always:e.always,identity:e.identity,stored:e.stored,expression:this.transformNode(e.expression,r)}}transformDefaultValue(e,r){return{kind:"DefaultValueNode",defaultValue:this.transformNode(e.defaultValue,r)}}transformOn(e,r){return{kind:"OnNode",on:this.transformNode(e.on,r)}}transformSelectModifier(e,r){return{kind:"SelectModifierNode",modifier:e.modifier,rawModifier:this.transformNode(e.rawModifier,r),of:this.transformNodeList(e.of,r)}}transformCreateType(e,r){return{kind:"CreateTypeNode",name:this.transformNode(e.name,r),enum:this.transformNode(e.enum,r)}}transformDropType(e,r){return{kind:"DropTypeNode",name:this.transformNode(e.name,r),ifExists:e.ifExists}}transformExplain(e,r){return{kind:"ExplainNode",format:e.format,options:this.transformNode(e.options,r)}}transformSchemableIdentifier(e,r){return{kind:"SchemableIdentifierNode",schema:this.transformNode(e.schema,r),identifier:this.transformNode(e.identifier,r)}}transformAggregateFunction(e,r){return{kind:"AggregateFunctionNode",func:e.func,aggregated:this.transformNodeList(e.aggregated,r),distinct:e.distinct,orderBy:this.transformNode(e.orderBy,r),withinGroup:this.transformNode(e.withinGroup,r),filter:this.transformNode(e.filter,r),over:this.transformNode(e.over,r)}}transformOver(e,r){return{kind:"OverNode",orderBy:this.transformNode(e.orderBy,r),partitionBy:this.transformNode(e.partitionBy,r)}}transformPartitionBy(e,r){return{kind:"PartitionByNode",items:this.transformNodeList(e.items,r)}}transformPartitionByItem(e,r){return{kind:"PartitionByItemNode",partitionBy:this.transformNode(e.partitionBy,r)}}transformBinaryOperation(e,r){return{kind:"BinaryOperationNode",leftOperand:this.transformNode(e.leftOperand,r),operator:this.transformNode(e.operator,r),rightOperand:this.transformNode(e.rightOperand,r)}}transformUnaryOperation(e,r){return{kind:"UnaryOperationNode",operator:this.transformNode(e.operator,r),operand:this.transformNode(e.operand,r)}}transformUsing(e,r){return{kind:"UsingNode",tables:this.transformNodeList(e.tables,r)}}transformFunction(e,r){return{kind:"FunctionNode",func:e.func,arguments:this.transformNodeList(e.arguments,r)}}transformCase(e,r){return{kind:"CaseNode",value:this.transformNode(e.value,r),when:this.transformNodeList(e.when,r),else:this.transformNode(e.else,r),isStatement:e.isStatement}}transformWhen(e,r){return{kind:"WhenNode",condition:this.transformNode(e.condition,r),result:this.transformNode(e.result,r)}}transformJSONReference(e,r){return{kind:"JSONReferenceNode",reference:this.transformNode(e.reference,r),traversal:this.transformNode(e.traversal,r)}}transformJSONPath(e,r){return{kind:"JSONPathNode",inOperator:this.transformNode(e.inOperator,r),pathLegs:this.transformNodeList(e.pathLegs,r)}}transformJSONPathLeg(e,r){return{kind:"JSONPathLegNode",type:e.type,value:e.value}}transformJSONOperatorChain(e,r){return{kind:"JSONOperatorChainNode",operator:this.transformNode(e.operator,r),values:this.transformNodeList(e.values,r)}}transformTuple(e,r){return{kind:"TupleNode",values:this.transformNodeList(e.values,r)}}transformMergeQuery(e,r){return{kind:"MergeQueryNode",into:this.transformNode(e.into,r),using:this.transformNode(e.using,r),whens:this.transformNodeList(e.whens,r),with:this.transformNode(e.with,r),top:this.transformNode(e.top,r),endModifiers:this.transformNodeList(e.endModifiers,r),output:this.transformNode(e.output,r),returning:this.transformNode(e.returning,r)}}transformMatched(e,r){return{kind:"MatchedNode",not:e.not,bySource:e.bySource}}transformAddIndex(e,r){return{kind:"AddIndexNode",name:this.transformNode(e.name,r),columns:this.transformNodeList(e.columns,r),unique:e.unique,using:this.transformNode(e.using,r),ifNotExists:e.ifNotExists}}transformCast(e,r){return{kind:"CastNode",expression:this.transformNode(e.expression,r),dataType:this.transformNode(e.dataType,r)}}transformFetch(e,r){return{kind:"FetchNode",rowCount:this.transformNode(e.rowCount,r),modifier:e.modifier}}transformTop(e,r){return{kind:"TopNode",expression:e.expression,modifiers:e.modifiers}}transformOutput(e,r){return{kind:"OutputNode",selections:this.transformNodeList(e.selections,r)}}transformDataType(e,r){return e}transformSelectAll(e,r){return e}transformIdentifier(e,r){return e}transformValue(e,r){return e}transformPrimitiveValueList(e,r){return e}transformOperator(e,r){return e}transformDefaultInsertValue(e,r){return e}transformOrAction(e,r){return e}transformCollate(e,r){return e}};var Qn=i({AlterTableNode:!0,CreateIndexNode:!0,CreateSchemaNode:!0,CreateTableNode:!0,CreateTypeNode:!0,CreateViewNode:!0,RefreshMaterializedViewNode:!0,DeleteQueryNode:!0,DropIndexNode:!0,DropSchemaNode:!0,DropTableNode:!0,DropTypeNode:!0,DropViewNode:!0,InsertQueryNode:!0,RawNode:!0,SelectQueryNode:!0,UpdateQueryNode:!0,MergeQueryNode:!0}),Ln={json_agg:!0,to_json:!0},lr=class extends Le{#e;#t=new Set;#r=new Set;constructor(e){super(),this.#e=e}transformNodeImpl(e,r){if(!this.#o(e))return super.transformNodeImpl(e,r);let o=this.#d(e);for(let d of o)this.#r.add(d);let n=this.#a(e);for(let d of n)this.#t.add(d);let a=super.transformNodeImpl(e,r);for(let d of n)this.#t.delete(d);for(let d of o)this.#r.delete(d);return a}transformSchemableIdentifier(e,r){let o=super.transformSchemableIdentifier(e,r);return o.schema||!this.#t.has(e.identifier.name)?o:{...o,schema:p.create(this.#e)}}transformReferences(e,r){let o=super.transformReferences(e,r);return o.table.table.schema?o:{...o,table:Y.createWithSchema(this.#e,o.table.table.identifier.name)}}transformAggregateFunction(e,r){return{...super.transformAggregateFunction({...e,aggregated:[]},r),aggregated:this.#i(e,r,"aggregated")}}transformFunction(e,r){return{...super.transformFunction({...e,arguments:[]},r),arguments:this.#i(e,r,"arguments")}}#i(e,r,o){return Ln[e.func]?e[o].map(n=>!Y.is(n)||n.table.schema?this.transformNode(n,r):{...n,table:this.transformIdentifier(n.table.identifier,r)}):this.transformNodeList(e[o],r)}#o(e){return e.kind in Qn}#a(e){let r=new Set;if("name"in e&&e.name&&V.is(e.name)&&this.#s(e.name,r),"from"in e&&e.from)for(let o of e.from.froms)this.#n(o,r);if("into"in e&&e.into&&this.#n(e.into,r),"table"in e&&e.table&&this.#n(e.table,r),"joins"in e&&e.joins)for(let o of e.joins)this.#n(o.table,r);return"using"in e&&e.using&&this.#n(e.using,r),r}#d(e){let r=new Set;return"with"in e&&e.with&&this.#u(e.with,r),r}#n(e,r){if(Y.is(e))this.#s(e.table,r);else if(E.is(e)&&Y.is(e.node))this.#s(e.node.table,r);else if(rr.is(e))for(let o of e.items)this.#n(o,r)}#s(e,r){let o=e.identifier.name;!this.#t.has(o)&&!this.#r.has(o)&&r.add(o)}#u(e,r){for(let o of e.expressions){let n=o.name.table.table.identifier.name;this.#r.has(n)||r.add(n)}}};var re=class{#e;constructor(e){this.#e=new lr(e)}transformQuery(e){return this.#e.transformNode(e.node,e.queryId)}async transformResult(e){return e.result}};var qo=i({is(t){return t.kind==="MatchedNode"},create(t,e=!1){return i({kind:"MatchedNode",not:t,bySource:e})}});function ki(t,e,r){return We.create(ot([qo.create(!t.isMatched,t.bySource),...e&&e.length>0?[e.length===3&&r?R(e[0],e[1],e[2]):O(e)]:[]],"and",!1))}function dt(t){return v(t)?W.create([t],[]):b(t)?t.toOperationNode():t}var Pt=class{#e;#t;#r;constructor(){this.#e=new Promise((e,r)=>{this.#r=r,this.#t=e})}get promise(){return this.#e}resolve=e=>{this.#t&&this.#t(e)};reject=e=>{this.#r&&this.#r(e)}};async function mr(t){let e=new Pt,r=new Pt;return t.provideConnection(async o=>(e.resolve(o),await r.promise)).catch(o=>e.reject(o)),i({connection:await e.promise,release:r.resolve})}var Pn=i([]),pt=class{#e;constructor(e=Pn){this.#e=e}get plugins(){return this.#e}transformQuery(e,r){for(let o of this.#e){let n=o.transformQuery({node:e,queryId:r});if(n.kind===e.kind)e=n;else throw new Error(["KyselyPlugin.transformQuery must return a node","of the same kind that was given to it.",`The plugin was given a ${e.kind}`,`but it returned a ${n.kind}`].join(" "))}return e}async executeQuery(e,r){return await this.provideConnection(async o=>{let n=await o.executeQuery(e);return"numUpdatedOrDeletedRows"in n&&De("kysely:warning: outdated driver/plugin detected! `QueryResult.numUpdatedOrDeletedRows` has been replaced with `QueryResult.numAffectedRows`."),await this.#t(n,r)})}async*stream(e,r,o){let{connection:n,release:a}=await mr(this);try{for await(let d of n.streamQuery(e,r))yield await this.#t(d,o)}finally{a()}}async#t(e,r){for(let o of this.#e)e=await o.transformResult({result:e,queryId:r});return e}};var Si=class t extends pt{get adapter(){throw new Error("this query cannot be compiled to SQL")}compileQuery(){throw new Error("this query cannot be compiled to SQL")}provideConnection(){throw new Error("this query cannot be executed")}withConnectionProvider(){throw new Error("this query cannot have a connection provider")}withPlugin(e){return new t([...this.plugins,e])}withPlugins(e){return new t([...this.plugins,...e])}withPluginAtFront(e){return new t([e,...this.plugins])}withoutPlugins(){return new t([])}},Pe=new Si;var fr=class{numChangedRows;constructor(e){this.numChangedRows=e}};var Nr=class t{#e;constructor(e){this.#e=i(e)}modifyEnd(e){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,e.toOperationNode())})}top(e,r){return new t({...this.#e,queryNode:u.cloneWithTop(this.#e.queryNode,ae(e,r))})}using(...e){return new Fe({...this.#e,queryNode:I.cloneWithUsing(this.#e.queryNode,Qe("Using",e))})}returning(e){return new t({...this.#e,queryNode:u.cloneWithReturning(this.#e.queryNode,A(e))})}returningAll(e){return new t({...this.#e,queryNode:u.cloneWithReturning(this.#e.queryNode,D(e))})}output(e){return new t({...this.#e,queryNode:u.cloneWithOutput(this.#e.queryNode,A(e))})}outputAll(e){return new t({...this.#e,queryNode:u.cloneWithOutput(this.#e.queryNode,D(e))})}},Fe=class t{#e;constructor(e){this.#e=i(e)}modifyEnd(e){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,e.toOperationNode())})}top(e,r){return new t({...this.#e,queryNode:u.cloneWithTop(this.#e.queryNode,ae(e,r))})}whenMatched(){return this.#t([])}whenMatchedAnd(...e){return this.#t(e)}whenMatchedAndRef(e,r,o){return this.#t([e,r,o],!0)}#t(e,r){return new yr({...this.#e,queryNode:I.cloneWithWhen(this.#e.queryNode,ki({isMatched:!0},e,r))})}whenNotMatched(){return this.#r([])}whenNotMatchedAnd(...e){return this.#r(e)}whenNotMatchedAndRef(e,r,o){return this.#r([e,r,o],!0)}whenNotMatchedBySource(){return this.#r([],!1,!0)}whenNotMatchedBySourceAnd(...e){return this.#r(e,!1,!0)}whenNotMatchedBySourceAndRef(e,r,o){return this.#r([e,r,o],!0,!0)}returning(e){return new t({...this.#e,queryNode:u.cloneWithReturning(this.#e.queryNode,A(e))})}returningAll(e){return new t({...this.#e,queryNode:u.cloneWithReturning(this.#e.queryNode,D(e))})}output(e){return new t({...this.#e,queryNode:u.cloneWithOutput(this.#e.queryNode,A(e))})}outputAll(e){return new t({...this.#e,queryNode:u.cloneWithOutput(this.#e.queryNode,D(e))})}#r(e,r=!1,o=!1){let n={...this.#e,queryNode:I.cloneWithWhen(this.#e.queryNode,ki({isMatched:!1,bySource:o},e,r))},a=o?yr:Ti;return new a(n)}$call(e){return e(this)}$if(e,r){return e?r(this):new t({...this.#e})}toOperationNode(){return this.#e.executor.transformQuery(this.#e.queryNode,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){let e=this.compile(),r=await this.#e.executor.executeQuery(e,this.#e.queryId),{adapter:o}=this.#e.executor,n=e.query;return n.returning&&o.supportsReturning||n.output&&o.supportsOutput?r.rows:[new fr(r.numAffectedRows)]}async executeTakeFirst(){let[e]=await this.execute();return e}async executeTakeFirstOrThrow(e=te){let r=await this.executeTakeFirst();if(r===void 0)throw ye(e)?new e(this.toOperationNode()):e(this.toOperationNode());return r}},yr=class{#e;constructor(e){this.#e=i(e)}thenDelete(){return new Fe({...this.#e,queryNode:I.cloneWithThen(this.#e.queryNode,dt("delete"))})}thenDoNothing(){return new Fe({...this.#e,queryNode:I.cloneWithThen(this.#e.queryNode,dt("do nothing"))})}thenUpdate(e){return new Fe({...this.#e,queryNode:I.cloneWithThen(this.#e.queryNode,dt(e(new at({queryId:this.#e.queryId,executor:Pe,queryNode:Ne.createWithoutTable()}))))})}thenUpdateSet(...e){return this.thenUpdate(r=>r.set(...e))}},Ti=class{#e;constructor(e){this.#e=i(e)}thenDoNothing(){return new Fe({...this.#e,queryNode:I.cloneWithThen(this.#e.queryNode,dt("do nothing"))})}thenInsertValues(e){let[r,o]=sr(e);return new Fe({...this.#e,queryNode:I.cloneWithThen(this.#e.queryNode,dt(S.cloneWith(S.createWithoutInto(),{columns:r,values:o})))})}};var ct=class t{#e;constructor(e){this.#e=i(e)}selectFrom(e){return Ft({queryId:f(),executor:this.#e.executor,queryNode:x.createFrom(ue(e),this.#e.withNode)})}selectNoFrom(e){return Ft({queryId:f(),executor:this.#e.executor,queryNode:x.cloneWithSelections(x.create(this.#e.withNode),A(e))})}insertInto(e){return new Qt({queryId:f(),executor:this.#e.executor,queryNode:S.create(y(e),this.#e.withNode)})}replaceInto(e){return new Qt({queryId:f(),executor:this.#e.executor,queryNode:S.create(y(e),this.#e.withNode,!0)})}deleteFrom(e){return new pr({queryId:f(),executor:this.#e.executor,queryNode:Be.create(ue(e),this.#e.withNode)})}updateTable(e){return new at({queryId:f(),executor:this.#e.executor,queryNode:Ne.create(ue(e),this.#e.withNode)})}mergeInto(e){return new Nr({queryId:f(),executor:this.#e.executor,queryNode:I.create(Ai(e),this.#e.withNode)})}with(e,r){let o=vi(e,r);return new t({...this.#e,withNode:this.#e.withNode?Lt.cloneWithExpression(this.#e.withNode,o):Lt.create(o)})}withRecursive(e,r){let o=vi(e,r);return new t({...this.#e,withNode:this.#e.withNode?Lt.cloneWithExpression(this.#e.withNode,o):Lt.create(o,{recursive:!0})})}withPlugin(e){return new t({...this.#e,executor:this.#e.executor.withPlugin(e)})}withoutPlugins(){return new t({...this.#e,executor:this.#e.executor.withoutPlugins()})}withSchema(e){return new t({...this.#e,executor:this.#e.executor.withPluginAtFront(new re(e))})}};function Ro(){return new ct({executor:Pe})}function Bo(t,e){return new ir({joinNode:Oe.create(t,Ge(e))})}function Qo(){return new or({overNode:qt.create()})}function Qe(t,e){if(e.length===3)return Mn(t,e[0],e[1],e[2]);if(e.length===2)return Fn(t,e[0],e[1]);if(e.length===1)return zn(t,e[0]);throw new Error("not implemented")}function Fn(t,e,r){return r(Bo(t,e)).toOperationNode()}function Mn(t,e,r,o){return Oe.createWithOn(t,Ge(e),R(r,"=",o))}function zn(t,e){return Oe.create(t,Ge(e))}var Lo=i({is(t){return t.kind==="OffsetNode"},create(t){return i({kind:"OffsetNode",offset:t})}});var Po=i({is(t){return t.kind==="GroupByItemNode"},create(t){return i({kind:"GroupByItemNode",groupBy:t})}});function Fo(t){return t=k(t)?t(se()):t,Ce(t).map(Po.create)}var wr=i({is(t){return t.kind==="SetOperationNode"},create(t,e,r){return i({kind:"SetOperationNode",operator:t,expression:e,all:r})}});function Ke(t,e,r){return k(e)&&(e=e(xr())),M(e)||(e=[e]),e.map(o=>wr.create(t,j(o),r))}var w=class t{#e;constructor(e){this.#e=e}get expressionType(){}as(e){return new Mt(this,e)}or(...e){return new Ei(oe.create(this.#e,O(e)))}and(...e){return new Ri(K.create(this.#e,O(e)))}$castTo(){return new t(this.#e)}$notNull(){return new t(this.#e)}toOperationNode(){return this.#e}},Mt=class{#e;#t;constructor(e,r){this.#e=e,this.#t=r}get expression(){return this.#e}get alias(){return this.#t}toOperationNode(){return E.create(this.#e.toOperationNode(),b(this.#t)?this.#t.toOperationNode():p.create(this.#t))}},Ei=class t{#e;constructor(e){this.#e=e}get expressionType(){}as(e){return new Mt(this,e)}or(...e){return new t(oe.create(this.#e,O(e)))}$castTo(){return new t(this.#e)}toOperationNode(){return fe.create(this.#e)}},Ri=class t{#e;constructor(e){this.#e=e}get expressionType(){}as(e){return new Mt(this,e)}and(...e){return new t(K.create(this.#e,O(e)))}$castTo(){return new t(this.#e)}toOperationNode(){return fe.create(this.#e)}};var Mo={is(t){return t.kind==="FetchNode"},create(t,e){return{kind:"FetchNode",rowCount:T.create(t),modifier:e}}};function zo(t,e){if(!Ee(t)&&!_e(t))throw new Error(`Invalid fetch row count: ${t}`);if(!Vn(e))throw new Error(`Invalid fetch modifier: ${e}`);return Mo.create(t,e)}function Vn(t){return t==="only"||t==="with ties"}var Ii=class t{#e;constructor(e){this.#e=i(e)}get expressionType(){}get isSelectQueryBuilder(){return!0}where(...e){return new t({...this.#e,queryNode:u.cloneWithWhere(this.#e.queryNode,O(e))})}whereRef(e,r,o){return new t({...this.#e,queryNode:u.cloneWithWhere(this.#e.queryNode,R(e,r,o))})}having(...e){return new t({...this.#e,queryNode:x.cloneWithHaving(this.#e.queryNode,O(e))})}havingRef(e,r,o){return new t({...this.#e,queryNode:x.cloneWithHaving(this.#e.queryNode,R(e,r,o))})}select(e){return new t({...this.#e,queryNode:x.cloneWithSelections(this.#e.queryNode,A(e))})}distinctOn(e){return new t({...this.#e,queryNode:x.cloneWithDistinctOn(this.#e.queryNode,Ce(e))})}modifyFront(e){return new t({...this.#e,queryNode:x.cloneWithFrontModifier(this.#e.queryNode,le.createWithExpression(e.toOperationNode()))})}modifyEnd(e){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,le.createWithExpression(e.toOperationNode()))})}distinct(){return new t({...this.#e,queryNode:x.cloneWithFrontModifier(this.#e.queryNode,le.create("Distinct"))})}forUpdate(e){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,le.create("ForUpdate",e?Et(e).map(y):void 0))})}forShare(e){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,le.create("ForShare",e?Et(e).map(y):void 0))})}forKeyShare(e){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,le.create("ForKeyShare",e?Et(e).map(y):void 0))})}forNoKeyUpdate(e){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,le.create("ForNoKeyUpdate",e?Et(e).map(y):void 0))})}skipLocked(){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,le.create("SkipLocked"))})}noWait(){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,le.create("NoWait"))})}selectAll(e){return new t({...this.#e,queryNode:x.cloneWithSelections(this.#e.queryNode,D(e))})}innerJoin(...e){return this.#t("InnerJoin",e)}leftJoin(...e){return this.#t("LeftJoin",e)}rightJoin(...e){return this.#t("RightJoin",e)}fullJoin(...e){return this.#t("FullJoin",e)}crossJoin(...e){return this.#t("CrossJoin",e)}innerJoinLateral(...e){return this.#t("LateralInnerJoin",e)}leftJoinLateral(...e){return this.#t("LateralLeftJoin",e)}crossJoinLateral(...e){return this.#t("LateralCrossJoin",e)}crossApply(...e){return this.#t("CrossApply",e)}outerApply(...e){return this.#t("OuterApply",e)}#t(e,r){return new t({...this.#e,queryNode:u.cloneWithJoin(this.#e.queryNode,Qe(e,r))})}orderBy(...e){return new t({...this.#e,queryNode:u.cloneWithOrderByItems(this.#e.queryNode,_(e))})}groupBy(e){return new t({...this.#e,queryNode:x.cloneWithGroupByItems(this.#e.queryNode,Fo(e))})}limit(e){return new t({...this.#e,queryNode:x.cloneWithLimit(this.#e.queryNode,st.create(g(e)))})}offset(e){return new t({...this.#e,queryNode:x.cloneWithOffset(this.#e.queryNode,Lo.create(g(e)))})}fetch(e,r="only"){return new t({...this.#e,queryNode:x.cloneWithFetch(this.#e.queryNode,zo(e,r))})}top(e,r){return new t({...this.#e,queryNode:u.cloneWithTop(this.#e.queryNode,ae(e,r))})}union(e){return new t({...this.#e,queryNode:x.cloneWithSetOperations(this.#e.queryNode,Ke("union",e,!1))})}unionAll(e){return new t({...this.#e,queryNode:x.cloneWithSetOperations(this.#e.queryNode,Ke("union",e,!0))})}intersect(e){return new t({...this.#e,queryNode:x.cloneWithSetOperations(this.#e.queryNode,Ke("intersect",e,!1))})}intersectAll(e){return new t({...this.#e,queryNode:x.cloneWithSetOperations(this.#e.queryNode,Ke("intersect",e,!0))})}except(e){return new t({...this.#e,queryNode:x.cloneWithSetOperations(this.#e.queryNode,Ke("except",e,!1))})}exceptAll(e){return new t({...this.#e,queryNode:x.cloneWithSetOperations(this.#e.queryNode,Ke("except",e,!0))})}as(e){return new Di(this,e)}clearSelect(){return new t({...this.#e,queryNode:x.cloneWithoutSelections(this.#e.queryNode)})}clearWhere(){return new t({...this.#e,queryNode:u.cloneWithoutWhere(this.#e.queryNode)})}clearLimit(){return new t({...this.#e,queryNode:x.cloneWithoutLimit(this.#e.queryNode)})}clearOffset(){return new t({...this.#e,queryNode:x.cloneWithoutOffset(this.#e.queryNode)})}clearOrderBy(){return new t({...this.#e,queryNode:u.cloneWithoutOrderBy(this.#e.queryNode)})}clearGroupBy(){return new t({...this.#e,queryNode:x.cloneWithoutGroupBy(this.#e.queryNode)})}$call(e){return e(this)}$if(e,r){return e?r(this):new t({...this.#e})}$castTo(){return new t(this.#e)}$narrowType(){return new t(this.#e)}$assertType(){return new t(this.#e)}$asTuple(){return new w(this.toOperationNode())}$asScalar(){return new w(this.toOperationNode())}withPlugin(e){return new t({...this.#e,executor:this.#e.executor.withPlugin(e)})}toOperationNode(){return this.#e.executor.transformQuery(this.#e.queryNode,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){let e=this.compile();return(await this.#e.executor.executeQuery(e,this.#e.queryId)).rows}async executeTakeFirst(){let[e]=await this.execute();return e}async executeTakeFirstOrThrow(e=te){let r=await this.executeTakeFirst();if(r===void 0)throw ye(e)?new e(this.toOperationNode()):e(this.toOperationNode());return r}async*stream(e=100){let r=this.compile(),o=this.#e.executor.stream(r,e,this.#e.queryId);for await(let n of o)yield*n.rows}async explain(e,r){return await new t({...this.#e,queryNode:u.cloneWithExplain(this.#e.queryNode,e,r)}).execute()}};function Ft(t){return new Ii(t)}var Di=class{#e;#t;constructor(e,r){this.#e=e,this.#t=r}get expression(){return this.#e}get alias(){return this.#t}get isAliasedSelectQueryBuilder(){return!0}toOperationNode(){return E.create(this.#e.toOperationNode(),p.create(this.#t))}};var we=i({is(t){return t.kind==="AggregateFunctionNode"},create(t,e=[]){return i({kind:"AggregateFunctionNode",func:t,aggregated:e})},cloneWithDistinct(t){return i({...t,distinct:!0})},cloneWithOrderBy(t,e,r=!1){let o=r?"withinGroup":"orderBy";return i({...t,[o]:t[o]?ve.cloneWithItems(t[o],e):ve.create(e)})},cloneWithFilter(t,e){return i({...t,filter:t.filter?Q.cloneWithOperation(t.filter,"And",e):Q.create(e)})},cloneWithOrFilter(t,e){return i({...t,filter:t.filter?Q.cloneWithOperation(t.filter,"Or",e):Q.create(e)})},cloneWithOver(t,e){return i({...t,over:e})}});var qi=i({is(t){return t.kind==="FunctionNode"},create(t,e){return i({kind:"FunctionNode",func:t,arguments:e})}});var ht=class t{#e;constructor(e){this.#e=i(e)}get expressionType(){}as(e){return new Bi(this,e)}distinct(){return new t({...this.#e,aggregateFunctionNode:we.cloneWithDistinct(this.#e.aggregateFunctionNode)})}orderBy(...e){return new t({...this.#e,aggregateFunctionNode:u.cloneWithOrderByItems(this.#e.aggregateFunctionNode,_(e))})}clearOrderBy(){return new t({...this.#e,aggregateFunctionNode:u.cloneWithoutOrderBy(this.#e.aggregateFunctionNode)})}withinGroupOrderBy(...e){return new t({...this.#e,aggregateFunctionNode:we.cloneWithOrderBy(this.#e.aggregateFunctionNode,_(e),!0)})}filterWhere(...e){return new t({...this.#e,aggregateFunctionNode:we.cloneWithFilter(this.#e.aggregateFunctionNode,O(e))})}filterWhereRef(e,r,o){return new t({...this.#e,aggregateFunctionNode:we.cloneWithFilter(this.#e.aggregateFunctionNode,R(e,r,o))})}over(e){let r=Qo();return new t({...this.#e,aggregateFunctionNode:we.cloneWithOver(this.#e.aggregateFunctionNode,(e?e(r):r).toOperationNode())})}$call(e){return e(this)}$castTo(){return new t(this.#e)}$notNull(){return new t(this.#e)}toOperationNode(){return this.#e.aggregateFunctionNode}},Bi=class{#e;#t;constructor(e,r){this.#e=e,this.#t=r}get expression(){return this.#e}get alias(){return this.#t}toOperationNode(){return E.create(this.#e.toOperationNode(),p.create(this.#t))}};function gr(){let t=(r,o)=>new w(qi.create(r,Ce(o??[]))),e=(r,o)=>new ht({aggregateFunctionNode:we.create(r,o?Ce(o):void 0)});return Object.assign(t,{agg:e,avg(r){return e("avg",[r])},coalesce(...r){return t("coalesce",r)},count(r){return e("count",[r])},countAll(r){return new ht({aggregateFunctionNode:we.create("count",D(r))})},max(r){return e("max",[r])},min(r){return e("min",[r])},sum(r){return e("sum",[r])},any(r){return t("any",[r])},jsonAgg(r){return new ht({aggregateFunctionNode:we.create("json_agg",[v(r)?y(r):r.toOperationNode()])})},toJson(r){return new w(qi.create("to_json",[v(r)?y(r):r.toOperationNode()]))}})}var Vo=i({is(t){return t.kind==="UnaryOperationNode"},create(t,e){return i({kind:"UnaryOperationNode",operator:t,operand:e})}});function Uo(t,e){return Vo.create(X.create(t),B(e))}var ee=i({is(t){return t.kind==="CaseNode"},create(t){return i({kind:"CaseNode",value:t})},cloneWithWhen(t,e){return i({...t,when:i(t.when?[...t.when,e]:[e])})},cloneWithThen(t,e){return i({...t,when:t.when?i([...t.when.slice(0,-1),We.cloneWithResult(t.when[t.when.length-1],e)]):void 0})},cloneWith(t,e){return i({...t,...e})}});var lt=class{#e;constructor(e){this.#e=i(e)}when(...e){return new Or({...this.#e,node:ee.cloneWithWhen(this.#e.node,We.create(O(e)))})}},Or=class{#e;constructor(e){this.#e=i(e)}then(e){return new Qi({...this.#e,node:ee.cloneWithThen(this.#e.node,er(e)?Dt(e):g(e))})}},Qi=class{#e;constructor(e){this.#e=i(e)}when(...e){return new Or({...this.#e,node:ee.cloneWithWhen(this.#e.node,We.create(O(e)))})}else(e){return new Li({...this.#e,node:ee.cloneWith(this.#e.node,{else:er(e)?Dt(e):g(e)})})}end(){return new w(ee.cloneWith(this.#e.node,{isStatement:!1}))}endCase(){return new w(ee.cloneWith(this.#e.node,{isStatement:!0}))}},Li=class{#e;constructor(e){this.#e=i(e)}end(){return new w(ee.cloneWith(this.#e.node,{isStatement:!1}))}endCase(){return new w(ee.cloneWith(this.#e.node,{isStatement:!0}))}};var Pi=i({is(t){return t.kind==="JSONPathLegNode"},create(t,e){return i({kind:"JSONPathLegNode",type:t,value:e})}});var mt=class{#e;constructor(e){this.#e=e}at(e){return this.#t("ArrayLocation",e)}key(e){return this.#t("Member",e)}#t(e,r){return rt.is(this.#e)?new br(rt.cloneWithTraversal(this.#e,qe.is(this.#e.traversal)?qe.cloneWithLeg(this.#e.traversal,Pi.create(e,r)):Zt.cloneWithValue(this.#e.traversal,T.createImmediate(r)))):new br(qe.cloneWithLeg(this.#e,Pi.create(e,r)))}},br=class t extends mt{#e;constructor(e){super(e),this.#e=e}get expressionType(){}as(e){return new Fi(this,e)}$castTo(){return new t(this.#e)}$notNull(){return new t(this.#e)}toOperationNode(){return this.#e}},Fi=class{#e;#t;constructor(e,r){this.#e=e,this.#t=r}get expression(){return this.#e}get alias(){return this.#t}toOperationNode(){return E.create(this.#e.toOperationNode(),b(this.#t)?this.#t.toOperationNode():p.create(this.#t))}};var Mi=i({is(t){return t.kind==="TupleNode"},create(t){return i({kind:"TupleNode",values:i(t)})}});var Un=["varchar","char","text","integer","int2","int4","int8","smallint","bigint","boolean","real","double precision","float4","float8","decimal","numeric","binary","bytea","date","datetime","time","timetz","timestamp","timestamptz","serial","bigserial","uuid","json","jsonb","blob","varbinary","int4range","int4multirange","int8range","int8multirange","numrange","nummultirange","tsrange","tsmultirange","tstzrange","tstzmultirange","daterange","datemultirange"],Jn=[/^varchar\(\d+\)$/,/^char\(\d+\)$/,/^decimal\(\d+, \d+\)$/,/^numeric\(\d+, \d+\)$/,/^binary\(\d+\)$/,/^datetime\(\d+\)$/,/^time\(\d+\)$/,/^timetz\(\d+\)$/,/^timestamp\(\d+\)$/,/^timestamptz\(\d+\)$/,/^varbinary\(\d+\)$/],Jo=i({is(t){return t.kind==="DataTypeNode"},create(t){return i({kind:"DataTypeNode",dataType:t})}});function $o(t){return!!(Un.includes(t)||Jn.some(e=>e.test(t)))}function de(t){if(b(t))return t.toOperationNode();if($o(t))return Jo.create(t);throw new Error(`invalid column data type ${JSON.stringify(t)}`)}var Go=i({is(t){return t.kind==="CastNode"},create(t,e){return i({kind:"CastNode",expression:t,dataType:e})}});function xr(t=Pe){function e(n,a,d){return new w(tr(n,a,d))}function r(n,a){return new w(Uo(n,a))}let o=Object.assign(e,{fn:void 0,eb:void 0,selectFrom(n){return Ft({queryId:f(),executor:t,queryNode:x.createFrom(ue(n))})},case(n){return new lt({node:ee.create(H(n)?void 0:B(n))})},ref(n,a){return H(a)?new w(Z(n)):new mt(fo(n,a))},jsonPath(){return new mt(qe.create())},table(n){return new w(y(n))},val(n){return new w(g(n))},refTuple(...n){return new w(Mi.create(n.map(B)))},tuple(...n){return new w(Mi.create(n.map(g)))},lit(n){return new w(Dt(n))},unary:r,not(n){return r("not",n)},exists(n){return r("exists",n)},neg(n){return r("-",n)},between(n,a,d){return new w(Ie.create(B(n),X.create("between"),K.create(g(a),g(d))))},betweenSymmetric(n,a,d){return new w(Ie.create(B(n),X.create("between symmetric"),K.create(g(a),g(d))))},and(n){return M(n)?new w(ot(n,"and")):new w(li(n,"and"))},or(n){return M(n)?new w(ot(n,"or")):new w(li(n,"or"))},parens(...n){let a=O(n);return fe.is(a)?new w(a):new w(fe.create(a))},cast(n,a){return new w(Go.create(B(n),de(a)))},withSchema(n){return xr(t.withPluginAtFront(new re(n)))}});return o.fn=gr(),o.eb=o,o}function se(t){return xr()}function j(t){if(b(t))return t.toOperationNode();if(k(t))return t(se()).toOperationNode();throw new Error(`invalid expression: ${JSON.stringify(t)}`)}function nr(t){if(b(t))return t.toOperationNode();if(k(t))return t(se()).toOperationNode();throw new Error(`invalid aliased expression: ${JSON.stringify(t)}`)}function be(t){return Kt(t)||uo(t)||k(t)}var Cr=class{#e;get table(){return this.#e}constructor(e){this.#e=e}as(e){return new zi(this.#e,e)}},zi=class{#e;#t;get table(){return this.#e}get alias(){return this.#t}constructor(e,r){this.#e=e,this.#t=r}toOperationNode(){return E.create(y(this.#e),p.create(this.#t))}};function Ko(t){return q(t)&&b(t)&&v(t.table)&&v(t.alias)}function ue(t){return M(t)?t.map(e=>Ge(e)):[Ge(t)]}function Ge(t){return v(t)?Ai(t):Ko(t)?t.toOperationNode():nr(t)}function Ai(t){let e=" as ";if(t.includes(e)){let[r,o]=t.split(e).map(jo);return E.create(y(r),p.create(o))}else return y(t)}function y(t){let e=".";if(t.includes(e)){let[r,o]=t.split(e).map(jo);return Y.createWithSchema(r,o)}else return Y.create(t)}function jo(t){return t.trim()}var Vi=i({is(t){return t.kind==="AddColumnNode"},create(t){return i({kind:"AddColumnNode",column:t})}});var C=i({is(t){return t.kind==="ColumnDefinitionNode"},create(t,e){return i({kind:"ColumnDefinitionNode",column:m.create(t),dataType:e})},cloneWithFrontModifier(t,e){return i({...t,frontModifiers:t.frontModifiers?i([...t.frontModifiers,e]):[e]})},cloneWithEndModifier(t,e){return i({...t,endModifiers:t.endModifiers?i([...t.endModifiers,e]):[e]})},cloneWith(t,e){return i({...t,...e})}});var Ui=i({is(t){return t.kind==="DropColumnNode"},create(t){return i({kind:"DropColumnNode",column:m.create(t)})}});var Ji=i({is(t){return t.kind==="RenameColumnNode"},create(t,e){return i({kind:"RenameColumnNode",column:m.create(t),renameTo:m.create(e)})}});var ft=i({is(t){return t.kind==="CheckConstraintNode"},create(t,e){return i({kind:"CheckConstraintNode",expression:t,name:e?p.create(e):void 0})}});var Ho=["no action","restrict","cascade","set null","set default"],Nt=i({is(t){return t.kind==="ReferencesNode"},create(t,e){return i({kind:"ReferencesNode",table:t,columns:i([...e])})},cloneWithOnDelete(t,e){return i({...t,onDelete:e})},cloneWithOnUpdate(t,e){return i({...t,onUpdate:e})}});function vr(t){return b(t)?t.toOperationNode():T.createImmediate(t)}var zt=i({is(t){return t.kind==="GeneratedNode"},create(t){return i({kind:"GeneratedNode",...t})},createWithExpression(t){return i({kind:"GeneratedNode",always:!0,expression:t})},cloneWith(t,e){return i({...t,...e})}});var Yo=i({is(t){return t.kind==="DefaultValueNode"},create(t){return i({kind:"DefaultValueNode",defaultValue:t})}});function yt(t){if(Ho.includes(t))return t;throw new Error(`invalid OnModifyForeignAction ${t}`)}var ke=class t{#e;constructor(e){this.#e=e}autoIncrement(){return new t(C.cloneWith(this.#e,{autoIncrement:!0}))}identity(){return new t(C.cloneWith(this.#e,{identity:!0}))}primaryKey(){return new t(C.cloneWith(this.#e,{primaryKey:!0}))}references(e){let r=Z(e);if(!r.table||et.is(r.column))throw new Error(`invalid call references('${e}'). The reference must have format table.column or schema.table.column`);return new t(C.cloneWith(this.#e,{references:Nt.create(r.table,[r.column])}))}onDelete(e){if(!this.#e.references)throw new Error("on delete constraint can only be added for foreign keys");return new t(C.cloneWith(this.#e,{references:Nt.cloneWithOnDelete(this.#e.references,yt(e))}))}onUpdate(e){if(!this.#e.references)throw new Error("on update constraint can only be added for foreign keys");return new t(C.cloneWith(this.#e,{references:Nt.cloneWithOnUpdate(this.#e.references,yt(e))}))}unique(){return new t(C.cloneWith(this.#e,{unique:!0}))}notNull(){return new t(C.cloneWith(this.#e,{notNull:!0}))}unsigned(){return new t(C.cloneWith(this.#e,{unsigned:!0}))}defaultTo(e){return new t(C.cloneWith(this.#e,{defaultTo:Yo.create(vr(e))}))}check(e){return new t(C.cloneWith(this.#e,{check:ft.create(e.toOperationNode())}))}generatedAlwaysAs(e){return new t(C.cloneWith(this.#e,{generated:zt.createWithExpression(e.toOperationNode())}))}generatedAlwaysAsIdentity(){return new t(C.cloneWith(this.#e,{generated:zt.create({identity:!0,always:!0})}))}generatedByDefaultAsIdentity(){return new t(C.cloneWith(this.#e,{generated:zt.create({identity:!0,byDefault:!0})}))}stored(){if(!this.#e.generated)throw new Error("stored() can only be called after generatedAlwaysAs");return new t(C.cloneWith(this.#e,{generated:zt.cloneWith(this.#e.generated,{stored:!0})}))}modifyFront(e){return new t(C.cloneWithFrontModifier(this.#e,e.toOperationNode()))}nullsNotDistinct(){return new t(C.cloneWith(this.#e,{nullsNotDistinct:!0}))}ifNotExists(){return new t(C.cloneWith(this.#e,{ifNotExists:!0}))}modifyEnd(e){return new t(C.cloneWithEndModifier(this.#e,e.toOperationNode()))}$call(e){return e(this)}toOperationNode(){return this.#e}};var $i=i({is(t){return t.kind==="ModifyColumnNode"},create(t){return i({kind:"ModifyColumnNode",column:t})}});var pe=i({is(t){return t.kind==="ForeignKeyConstraintNode"},create(t,e,r,o){return i({kind:"ForeignKeyConstraintNode",columns:t,references:Nt.create(e,r),name:o?p.create(o):void 0})},cloneWith(t,e){return i({...t,...e})}});var wt=class t{#e;constructor(e){this.#e=e}onDelete(e){return new t(pe.cloneWith(this.#e,{onDelete:yt(e)}))}onUpdate(e){return new t(pe.cloneWith(this.#e,{onUpdate:yt(e)}))}deferrable(){return new t(pe.cloneWith(this.#e,{deferrable:!0}))}notDeferrable(){return new t(pe.cloneWith(this.#e,{deferrable:!1}))}initiallyDeferred(){return new t(pe.cloneWith(this.#e,{initiallyDeferred:!0}))}initiallyImmediate(){return new t(pe.cloneWith(this.#e,{initiallyDeferred:!1}))}$call(e){return e(this)}toOperationNode(){return this.#e}};var xt=i({is(t){return t.kind==="AddConstraintNode"},create(t){return i({kind:"AddConstraintNode",constraint:t})}});var xe=i({is(t){return t.kind==="UniqueConstraintNode"},create(t,e,r){return i({kind:"UniqueConstraintNode",columns:i(t.map(m.create)),name:e?p.create(e):void 0,nullsNotDistinct:r})},cloneWith(t,e){return i({...t,...e})}});var gt=i({is(t){return t.kind==="DropConstraintNode"},create(t){return i({kind:"DropConstraintNode",constraintName:p.create(t)})},cloneWith(t,e){return i({...t,...e})}});var Ot=i({is(t){return t.kind==="AlterColumnNode"},create(t,e,r){return i({kind:"AlterColumnNode",column:m.create(t),[e]:r})}});var Vt=class{#e;constructor(e){this.#e=e}setDataType(e){return new je(Ot.create(this.#e,"dataType",de(e)))}setDefault(e){return new je(Ot.create(this.#e,"setDefault",vr(e)))}dropDefault(){return new je(Ot.create(this.#e,"dropDefault",!0))}setNotNull(){return new je(Ot.create(this.#e,"setNotNull",!0))}dropNotNull(){return new je(Ot.create(this.#e,"dropNotNull",!0))}$call(e){return e(this)}},je=class{#e;constructor(e){this.#e=e}toOperationNode(){return this.#e}};var Se=class{#e;constructor(e){this.#e=i(e)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};var Wr=class t{#e;constructor(e){this.#e=i(e)}onDelete(e){return new t({...this.#e,constraintBuilder:this.#e.constraintBuilder.onDelete(e)})}onUpdate(e){return new t({...this.#e,constraintBuilder:this.#e.constraintBuilder.onUpdate(e)})}deferrable(){return new t({...this.#e,constraintBuilder:this.#e.constraintBuilder.deferrable()})}notDeferrable(){return new t({...this.#e,constraintBuilder:this.#e.constraintBuilder.notDeferrable()})}initiallyDeferred(){return new t({...this.#e,constraintBuilder:this.#e.constraintBuilder.initiallyDeferred()})}initiallyImmediate(){return new t({...this.#e,constraintBuilder:this.#e.constraintBuilder.initiallyImmediate()})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(N.cloneWithTableProps(this.#e.node,{addConstraint:xt.create(this.#e.constraintBuilder.toOperationNode())}),this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};var Ut=class t{#e;constructor(e){this.#e=i(e)}ifExists(){return new t({...this.#e,node:N.cloneWithTableProps(this.#e.node,{dropConstraint:gt.cloneWith(this.#e.node.dropConstraint,{ifExists:!0})})})}cascade(){return new t({...this.#e,node:N.cloneWithTableProps(this.#e.node,{dropConstraint:gt.cloneWith(this.#e.node.dropConstraint,{modifier:"cascade"})})})}restrict(){return new t({...this.#e,node:N.cloneWithTableProps(this.#e.node,{dropConstraint:gt.cloneWith(this.#e.node.dropConstraint,{modifier:"restrict"})})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};var Te=i({is(t){return t.kind==="PrimaryKeyConstraintNode"},create(t,e){return i({kind:"PrimaryKeyConstraintNode",columns:i(t.map(m.create)),name:e?p.create(e):void 0})},cloneWith(t,e){return i({...t,...e})}});var Me=i({is(t){return t.kind==="AddIndexNode"},create(t){return i({kind:"AddIndexNode",name:p.create(t)})},cloneWith(t,e){return i({...t,...e})},cloneWithColumns(t,e){return i({...t,columns:[...t.columns||[],...e]})}});var kr=class t{#e;constructor(e){this.#e=i(e)}unique(){return new t({...this.#e,node:N.cloneWithTableProps(this.#e.node,{addIndex:Me.cloneWith(this.#e.node.addIndex,{unique:!0})})})}column(e){return new t({...this.#e,node:N.cloneWithTableProps(this.#e.node,{addIndex:Me.cloneWithColumns(this.#e.node.addIndex,[it(e)])})})}columns(e){return new t({...this.#e,node:N.cloneWithTableProps(this.#e.node,{addIndex:Me.cloneWithColumns(this.#e.node.addIndex,e.map(it))})})}expression(e){return new t({...this.#e,node:N.cloneWithTableProps(this.#e.node,{addIndex:Me.cloneWithColumns(this.#e.node.addIndex,[e.toOperationNode()])})})}using(e){return new t({...this.#e,node:N.cloneWithTableProps(this.#e.node,{addIndex:Me.cloneWith(this.#e.node.addIndex,{using:W.createWithSql(e)})})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};var bt=class t{#e;constructor(e){this.#e=e}nullsNotDistinct(){return new t(xe.cloneWith(this.#e,{nullsNotDistinct:!0}))}deferrable(){return new t(xe.cloneWith(this.#e,{deferrable:!0}))}notDeferrable(){return new t(xe.cloneWith(this.#e,{deferrable:!1}))}initiallyDeferred(){return new t(xe.cloneWith(this.#e,{initiallyDeferred:!0}))}initiallyImmediate(){return new t(xe.cloneWith(this.#e,{initiallyDeferred:!1}))}$call(e){return e(this)}toOperationNode(){return this.#e}};var Ct=class t{#e;constructor(e){this.#e=e}deferrable(){return new t(Te.cloneWith(this.#e,{deferrable:!0}))}notDeferrable(){return new t(Te.cloneWith(this.#e,{deferrable:!1}))}initiallyDeferred(){return new t(Te.cloneWith(this.#e,{initiallyDeferred:!0}))}initiallyImmediate(){return new t(Te.cloneWith(this.#e,{initiallyDeferred:!1}))}$call(e){return e(this)}toOperationNode(){return this.#e}};var vt=class{#e;constructor(e){this.#e=e}$call(e){return e(this)}toOperationNode(){return this.#e}};var Xo=i({is(t){return t.kind==="RenameConstraintNode"},create(t,e){return i({kind:"RenameConstraintNode",oldName:p.create(t),newName:p.create(e)})}});var Sr=class{#e;constructor(e){this.#e=i(e)}renameTo(e){return new Se({...this.#e,node:N.cloneWithTableProps(this.#e.node,{renameTo:y(e)})})}setSchema(e){return new Se({...this.#e,node:N.cloneWithTableProps(this.#e.node,{setSchema:p.create(e)})})}alterColumn(e,r){let o=r(new Vt(e));return new He({...this.#e,node:N.cloneWithColumnAlteration(this.#e.node,o.toOperationNode())})}dropColumn(e){return new He({...this.#e,node:N.cloneWithColumnAlteration(this.#e.node,Ui.create(e))})}renameColumn(e,r){return new He({...this.#e,node:N.cloneWithColumnAlteration(this.#e.node,Ji.create(e,r))})}addColumn(e,r,o=U){let n=o(new ke(C.create(e,de(r))));return new He({...this.#e,node:N.cloneWithColumnAlteration(this.#e.node,Vi.create(n.toOperationNode()))})}modifyColumn(e,r,o=U){let n=o(new ke(C.create(e,de(r))));return new He({...this.#e,node:N.cloneWithColumnAlteration(this.#e.node,$i.create(n.toOperationNode()))})}addUniqueConstraint(e,r,o=U){let n=o(new bt(xe.create(r,e)));return new Se({...this.#e,node:N.cloneWithTableProps(this.#e.node,{addConstraint:xt.create(n.toOperationNode())})})}addCheckConstraint(e,r,o=U){let n=o(new vt(ft.create(r.toOperationNode(),e)));return new Se({...this.#e,node:N.cloneWithTableProps(this.#e.node,{addConstraint:xt.create(n.toOperationNode())})})}addForeignKeyConstraint(e,r,o,n,a=U){let d=a(new wt(pe.create(r.map(m.create),y(o),n.map(m.create),e)));return new Wr({...this.#e,constraintBuilder:d})}addPrimaryKeyConstraint(e,r,o=U){let n=o(new Ct(Te.create(r,e)));return new Se({...this.#e,node:N.cloneWithTableProps(this.#e.node,{addConstraint:xt.create(n.toOperationNode())})})}dropConstraint(e){return new Ut({...this.#e,node:N.cloneWithTableProps(this.#e.node,{dropConstraint:gt.create(e)})})}renameConstraint(e,r){return new Ut({...this.#e,node:N.cloneWithTableProps(this.#e.node,{renameConstraint:Xo.create(e,r)})})}addIndex(e){return new kr({...this.#e,node:N.cloneWithTableProps(this.#e.node,{addIndex:Me.create(e)})})}dropIndex(e){return new Se({...this.#e,node:N.cloneWithTableProps(this.#e.node,{dropIndex:Re.create(e)})})}$call(e){return e(this)}},He=class t{#e;constructor(e){this.#e=i(e)}alterColumn(e,r){let o=r(new Vt(e));return new t({...this.#e,node:N.cloneWithColumnAlteration(this.#e.node,o.toOperationNode())})}dropColumn(e){return new t({...this.#e,node:N.cloneWithColumnAlteration(this.#e.node,Ui.create(e))})}renameColumn(e,r){return new t({...this.#e,node:N.cloneWithColumnAlteration(this.#e.node,Ji.create(e,r))})}addColumn(e,r,o=U){let n=o(new ke(C.create(e,de(r))));return new t({...this.#e,node:N.cloneWithColumnAlteration(this.#e.node,Vi.create(n.toOperationNode()))})}modifyColumn(e,r,o=U){let n=o(new ke(C.create(e,de(r))));return new t({...this.#e,node:N.cloneWithColumnAlteration(this.#e.node,$i.create(n.toOperationNode()))})}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};var Wt=class extends Le{transformPrimitiveValueList(e){return me.create(e.values.map(T.createImmediate))}transformValue(e){return T.createImmediate(e.value)}};var Tr=class t{#e;constructor(e){this.#e=i(e)}ifNotExists(){return new t({...this.#e,node:ie.cloneWith(this.#e.node,{ifNotExists:!0})})}unique(){return new t({...this.#e,node:ie.cloneWith(this.#e.node,{unique:!0})})}nullsNotDistinct(){return new t({...this.#e,node:ie.cloneWith(this.#e.node,{nullsNotDistinct:!0})})}on(e){return new t({...this.#e,node:ie.cloneWith(this.#e.node,{table:y(e)})})}column(e){return new t({...this.#e,node:ie.cloneWithColumns(this.#e.node,[it(e)])})}columns(e){return new t({...this.#e,node:ie.cloneWithColumns(this.#e.node,e.map(it))})}expression(e){return new t({...this.#e,node:ie.cloneWithColumns(this.#e.node,[e.toOperationNode()])})}using(e){return new t({...this.#e,node:ie.cloneWith(this.#e.node,{using:W.createWithSql(e)})})}where(...e){let r=new Wt;return new t({...this.#e,node:u.cloneWithWhere(this.#e.node,r.transformNode(O(e),this.#e.queryId))})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};var Ar=class t{#e;constructor(e){this.#e=i(e)}ifNotExists(){return new t({...this.#e,node:Gt.cloneWith(this.#e.node,{ifNotExists:!0})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};function Zo(t){if(ao.includes(t))return t;throw new Error(`invalid OnCommitAction ${t}`)}var Er=class t{#e;constructor(e){this.#e=i(e)}temporary(){return new t({...this.#e,node:z.cloneWith(this.#e.node,{temporary:!0})})}onCommit(e){return new t({...this.#e,node:z.cloneWith(this.#e.node,{onCommit:Zo(e)})})}ifNotExists(){return new t({...this.#e,node:z.cloneWith(this.#e.node,{ifNotExists:!0})})}addColumn(e,r,o=U){let n=o(new ke(C.create(e,de(r))));return new t({...this.#e,node:z.cloneWithColumn(this.#e.node,n.toOperationNode())})}addPrimaryKeyConstraint(e,r,o=U){let n=o(new Ct(Te.create(r,e)));return new t({...this.#e,node:z.cloneWithConstraint(this.#e.node,n.toOperationNode())})}addUniqueConstraint(e,r,o=U){let n=o(new bt(xe.create(r,e)));return new t({...this.#e,node:z.cloneWithConstraint(this.#e.node,n.toOperationNode())})}addCheckConstraint(e,r,o=U){let n=o(new vt(ft.create(r.toOperationNode(),e)));return new t({...this.#e,node:z.cloneWithConstraint(this.#e.node,n.toOperationNode())})}addForeignKeyConstraint(e,r,o,n,a=U){let d=a(new wt(pe.create(r.map(m.create),y(o),n.map(m.create),e)));return new t({...this.#e,node:z.cloneWithConstraint(this.#e.node,d.toOperationNode())})}modifyFront(e){return new t({...this.#e,node:z.cloneWithFrontModifier(this.#e.node,e.toOperationNode())})}modifyEnd(e){return new t({...this.#e,node:z.cloneWithEndModifier(this.#e.node,e.toOperationNode())})}as(e){return new t({...this.#e,node:z.cloneWith(this.#e.node,{selectQuery:j(e)})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};var Rr=class t{#e;constructor(e){this.#e=i(e)}on(e){return new t({...this.#e,node:Re.cloneWith(this.#e.node,{table:y(e)})})}ifExists(){return new t({...this.#e,node:Re.cloneWith(this.#e.node,{ifExists:!0})})}cascade(){return new t({...this.#e,node:Re.cloneWith(this.#e.node,{cascade:!0})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};var Ir=class t{#e;constructor(e){this.#e=i(e)}ifExists(){return new t({...this.#e,node:Rt.cloneWith(this.#e.node,{ifExists:!0})})}cascade(){return new t({...this.#e,node:Rt.cloneWith(this.#e.node,{cascade:!0})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};var Dr=class t{#e;constructor(e){this.#e=i(e)}ifExists(){return new t({...this.#e,node:It.cloneWith(this.#e.node,{ifExists:!0})})}cascade(){return new t({...this.#e,node:It.cloneWith(this.#e.node,{cascade:!0})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};var ce=i({is(t){return t.kind==="CreateViewNode"},create(t){return i({kind:"CreateViewNode",name:V.create(t)})},cloneWith(t,e){return i({...t,...e})}});var qr=class{#e=new Wt;transformQuery(e){return this.#e.transformNode(e.node,e.queryId)}transformResult(e){return Promise.resolve(e.result)}};var Br=class t{#e;constructor(e){this.#e=i(e)}temporary(){return new t({...this.#e,node:ce.cloneWith(this.#e.node,{temporary:!0})})}materialized(){return new t({...this.#e,node:ce.cloneWith(this.#e.node,{materialized:!0})})}ifNotExists(){return new t({...this.#e,node:ce.cloneWith(this.#e.node,{ifNotExists:!0})})}orReplace(){return new t({...this.#e,node:ce.cloneWith(this.#e.node,{orReplace:!0})})}columns(e){return new t({...this.#e,node:ce.cloneWith(this.#e.node,{columns:e.map(pi)})})}as(e){let r=e.withPlugin(new qr).toOperationNode();return new t({...this.#e,node:ce.cloneWith(this.#e.node,{as:r})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};var kt=i({is(t){return t.kind==="DropViewNode"},create(t){return i({kind:"DropViewNode",name:V.create(t)})},cloneWith(t,e){return i({...t,...e})}});var Qr=class t{#e;constructor(e){this.#e=i(e)}materialized(){return new t({...this.#e,node:kt.cloneWith(this.#e.node,{materialized:!0})})}ifExists(){return new t({...this.#e,node:kt.cloneWith(this.#e.node,{ifExists:!0})})}cascade(){return new t({...this.#e,node:kt.cloneWith(this.#e.node,{cascade:!0})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};var Lr=i({is(t){return t.kind==="CreateTypeNode"},create(t){return i({kind:"CreateTypeNode",name:t})},cloneWithEnum(t,e){return i({...t,enum:me.create(e.map(T.createImmediate))})}});var Pr=class t{#e;constructor(e){this.#e=i(e)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}asEnum(e){return new t({...this.#e,node:Lr.cloneWithEnum(this.#e.node,e)})}$call(e){return e(this)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};var Fr=i({is(t){return t.kind==="DropTypeNode"},create(t){return i({kind:"DropTypeNode",name:t})},cloneWith(t,e){return i({...t,...e})}});var Mr=class t{#e;constructor(e){this.#e=i(e)}ifExists(){return new t({...this.#e,node:Fr.cloneWith(this.#e.node,{ifExists:!0})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};function Gi(t){let e=".";if(t.includes(e)){let r=t.split(e).map($n);if(r.length===2)return V.createWithSchema(r[0],r[1]);throw new Error(`invalid schemable identifier ${t}`)}else return V.create(t)}function $n(t){return t.trim()}var St=i({is(t){return t.kind==="RefreshMaterializedViewNode"},create(t){return i({kind:"RefreshMaterializedViewNode",name:V.create(t)})},cloneWith(t,e){return i({...t,...e})}});var zr=class t{#e;constructor(e){this.#e=i(e)}concurrently(){return new t({...this.#e,node:St.cloneWith(this.#e.node,{concurrently:!0,withNoData:!1})})}withData(){return new t({...this.#e,node:St.cloneWith(this.#e.node,{withNoData:!1})})}withNoData(){return new t({...this.#e,node:St.cloneWith(this.#e.node,{withNoData:!0,concurrently:!1})})}$call(e){return e(this)}toOperationNode(){return this.#e.executor.transformQuery(this.#e.node,this.#e.queryId)}compile(){return this.#e.executor.compileQuery(this.toOperationNode(),this.#e.queryId)}async execute(){await this.#e.executor.executeQuery(this.compile(),this.#e.queryId)}};var Vr=class t{#e;constructor(e){this.#e=e}createTable(e){return new Er({queryId:f(),executor:this.#e,node:z.create(y(e))})}dropTable(e){return new Dr({queryId:f(),executor:this.#e,node:It.create(y(e))})}createIndex(e){return new Tr({queryId:f(),executor:this.#e,node:ie.create(e)})}dropIndex(e){return new Rr({queryId:f(),executor:this.#e,node:Re.create(e)})}createSchema(e){return new Ar({queryId:f(),executor:this.#e,node:Gt.create(e)})}dropSchema(e){return new Ir({queryId:f(),executor:this.#e,node:Rt.create(e)})}alterTable(e){return new Sr({queryId:f(),executor:this.#e,node:N.create(y(e))})}createView(e){return new Br({queryId:f(),executor:this.#e,node:ce.create(e)})}refreshMaterializedView(e){return new zr({queryId:f(),executor:this.#e,node:St.create(e)})}dropView(e){return new Qr({queryId:f(),executor:this.#e,node:kt.create(e)})}createType(e){return new Pr({queryId:f(),executor:this.#e,node:Lr.create(Gi(e))})}dropType(e){return new Mr({queryId:f(),executor:this.#e,node:Fr.create(Gi(e))})}withPlugin(e){return new t(this.#e.withPlugin(e))}withoutPlugins(){return new t(this.#e.withoutPlugins())}withSchema(e){return new t(this.#e.withPluginAtFront(new re(e)))}};var Ur=class{ref(e){return new Ht(e)}table(e){return new Cr(e)}};var Jr=class{#e;constructor(e){this.#e=e}async provideConnection(e){let r=await this.#e.acquireConnection();try{return await e(r)}finally{await this.#e.releaseConnection(r)}}};var $r=class t extends pt{#e;#t;#r;constructor(e,r,o,n=[]){super(n),this.#e=e,this.#t=r,this.#r=o}get adapter(){return this.#t}compileQuery(e,r){return this.#e.compileQuery(e,r)}provideConnection(e){return this.#r.provideConnection(e)}withPlugins(e){return new t(this.#e,this.#t,this.#r,[...this.plugins,...e])}withPlugin(e){return new t(this.#e,this.#t,this.#r,[...this.plugins,e])}withPluginAtFront(e){return new t(this.#e,this.#t,this.#r,[e,...this.plugins])}withConnectionProvider(e){return new t(this.#e,this.#t,e,[...this.plugins])}withoutPlugins(){return new t(this.#e,this.#t,this.#r,[])}};function Gr(){return typeof performance<"u"&&k(performance.now)?performance.now():Date.now()}var Kr=class{#e;#t;#r;#i;#o;#a=new WeakSet;constructor(e,r){this.#i=!1,this.#e=e,this.#t=r}async init(){if(this.#o)throw new Error("driver has already been destroyed");this.#r||(this.#r=this.#e.init().then(()=>{this.#i=!0}).catch(e=>(this.#r=void 0,Promise.reject(e)))),await this.#r}async acquireConnection(){if(this.#o)throw new Error("driver has already been destroyed");this.#i||await this.init();let e=await this.#e.acquireConnection();return this.#a.has(e)||(this.#d()&&this.#n(e),this.#a.add(e)),e}async releaseConnection(e){await this.#e.releaseConnection(e)}beginTransaction(e,r){return this.#e.beginTransaction(e,r)}commitTransaction(e){return this.#e.commitTransaction(e)}rollbackTransaction(e){return this.#e.rollbackTransaction(e)}savepoint(e,r,o){if(this.#e.savepoint)return this.#e.savepoint(e,r,o);throw new Error("The `savepoint` method is not supported by this driver")}rollbackToSavepoint(e,r,o){if(this.#e.rollbackToSavepoint)return this.#e.rollbackToSavepoint(e,r,o);throw new Error("The `rollbackToSavepoint` method is not supported by this driver")}releaseSavepoint(e,r,o){if(this.#e.releaseSavepoint)return this.#e.releaseSavepoint(e,r,o);throw new Error("The `releaseSavepoint` method is not supported by this driver")}async destroy(){this.#r&&(await this.#r,this.#o||(this.#o=this.#e.destroy().catch(e=>(this.#o=void 0,Promise.reject(e)))),await this.#o)}#d(){return this.#t.isLevelEnabled("query")||this.#t.isLevelEnabled("error")}#n(e){let r=e.executeQuery,o=e.streamQuery,n=this;e.executeQuery=async a=>{let d,h=Gr();try{return await r.call(e,a)}catch(l){throw d=l,await n.#s(l,a,h),l}finally{d||await n.#u(a,h)}},e.streamQuery=async function*(a,d){let h,l=Gr();try{for await(let c of o.call(e,a,d))yield c}catch(c){throw h=c,await n.#s(c,a,l),c}finally{h||await n.#u(a,l,!0)}}}async#s(e,r,o){await this.#t.error(()=>({level:"error",error:e,query:r,queryDurationMillis:this.#p(o)}))}async#u(e,r,o=!1){await this.#t.query(()=>({level:"query",isStream:o,query:e,queryDurationMillis:this.#p(r)}))}#p(e){return Gr()-e}};var Gn=()=>{},Tt=class{#e;#t;constructor(e){this.#e=e}async provideConnection(e){for(;this.#t;)await this.#t.catch(Gn);return this.#t=this.#r(e).finally(()=>{this.#t=void 0}),this.#t}async#r(e){return await e(this.#e)}};var Kn=["read only","read write"],jn=["read uncommitted","read committed","repeatable read","serializable","snapshot"];function Ki(t){if(t.accessMode&&!Kn.includes(t.accessMode))throw new Error(`invalid transaction access mode ${t.accessMode}`);if(t.isolationLevel&&!jn.includes(t.isolationLevel))throw new Error(`invalid transaction isolation level ${t.isolationLevel}`)}var Yv=i(["query","error"]),jr=class{#e;#t;constructor(e){k(e)?(this.#t=e,this.#e=i({query:!0,error:!0})):(this.#t=Hn,this.#e=i({query:e.includes("query"),error:e.includes("error")}))}isLevelEnabled(e){return this.#e[e]}async query(e){this.#e.query&&await this.#t(e())}async error(e){this.#e.error&&await this.#t(e())}};function Hn(t){if(t.level==="query"){let e=`kysely:query:${t.isStream?"stream:":""}`;console.log(`${e} ${t.query.sql}`),console.log(`${e} duration: ${t.queryDurationMillis.toFixed(1)}ms`)}else t.level==="error"&&(t.error instanceof Error?console.error(`kysely:error: ${t.error.stack??t.error.message}`):console.error(`kysely:error: ${JSON.stringify({error:t.error,query:t.query.sql,queryDurationMillis:t.queryDurationMillis})}`))}function _o(t){return q(t)&&k(t.compile)}Symbol.asyncDispose??=Symbol("Symbol.asyncDispose");var At=class t extends ct{#e;constructor(e){let r,o;if(Yn(e))r={executor:e.executor},o={...e};else{let n=e.dialect,a=n.createDriver(),d=n.createQueryCompiler(),h=n.createAdapter(),l=new jr(e.log??[]),c=new Kr(a,l),L=new Jr(c),ge=new $r(d,h,L,e.plugins??[]);r={executor:ge},o={config:e,executor:ge,dialect:n,driver:c}}super(r),this.#e=i(o)}get schema(){return new Vr(this.#e.executor)}get dynamic(){return new Ur}get introspection(){return this.#e.dialect.createIntrospector(this.withoutPlugins())}case(e){return new lt({node:ee.create(H(e)?void 0:j(e))})}get fn(){return gr()}transaction(){return new Hi({...this.#e})}startTransaction(){return new Yi({...this.#e})}connection(){return new ji({...this.#e})}withPlugin(e){return new t({...this.#e,executor:this.#e.executor.withPlugin(e)})}withoutPlugins(){return new t({...this.#e,executor:this.#e.executor.withoutPlugins()})}withSchema(e){return new t({...this.#e,executor:this.#e.executor.withPluginAtFront(new re(e))})}withTables(){return new t({...this.#e})}async destroy(){await this.#e.driver.destroy()}get isTransaction(){return!1}getExecutor(){return this.#e.executor}executeQuery(e,r=f()){let o=_o(e)?e.compile():e;return this.getExecutor().executeQuery(o,r)}async[Symbol.asyncDispose](){await this.destroy()}},Hr=class t extends At{#e;constructor(e){super(e),this.#e=e}get isTransaction(){return!0}transaction(){throw new Error("calling the transaction method for a Transaction is not supported")}connection(){throw new Error("calling the connection method for a Transaction is not supported")}async destroy(){throw new Error("calling the destroy method for a Transaction is not supported")}withPlugin(e){return new t({...this.#e,executor:this.#e.executor.withPlugin(e)})}withoutPlugins(){return new t({...this.#e,executor:this.#e.executor.withoutPlugins()})}withSchema(e){return new t({...this.#e,executor:this.#e.executor.withPluginAtFront(new re(e))})}withTables(){return new t({...this.#e})}};function Yn(t){return q(t)&&q(t.config)&&q(t.driver)&&q(t.executor)&&q(t.dialect)}var ji=class{#e;constructor(e){this.#e=i(e)}async execute(e){return this.#e.executor.provideConnection(async r=>{let o=this.#e.executor.withConnectionProvider(new Tt(r)),n=new At({...this.#e,executor:o});return await e(n)})}},Hi=class t{#e;constructor(e){this.#e=i(e)}setAccessMode(e){return new t({...this.#e,accessMode:e})}setIsolationLevel(e){return new t({...this.#e,isolationLevel:e})}async execute(e){let{isolationLevel:r,accessMode:o,...n}=this.#e,a={isolationLevel:r,accessMode:o};return Ki(a),this.#e.executor.provideConnection(async d=>{let h=this.#e.executor.withConnectionProvider(new Tt(d)),l=new Hr({...n,executor:h});try{await this.#e.driver.beginTransaction(d,a);let c=await e(l);return await this.#e.driver.commitTransaction(d),c}catch(c){throw await this.#e.driver.rollbackTransaction(d),c}})}},Yi=class t{#e;constructor(e){this.#e=i(e)}setAccessMode(e){return new t({...this.#e,accessMode:e})}setIsolationLevel(e){return new t({...this.#e,isolationLevel:e})}async execute(){let{isolationLevel:e,accessMode:r,...o}=this.#e,n={isolationLevel:e,accessMode:r};Ki(n);let a=await mr(this.#e.executor);return await this.#e.driver.beginTransaction(a.connection,n),new Xi({...o,connection:a,executor:this.#e.executor.withConnectionProvider(new Tt(a.connection))})}},Xi=class t extends Hr{#e;#t;#r;constructor(e){let r={isCommitted:!1,isRolledBack:!1};e={...e,executor:new Zi(e.executor,r)};let{connection:o,...n}=e;super(n),this.#e=i(e),this.#r=r;let a=f();this.#t=d=>e.executor.compileQuery(d,a)}get isCommitted(){return this.#r.isCommitted}get isRolledBack(){return this.#r.isRolledBack}commit(){return Xe(this.#r),new Ye(async()=>{await this.#e.driver.commitTransaction(this.#e.connection.connection),this.#r.isCommitted=!0,this.#e.connection.release()})}rollback(){return Xe(this.#r),new Ye(async()=>{await this.#e.driver.rollbackTransaction(this.#e.connection.connection),this.#r.isRolledBack=!0,this.#e.connection.release()})}savepoint(e){return Xe(this.#r),new Ye(async()=>(await this.#e.driver.savepoint?.(this.#e.connection.connection,e,this.#t),new t({...this.#e})))}rollbackToSavepoint(e){return Xe(this.#r),new Ye(async()=>(await this.#e.driver.rollbackToSavepoint?.(this.#e.connection.connection,e,this.#t),new t({...this.#e})))}releaseSavepoint(e){return Xe(this.#r),new Ye(async()=>(await this.#e.driver.releaseSavepoint?.(this.#e.connection.connection,e,this.#t),new t({...this.#e})))}withPlugin(e){return new t({...this.#e,executor:this.#e.executor.withPlugin(e)})}withoutPlugins(){return new t({...this.#e,executor:this.#e.executor.withoutPlugins()})}withSchema(e){return new t({...this.#e,executor:this.#e.executor.withPluginAtFront(new re(e))})}withTables(){return new t({...this.#e})}},Ye=class{#e;constructor(e){this.#e=e}async execute(){return await this.#e()}};function Xe(t){if(t.isCommitted)throw new Error("Transaction is already committed");if(t.isRolledBack)throw new Error("Transaction is already rolled back")}var Zi=class t{#e;#t;constructor(e,r){e instanceof t?this.#e=e.#e:this.#e=e,this.#t=r}get adapter(){return this.#e.adapter}get plugins(){return this.#e.plugins}transformQuery(e,r){return this.#e.transformQuery(e,r)}compileQuery(e,r){return this.#e.compileQuery(e,r)}provideConnection(e){return this.#e.provideConnection(e)}executeQuery(e,r){return Xe(this.#t),this.#e.executeQuery(e,r)}stream(e,r,o){return Xe(this.#t),this.#e.stream(e,r,o)}withConnectionProvider(e){return new t(this.#e.withConnectionProvider(e),this.#t)}withPlugin(e){return new t(this.#e.withPlugin(e),this.#t)}withPlugins(e){return new t(this.#e.withPlugins(e),this.#t)}withPluginAtFront(e){return new t(this.#e.withPluginAtFront(e),this.#t)}withoutPlugins(){return new t(this.#e.withoutPlugins(),this.#t)}};var _i=class t{#e;constructor(e){this.#e=i(e)}get expressionType(){}get isRawBuilder(){return!0}as(e){return new eo(this,e)}$castTo(){return new t({...this.#e})}$notNull(){return new t(this.#e)}withPlugin(e){return new t({...this.#e,plugins:this.#e.plugins!==void 0?i([...this.#e.plugins,e]):i([e])})}toOperationNode(){return this.#r(this.#t())}compile(e){return this.#i(this.#t(e))}async execute(e){let r=this.#t(e);return r.executeQuery(this.#i(r),this.#e.queryId)}#t(e){let r=e!==void 0?e.getExecutor():Pe;return this.#e.plugins!==void 0?r.withPlugins(this.#e.plugins):r}#r(e){return e.transformQuery(this.#e.rawNode,this.#e.queryId)}#i(e){return e.compileQuery(this.#r(e),this.#e.queryId)}};function Ae(t){return new _i(t)}var eo=class{#e;#t;constructor(e,r){this.#e=e,this.#t=r}get expression(){return this.#e}get alias(){return this.#t}get rawBuilder(){return this.#e}toOperationNode(){return E.create(this.#e.toOperationNode(),b(this.#t)?this.#t.toOperationNode():p.create(this.#t))}};var $=Object.assign((t,...e)=>Ae({queryId:f(),rawNode:W.create(t,e?.map(en)??[])}),{ref(t){return Ae({queryId:f(),rawNode:W.createWithChild(Z(t))})},val(t){return Ae({queryId:f(),rawNode:W.createWithChild(g(t))})},value(t){return this.val(t)},table(t){return Ae({queryId:f(),rawNode:W.createWithChild(y(t))})},id(...t){let e=new Array(t.length+1).fill(".");return e[0]="",e[e.length-1]="",Ae({queryId:f(),rawNode:W.create(e,t.map(p.create))})},lit(t){return Ae({queryId:f(),rawNode:W.createWithChild(T.createImmediate(t))})},literal(t){return this.lit(t)},raw(t){return Ae({queryId:f(),rawNode:W.createWithSql(t)})},join(t,e=$`, `){let r=new Array(Math.max(2*t.length-1,0)),o=e.toOperationNode();for(let n=0;n<t.length;++n)r[2*n]=en(t[n]),n!==t.length-1&&(r[2*n+1]=o);return Ae({queryId:f(),rawNode:W.createWithChildren(r)})}});function en(t){return b(t)?t.toOperationNode():g(t)}var Yr=class{nodeStack=[];get parentNode(){return this.nodeStack[this.nodeStack.length-2]}#e=i({AliasNode:this.visitAlias.bind(this),ColumnNode:this.visitColumn.bind(this),IdentifierNode:this.visitIdentifier.bind(this),SchemableIdentifierNode:this.visitSchemableIdentifier.bind(this),RawNode:this.visitRaw.bind(this),ReferenceNode:this.visitReference.bind(this),SelectQueryNode:this.visitSelectQuery.bind(this),SelectionNode:this.visitSelection.bind(this),TableNode:this.visitTable.bind(this),FromNode:this.visitFrom.bind(this),SelectAllNode:this.visitSelectAll.bind(this),AndNode:this.visitAnd.bind(this),OrNode:this.visitOr.bind(this),ValueNode:this.visitValue.bind(this),ValueListNode:this.visitValueList.bind(this),PrimitiveValueListNode:this.visitPrimitiveValueList.bind(this),ParensNode:this.visitParens.bind(this),JoinNode:this.visitJoin.bind(this),OperatorNode:this.visitOperator.bind(this),WhereNode:this.visitWhere.bind(this),InsertQueryNode:this.visitInsertQuery.bind(this),DeleteQueryNode:this.visitDeleteQuery.bind(this),ReturningNode:this.visitReturning.bind(this),CreateTableNode:this.visitCreateTable.bind(this),AddColumnNode:this.visitAddColumn.bind(this),ColumnDefinitionNode:this.visitColumnDefinition.bind(this),DropTableNode:this.visitDropTable.bind(this),DataTypeNode:this.visitDataType.bind(this),OrderByNode:this.visitOrderBy.bind(this),OrderByItemNode:this.visitOrderByItem.bind(this),GroupByNode:this.visitGroupBy.bind(this),GroupByItemNode:this.visitGroupByItem.bind(this),UpdateQueryNode:this.visitUpdateQuery.bind(this),ColumnUpdateNode:this.visitColumnUpdate.bind(this),LimitNode:this.visitLimit.bind(this),OffsetNode:this.visitOffset.bind(this),OnConflictNode:this.visitOnConflict.bind(this),OnDuplicateKeyNode:this.visitOnDuplicateKey.bind(this),CreateIndexNode:this.visitCreateIndex.bind(this),DropIndexNode:this.visitDropIndex.bind(this),ListNode:this.visitList.bind(this),PrimaryKeyConstraintNode:this.visitPrimaryKeyConstraint.bind(this),UniqueConstraintNode:this.visitUniqueConstraint.bind(this),ReferencesNode:this.visitReferences.bind(this),CheckConstraintNode:this.visitCheckConstraint.bind(this),WithNode:this.visitWith.bind(this),CommonTableExpressionNode:this.visitCommonTableExpression.bind(this),CommonTableExpressionNameNode:this.visitCommonTableExpressionName.bind(this),HavingNode:this.visitHaving.bind(this),CreateSchemaNode:this.visitCreateSchema.bind(this),DropSchemaNode:this.visitDropSchema.bind(this),AlterTableNode:this.visitAlterTable.bind(this),DropColumnNode:this.visitDropColumn.bind(this),RenameColumnNode:this.visitRenameColumn.bind(this),AlterColumnNode:this.visitAlterColumn.bind(this),ModifyColumnNode:this.visitModifyColumn.bind(this),AddConstraintNode:this.visitAddConstraint.bind(this),DropConstraintNode:this.visitDropConstraint.bind(this),RenameConstraintNode:this.visitRenameConstraint.bind(this),ForeignKeyConstraintNode:this.visitForeignKeyConstraint.bind(this),CreateViewNode:this.visitCreateView.bind(this),RefreshMaterializedViewNode:this.visitRefreshMaterializedView.bind(this),DropViewNode:this.visitDropView.bind(this),GeneratedNode:this.visitGenerated.bind(this),DefaultValueNode:this.visitDefaultValue.bind(this),OnNode:this.visitOn.bind(this),ValuesNode:this.visitValues.bind(this),SelectModifierNode:this.visitSelectModifier.bind(this),CreateTypeNode:this.visitCreateType.bind(this),DropTypeNode:this.visitDropType.bind(this),ExplainNode:this.visitExplain.bind(this),DefaultInsertValueNode:this.visitDefaultInsertValue.bind(this),AggregateFunctionNode:this.visitAggregateFunction.bind(this),OverNode:this.visitOver.bind(this),PartitionByNode:this.visitPartitionBy.bind(this),PartitionByItemNode:this.visitPartitionByItem.bind(this),SetOperationNode:this.visitSetOperation.bind(this),BinaryOperationNode:this.visitBinaryOperation.bind(this),UnaryOperationNode:this.visitUnaryOperation.bind(this),UsingNode:this.visitUsing.bind(this),FunctionNode:this.visitFunction.bind(this),CaseNode:this.visitCase.bind(this),WhenNode:this.visitWhen.bind(this),JSONReferenceNode:this.visitJSONReference.bind(this),JSONPathNode:this.visitJSONPath.bind(this),JSONPathLegNode:this.visitJSONPathLeg.bind(this),JSONOperatorChainNode:this.visitJSONOperatorChain.bind(this),TupleNode:this.visitTuple.bind(this),MergeQueryNode:this.visitMergeQuery.bind(this),MatchedNode:this.visitMatched.bind(this),AddIndexNode:this.visitAddIndex.bind(this),CastNode:this.visitCast.bind(this),FetchNode:this.visitFetch.bind(this),TopNode:this.visitTop.bind(this),OutputNode:this.visitOutput.bind(this),OrActionNode:this.visitOrAction.bind(this),CollateNode:this.visitCollate.bind(this)});visitNode=e=>{this.nodeStack.push(e),this.#e[e.kind](e),this.nodeStack.pop()}};var Xn=/'/g,Xr=class extends Yr{#e="";#t=[];get numParameters(){return this.#t.length}compileQuery(e,r){return this.#e="",this.#t=[],this.nodeStack.splice(0,this.nodeStack.length),this.visitNode(e),i({query:e,queryId:r,sql:this.getSql(),parameters:[...this.#t]})}getSql(){return this.#e}visitSelectQuery(e){let r=this.parentNode!==void 0&&!fe.is(this.parentNode)&&!S.is(this.parentNode)&&!z.is(this.parentNode)&&!ce.is(this.parentNode)&&!wr.is(this.parentNode);this.parentNode===void 0&&e.explain&&(this.visitNode(e.explain),this.append(" ")),r&&this.append("("),e.with&&(this.visitNode(e.with),this.append(" ")),this.append("select"),e.distinctOn&&(this.append(" "),this.compileDistinctOn(e.distinctOn)),e.frontModifiers?.length&&(this.append(" "),this.compileList(e.frontModifiers," ")),e.top&&(this.append(" "),this.visitNode(e.top)),e.selections&&(this.append(" "),this.compileList(e.selections)),e.from&&(this.append(" "),this.visitNode(e.from)),e.joins&&(this.append(" "),this.compileList(e.joins," ")),e.where&&(this.append(" "),this.visitNode(e.where)),e.groupBy&&(this.append(" "),this.visitNode(e.groupBy)),e.having&&(this.append(" "),this.visitNode(e.having)),e.setOperations&&(this.append(" "),this.compileList(e.setOperations," ")),e.orderBy&&(this.append(" "),this.visitNode(e.orderBy)),e.limit&&(this.append(" "),this.visitNode(e.limit)),e.offset&&(this.append(" "),this.visitNode(e.offset)),e.fetch&&(this.append(" "),this.visitNode(e.fetch)),e.endModifiers?.length&&(this.append(" "),this.compileList(this.sortSelectModifiers([...e.endModifiers])," ")),r&&this.append(")")}visitFrom(e){this.append("from "),this.compileList(e.froms)}visitSelection(e){this.visitNode(e.selection)}visitColumn(e){this.visitNode(e.column)}compileDistinctOn(e){this.append("distinct on ("),this.compileList(e),this.append(")")}compileList(e,r=", "){let o=e.length-1;for(let n=0;n<=o;n++)this.visitNode(e[n]),n<o&&this.append(r)}visitWhere(e){this.append("where "),this.visitNode(e.where)}visitHaving(e){this.append("having "),this.visitNode(e.having)}visitInsertQuery(e){let r=this.nodeStack.find(u.is),o=r!==e;!o&&e.explain&&(this.visitNode(e.explain),this.append(" ")),o&&!I.is(r)&&this.append("("),e.with&&(this.visitNode(e.with),this.append(" ")),this.append(e.replace?"replace":"insert"),e.ignore&&(De("`InsertQueryNode.ignore` is deprecated. Use `InsertQueryNode.orAction` instead."),this.append(" ignore")),e.orAction&&(this.append(" "),this.visitNode(e.orAction)),e.top&&(this.append(" "),this.visitNode(e.top)),e.into&&(this.append(" into "),this.visitNode(e.into)),e.columns&&(this.append(" ("),this.compileList(e.columns),this.append(")")),e.output&&(this.append(" "),this.visitNode(e.output)),e.values&&(this.append(" "),this.visitNode(e.values)),e.defaultValues&&(this.append(" "),this.append("default values")),e.onConflict&&(this.append(" "),this.visitNode(e.onConflict)),e.onDuplicateKey&&(this.append(" "),this.visitNode(e.onDuplicateKey)),e.returning&&(this.append(" "),this.visitNode(e.returning)),o&&!I.is(r)&&this.append(")"),e.endModifiers?.length&&(this.append(" "),this.compileList(e.endModifiers," "))}visitValues(e){this.append("values "),this.compileList(e.values)}visitDeleteQuery(e){let r=this.nodeStack.find(u.is)!==e;!r&&e.explain&&(this.visitNode(e.explain),this.append(" ")),r&&this.append("("),e.with&&(this.visitNode(e.with),this.append(" ")),this.append("delete "),e.top&&(this.visitNode(e.top),this.append(" ")),this.visitNode(e.from),e.output&&(this.append(" "),this.visitNode(e.output)),e.using&&(this.append(" "),this.visitNode(e.using)),e.joins&&(this.append(" "),this.compileList(e.joins," ")),e.where&&(this.append(" "),this.visitNode(e.where)),e.orderBy&&(this.append(" "),this.visitNode(e.orderBy)),e.limit&&(this.append(" "),this.visitNode(e.limit)),e.returning&&(this.append(" "),this.visitNode(e.returning)),r&&this.append(")"),e.endModifiers?.length&&(this.append(" "),this.compileList(e.endModifiers," "))}visitReturning(e){this.append("returning "),this.compileList(e.selections)}visitAlias(e){this.visitNode(e.node),this.append(" as "),this.visitNode(e.alias)}visitReference(e){e.table&&(this.visitNode(e.table),this.append(".")),this.visitNode(e.column)}visitSelectAll(e){this.append("*")}visitIdentifier(e){this.append(this.getLeftIdentifierWrapper()),this.compileUnwrappedIdentifier(e),this.append(this.getRightIdentifierWrapper())}compileUnwrappedIdentifier(e){if(!v(e.name))throw new Error("a non-string identifier was passed to compileUnwrappedIdentifier.");this.append(this.sanitizeIdentifier(e.name))}visitAnd(e){this.visitNode(e.left),this.append(" and "),this.visitNode(e.right)}visitOr(e){this.visitNode(e.left),this.append(" or "),this.visitNode(e.right)}visitValue(e){e.immediate?this.appendImmediateValue(e.value):this.appendValue(e.value)}visitValueList(e){this.append("("),this.compileList(e.values),this.append(")")}visitTuple(e){this.append("("),this.compileList(e.values),this.append(")")}visitPrimitiveValueList(e){this.append("(");let{values:r}=e;for(let o=0;o<r.length;++o)this.appendValue(r[o]),o!==r.length-1&&this.append(", ");this.append(")")}visitParens(e){this.append("("),this.visitNode(e.node),this.append(")")}visitJoin(e){this.append(_n[e.joinType]),this.append(" "),this.visitNode(e.table),e.on&&(this.append(" "),this.visitNode(e.on))}visitOn(e){this.append("on "),this.visitNode(e.on)}visitRaw(e){let{sqlFragments:r,parameters:o}=e;for(let n=0;n<r.length;++n)this.append(r[n]),o.length>n&&this.visitNode(o[n])}visitOperator(e){this.append(e.operator)}visitTable(e){this.visitNode(e.table)}visitSchemableIdentifier(e){e.schema&&(this.visitNode(e.schema),this.append(".")),this.visitNode(e.identifier)}visitCreateTable(e){this.append("create "),e.frontModifiers&&e.frontModifiers.length>0&&(this.compileList(e.frontModifiers," "),this.append(" ")),e.temporary&&this.append("temporary "),this.append("table "),e.ifNotExists&&this.append("if not exists "),this.visitNode(e.table),e.selectQuery?(this.append(" as "),this.visitNode(e.selectQuery)):(this.append(" ("),this.compileList([...e.columns,...e.constraints??[]]),this.append(")"),e.onCommit&&(this.append(" on commit "),this.append(e.onCommit)),e.endModifiers&&e.endModifiers.length>0&&(this.append(" "),this.compileList(e.endModifiers," ")))}visitColumnDefinition(e){e.ifNotExists&&this.append("if not exists "),this.visitNode(e.column),this.append(" "),this.visitNode(e.dataType),e.unsigned&&this.append(" unsigned"),e.frontModifiers&&e.frontModifiers.length>0&&(this.append(" "),this.compileList(e.frontModifiers," ")),e.generated&&(this.append(" "),this.visitNode(e.generated)),e.identity&&this.append(" identity"),e.defaultTo&&(this.append(" "),this.visitNode(e.defaultTo)),e.notNull&&this.append(" not null"),e.unique&&this.append(" unique"),e.nullsNotDistinct&&this.append(" nulls not distinct"),e.primaryKey&&this.append(" primary key"),e.autoIncrement&&(this.append(" "),this.append(this.getAutoIncrement())),e.references&&(this.append(" "),this.visitNode(e.references)),e.check&&(this.append(" "),this.visitNode(e.check)),e.endModifiers&&e.endModifiers.length>0&&(this.append(" "),this.compileList(e.endModifiers," "))}getAutoIncrement(){return"auto_increment"}visitReferences(e){this.append("references "),this.visitNode(e.table),this.append(" ("),this.compileList(e.columns),this.append(")"),e.onDelete&&(this.append(" on delete "),this.append(e.onDelete)),e.onUpdate&&(this.append(" on update "),this.append(e.onUpdate))}visitDropTable(e){this.append("drop table "),e.ifExists&&this.append("if exists "),this.visitNode(e.table),e.cascade&&this.append(" cascade")}visitDataType(e){this.append(e.dataType)}visitOrderBy(e){this.append("order by "),this.compileList(e.items)}visitOrderByItem(e){this.visitNode(e.orderBy),e.collation&&(this.append(" "),this.visitNode(e.collation)),e.direction&&(this.append(" "),this.visitNode(e.direction)),e.nulls&&(this.append(" nulls "),this.append(e.nulls))}visitGroupBy(e){this.append("group by "),this.compileList(e.items)}visitGroupByItem(e){this.visitNode(e.groupBy)}visitUpdateQuery(e){let r=this.nodeStack.find(u.is),o=r!==e;if(!o&&e.explain&&(this.visitNode(e.explain),this.append(" ")),o&&!I.is(r)&&this.append("("),e.with&&(this.visitNode(e.with),this.append(" ")),this.append("update "),e.top&&(this.visitNode(e.top),this.append(" ")),e.table&&(this.visitNode(e.table),this.append(" ")),this.append("set "),e.updates&&this.compileList(e.updates),e.output&&(this.append(" "),this.visitNode(e.output)),e.from&&(this.append(" "),this.visitNode(e.from)),e.joins){if(!e.from)throw new Error("Joins in an update query are only supported as a part of a PostgreSQL 'update set from join' query. If you want to create a MySQL 'update join set' query, see https://kysely.dev/docs/examples/update/my-sql-joins");this.append(" "),this.compileList(e.joins," ")}e.where&&(this.append(" "),this.visitNode(e.where)),e.orderBy&&(this.append(" "),this.visitNode(e.orderBy)),e.limit&&(this.append(" "),this.visitNode(e.limit)),e.returning&&(this.append(" "),this.visitNode(e.returning)),o&&!I.is(r)&&this.append(")"),e.endModifiers?.length&&(this.append(" "),this.compileList(e.endModifiers," "))}visitColumnUpdate(e){this.visitNode(e.column),this.append(" = "),this.visitNode(e.value)}visitLimit(e){this.append("limit "),this.visitNode(e.limit)}visitOffset(e){this.append("offset "),this.visitNode(e.offset)}visitOnConflict(e){this.append("on conflict"),e.columns?(this.append(" ("),this.compileList(e.columns),this.append(")")):e.constraint?(this.append(" on constraint "),this.visitNode(e.constraint)):e.indexExpression&&(this.append(" ("),this.visitNode(e.indexExpression),this.append(")")),e.indexWhere&&(this.append(" "),this.visitNode(e.indexWhere)),e.doNothing===!0?this.append(" do nothing"):e.updates&&(this.append(" do update set "),this.compileList(e.updates),e.updateWhere&&(this.append(" "),this.visitNode(e.updateWhere)))}visitOnDuplicateKey(e){this.append("on duplicate key update "),this.compileList(e.updates)}visitCreateIndex(e){this.append("create "),e.unique&&this.append("unique "),this.append("index "),e.ifNotExists&&this.append("if not exists "),this.visitNode(e.name),e.table&&(this.append(" on "),this.visitNode(e.table)),e.using&&(this.append(" using "),this.visitNode(e.using)),e.columns&&(this.append(" ("),this.compileList(e.columns),this.append(")")),e.nullsNotDistinct&&this.append(" nulls not distinct"),e.where&&(this.append(" "),this.visitNode(e.where))}visitDropIndex(e){this.append("drop index "),e.ifExists&&this.append("if exists "),this.visitNode(e.name),e.table&&(this.append(" on "),this.visitNode(e.table)),e.cascade&&this.append(" cascade")}visitCreateSchema(e){this.append("create schema "),e.ifNotExists&&this.append("if not exists "),this.visitNode(e.schema)}visitDropSchema(e){this.append("drop schema "),e.ifExists&&this.append("if exists "),this.visitNode(e.schema),e.cascade&&this.append(" cascade")}visitPrimaryKeyConstraint(e){e.name&&(this.append("constraint "),this.visitNode(e.name),this.append(" ")),this.append("primary key ("),this.compileList(e.columns),this.append(")"),this.buildDeferrable(e)}buildDeferrable(e){e.deferrable!==void 0&&(e.deferrable?this.append(" deferrable"):this.append(" not deferrable")),e.initiallyDeferred!==void 0&&(e.initiallyDeferred?this.append(" initially deferred"):this.append(" initially immediate"))}visitUniqueConstraint(e){e.name&&(this.append("constraint "),this.visitNode(e.name),this.append(" ")),this.append("unique"),e.nullsNotDistinct&&this.append(" nulls not distinct"),this.append(" ("),this.compileList(e.columns),this.append(")"),this.buildDeferrable(e)}visitCheckConstraint(e){e.name&&(this.append("constraint "),this.visitNode(e.name),this.append(" ")),this.append("check ("),this.visitNode(e.expression),this.append(")")}visitForeignKeyConstraint(e){e.name&&(this.append("constraint "),this.visitNode(e.name),this.append(" ")),this.append("foreign key ("),this.compileList(e.columns),this.append(") "),this.visitNode(e.references),e.onDelete&&(this.append(" on delete "),this.append(e.onDelete)),e.onUpdate&&(this.append(" on update "),this.append(e.onUpdate)),this.buildDeferrable(e)}visitList(e){this.compileList(e.items)}visitWith(e){this.append("with "),e.recursive&&this.append("recursive "),this.compileList(e.expressions)}visitCommonTableExpression(e){this.visitNode(e.name),this.append(" as "),Ue(e.materialized)&&(e.materialized||this.append("not "),this.append("materialized ")),this.visitNode(e.expression)}visitCommonTableExpressionName(e){this.visitNode(e.table),e.columns&&(this.append("("),this.compileList(e.columns),this.append(")"))}visitAlterTable(e){this.append("alter table "),this.visitNode(e.table),this.append(" "),e.renameTo&&(this.append("rename to "),this.visitNode(e.renameTo)),e.setSchema&&(this.append("set schema "),this.visitNode(e.setSchema)),e.addConstraint&&this.visitNode(e.addConstraint),e.dropConstraint&&this.visitNode(e.dropConstraint),e.renameConstraint&&this.visitNode(e.renameConstraint),e.columnAlterations&&this.compileColumnAlterations(e.columnAlterations),e.addIndex&&this.visitNode(e.addIndex),e.dropIndex&&this.visitNode(e.dropIndex)}visitAddColumn(e){this.append("add column "),this.visitNode(e.column)}visitRenameColumn(e){this.append("rename column "),this.visitNode(e.column),this.append(" to "),this.visitNode(e.renameTo)}visitDropColumn(e){this.append("drop column "),this.visitNode(e.column)}visitAlterColumn(e){this.append("alter column "),this.visitNode(e.column),this.append(" "),e.dataType&&(this.announcesNewColumnDataType()&&this.append("type "),this.visitNode(e.dataType),e.dataTypeExpression&&(this.append("using "),this.visitNode(e.dataTypeExpression))),e.setDefault&&(this.append("set default "),this.visitNode(e.setDefault)),e.dropDefault&&this.append("drop default"),e.setNotNull&&this.append("set not null"),e.dropNotNull&&this.append("drop not null")}visitModifyColumn(e){this.append("modify column "),this.visitNode(e.column)}visitAddConstraint(e){this.append("add "),this.visitNode(e.constraint)}visitDropConstraint(e){this.append("drop constraint "),e.ifExists&&this.append("if exists "),this.visitNode(e.constraintName),e.modifier==="cascade"?this.append(" cascade"):e.modifier==="restrict"&&this.append(" restrict")}visitRenameConstraint(e){this.append("rename constraint "),this.visitNode(e.oldName),this.append(" to "),this.visitNode(e.newName)}visitSetOperation(e){this.append(e.operator),this.append(" "),e.all&&this.append("all "),this.visitNode(e.expression)}visitCreateView(e){this.append("create "),e.orReplace&&this.append("or replace "),e.materialized&&this.append("materialized "),e.temporary&&this.append("temporary "),this.append("view "),e.ifNotExists&&this.append("if not exists "),this.visitNode(e.name),this.append(" "),e.columns&&(this.append("("),this.compileList(e.columns),this.append(") ")),e.as&&(this.append("as "),this.visitNode(e.as))}visitRefreshMaterializedView(e){this.append("refresh materialized view "),e.concurrently&&this.append("concurrently "),this.visitNode(e.name),e.withNoData?this.append(" with no data"):this.append(" with data")}visitDropView(e){this.append("drop "),e.materialized&&this.append("materialized "),this.append("view "),e.ifExists&&this.append("if exists "),this.visitNode(e.name),e.cascade&&this.append(" cascade")}visitGenerated(e){this.append("generated "),e.always&&this.append("always "),e.byDefault&&this.append("by default "),this.append("as "),e.identity&&this.append("identity"),e.expression&&(this.append("("),this.visitNode(e.expression),this.append(")")),e.stored&&this.append(" stored")}visitDefaultValue(e){this.append("default "),this.visitNode(e.defaultValue)}visitSelectModifier(e){e.rawModifier?this.visitNode(e.rawModifier):this.append(Zn[e.modifier]),e.of&&(this.append(" of "),this.compileList(e.of,", "))}visitCreateType(e){this.append("create type "),this.visitNode(e.name),e.enum&&(this.append(" as enum "),this.visitNode(e.enum))}visitDropType(e){this.append("drop type "),e.ifExists&&this.append("if exists "),this.visitNode(e.name)}visitExplain(e){this.append("explain"),(e.options||e.format)&&(this.append(" "),this.append(this.getLeftExplainOptionsWrapper()),e.options&&(this.visitNode(e.options),e.format&&this.append(this.getExplainOptionsDelimiter())),e.format&&(this.append("format"),this.append(this.getExplainOptionAssignment()),this.append(e.format)),this.append(this.getRightExplainOptionsWrapper()))}visitDefaultInsertValue(e){this.append("default")}visitAggregateFunction(e){this.append(e.func),this.append("("),e.distinct&&this.append("distinct "),this.compileList(e.aggregated),e.orderBy&&(this.append(" "),this.visitNode(e.orderBy)),this.append(")"),e.withinGroup&&(this.append(" within group ("),this.visitNode(e.withinGroup),this.append(")")),e.filter&&(this.append(" filter("),this.visitNode(e.filter),this.append(")")),e.over&&(this.append(" "),this.visitNode(e.over))}visitOver(e){this.append("over("),e.partitionBy&&(this.visitNode(e.partitionBy),e.orderBy&&this.append(" ")),e.orderBy&&this.visitNode(e.orderBy),this.append(")")}visitPartitionBy(e){this.append("partition by "),this.compileList(e.items)}visitPartitionByItem(e){this.visitNode(e.partitionBy)}visitBinaryOperation(e){this.visitNode(e.leftOperand),this.append(" "),this.visitNode(e.operator),this.append(" "),this.visitNode(e.rightOperand)}visitUnaryOperation(e){this.visitNode(e.operator),this.isMinusOperator(e.operator)||this.append(" "),this.visitNode(e.operand)}isMinusOperator(e){return X.is(e)&&e.operator==="-"}visitUsing(e){this.append("using "),this.compileList(e.tables)}visitFunction(e){this.append(e.func),this.append("("),this.compileList(e.arguments),this.append(")")}visitCase(e){this.append("case"),e.value&&(this.append(" "),this.visitNode(e.value)),e.when&&(this.append(" "),this.compileList(e.when," ")),e.else&&(this.append(" else "),this.visitNode(e.else)),this.append(" end"),e.isStatement&&this.append(" case")}visitWhen(e){this.append("when "),this.visitNode(e.condition),e.result&&(this.append(" then "),this.visitNode(e.result))}visitJSONReference(e){this.visitNode(e.reference),this.visitNode(e.traversal)}visitJSONPath(e){e.inOperator&&this.visitNode(e.inOperator),this.append("'$");for(let r of e.pathLegs)this.visitNode(r);this.append("'")}visitJSONPathLeg(e){let r=e.type==="ArrayLocation";this.append(r?"[":"."),this.append(String(e.value)),r&&this.append("]")}visitJSONOperatorChain(e){for(let r=0,o=e.values.length;r<o;r++)r===o-1?this.visitNode(e.operator):this.append("->"),this.visitNode(e.values[r])}visitMergeQuery(e){e.with&&(this.visitNode(e.with),this.append(" ")),this.append("merge "),e.top&&(this.visitNode(e.top),this.append(" ")),this.append("into "),this.visitNode(e.into),e.using&&(this.append(" "),this.visitNode(e.using)),e.whens&&(this.append(" "),this.compileList(e.whens," ")),e.returning&&(this.append(" "),this.visitNode(e.returning)),e.output&&(this.append(" "),this.visitNode(e.output)),e.endModifiers?.length&&(this.append(" "),this.compileList(e.endModifiers," "))}visitMatched(e){e.not&&this.append("not "),this.append("matched"),e.bySource&&this.append(" by source")}visitAddIndex(e){this.append("add "),e.unique&&this.append("unique "),this.append("index "),this.visitNode(e.name),e.columns&&(this.append(" ("),this.compileList(e.columns),this.append(")")),e.using&&(this.append(" using "),this.visitNode(e.using))}visitCast(e){this.append("cast("),this.visitNode(e.expression),this.append(" as "),this.visitNode(e.dataType),this.append(")")}visitFetch(e){this.append("fetch next "),this.visitNode(e.rowCount),this.append(` rows ${e.modifier}`)}visitOutput(e){this.append("output "),this.compileList(e.selections)}visitTop(e){this.append(`top(${e.expression})`),e.modifiers&&this.append(` ${e.modifiers}`)}visitOrAction(e){this.append(e.action)}visitCollate(e){this.append("collate "),this.visitNode(e.collation)}append(e){this.#e+=e}appendValue(e){this.addParameter(e),this.append(this.getCurrentParameterPlaceholder())}getLeftIdentifierWrapper(){return'"'}getRightIdentifierWrapper(){return'"'}getCurrentParameterPlaceholder(){return"$"+this.numParameters}getLeftExplainOptionsWrapper(){return"("}getExplainOptionAssignment(){return" "}getExplainOptionsDelimiter(){return", "}getRightExplainOptionsWrapper(){return")"}sanitizeIdentifier(e){let r=this.getLeftIdentifierWrapper(),o=this.getRightIdentifierWrapper(),n="";for(let a of e)n+=a,a===r?n+=r:a===o&&(n+=o);return n}sanitizeStringLiteral(e){return e.replace(Xn,"''")}addParameter(e){this.#t.push(e)}appendImmediateValue(e){if(v(e))this.appendStringLiteral(e);else if(Ee(e)||Ue(e))this.append(e.toString());else if(Ze(e))this.append("null");else if(so(e))this.appendImmediateValue(e.toISOString());else if(_e(e))this.appendImmediateValue(e.toString());else throw new Error(`invalid immediate value ${e}`)}appendStringLiteral(e){this.append("'"),this.append(this.sanitizeStringLiteral(e)),this.append("'")}sortSelectModifiers(e){return e.sort((r,o)=>r.modifier&&o.modifier?tn[r.modifier]-tn[o.modifier]:1),i(e)}compileColumnAlterations(e){this.compileList(e)}announcesNewColumnDataType(){return!0}},Zn=i({ForKeyShare:"for key share",ForNoKeyUpdate:"for no key update",ForUpdate:"for update",ForShare:"for share",NoWait:"nowait",SkipLocked:"skip locked",Distinct:"distinct"}),tn=i({ForKeyShare:1,ForNoKeyUpdate:1,ForUpdate:1,ForShare:1,NoWait:2,SkipLocked:2,Distinct:0}),_n=i({InnerJoin:"inner join",LeftJoin:"left join",RightJoin:"right join",FullJoin:"full join",CrossJoin:"cross join",LateralInnerJoin:"inner join lateral",LateralLeftJoin:"left join lateral",LateralCrossJoin:"cross join lateral",OuterApply:"outer apply",CrossApply:"cross apply",Using:"using"});var Zr=class{async init(){}async acquireConnection(){return new to}async beginTransaction(){}async commitTransaction(){}async rollbackTransaction(){}async releaseConnection(){}async destroy(){}async releaseSavepoint(){}async rollbackToSavepoint(){}async savepoint(){}},to=class{async executeQuery(){return{rows:[]}}async*streamQuery(){}};var _r=class{get supportsCreateIfNotExists(){return!0}get supportsTransactionalDdl(){return!1}get supportsReturning(){return!1}get supportsOutput(){return!1}};var es=/"/g,ei=class extends Xr{sanitizeIdentifier(e){return e.replace(es,'""')}};var ts=BigInt("3853314791062309107"),ti=class extends _r{get supportsTransactionalDdl(){return!0}get supportsReturning(){return!0}async acquireMigrationLock(e,r){await $`select pg_advisory_xact_lock(${$.lit(ts)})`.execute(e)}async releaseMigrationLock(e,r){}};function rn(t){return new At({dialect:{createAdapter:()=>new t.Adapter,createDriver:()=>new Zr,createIntrospector:()=>null,createQueryCompiler:()=>new t.QueryCompiler},plugins:[...t.noParameters?[new ro]:[]]})}var ro=class{#e=new io;transformQuery(e){return this.#e.transformNode(e.node)}transformResult(e){return Promise.resolve(e.result)}},io=class extends Le{transformPrimitiveValueList(e){return me.create(e.values.map(T.createImmediate))}transformValue(e){return{...super.transformValue(e),immediate:!0}}};function ze(t){let e=t.compile();return{parameters:e.parameters,sql:e.sql}}function oo(t,e){let r=is(t,e);return o=>o.where(n=>n.or(r.map(a=>n.and(a.map(([d,h])=>n(d,h===null?"is":"=",h))))))}function rs(t,e){return Object.entries(Object.values(e).reduce((r,o)=>{let{isInPrimaryKey:n,name:a}=o;return n&&(r[a]=t[a]??null),r},{}))}function is(t,e){return t.map(r=>rs(r,e))}function Ve(t){return rn({...t,Adapter:ti,QueryCompiler:ei})}function on(t,e){let{table:r,rows:o}=t,{name:n,schema:a,columns:d}=r,h=Ve(e),l=Object.keys(d),c={[l[0]]:$`default`};return ze(h.withSchema(a).insertInto(n).values(o.map(L=>Object.keys(L).length===0?c:L)).returning(l).returning(L=>L.cast("ctid","text").as("ctid")))}function nn(t,e){let{pageIndex:r,pageSize:o,sortOrder:n,table:{name:a,schema:d,columns:h},filter:l={kind:"FilterGroup",after:"and",filters:[]}}=t,c=Ve(e),L=Object.keys(h),ge=c.withSchema(d).selectFrom(a).select(P=>P.cast(P.fn.coalesce(P.fn.countAll(),$.lit(0)),"text").as("oid"));return ze(c.with("count",()=>ge).withSchema(d).selectFrom([a,"count"]).select($.ref("count.oid").$castTo().as("oid")).select(P=>P.cast("ctid","text").as("ctid")).select(L).$call(P=>n.reduce((F,he)=>F.orderBy(he.column,he.direction),P)).where(sn(l.filters)).limit(o).offset($.lit(BigInt(r)*BigInt(o))))}function os(t){return t.kind==="ColumnFilter"?e=>e(e.ref(t.column),t.operator,t.value):sn(t.filters)}function sn(t){if(t.length===0)return o=>o.lit(!0);let e=[],r=[];for(let o=0;o<t.length;o++)r.push(os(t[o])),(o===t.length-1||t[o].after==="or")&&(e.push(r),r=[]);return o=>{let n=e.map(a=>o.and(a.map(d=>d(o))));return o.or(n)}}function an(t,e){let{changes:r,row:o,table:{columns:n,name:a,schema:d}}=t,h=Ve(e),l=Object.keys(n);return ze(h.withSchema(d).updateTable(a).set(r).$call(oo([o],n)).returning(l).returning(c=>[c.cast("ctid","text").as("ctid"),c.cast(c.fn("floor",[c(c.fn("extract",[$`epoch from now()`]),"*",1e6)]),"text").as("__ps_updated_at__")]))}function un(t,e){let{rows:r,table:{columns:o,name:n,schema:a}}=t,d=Ve(e);return ze(d.withSchema(a).deleteFrom(n).$call(oo(r,o)))}function dn(t){return $`(select coalesce(json_agg(agg), '[]') from ${t} as agg)`}var ns="r",ss="v",as=[ns,ss];function pn(t){return ze(Ve(t).selectFrom("pg_catalog.pg_class as cls").innerJoin("pg_catalog.pg_namespace as ns","cls.relnamespace","ns.oid").$call(us).where("cls.relkind","in",as).select(e=>["ns.nspname as schema","cls.relname as name",dn(e.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",r=>r.on("pk_con.contype","=","p").onRef("pk_con.conrelid","=","cls.oid").on(o=>o("att.attnum","=",o.fn.any("pk_con.conkey")))).leftJoin("pg_catalog.pg_constraint as fk_con",r=>r.on("fk_con.contype","=","f").onRef("fk_con.conrelid","=","cls.oid").on(o=>o("att.attnum","=",o.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",r=>r.onRef("fk_att.attrelid","=","fk_cls.oid").on(o=>o("fk_att.attnum","=",o.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(r=>[r("pk_con.conkey","is not",null).$castTo().as("pk"),r("att.attgenerated","!=","").$castTo().as("computed"),r("att.attnotnull","!=",!0).$castTo().as("nullable"),r.fn.coalesce(r.selectFrom("pg_catalog.pg_enum as enm").whereRef("enm.enumtypid","=","typ.oid").select(o=>o.fn.jsonAgg(o.ref("enm.enumlabel")).as("o")),$`'[]'`).as("options")])).as("columns")]))}function cn(){let t=Ve();return ze(t.selectNoFrom(t.fn("current_setting",[$.lit("timezone")]).as("timezone")))}function us(t){return t.where("ns.nspname","!~","^pg_").where("ns.nspname","!=","information_schema")}function hn(t){let{executor:e,...r}=t;return{defaultSchema:"public",async introspect(o){try{let n=pn(r),a=cn(),[[d,h],[l,c]]=await Promise.all([e.execute(n,o),e.execute(a,o)]);if(d)return G({error:d,query:n});if(l)return G({error:l,query:a});let L=c[0]?.timezone;return L?[null,ds({tables:h,timezone:L,query:n})]:G({error:new Error("Timezone not found"),query:a})}catch(n){return G({error:n})}},async query(o,n){try{let a=nn(o,r),[d,h]=await e.execute(a,n);return d?G({error:d,query:a}):[null,{filteredRowCount:h[0]?.oid||"0",rows:h,query:a}]}catch(a){return G({error:a})}},async insert(o,n){try{let a=on(o,r),[d,h]=await e.execute(a,n);return d?G({error:d,query:a}):[null,{rows:h,query:a}]}catch(a){return G({error:a})}},async update(o,n){try{let a=an(o,r),[d,h]=await e.execute(a,n);if(d)return G({error:d,query:a});let[l]=h;return l?[null,{row:l,query:a}]:G({error:new Error("Update failed"),query:a})}catch(a){return G({error:a})}},async delete(o,n){try{let a=un(o,r),[d]=await e.execute(a,n);return d?G({error:d,query:a}):[null,{...o,query:a}]}catch(a){return G({error:a})}}}}function ds(t){let{tables:e,timezone:r,query:o}=t;return e.reduce((n,a)=>{let{schemas:d}=n,{columns:h,name:l,schema:c}=a,L=h.reduce((ge,P)=>{let{datatype:F,datatype_schema:he,name:Jt,options:$t,nullable:ri}=P,ii=F.startsWith("_"),oi=ii?F.slice(1):F;return{...ge,[Jt]:{datatype:{...no[oi]||{group:$t.length>0?"enum":"raw"},isArray:ii,isNative:he==="pg_catalog",name:ii?`${oi}[]`:oi,options:$t,schema:he},isComputed:P.computed,isInPrimaryKey:P.pk,name:Jt,nullable:ri,schema:c,table:l,fkSchema:P.foreign_key_schema,fkTable:P.foreign_key_table,fkColumn:P.foreign_key_column}}},{});return d[c]===void 0&&(d[c]={name:c,tables:{}}),d[c].tables[l]={columns:L,name:l,schema:c},n},{schemas:{public:{tables:{},name:"public"}},timezone:r,filterOperators:ps,query:o})}var ps=["=","!=",">",">=","<","<=","is","is not","like","not like","ilike","not ilike"];function ln(t,e){let{addDelay:r=0,logging:o=!1}=e??{};return{execute:async(n,a)=>{let{abortSignal:d}=a||{},h,l=new Promise((F,he)=>h=he);function c(){let F=new Error("This operation was aborted");F.name="AbortError",h(F)}d?.addEventListener("abort",c);let L=typeof r=="function"?r(n):r,ge=()=>t.query(n.sql,n.parameters,{rowMode:"object"}),P=L>0?()=>new Promise(F=>setTimeout(F,L)).then(()=>ge()):ge;try{let F=typeof o=="function"?o(n):o,he;F&&console.log("PGLiteExecutor: Executing query:",he=JSON.stringify(n,null,2));let Jt=Date.now(),$t=await Promise.race([P(),l]),ri=Date.now()-Jt;return F&&console.log("PGLiteExecutor: Query executed in",ri,"ms:",he),[null,$t.rows]}catch(F){return[F]}finally{d?.removeEventListener("abort",c)}}}}function cs(t,e){return hn({executor:ln(t,e)})}
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vZGF0YS9wZ2xpdGUvaW5kZXgudHMiLCAiLi4vLi4vLi4vZGF0YS9hZGFwdGVyLnRzIiwgIi4uLy4uLy4uL2RhdGEvcG9zdGdyZXMtY29yZS9kYXRhdHlwZS50cyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3V0aWwvb2JqZWN0LXV0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvYWx0ZXItdGFibGUtbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2lkZW50aWZpZXItbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2NyZWF0ZS1pbmRleC1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXNjaGVtYS1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXRhYmxlLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9zY2hlbWFibGUtaWRlbnRpZmllci1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvZHJvcC1pbmRleC1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvZHJvcC1zY2hlbWEtbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2Ryb3AtdGFibGUtbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2FsaWFzLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS90YWJsZS1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vZXhwcmVzc2lvbi9leHByZXNzaW9uLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvc2VsZWN0LW1vZGlmaWVyLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9hbmQtbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL29yLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9vbi1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvam9pbi1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvYmluYXJ5LW9wZXJhdGlvbi1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvb3BlcmF0b3Itbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2NvbHVtbi1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvc2VsZWN0LWFsbC1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvcmVmZXJlbmNlLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9keW5hbWljL2R5bmFtaWMtcmVmZXJlbmNlLWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9vcmRlci1ieS1pdGVtLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9yYXctbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2NvbGxhdGUtbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3F1ZXJ5LWJ1aWxkZXIvb3JkZXItYnktaXRlbS1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vdXRpbC9sb2ctb25jZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BhcnNlci9vcmRlci1ieS1wYXJzZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9qc29uLXJlZmVyZW5jZS1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvanNvbi1vcGVyYXRvci1jaGFpbi1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvanNvbi1wYXRoLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9wYXJzZXIvcmVmZXJlbmNlLXBhcnNlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3ByaW1pdGl2ZS12YWx1ZS1saXN0LW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS92YWx1ZS1saXN0LW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS92YWx1ZS1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL3ZhbHVlLXBhcnNlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3BhcmVucy1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL2JpbmFyeS1vcGVyYXRpb24tcGFyc2VyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvb3JkZXItYnktbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3BhcnRpdGlvbi1ieS1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvb3Zlci1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvZnJvbS1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvZ3JvdXAtYnktbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2hhdmluZy1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvaW5zZXJ0LXF1ZXJ5LW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9saXN0LW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS91cGRhdGUtcXVlcnktbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3VzaW5nLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9kZWxldGUtcXVlcnktbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3doZXJlLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9yZXR1cm5pbmctbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2V4cGxhaW4tbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3doZW4tbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL21lcmdlLXF1ZXJ5LW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9vdXRwdXQtbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3F1ZXJ5LW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9zZWxlY3QtcXVlcnktbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3F1ZXJ5LWJ1aWxkZXIvam9pbi1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvcGFydGl0aW9uLWJ5LWl0ZW0tbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BhcnNlci9wYXJ0aXRpb24tYnktcGFyc2VyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci9vdmVyLWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9zZWxlY3Rpb24tbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BhcnNlci9zZWxlY3QtcGFyc2VyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvdmFsdWVzLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9kZWZhdWx0LWluc2VydC12YWx1ZS1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL2luc2VydC12YWx1ZXMtcGFyc2VyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvY29sdW1uLXVwZGF0ZS1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL3VwZGF0ZS1zZXQtcGFyc2VyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvb24tZHVwbGljYXRlLWtleS1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci9pbnNlcnQtcmVzdWx0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci9uby1yZXN1bHQtZXJyb3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9vbi1jb25mbGljdC1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci9vbi1jb25mbGljdC1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvdG9wLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9wYXJzZXIvdG9wLXBhcnNlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL29yLWFjdGlvbi1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci9pbnNlcnQtcXVlcnktYnVpbGRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3F1ZXJ5LWJ1aWxkZXIvZGVsZXRlLXJlc3VsdC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2xpbWl0LW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1idWlsZGVyL2RlbGV0ZS1xdWVyeS1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci91cGRhdGUtcmVzdWx0LmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci91cGRhdGUtcXVlcnktYnVpbGRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2NvbW1vbi10YWJsZS1leHByZXNzaW9uLW5hbWUtbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2NvbW1vbi10YWJsZS1leHByZXNzaW9uLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1idWlsZGVyL2N0ZS1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL3dpdGgtcGFyc2VyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvd2l0aC1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vdXRpbC9yYW5kb20tc3RyaW5nLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vdXRpbC9xdWVyeS1pZC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGx1Z2luL3dpdGgtc2NoZW1hL3dpdGgtc2NoZW1hLXRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGx1Z2luL3dpdGgtc2NoZW1hL3dpdGgtc2NoZW1hLXBsdWdpbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL21hdGNoZWQtbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BhcnNlci9tZXJnZS1wYXJzZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS91dGlsL2RlZmVycmVkLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vdXRpbC9wcm92aWRlLWNvbnRyb2xsZWQtY29ubmVjdGlvbi5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3F1ZXJ5LWV4ZWN1dG9yL3F1ZXJ5LWV4ZWN1dG9yLWJhc2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1leGVjdXRvci9ub29wLXF1ZXJ5LWV4ZWN1dG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci9tZXJnZS1yZXN1bHQuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1idWlsZGVyL21lcmdlLXF1ZXJ5LWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1jcmVhdG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL3BhcnNlLXV0aWxzLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL2pvaW4tcGFyc2VyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvb2Zmc2V0LW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9ncm91cC1ieS1pdGVtLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9wYXJzZXIvZ3JvdXAtYnktcGFyc2VyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvc2V0LW9wZXJhdGlvbi1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL3NldC1vcGVyYXRpb24tcGFyc2VyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vZXhwcmVzc2lvbi9leHByZXNzaW9uLXdyYXBwZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9mZXRjaC1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL2ZldGNoLXBhcnNlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3F1ZXJ5LWJ1aWxkZXIvc2VsZWN0LXF1ZXJ5LWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9hZ2dyZWdhdGUtZnVuY3Rpb24tbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2Z1bmN0aW9uLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1idWlsZGVyL2FnZ3JlZ2F0ZS1mdW5jdGlvbi1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci9mdW5jdGlvbi1tb2R1bGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS91bmFyeS1vcGVyYXRpb24tbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BhcnNlci91bmFyeS1vcGVyYXRpb24tcGFyc2VyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvY2FzZS1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci9jYXNlLWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9qc29uLXBhdGgtbGVnLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1idWlsZGVyL2pzb24tcGF0aC1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvdHVwbGUtbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2RhdGEtdHlwZS1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL2RhdGEtdHlwZS1wYXJzZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9jYXN0LW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9leHByZXNzaW9uL2V4cHJlc3Npb24tYnVpbGRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BhcnNlci9leHByZXNzaW9uLXBhcnNlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2R5bmFtaWMvZHluYW1pYy10YWJsZS1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL3RhYmxlLXBhcnNlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2FkZC1jb2x1bW4tbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2NvbHVtbi1kZWZpbml0aW9uLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9kcm9wLWNvbHVtbi1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvcmVuYW1lLWNvbHVtbi1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvY2hlY2stY29uc3RyYWludC1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvcmVmZXJlbmNlcy1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL2RlZmF1bHQtdmFsdWUtcGFyc2VyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvZ2VuZXJhdGVkLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9kZWZhdWx0LXZhbHVlLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9wYXJzZXIvb24tbW9kaWZ5LWFjdGlvbi1wYXJzZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9zY2hlbWEvY29sdW1uLWRlZmluaXRpb24tYnVpbGRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL21vZGlmeS1jb2x1bW4tbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2ZvcmVpZ24ta2V5LWNvbnN0cmFpbnQtbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3NjaGVtYS9mb3JlaWduLWtleS1jb25zdHJhaW50LWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9hZGQtY29uc3RyYWludC1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvdW5pcXVlLWNvbnN0cmFpbnQtbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2Ryb3AtY29uc3RyYWludC1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvYWx0ZXItY29sdW1uLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9zY2hlbWEvYWx0ZXItY29sdW1uLWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9zY2hlbWEvYWx0ZXItdGFibGUtZXhlY3V0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9zY2hlbWEvYWx0ZXItdGFibGUtYWRkLWZvcmVpZ24ta2V5LWNvbnN0cmFpbnQtYnVpbGRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3NjaGVtYS9hbHRlci10YWJsZS1kcm9wLWNvbnN0cmFpbnQtYnVpbGRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3ByaW1hcnkta2V5LWNvbnN0cmFpbnQtbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2FkZC1pbmRleC1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL2FsdGVyLXRhYmxlLWFkZC1pbmRleC1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL3VuaXF1ZS1jb25zdHJhaW50LWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9zY2hlbWEvcHJpbWFyeS1rZXktY29uc3RyYWludC1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL2NoZWNrLWNvbnN0cmFpbnQtYnVpbGRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3JlbmFtZS1jb25zdHJhaW50LW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9zY2hlbWEvYWx0ZXItdGFibGUtYnVpbGRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BsdWdpbi9pbW1lZGlhdGUtdmFsdWUvaW1tZWRpYXRlLXZhbHVlLXRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL2NyZWF0ZS1pbmRleC1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL2NyZWF0ZS1zY2hlbWEtYnVpbGRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BhcnNlci9vbi1jb21taXQtYWN0aW9uLXBhcnNlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL2NyZWF0ZS10YWJsZS1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL2Ryb3AtaW5kZXgtYnVpbGRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3NjaGVtYS9kcm9wLXNjaGVtYS1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL2Ryb3AtdGFibGUtYnVpbGRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2NyZWF0ZS12aWV3LW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9wbHVnaW4vaW1tZWRpYXRlLXZhbHVlL2ltbWVkaWF0ZS12YWx1ZS1wbHVnaW4uanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9zY2hlbWEvY3JlYXRlLXZpZXctYnVpbGRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2Ryb3Atdmlldy1ub2RlLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL2Ryb3Atdmlldy1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXR5cGUtbm9kZS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3NjaGVtYS9jcmVhdGUtdHlwZS1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvZHJvcC10eXBlLW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9zY2hlbWEvZHJvcC10eXBlLWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9wYXJzZXIvaWRlbnRpZmllci1wYXJzZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9yZWZyZXNoLW1hdGVyaWFsaXplZC12aWV3LW5vZGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9zY2hlbWEvcmVmcmVzaC1tYXRlcmlhbGl6ZWQtdmlldy1idWlsZGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL3NjaGVtYS5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2R5bmFtaWMvZHluYW1pYy5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2RyaXZlci9kZWZhdWx0LWNvbm5lY3Rpb24tcHJvdmlkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1leGVjdXRvci9kZWZhdWx0LXF1ZXJ5LWV4ZWN1dG9yLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vdXRpbC9wZXJmb3JtYW5jZS1ub3cuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9kcml2ZXIvcnVudGltZS1kcml2ZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9kcml2ZXIvc2luZ2xlLWNvbm5lY3Rpb24tcHJvdmlkZXIuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9kcml2ZXIvZHJpdmVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vdXRpbC9sb2cuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS91dGlsL2NvbXBpbGFibGUuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9reXNlbHkuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9yYXctYnVpbGRlci9yYXctYnVpbGRlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3Jhdy1idWlsZGVyL3NxbC5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXZpc2l0b3IuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1jb21waWxlci9kZWZhdWx0LXF1ZXJ5LWNvbXBpbGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vZHJpdmVyL2R1bW15LWRyaXZlci5qcyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2RpYWxlY3QvZGlhbGVjdC1hZGFwdGVyLWJhc2UuanMiLCAiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4LjIvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9kaWFsZWN0L3Bvc3RncmVzL3Bvc3RncmVzLXF1ZXJ5LWNvbXBpbGVyLmpzIiwgIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC4yL25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vZGlhbGVjdC9wb3N0Z3Jlcy9wb3N0Z3Jlcy1hZGFwdGVyLmpzIiwgIi4uLy4uLy4uL2RhdGEvcXVlcnkudHMiLCAiLi4vLi4vLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL2J1aWxkZXIudHMiLCAiLi4vLi4vLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL2RtbC50cyIsICIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguMi9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2hlbHBlcnMvcG9zdGdyZXMuanMiLCAiLi4vLi4vLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL2ludHJvc3BlY3Rpb24udHMiLCAiLi4vLi4vLi4vZGF0YS9wb3N0Z3Jlcy1jb3JlL2FkYXB0ZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB0eXBlIHsgUEdsaXRlIH0gZnJvbSBcIkBlbGVjdHJpYy1zcWwvcGdsaXRlXCI7XG5cbmltcG9ydCB0eXBlIHsgQWRhcHRlciB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dG9yIH0gZnJvbSBcIi4uL2V4ZWN1dG9yXCI7XG5pbXBvcnQgeyBjcmVhdGVQb3N0Z3Jlc0FkYXB0ZXIgfSBmcm9tIFwiLi4vcG9zdGdyZXMtY29yZVwiO1xuaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQR0xpdGVFeGVjdXRvck9wdGlvbnMge1xuICAvKipcbiAgICogRGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIGFkZCBiZWZvcmUgZXhlY3V0aW5nIHRoZSBxdWVyeS5cbiAgICogVGhpcyBjYW4gYmUgYSBzdGF0aWMgbnVtYmVyIG9yIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgcXVlcnkgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgYSBudW1iZXIuXG4gICAqXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBzaW11bGF0aW5nIG5ldHdvcmsgbGF0ZW5jeSBvciBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuICAgKi9cbiAgYWRkRGVsYXk/OiBudW1iZXIgfCAoKHF1ZXJ5OiBRdWVyeSkgPT4gbnVtYmVyKTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBsb2cgdGhlIHF1ZXJ5IGFuZCBpdHMgcGFyYW1ldGVycy5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIGxvZ2dpbmc/OiBib29sZWFuIHwgKChxdWVyeTogUXVlcnkpID0+IGJvb2xlYW4pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUEdMaXRlRXhlY3V0b3IocGdsaXRlOiBQR2xpdGUsIG9wdGlvbnM/OiBQR0xpdGVFeGVjdXRvck9wdGlvbnMpOiBFeGVjdXRvciB7XG4gIGNvbnN0IHsgYWRkRGVsYXkgPSAwLCBsb2dnaW5nID0gZmFsc2UgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgcmV0dXJuIHtcbiAgICBleGVjdXRlOiBhc3luYyAocXVlcnksIG9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IHsgYWJvcnRTaWduYWwgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgICAgIGxldCBhYm9ydDogKHJlYXNvbj86IHVua25vd24pID0+IHZvaWQ7XG4gICAgICBjb25zdCBhYm9ydGlvblByb21pc2UgPSBuZXcgUHJvbWlzZTxuZXZlcj4oKF8sIHJlamVjdCkgPT4gKGFib3J0ID0gcmVqZWN0KSk7XG5cbiAgICAgIGZ1bmN0aW9uIGFib3J0TGlzdGVuZXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFwiVGhpcyBvcGVyYXRpb24gd2FzIGFib3J0ZWRcIik7XG4gICAgICAgIGVycm9yLm5hbWUgPSBcIkFib3J0RXJyb3JcIjtcbiAgICAgICAgYWJvcnQoZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICBhYm9ydFNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0TGlzdGVuZXIpO1xuXG4gICAgICBjb25zdCBhZGRlZERlbGF5ID0gdHlwZW9mIGFkZERlbGF5ID09PSBcImZ1bmN0aW9uXCIgPyBhZGREZWxheShxdWVyeSkgOiBhZGREZWxheTtcblxuICAgICAgY29uc3QgcXVlcnlQR0xpdGUgPSAoKSA9PiBwZ2xpdGUucXVlcnkocXVlcnkuc3FsLCBxdWVyeS5wYXJhbWV0ZXJzIGFzIG5ldmVyW10sIHsgcm93TW9kZTogXCJvYmplY3RcIiB9KTtcblxuICAgICAgY29uc3QgcXVlcnlQR0xpdGVQb3NzaWJseURlbGF5ZWQgPVxuICAgICAgICBhZGRlZERlbGF5ID4gMFxuICAgICAgICAgID8gKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgYWRkZWREZWxheSkpLnRoZW4oKCkgPT4gcXVlcnlQR0xpdGUoKSlcbiAgICAgICAgICA6IHF1ZXJ5UEdMaXRlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzaG91bGRMb2cgPSB0eXBlb2YgbG9nZ2luZyA9PT0gXCJmdW5jdGlvblwiID8gbG9nZ2luZyhxdWVyeSkgOiBsb2dnaW5nO1xuXG4gICAgICAgIGxldCBsb2dnYWJsZVF1ZXJ5OiBzdHJpbmc7XG4gICAgICAgIGlmIChzaG91bGRMb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIlBHTGl0ZUV4ZWN1dG9yOiBFeGVjdXRpbmcgcXVlcnk6XCIsIChsb2dnYWJsZVF1ZXJ5ID0gSlNPTi5zdHJpbmdpZnkocXVlcnksIG51bGwsIDIpKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW3F1ZXJ5UEdMaXRlUG9zc2libHlEZWxheWVkKCksIGFib3J0aW9uUHJvbWlzZV0pO1xuXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIG5vdztcblxuICAgICAgICBpZiAoc2hvdWxkTG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJQR0xpdGVFeGVjdXRvcjogUXVlcnkgZXhlY3V0ZWQgaW5cIiwgZHVyYXRpb24sIFwibXM6XCIsIGxvZ2dhYmxlUXVlcnkhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgcmVzdWx0LnJvd3MgYXMgbmV2ZXJdO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIFtlcnJvciBhcyBFcnJvcl07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhYm9ydFNpZ25hbD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGFib3J0TGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgUEdMaXRlQWRhcHRlck9wdGlvbnMgZXh0ZW5kcyBQR0xpdGVFeGVjdXRvck9wdGlvbnMge31cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBHTGl0ZUFkYXB0ZXIocGdsaXRlOiBQR2xpdGUsIG9wdGlvbnM/OiBQR0xpdGVBZGFwdGVyT3B0aW9ucyk6IEFkYXB0ZXIge1xuICByZXR1cm4gY3JlYXRlUG9zdGdyZXNBZGFwdGVyKHtcbiAgICBleGVjdXRvcjogY3JlYXRlUEdMaXRlRXhlY3V0b3IocGdsaXRlLCBvcHRpb25zKSxcbiAgfSk7XG59XG4iLCAiaW1wb3J0IHsgUXVlcnkgfSBmcm9tIFwiLi9xdWVyeVwiO1xuaW1wb3J0IHR5cGUgeyBCaWdJbnRTdHJpbmcsIEVpdGhlciwgTnVtZXJpY1N0cmluZyB9IGZyb20gXCIuL3R5cGUtdXRpbHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyIHtcbiAgLyoqXG4gICAqIFRoZSBzY2hlbWEgc3R1ZGlvIHdpbGwgY2hvb3NlIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIGUuZy4gYHB1YmxpY2AgZm9yIFBvc3RncmVTUUxcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRTY2hlbWE/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEludHJvc3BlY3RzIHRoZSBkYXRhYmFzZSBhbmQgcmV0dXJucyBzdHJ1Y3R1cmVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzY2hlbWFzLCB0YWJsZXMsIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgaW50cm9zcGVjdGlvbiByZXF1ZXN0LlxuICAgKi9cbiAgaW50cm9zcGVjdChvcHRpb25zOiBBZGFwdGVySW50cm9zcGVjdE9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0Pj47XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGEgc3RydWN0dXJlZCBxdWVyeSBhZ2FpbnN0IHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIHF1ZXJ5KGRldGFpbHM6IEFkYXB0ZXJRdWVyeURldGFpbHMsIG9wdGlvbnM6IEFkYXB0ZXJRdWVyeU9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJRdWVyeVJlc3VsdD4+O1xuXG4gIC8qKlxuICAgKiBJbnNlcnRzIGEgc2luZ2xlIHJvdyBpbnRvIHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIGluc2VydChcbiAgICBkZXRhaWxzOiBBZGFwdGVySW5zZXJ0RGV0YWlscyxcbiAgICBvcHRpb25zOiBBZGFwdGVySW5zZXJ0T3B0aW9ucyxcbiAgKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW5zZXJ0UmVzdWx0Pj47XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBnaXZlbiByb3cgaW4gdGhlIGRhdGFiYXNlIHdpdGggZ2l2ZW4gY2hhbmdlcy5cbiAgICovXG4gIHVwZGF0ZShcbiAgICBkZXRhaWxzOiBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgICBvcHRpb25zOiBBZGFwdGVyVXBkYXRlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyVXBkYXRlUmVzdWx0Pj47XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgZ2l2ZW4gcm93cyBmcm9tIHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIGRlbGV0ZShcbiAgICBkZXRhaWxzOiBBZGFwdGVyRGVsZXRlRGV0YWlscyxcbiAgICBvcHRpb25zOiBBZGFwdGVyRGVsZXRlT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVyRGVsZXRlUmVzdWx0Pj47XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckJhc2VPcHRpb25zIHt9XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckludHJvc3BlY3RPcHRpb25zIGV4dGVuZHMgQWRhcHRlckJhc2VPcHRpb25zIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlclF1ZXJ5T3B0aW9ucyBleHRlbmRzIEFkYXB0ZXJCYXNlT3B0aW9ucyB7XG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbDtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1vYmplY3QtdHlwZVxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVySW5zZXJ0T3B0aW9ucyBleHRlbmRzIEFkYXB0ZXJCYXNlT3B0aW9ucyB7fVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LW9iamVjdC10eXBlXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJVcGRhdGVPcHRpb25zIGV4dGVuZHMgQWRhcHRlckJhc2VPcHRpb25zIHt9XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktb2JqZWN0LXR5cGVcbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckRlbGV0ZU9wdGlvbnMgZXh0ZW5kcyBBZGFwdGVyQmFzZU9wdGlvbnMge31cblxudHlwZSBTY2hlbWFOYW1lID0gc3RyaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0IHtcbiAgc2NoZW1hczogUmVjb3JkPFNjaGVtYU5hbWUsIFNjaGVtYT47XG4gIHRpbWV6b25lOiBzdHJpbmc7XG4gIGZpbHRlck9wZXJhdG9yczogRmlsdGVyT3BlcmF0b3JbXTtcbiAgcXVlcnk6IFF1ZXJ5O1xufVxuXG50eXBlIFRhYmxlTmFtZSA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWEge1xuICBuYW1lOiBzdHJpbmc7XG4gIHRhYmxlczogUmVjb3JkPFRhYmxlTmFtZSwgVGFibGU+O1xufVxuXG50eXBlIENvbHVtbk5hbWUgPSBzdHJpbmc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGUge1xuICBjb2x1bW5zOiBSZWNvcmQ8Q29sdW1uTmFtZSwgQ29sdW1uPjtcbiAgbmFtZTogVGFibGVOYW1lO1xuICBzY2hlbWE6IFNjaGVtYU5hbWU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uIHtcbiAgZGF0YXR5cGU6IERhdGFUeXBlO1xuICBpc0NvbXB1dGVkOiBib29sZWFuO1xuICBpc0luUHJpbWFyeUtleTogYm9vbGVhbjtcbiAgbmFtZTogQ29sdW1uTmFtZTtcbiAgbnVsbGFibGU6IGJvb2xlYW47XG4gIHNjaGVtYTogU2NoZW1hTmFtZTtcbiAgdGFibGU6IFRhYmxlTmFtZTtcbiAgZmtTY2hlbWE6IFNjaGVtYU5hbWUgfCBudWxsO1xuICBma0NvbHVtbjogQ29sdW1uTmFtZSB8IG51bGw7XG4gIGZrVGFibGU6IFRhYmxlTmFtZSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVR5cGUge1xuICAvKipcbiAgICogQSBzaW1wbGlmaWNhdGlvbi9ub3JtYWxpemF0aW9uIGZvciBVSSB1c2FnZS5cbiAgICpcbiAgICogZS5nLiB2YXJjaGFyIGFuZCBjaGFyIGFyZSBzdHJpbmdzLlxuICAgKi9cbiAgZ3JvdXA6IERhdGFUeXBlR3JvdXA7XG5cbiAgLyoqXG4gICAqIElzIHRoaXMgYSBuYXRpdmUgYXJyYXkgdHlwZT9cbiAgICovXG4gIGlzQXJyYXk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElzIGEgbmF0aXZlIGRhdGFiYXNlIGRhdGF0eXBlIG9yIGEgdXNlci1kZWZpbmVkIGRhdGF0eXBlP1xuICAgKlxuICAgKiBlLmcuIFBvc3RncmVTUUwgZW51bXMgYXJlIHVzZXItZGVmaW5lZCBkYXRhdHlwZXMsIGJ1dCBgaW50NGAgaXMgYSBuYXRpdmUgZGF0YXR5cGUuXG4gICAqL1xuICBpc05hdGl2ZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2lsbCBiZSBkaXNwbGF5ZWQgYXMtaXMuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVudW0gdmFsdWVzIGZvciBlbnVtIHR5cGVzLlxuICAgKi9cbiAgb3B0aW9uczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBzY2hlbWEgdGhlIGRhdGF0eXBlIGJlbG9uZ3MgdG8uXG4gICAqL1xuICBzY2hlbWE6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgRGF0YVR5cGVHcm91cCA9IFwic3RyaW5nXCIgfCBcImRhdGV0aW1lXCIgfCBcImJvb2xlYW5cIiB8IFwiZW51bVwiIHwgXCJ0aW1lXCIgfCBcInJhd1wiIHwgXCJudW1lcmljXCIgfCBcImpzb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVyUXVlcnlEZXRhaWxzIHtcbiAgLyoqXG4gICAqIFplcm8tYmFzZWQgaW5kZXggb2YgdGhlIHBhZ2UgdG8gZmV0Y2guXG4gICAqL1xuICBwYWdlSW5kZXg6IG51bWJlcjtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byBmZXRjaCBmcm9tIHRoZSBkYXRhYmFzZS5cbiAgICovXG4gIHBhZ2VTaXplOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNvcnQgb3JkZXIgZm9yIHRoZSBxdWVyeS5cbiAgICovXG4gIHNvcnRPcmRlcjogU29ydE9yZGVySXRlbVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFibGUgdG8gc2VsZWN0IGZyb20uXG4gICAqL1xuICB0YWJsZTogVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBmaWx0ZXIgdG8gYmUgYXBwbGllZC5cbiAgICovXG4gIGZpbHRlcj86IEZpbHRlckdyb3VwO1xufVxuXG5leHBvcnQgdHlwZSBGaWx0ZXJPcGVyYXRvciA9XG4gIHwgXCI9XCJcbiAgfCBcIiE9XCJcbiAgfCBcIj5cIlxuICB8IFwiPj1cIlxuICB8IFwiPFwiXG4gIHwgXCI8PVwiXG4gIHwgXCJpc1wiXG4gIHwgXCJpcyBub3RcIlxuICB8IFwibGlrZVwiXG4gIHwgXCJub3QgbGlrZVwiXG4gIHwgXCJpbGlrZVwiXG4gIHwgXCJub3QgaWxpa2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5GaWx0ZXIge1xuICBraW5kOiBcIkNvbHVtbkZpbHRlclwiO1xuICBjb2x1bW46IHN0cmluZztcbiAgb3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yO1xuICB2YWx1ZTogdW5rbm93bjtcbiAgYWZ0ZXI6IFwiYW5kXCIgfCBcIm9yXCI7XG4gIGlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyR3JvdXAge1xuICBraW5kOiBcIkZpbHRlckdyb3VwXCI7XG4gIGZpbHRlcnM6IChDb2x1bW5GaWx0ZXIgfCBGaWx0ZXJHcm91cClbXTtcbiAgYWZ0ZXI6IFwiYW5kXCIgfCBcIm9yXCI7XG4gIGlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ydE9yZGVySXRlbSB7XG4gIC8qKlxuICAgKiBUaGUgY29sdW1uIHRvIHNvcnQgYnkuXG4gICAqL1xuICBjb2x1bW46IENvbHVtbk5hbWU7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3Rpb24gdG8gc29ydCB0aGUgY29sdW1uIGJ5LlxuICAgKi9cbiAgZGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uO1xufVxuXG5leHBvcnQgdHlwZSBTb3J0RGlyZWN0aW9uID0gXCJhc2NcIiB8IFwiZGVzY1wiO1xuXG5leHBvcnQgY2xhc3MgQWRhcHRlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBxdWVyeT86IFF1ZXJ5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJRdWVyeVJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgdGhlIHF1ZXJ5IHdvdWxkIHJldHVybiBpZiBub3QgbGltaXRlZC5cbiAgICpcbiAgICogSWYgdGhlIGRhdGFiYXNlIGRvZXMgbm90IHN1cHBvcnQgY291bnRpbmcgcm93cywgdGhpcyBzaG91bGQgYmUgc2V0IHRvIGBJbmZpbml0eWAuXG4gICAqL1xuICBmaWx0ZXJlZFJvd0NvdW50OiBudW1iZXIgfCBiaWdpbnQgfCBOdW1lcmljU3RyaW5nIHwgQmlnSW50U3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcm93cyByZXR1cm5lZCBieSB0aGUgcXVlcnkuXG4gICAqL1xuICByb3dzOiBSZWNvcmQ8Q29sdW1uTmFtZSwgdW5rbm93bj5bXTtcblxuICAvKipcbiAgICogVGhlIGV4ZWN1dGVkIHF1ZXJ5IHN0cmluZy5cbiAgICovXG4gIHF1ZXJ5OiBRdWVyeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGFwdGVySW5zZXJ0RGV0YWlscyB7XG4gIC8qKlxuICAgKiBUaGUgdGFibGUgdG8gaW5zZXJ0IGludG8uXG4gICAqL1xuICB0YWJsZTogVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZXMgdG8gaW5zZXJ0IGludG8gdGhlIHRhYmxlLlxuICAgKiAtIFRoZSBrZXlzIHNob3VsZCBtYXRjaCB0aGUgY29sdW1uIG5hbWVzIGluIHRoZSB0YWJsZS5cbiAgICogLSBUaGUgdmFsdWVzIHNob3VsZCBiZSB0aGUgdmFsdWVzIHRvIGluc2VydCBpbnRvIHRoZSB0YWJsZS5cbiAgICovXG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckluc2VydFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZnJlc2hseSBpbnNlcnRlZCByb3cgZGF0YS5cbiAgICovXG4gIHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRlZCBxdWVyeSBzdHJpbmcuXG4gICAqL1xuICBxdWVyeTogUXVlcnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlclVwZGF0ZURldGFpbHMge1xuICAvKipcbiAgICogQ2hhbmdlcyB0byBhcHBseSB0byB0aGUgcm93LlxuICAgKi9cbiAgY2hhbmdlczogUmVjb3JkPENvbHVtbk5hbWUsIHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBUaGUgcm93IHRvIHVwZGF0ZS5cbiAgICovXG4gIHJvdzogUmVjb3JkPENvbHVtbk5hbWUsIHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBUaGUgdGFibGUgdG8gdXBkYXRlIGluLlxuICAgKi9cbiAgdGFibGU6IFRhYmxlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJVcGRhdGVSZXN1bHQge1xuICAvKipcbiAgICogVGhlIHVwZGF0ZWQgcm93IGRhdGEuXG4gICAqL1xuICByb3c6IFJlY29yZDxDb2x1bW5OYW1lLCB1bmtub3duPiAmIHtcbiAgICAvKipcbiAgICAgKiBXaGVuIHRoZSBjaGFuZ2VzIHdlcmUgYXBwbGllZCBpbiBkYXRhYmFzZSB0aW1lLlxuICAgICAqL1xuICAgIF9fcHNfdXBkYXRlZF9hdF9fOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlY3V0ZWQgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgcXVlcnk6IFF1ZXJ5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkYXB0ZXJEZWxldGVEZXRhaWxzIHtcbiAgLyoqXG4gICAqIFRoZSByb3dzIHRvIGRlbGV0ZS5cbiAgICovXG4gIHJvd3M6IFJlY29yZDxDb2x1bW5OYW1lLCB1bmtub3duPltdO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFibGUgdG8gZGVsZXRlIGZyb20uXG4gICAqL1xuICB0YWJsZTogVGFibGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRhcHRlckRlbGV0ZVJlc3VsdCB7XG4gIHJvd3M6IFJlY29yZDxDb2x1bW5OYW1lLCB1bmtub3duPltdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlY3V0ZWQgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgcXVlcnk6IFF1ZXJ5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWRhcHRlckVycm9yKGFyZ3M6IHsgZXJyb3I6IEVycm9yOyBxdWVyeT86IFF1ZXJ5IH0pIHtcbiAgY29uc3QgeyBlcnJvciwgcXVlcnkgfSA9IGFyZ3M7XG5cbiAgY29uc3QgYWRhcHRlckVycm9yID0gZXJyb3IgYXMgQWRhcHRlckVycm9yO1xuXG4gIGFkYXB0ZXJFcnJvci5xdWVyeSA9IHF1ZXJ5O1xuXG4gIHJldHVybiBbYWRhcHRlckVycm9yXSBhcyBbQWRhcHRlckVycm9yXTtcbn1cbiIsICJpbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5cbmV4cG9ydCBjb25zdCBQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEE6IFJlY29yZDxzdHJpbmcsIFBpY2s8RGF0YVR5cGUsIFwiZ3JvdXBcIj4+ID0ge1xuICBib29sOiB7XG4gICAgZ3JvdXA6IFwiYm9vbGVhblwiLFxuICB9LFxuICBib29sZWFuOiB7XG4gICAgZ3JvdXA6IFwiYm9vbGVhblwiLFxuICB9LFxuICBieXRlYToge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICBjaGFyOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIGNpdGV4dDoge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICAvKipcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQnXG4gICAqL1xuICBkYXRlOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIEBleGFtcGxlICcxIGRheSAyIGhvdXJzJ1xuICAgKi9cbiAgaW50ZXJ2YWw6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgbmFtZToge1xuICAgIGdyb3VwOiBcInN0cmluZ1wiLFxuICB9LFxuICB2YXJjaGFyOiB7XG4gICAgZ3JvdXA6IFwic3RyaW5nXCIsXG4gIH0sXG4gIHRleHQ6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgLyoqXG4gICAqIHNob3J0IGZvcm0gb2YgYHRpbWUgd2l0aG91dCB0aW1lIHpvbmVgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMTQ6MzA6MDAnXG4gICAqL1xuICB0aW1lOiB7XG4gICAgZ3JvdXA6IFwidGltZVwiLFxuICB9LFxuICAvKipcbiAgICogc2hvcnQgZm9ybSBvZiBgdGltZXN0YW1wIHdpdGhvdXQgdGltZSB6b25lYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQgMTQ6MzA6MDAnXG4gICAqL1xuICB0aW1lc3RhbXA6IHtcbiAgICBncm91cDogXCJkYXRldGltZVwiLFxuICB9LFxuICAvKipcbiAgICogc2hvcnQgZm9ybSBvZiBgdGltZXN0YW1wIHdpdGggdGltZSB6b25lYC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQgMTQ6MzA6MDArMDAnXG4gICAqL1xuICB0aW1lc3RhbXB0ejoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBsb25nIGZvcm0gb2YgYHRpbWVzdGFtcGAuXG4gICAqXG4gICAqIEBleGFtcGxlICcyMDI1LTA0LTE0IDE0OjMwOjAwJ1xuICAgKi9cbiAgXCJ0aW1lc3RhbXAgd2l0aG91dCB0aW1lIHpvbmVcIjoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBsb25nIGZvcm0gb2YgYHRpbWVzdGFtcHR6YC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQgMTQ6MzA6MDArMDAnXG4gICAqL1xuICBcInRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZVwiOiB7XG4gICAgZ3JvdXA6IFwiZGF0ZXRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIHNob3J0IGZvcm0gb2YgYHRpbWUgd2l0aCB0aW1lIHpvbmVgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMTQ6MzA6MDArMDA6MDAnXG4gICAqL1xuICB0aW1ldHo6IHtcbiAgICBncm91cDogXCJ0aW1lXCIsXG4gIH0sXG4gIC8qKlxuICAgKiBsb25nIGZvcm0gb2YgYHRpbWVgLlxuICAgKlxuICAgKiBAZXhhbXBsZSAnMTQ6MzA6MDAnXG4gICAqL1xuICBcInRpbWUgd2l0aG91dCB0aW1lIHpvbmVcIjoge1xuICAgIGdyb3VwOiBcInRpbWVcIixcbiAgfSxcbiAgLyoqXG4gICAqIGxvbmcgZm9ybSBvZiBgdGltZXR6YC5cbiAgICpcbiAgICogQGV4YW1wbGUgJzIwMjUtMDQtMTQgMTQ6MzA6MDArMDAnXG4gICAqL1xuICBcInRpbWUgd2l0aCB0aW1lIHpvbmVcIjoge1xuICAgIGdyb3VwOiBcImRhdGV0aW1lXCIsXG4gIH0sXG4gIHV1aWQ6IHtcbiAgICBncm91cDogXCJzdHJpbmdcIixcbiAgfSxcbiAgLy8gTnVtZXJpYyB0eXBlc1xuICBpbnQyOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBpbnQ0OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBpbnQ4OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBzbWFsbGludDoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgaW50ZWdlcjoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgYmlnaW50OiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBkZWNpbWFsOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBudW1lcmljOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICByZWFsOiB7XG4gICAgZ3JvdXA6IFwibnVtZXJpY1wiLFxuICB9LFxuICBmbG9hdDQ6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGZsb2F0ODoge1xuICAgIGdyb3VwOiBcIm51bWVyaWNcIixcbiAgfSxcbiAgXCJkb3VibGUgcHJlY2lzaW9uXCI6IHtcbiAgICBncm91cDogXCJudW1lcmljXCIsXG4gIH0sXG4gIGpzb246IHtcbiAgICBncm91cDogXCJqc29uXCIsXG4gIH0sXG4gIGpzb25iOiB7XG4gICAgZ3JvdXA6IFwianNvblwiLFxuICB9LFxufTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vb2JqZWN0LXV0aWxzLmQudHNcIiAvPlxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSB8fCBpc1N0cmluZyhvYmopIHx8IGlzQnVmZmVyKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iai5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIGVsc2UgaWYgKG9iaikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1VuZGVmaW5lZChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcgfHwgb2JqID09PSB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdzdHJpbmcnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtYmVyKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnbnVtYmVyJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdib29sZWFuJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc051bGwob2JqKSB7XG4gICAgcmV0dXJuIG9iaiA9PT0gbnVsbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGUob2JqKSB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIERhdGU7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdiaWdpbnQnO1xufVxuLy8gRG9uJ3QgY2hhbmdlIHRoZSByZXR1cm5kIHR5cGUgdG8gYG9iaiBpcyBCdWZmZXJgIHRvIG5vdCBjcmVhdGUgYVxuLy8gaGFyZCBkZXBlbmRlbmN5IHRvIG5vZGUuXG5leHBvcnQgZnVuY3Rpb24gaXNCdWZmZXIob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIEJ1ZmZlci5pc0J1ZmZlcihvYmopO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbic7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIG9iaiAhPT0gbnVsbDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0FycmF5QnVmZmVyT3JWaWV3KG9iaikge1xuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcob2JqKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG9iaikge1xuICAgIGlmICghaXNPYmplY3Qob2JqKSB8fCBnZXRUYWcob2JqKSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGxldCBwcm90byA9IG9iajtcbiAgICB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKSAhPT0gbnVsbCkge1xuICAgICAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gcHJvdG87XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdChhcnIpIHtcbiAgICByZXR1cm4gYXJyW2Fyci5sZW5ndGggLSAxXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmcmVlemUob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUob2JqKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc0FycmF5KGFyZykge1xuICAgIGlmIChpc1JlYWRvbmx5QXJyYXkoYXJnKSkge1xuICAgICAgICByZXR1cm4gYXJnO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFthcmddO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBhc1JlYWRvbmx5QXJyYXkoYXJnKSB7XG4gICAgaWYgKGlzUmVhZG9ubHlBcnJheShhcmcpKSB7XG4gICAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZnJlZXplKFthcmddKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaXNSZWFkb25seUFycmF5KGFyZykge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGFyZyk7XG59XG5leHBvcnQgZnVuY3Rpb24gbm9vcChvYmopIHtcbiAgICByZXR1cm4gb2JqO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmUob2JqMSwgb2JqMikge1xuICAgIGlmIChpc1JlYWRvbmx5QXJyYXkob2JqMSkgJiYgaXNSZWFkb25seUFycmF5KG9iajIpKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlQXJyYXlzKG9iajEsIG9iajIpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09iamVjdChvYmoxKSAmJiBpc09iamVjdChvYmoyKSkge1xuICAgICAgICByZXR1cm4gY29tcGFyZU9iamVjdHMob2JqMSwgb2JqMik7XG4gICAgfVxuICAgIHJldHVybiBvYmoxID09PSBvYmoyO1xufVxuZnVuY3Rpb24gY29tcGFyZUFycmF5cyhhcnIxLCBhcnIyKSB7XG4gICAgaWYgKGFycjEubGVuZ3RoICE9PSBhcnIyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoIWNvbXBhcmUoYXJyMVtpXSwgYXJyMltpXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGNvbXBhcmVPYmplY3RzKG9iajEsIG9iajIpIHtcbiAgICBpZiAoaXNCdWZmZXIob2JqMSkgJiYgaXNCdWZmZXIob2JqMikpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVCdWZmZXJzKG9iajEsIG9iajIpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0RhdGUob2JqMSkgJiYgaXNEYXRlKG9iajIpKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlRGF0ZXMob2JqMSwgb2JqMik7XG4gICAgfVxuICAgIHJldHVybiBjb21wYXJlR2VuZXJpY09iamVjdHMob2JqMSwgb2JqMik7XG59XG5mdW5jdGlvbiBjb21wYXJlQnVmZmVycyhidWYxLCBidWYyKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKGJ1ZjEsIGJ1ZjIpID09PSAwO1xufVxuZnVuY3Rpb24gY29tcGFyZURhdGVzKGRhdGUxLCBkYXRlMikge1xuICAgIHJldHVybiBkYXRlMS5nZXRUaW1lKCkgPT09IGRhdGUyLmdldFRpbWUoKTtcbn1cbmZ1bmN0aW9uIGNvbXBhcmVHZW5lcmljT2JqZWN0cyhvYmoxLCBvYmoyKSB7XG4gICAgY29uc3Qga2V5czEgPSBPYmplY3Qua2V5cyhvYmoxKTtcbiAgICBjb25zdCBrZXlzMiA9IE9iamVjdC5rZXlzKG9iajIpO1xuICAgIGlmIChrZXlzMS5sZW5ndGggIT09IGtleXMyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMxKSB7XG4gICAgICAgIGlmICghY29tcGFyZShvYmoxW2tleV0sIG9iajJba2V5XSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmNvbnN0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmZ1bmN0aW9uIGdldFRhZyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gJ1tvYmplY3QgVW5kZWZpbmVkXScgOiAnW29iamVjdCBOdWxsXSc7XG4gICAgfVxuICAgIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vYWx0ZXItdGFibGUtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBbHRlclRhYmxlTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnQWx0ZXJUYWJsZU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0FsdGVyVGFibGVOb2RlJyxcbiAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFRhYmxlUHJvcHMobm9kZSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoQ29sdW1uQWx0ZXJhdGlvbihub2RlLCBjb2x1bW5BbHRlcmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIGNvbHVtbkFsdGVyYXRpb25zOiBub2RlLmNvbHVtbkFsdGVyYXRpb25zXG4gICAgICAgICAgICAgICAgPyBbLi4ubm9kZS5jb2x1bW5BbHRlcmF0aW9ucywgY29sdW1uQWx0ZXJhdGlvbl1cbiAgICAgICAgICAgICAgICA6IFtjb2x1bW5BbHRlcmF0aW9uXSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9pZGVudGlmaWVyLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgSWRlbnRpZmllck5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0lkZW50aWZpZXJOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShuYW1lKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0lkZW50aWZpZXJOb2RlJyxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vY3JlYXRlLWluZGV4LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4vaWRlbnRpZmllci1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDcmVhdGVJbmRleE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0NyZWF0ZUluZGV4Tm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUobmFtZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDcmVhdGVJbmRleE5vZGUnLFxuICAgICAgICAgICAgbmFtZTogSWRlbnRpZmllck5vZGUuY3JlYXRlKG5hbWUpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aChub2RlLCBwcm9wcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhDb2x1bW5zKG5vZGUsIGNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgY29sdW1uczogWy4uLihub2RlLmNvbHVtbnMgfHwgW10pLCAuLi5jb2x1bW5zXSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jcmVhdGUtc2NoZW1hLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4vaWRlbnRpZmllci1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDcmVhdGVTY2hlbWFOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdDcmVhdGVTY2hlbWFOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShzY2hlbWEsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDcmVhdGVTY2hlbWFOb2RlJyxcbiAgICAgICAgICAgIHNjaGVtYTogSWRlbnRpZmllck5vZGUuY3JlYXRlKHNjaGVtYSksXG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoKGNyZWF0ZVNjaGVtYSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uY3JlYXRlU2NoZW1hLFxuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NyZWF0ZS10YWJsZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNvbnN0IE9OX0NPTU1JVF9BQ1RJT05TID0gWydwcmVzZXJ2ZSByb3dzJywgJ2RlbGV0ZSByb3dzJywgJ2Ryb3AnXTtcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDcmVhdGVUYWJsZU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0NyZWF0ZVRhYmxlTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUodGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQ3JlYXRlVGFibGVOb2RlJyxcbiAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgY29sdW1uczogZnJlZXplKFtdKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhDb2x1bW4oY3JlYXRlVGFibGUsIGNvbHVtbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmNyZWF0ZVRhYmxlLFxuICAgICAgICAgICAgY29sdW1uczogZnJlZXplKFsuLi5jcmVhdGVUYWJsZS5jb2x1bW5zLCBjb2x1bW5dKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhDb25zdHJhaW50KGNyZWF0ZVRhYmxlLCBjb25zdHJhaW50KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uY3JlYXRlVGFibGUsXG4gICAgICAgICAgICBjb25zdHJhaW50czogY3JlYXRlVGFibGUuY29uc3RyYWludHNcbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbLi4uY3JlYXRlVGFibGUuY29uc3RyYWludHMsIGNvbnN0cmFpbnRdKVxuICAgICAgICAgICAgICAgIDogZnJlZXplKFtjb25zdHJhaW50XSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoRnJvbnRNb2RpZmllcihjcmVhdGVUYWJsZSwgbW9kaWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5jcmVhdGVUYWJsZSxcbiAgICAgICAgICAgIGZyb250TW9kaWZpZXJzOiBjcmVhdGVUYWJsZS5mcm9udE1vZGlmaWVyc1xuICAgICAgICAgICAgICAgID8gZnJlZXplKFsuLi5jcmVhdGVUYWJsZS5mcm9udE1vZGlmaWVycywgbW9kaWZpZXJdKVxuICAgICAgICAgICAgICAgIDogZnJlZXplKFttb2RpZmllcl0pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aEVuZE1vZGlmaWVyKGNyZWF0ZVRhYmxlLCBtb2RpZmllcikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmNyZWF0ZVRhYmxlLFxuICAgICAgICAgICAgZW5kTW9kaWZpZXJzOiBjcmVhdGVUYWJsZS5lbmRNb2RpZmllcnNcbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbLi4uY3JlYXRlVGFibGUuZW5kTW9kaWZpZXJzLCBtb2RpZmllcl0pXG4gICAgICAgICAgICAgICAgOiBmcmVlemUoW21vZGlmaWVyXSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoKGNyZWF0ZVRhYmxlLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5jcmVhdGVUYWJsZSxcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9zY2hlbWFibGUtaWRlbnRpZmllci1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL2lkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgU2NoZW1hYmxlSWRlbnRpZmllck5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1NjaGVtYWJsZUlkZW50aWZpZXJOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShpZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1NjaGVtYWJsZUlkZW50aWZpZXJOb2RlJyxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IElkZW50aWZpZXJOb2RlLmNyZWF0ZShpZGVudGlmaWVyKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjcmVhdGVXaXRoU2NoZW1hKHNjaGVtYSwgaWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdTY2hlbWFibGVJZGVudGlmaWVyTm9kZScsXG4gICAgICAgICAgICBzY2hlbWE6IElkZW50aWZpZXJOb2RlLmNyZWF0ZShzY2hlbWEpLFxuICAgICAgICAgICAgaWRlbnRpZmllcjogSWRlbnRpZmllck5vZGUuY3JlYXRlKGlkZW50aWZpZXIpLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Ryb3AtaW5kZXgtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IFNjaGVtYWJsZUlkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi9zY2hlbWFibGUtaWRlbnRpZmllci1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBEcm9wSW5kZXhOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdEcm9wSW5kZXhOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShuYW1lLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnRHJvcEluZGV4Tm9kZScsXG4gICAgICAgICAgICBuYW1lOiBTY2hlbWFibGVJZGVudGlmaWVyTm9kZS5jcmVhdGUobmFtZSksXG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoKGRyb3BJbmRleCwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5kcm9wSW5kZXgsXG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kcm9wLXNjaGVtYS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL2lkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgRHJvcFNjaGVtYU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0Ryb3BTY2hlbWFOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShzY2hlbWEsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdEcm9wU2NoZW1hTm9kZScsXG4gICAgICAgICAgICBzY2hlbWE6IElkZW50aWZpZXJOb2RlLmNyZWF0ZShzY2hlbWEpLFxuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aChkcm9wU2NoZW1hLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5kcm9wU2NoZW1hLFxuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Ryb3AtdGFibGUtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBEcm9wVGFibGVOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdEcm9wVGFibGVOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZSh0YWJsZSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0Ryb3BUYWJsZU5vZGUnLFxuICAgICAgICAgICAgdGFibGUsXG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoKGRyb3BJbmRleCwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uZHJvcEluZGV4LFxuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2FsaWFzLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQWxpYXNOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdBbGlhc05vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG5vZGUsIGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0FsaWFzTm9kZScsXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgYWxpYXMsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vdGFibGUtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IFNjaGVtYWJsZUlkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi9zY2hlbWFibGUtaWRlbnRpZmllci1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBUYWJsZU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1RhYmxlTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUodGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnVGFibGVOb2RlJyxcbiAgICAgICAgICAgIHRhYmxlOiBTY2hlbWFibGVJZGVudGlmaWVyTm9kZS5jcmVhdGUodGFibGUpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNyZWF0ZVdpdGhTY2hlbWEoc2NoZW1hLCB0YWJsZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdUYWJsZU5vZGUnLFxuICAgICAgICAgICAgdGFibGU6IFNjaGVtYWJsZUlkZW50aWZpZXJOb2RlLmNyZWF0ZVdpdGhTY2hlbWEoc2NoZW1hLCB0YWJsZSksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vb3BlcmF0aW9uLW5vZGUtc291cmNlLmQudHNcIiAvPlxuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNPYmplY3QgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gaXNPcGVyYXRpb25Ob2RlU291cmNlKG9iaikge1xuICAgIHJldHVybiBpc09iamVjdChvYmopICYmIGlzRnVuY3Rpb24ob2JqLnRvT3BlcmF0aW9uTm9kZSk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2V4cHJlc3Npb24uZC50c1wiIC8+XG5pbXBvcnQgeyBpc09wZXJhdGlvbk5vZGVTb3VyY2UsIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBpc0V4cHJlc3Npb24ob2JqKSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KG9iaikgJiYgJ2V4cHJlc3Npb25UeXBlJyBpbiBvYmogJiYgaXNPcGVyYXRpb25Ob2RlU291cmNlKG9iaik7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNBbGlhc2VkRXhwcmVzc2lvbihvYmopIHtcbiAgICByZXR1cm4gKGlzT2JqZWN0KG9iaikgJiZcbiAgICAgICAgJ2V4cHJlc3Npb24nIGluIG9iaiAmJlxuICAgICAgICBpc1N0cmluZyhvYmouYWxpYXMpICYmXG4gICAgICAgIGlzT3BlcmF0aW9uTm9kZVNvdXJjZShvYmopKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vc2VsZWN0LW1vZGlmaWVyLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgU2VsZWN0TW9kaWZpZXJOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdTZWxlY3RNb2RpZmllck5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG1vZGlmaWVyLCBvZikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdTZWxlY3RNb2RpZmllck5vZGUnLFxuICAgICAgICAgICAgbW9kaWZpZXIsXG4gICAgICAgICAgICBvZixcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjcmVhdGVXaXRoRXhwcmVzc2lvbihtb2RpZmllcikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdTZWxlY3RNb2RpZmllck5vZGUnLFxuICAgICAgICAgICAgcmF3TW9kaWZpZXI6IG1vZGlmaWVyLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2FuZC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEFuZE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0FuZE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0FuZE5vZGUnLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL29yLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgT3JOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdPck5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ09yTm9kZScsXG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vb24tbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IEFuZE5vZGUgfSBmcm9tICcuL2FuZC1ub2RlLmpzJztcbmltcG9ydCB7IE9yTm9kZSB9IGZyb20gJy4vb3Itbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgT25Ob2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdPbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGZpbHRlcikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdPbk5vZGUnLFxuICAgICAgICAgICAgb246IGZpbHRlcixcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhPcGVyYXRpb24ob25Ob2RlLCBvcGVyYXRvciwgb3BlcmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ub25Ob2RlLFxuICAgICAgICAgICAgb246IG9wZXJhdG9yID09PSAnQW5kJ1xuICAgICAgICAgICAgICAgID8gQW5kTm9kZS5jcmVhdGUob25Ob2RlLm9uLCBvcGVyYXRpb24pXG4gICAgICAgICAgICAgICAgOiBPck5vZGUuY3JlYXRlKG9uTm9kZS5vbiwgb3BlcmF0aW9uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9qb2luLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBPbk5vZGUgfSBmcm9tICcuL29uLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEpvaW5Ob2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdKb2luTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoam9pblR5cGUsIHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0pvaW5Ob2RlJyxcbiAgICAgICAgICAgIGpvaW5UeXBlLFxuICAgICAgICAgICAgdGFibGUsXG4gICAgICAgICAgICBvbjogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNyZWF0ZVdpdGhPbihqb2luVHlwZSwgdGFibGUsIG9uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0pvaW5Ob2RlJyxcbiAgICAgICAgICAgIGpvaW5UeXBlLFxuICAgICAgICAgICAgdGFibGUsXG4gICAgICAgICAgICBvbjogT25Ob2RlLmNyZWF0ZShvbiksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoT24oam9pbk5vZGUsIG9wZXJhdGlvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmpvaW5Ob2RlLFxuICAgICAgICAgICAgb246IGpvaW5Ob2RlLm9uXG4gICAgICAgICAgICAgICAgPyBPbk5vZGUuY2xvbmVXaXRoT3BlcmF0aW9uKGpvaW5Ob2RlLm9uLCAnQW5kJywgb3BlcmF0aW9uKVxuICAgICAgICAgICAgICAgIDogT25Ob2RlLmNyZWF0ZShvcGVyYXRpb24pLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2JpbmFyeS1vcGVyYXRpb24tbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBCaW5hcnlPcGVyYXRpb25Ob2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdCaW5hcnlPcGVyYXRpb25Ob2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShsZWZ0T3BlcmFuZCwgb3BlcmF0b3IsIHJpZ2h0T3BlcmFuZCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdCaW5hcnlPcGVyYXRpb25Ob2RlJyxcbiAgICAgICAgICAgIGxlZnRPcGVyYW5kLFxuICAgICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgICByaWdodE9wZXJhbmQsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vb3BlcmF0b3Itbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgY29uc3QgQ09NUEFSSVNPTl9PUEVSQVRPUlMgPSBbXG4gICAgJz0nLFxuICAgICc9PScsXG4gICAgJyE9JyxcbiAgICAnPD4nLFxuICAgICc+JyxcbiAgICAnPj0nLFxuICAgICc8JyxcbiAgICAnPD0nLFxuICAgICdpbicsXG4gICAgJ25vdCBpbicsXG4gICAgJ2lzJyxcbiAgICAnaXMgbm90JyxcbiAgICAnbGlrZScsXG4gICAgJ25vdCBsaWtlJyxcbiAgICAnbWF0Y2gnLFxuICAgICdpbGlrZScsXG4gICAgJ25vdCBpbGlrZScsXG4gICAgJ0A+JyxcbiAgICAnPEAnLFxuICAgICdeQCcsXG4gICAgJyYmJyxcbiAgICAnPycsXG4gICAgJz8mJyxcbiAgICAnP3wnLFxuICAgICchPCcsXG4gICAgJyE+JyxcbiAgICAnPD0+JyxcbiAgICAnIX4nLFxuICAgICd+JyxcbiAgICAnfionLFxuICAgICchfionLFxuICAgICdAQCcsXG4gICAgJ0BAQCcsXG4gICAgJyEhJyxcbiAgICAnPC0+JyxcbiAgICAncmVnZXhwJyxcbiAgICAnaXMgZGlzdGluY3QgZnJvbScsXG4gICAgJ2lzIG5vdCBkaXN0aW5jdCBmcm9tJyxcbl07XG5leHBvcnQgY29uc3QgQVJJVEhNRVRJQ19PUEVSQVRPUlMgPSBbXG4gICAgJysnLFxuICAgICctJyxcbiAgICAnKicsXG4gICAgJy8nLFxuICAgICclJyxcbiAgICAnXicsXG4gICAgJyYnLFxuICAgICd8JyxcbiAgICAnIycsXG4gICAgJzw8JyxcbiAgICAnPj4nLFxuXTtcbmV4cG9ydCBjb25zdCBKU09OX09QRVJBVE9SUyA9IFsnLT4nLCAnLT4+J107XG5leHBvcnQgY29uc3QgQklOQVJZX09QRVJBVE9SUyA9IFtcbiAgICAuLi5DT01QQVJJU09OX09QRVJBVE9SUyxcbiAgICAuLi5BUklUSE1FVElDX09QRVJBVE9SUyxcbiAgICAnJiYnLFxuICAgICd8fCcsXG5dO1xuZXhwb3J0IGNvbnN0IFVOQVJZX0ZJTFRFUl9PUEVSQVRPUlMgPSBbJ2V4aXN0cycsICdub3QgZXhpc3RzJ107XG5leHBvcnQgY29uc3QgVU5BUllfT1BFUkFUT1JTID0gWydub3QnLCAnLScsIC4uLlVOQVJZX0ZJTFRFUl9PUEVSQVRPUlNdO1xuZXhwb3J0IGNvbnN0IE9QRVJBVE9SUyA9IFtcbiAgICAuLi5CSU5BUllfT1BFUkFUT1JTLFxuICAgIC4uLkpTT05fT1BFUkFUT1JTLFxuICAgIC4uLlVOQVJZX09QRVJBVE9SUyxcbiAgICAnYmV0d2VlbicsXG4gICAgJ2JldHdlZW4gc3ltbWV0cmljJyxcbl07XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgT3BlcmF0b3JOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdPcGVyYXRvck5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG9wZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ09wZXJhdG9yTm9kZScsXG4gICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGlzT3BlcmF0b3Iob3ApIHtcbiAgICByZXR1cm4gaXNTdHJpbmcob3ApICYmIE9QRVJBVE9SUy5pbmNsdWRlcyhvcCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNCaW5hcnlPcGVyYXRvcihvcCkge1xuICAgIHJldHVybiBpc1N0cmluZyhvcCkgJiYgQklOQVJZX09QRVJBVE9SUy5pbmNsdWRlcyhvcCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNDb21wYXJpc29uT3BlcmF0b3Iob3ApIHtcbiAgICByZXR1cm4gaXNTdHJpbmcob3ApICYmIENPTVBBUklTT05fT1BFUkFUT1JTLmluY2x1ZGVzKG9wKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0FyaXRobWV0aWNPcGVyYXRvcihvcCkge1xuICAgIHJldHVybiBpc1N0cmluZyhvcCkgJiYgQVJJVEhNRVRJQ19PUEVSQVRPUlMuaW5jbHVkZXMob3ApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSlNPTk9wZXJhdG9yKG9wKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKG9wKSAmJiBKU09OX09QRVJBVE9SUy5pbmNsdWRlcyhvcCk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NvbHVtbi1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL2lkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ29sdW1uTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnQ29sdW1uTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0NvbHVtbk5vZGUnLFxuICAgICAgICAgICAgY29sdW1uOiBJZGVudGlmaWVyTm9kZS5jcmVhdGUoY29sdW1uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9zZWxlY3QtYWxsLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgU2VsZWN0QWxsTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnU2VsZWN0QWxsTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1NlbGVjdEFsbE5vZGUnLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3JlZmVyZW5jZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgU2VsZWN0QWxsTm9kZSB9IGZyb20gJy4vc2VsZWN0LWFsbC1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBSZWZlcmVuY2VOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdSZWZlcmVuY2VOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShjb2x1bW4sIHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1JlZmVyZW5jZU5vZGUnLFxuICAgICAgICAgICAgdGFibGUsXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY3JlYXRlU2VsZWN0QWxsKHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1JlZmVyZW5jZU5vZGUnLFxuICAgICAgICAgICAgdGFibGUsXG4gICAgICAgICAgICBjb2x1bW46IFNlbGVjdEFsbE5vZGUuY3JlYXRlKCksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZHluYW1pYy1yZWZlcmVuY2UtYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IGlzT3BlcmF0aW9uTm9kZVNvdXJjZSwgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vcGVyYXRpb24tbm9kZS1zb3VyY2UuanMnO1xuaW1wb3J0IHsgcGFyc2VTaW1wbGVSZWZlcmVuY2VFeHByZXNzaW9uIH0gZnJvbSAnLi4vcGFyc2VyL3JlZmVyZW5jZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIER5bmFtaWNSZWZlcmVuY2VCdWlsZGVyIHtcbiAgICAjZHluYW1pY1JlZmVyZW5jZTtcbiAgICBnZXQgZHluYW1pY1JlZmVyZW5jZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2R5bmFtaWNSZWZlcmVuY2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICpcbiAgICAgKiBUaGlzIG5lZWRzIHRvIGJlIGhlcmUganVzdCBzbyB0aGF0IHRoZSB0eXBpbmdzIHdvcmsuIFdpdGhvdXQgdGhpc1xuICAgICAqIHRoZSBnZW5lcmF0ZWQgLmQudHMgZmlsZSBjb250YWlucyBubyByZWZlcmVuY2UgdG8gdGhlIHR5cGUgcGFyYW0gUlxuICAgICAqIHdoaWNoIGNhdXNlcyB0aGlzIHR5cGUgdG8gYmUgZXF1YWwgdG8gRHluYW1pY1JlZmVyZW5jZUJ1aWxkZXIgd2l0aFxuICAgICAqIGFueSBSLlxuICAgICAqL1xuICAgIGdldCByZWZUeXBlKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihyZWZlcmVuY2UpIHtcbiAgICAgICAgdGhpcy4jZHluYW1pY1JlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gcGFyc2VTaW1wbGVSZWZlcmVuY2VFeHByZXNzaW9uKHRoaXMuI2R5bmFtaWNSZWZlcmVuY2UpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0R5bmFtaWNSZWZlcmVuY2VCdWlsZGVyKG9iaikge1xuICAgIHJldHVybiAoaXNPYmplY3Qob2JqKSAmJlxuICAgICAgICBpc09wZXJhdGlvbk5vZGVTb3VyY2Uob2JqKSAmJlxuICAgICAgICBpc1N0cmluZyhvYmouZHluYW1pY1JlZmVyZW5jZSkpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vcmRlci1ieS1pdGVtLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgT3JkZXJCeUl0ZW1Ob2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdPcmRlckJ5SXRlbU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG9yZGVyQnksIGRpcmVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdPcmRlckJ5SXRlbU5vZGUnLFxuICAgICAgICAgICAgb3JkZXJCeSxcbiAgICAgICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGgobm9kZSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcmF3LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUmF3Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnUmF3Tm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoc3FsRnJhZ21lbnRzLCBwYXJhbWV0ZXJzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1Jhd05vZGUnLFxuICAgICAgICAgICAgc3FsRnJhZ21lbnRzOiBmcmVlemUoc3FsRnJhZ21lbnRzKSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IGZyZWV6ZShwYXJhbWV0ZXJzKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjcmVhdGVXaXRoU3FsKHNxbCkge1xuICAgICAgICByZXR1cm4gUmF3Tm9kZS5jcmVhdGUoW3NxbF0sIFtdKTtcbiAgICB9LFxuICAgIGNyZWF0ZVdpdGhDaGlsZChjaGlsZCkge1xuICAgICAgICByZXR1cm4gUmF3Tm9kZS5jcmVhdGUoWycnLCAnJ10sIFtjaGlsZF0pO1xuICAgIH0sXG4gICAgY3JlYXRlV2l0aENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybiBSYXdOb2RlLmNyZWF0ZShuZXcgQXJyYXkoY2hpbGRyZW4ubGVuZ3RoICsgMSkuZmlsbCgnJyksIGNoaWxkcmVuKTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NvbGxhdGUtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi9pZGVudGlmaWVyLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENvbGxhdGVOb2RlID0ge1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0NvbGxhdGVOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShjb2xsYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQ29sbGF0ZU5vZGUnLFxuICAgICAgICAgICAgY29sbGF0aW9uOiBJZGVudGlmaWVyTm9kZS5jcmVhdGUoY29sbGF0aW9uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn07XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL29yZGVyLWJ5LWl0ZW0tYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IENvbGxhdGVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY29sbGF0ZS1ub2RlLmpzJztcbmltcG9ydCB7IE9yZGVyQnlJdGVtTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29yZGVyLWJ5LWl0ZW0tbm9kZS5qcyc7XG5pbXBvcnQgeyBSYXdOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcmF3LW5vZGUuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIE9yZGVyQnlJdGVtQnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBgZGVzY2AgdG8gdGhlIGBvcmRlciBieWAgaXRlbS5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgYXNjfSBmb3IgdGhlIG9wcG9zaXRlLlxuICAgICAqL1xuICAgIGRlc2MoKSB7XG4gICAgICAgIHJldHVybiBuZXcgT3JkZXJCeUl0ZW1CdWlsZGVyKHtcbiAgICAgICAgICAgIG5vZGU6IE9yZGVyQnlJdGVtTm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogUmF3Tm9kZS5jcmVhdGVXaXRoU3FsKCdkZXNjJyksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYGFzY2AgdG8gdGhlIGBvcmRlciBieWAgaXRlbS5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgZGVzY30gZm9yIHRoZSBvcHBvc2l0ZS5cbiAgICAgKi9cbiAgICBhc2MoKSB7XG4gICAgICAgIHJldHVybiBuZXcgT3JkZXJCeUl0ZW1CdWlsZGVyKHtcbiAgICAgICAgICAgIG5vZGU6IE9yZGVyQnlJdGVtTm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogUmF3Tm9kZS5jcmVhdGVXaXRoU3FsKCdhc2MnKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBgbnVsbHMgbGFzdGAgdG8gdGhlIGBvcmRlciBieWAgaXRlbS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgYnkgc29tZSBkaWFsZWN0cyBsaWtlIFBvc3RncmVTUUwgYW5kIFNRTGl0ZS5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgbnVsbHNGaXJzdH0gZm9yIHRoZSBvcHBvc2l0ZS5cbiAgICAgKi9cbiAgICBudWxsc0xhc3QoKSB7XG4gICAgICAgIHJldHVybiBuZXcgT3JkZXJCeUl0ZW1CdWlsZGVyKHtcbiAgICAgICAgICAgIG5vZGU6IE9yZGVyQnlJdGVtTm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwgeyBudWxsczogJ2xhc3QnIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBgbnVsbHMgZmlyc3RgIHRvIHRoZSBgb3JkZXIgYnlgIGl0ZW0uXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHNvbWUgZGlhbGVjdHMgbGlrZSBQb3N0Z3JlU1FMIGFuZCBTUUxpdGUuXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIG51bGxzTGFzdH0gZm9yIHRoZSBvcHBvc2l0ZS5cbiAgICAgKi9cbiAgICBudWxsc0ZpcnN0KCkge1xuICAgICAgICByZXR1cm4gbmV3IE9yZGVyQnlJdGVtQnVpbGRlcih7XG4gICAgICAgICAgICBub2RlOiBPcmRlckJ5SXRlbU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHsgbnVsbHM6ICdmaXJzdCcgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGBjb2xsYXRlIDxjb2xsYXRpb25OYW1lPmAgdG8gdGhlIGBvcmRlciBieWAgaXRlbS5cbiAgICAgKi9cbiAgICBjb2xsYXRlKGNvbGxhdGlvbikge1xuICAgICAgICByZXR1cm4gbmV3IE9yZGVyQnlJdGVtQnVpbGRlcih7XG4gICAgICAgICAgICBub2RlOiBPcmRlckJ5SXRlbU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBjb2xsYXRpb246IENvbGxhdGVOb2RlLmNyZWF0ZShjb2xsYXRpb24pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5ub2RlO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vbG9nLW9uY2UuZC50c1wiIC8+XG5jb25zdCBMT0dHRURfTUVTU0FHRVMgPSBuZXcgU2V0KCk7XG4vKipcbiAqIFVzZSBmb3Igc3lzdGVtLWxldmVsIGxvZ2dpbmcsIHN1Y2ggYXMgZGVwcmVjYXRpb24gbWVzc2FnZXMuXG4gKiBMb2dzIGEgbWVzc2FnZSBhbmQgZW5zdXJlcyBpdCB3b24ndCBiZSBsb2dnZWQgYWdhaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2dPbmNlKG1lc3NhZ2UpIHtcbiAgICBpZiAoTE9HR0VEX01FU1NBR0VTLmhhcyhtZXNzYWdlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIExPR0dFRF9NRVNTQUdFUy5hZGQobWVzc2FnZSk7XG4gICAgY29uc29sZS5sb2cobWVzc2FnZSk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL29yZGVyLWJ5LXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IGlzRHluYW1pY1JlZmVyZW5jZUJ1aWxkZXIsIH0gZnJvbSAnLi4vZHluYW1pYy9keW5hbWljLXJlZmVyZW5jZS1idWlsZGVyLmpzJztcbmltcG9ydCB7IGlzRXhwcmVzc2lvbiB9IGZyb20gJy4uL2V4cHJlc3Npb24vZXhwcmVzc2lvbi5qcyc7XG5pbXBvcnQgeyBPcmRlckJ5SXRlbU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vcmRlci1ieS1pdGVtLW5vZGUuanMnO1xuaW1wb3J0IHsgUmF3Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3Jhdy1ub2RlLmpzJztcbmltcG9ydCB7IE9yZGVyQnlJdGVtQnVpbGRlciB9IGZyb20gJy4uL3F1ZXJ5LWJ1aWxkZXIvb3JkZXItYnktaXRlbS1idWlsZGVyLmpzJztcbmltcG9ydCB7IGxvZ09uY2UgfSBmcm9tICcuLi91dGlsL2xvZy1vbmNlLmpzJztcbmltcG9ydCB7IGlzRXhwcmVzc2lvbk9yRmFjdG9yeSwgcGFyc2VFeHByZXNzaW9uLCB9IGZyb20gJy4vZXhwcmVzc2lvbi1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VTdHJpbmdSZWZlcmVuY2UsIH0gZnJvbSAnLi9yZWZlcmVuY2UtcGFyc2VyLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBpc09yZGVyQnlEaXJlY3Rpb24odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgPT09ICdhc2MnIHx8IHRoaW5nID09PSAnZGVzYyc7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRlckJ5KGFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgcmV0dXJuIFtwYXJzZU9yZGVyQnlJdGVtKGFyZ3NbMF0sIGFyZ3NbMV0pXTtcbiAgICB9XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IFtvcmRlckJ5XSA9IGFyZ3M7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9yZGVyQnkpKSB7XG4gICAgICAgICAgICBsb2dPbmNlKCdvcmRlckJ5KGFycmF5KSBpcyBkZXByZWNhdGVkLCB1c2UgbXVsdGlwbGUgb3JkZXJCeSBjYWxscyBpbnN0ZWFkLicpO1xuICAgICAgICAgICAgcmV0dXJuIG9yZGVyQnkubWFwKChpdGVtKSA9PiBwYXJzZU9yZGVyQnlJdGVtKGl0ZW0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3BhcnNlT3JkZXJCeUl0ZW0ob3JkZXJCeSldO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBhdCBvcmRlciBieSEgZXhwZWN0ZWQgMS0yLCByZWNlaXZlZCAke2FyZ3MubGVuZ3RofWApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT3JkZXJCeUl0ZW0oZXhwciwgbW9kaWZpZXJzKSB7XG4gICAgY29uc3QgcGFyc2VkUmVmID0gcGFyc2VPcmRlckJ5RXhwcmVzc2lvbihleHByKTtcbiAgICBpZiAoT3JkZXJCeUl0ZW1Ob2RlLmlzKHBhcnNlZFJlZikpIHtcbiAgICAgICAgaWYgKG1vZGlmaWVycykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3BlY2lmeSBkaXJlY3Rpb24gdHdpY2UhJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZFJlZjtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlT3JkZXJCeVdpdGhNb2RpZmllcnMocGFyc2VkUmVmLCBtb2RpZmllcnMpO1xufVxuZnVuY3Rpb24gcGFyc2VPcmRlckJ5RXhwcmVzc2lvbihleHByKSB7XG4gICAgaWYgKGlzRXhwcmVzc2lvbk9yRmFjdG9yeShleHByKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uKGV4cHIpO1xuICAgIH1cbiAgICBpZiAoaXNEeW5hbWljUmVmZXJlbmNlQnVpbGRlcihleHByKSkge1xuICAgICAgICByZXR1cm4gZXhwci50b09wZXJhdGlvbk5vZGUoKTtcbiAgICB9XG4gICAgY29uc3QgW3JlZiwgZGlyZWN0aW9uXSA9IGV4cHIuc3BsaXQoJyAnKTtcbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICAgIGxvZ09uY2UoXCJgb3JkZXJCeSgnY29sdW1uIGFzYycpYCBpcyBkZXByZWNhdGVkLiBVc2UgYG9yZGVyQnkoJ2NvbHVtbicsICdhc2MnKWAgaW5zdGVhZC5cIik7XG4gICAgICAgIHJldHVybiBwYXJzZU9yZGVyQnlXaXRoTW9kaWZpZXJzKHBhcnNlU3RyaW5nUmVmZXJlbmNlKHJlZiksIGRpcmVjdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZVN0cmluZ1JlZmVyZW5jZShleHByKTtcbn1cbmZ1bmN0aW9uIHBhcnNlT3JkZXJCeVdpdGhNb2RpZmllcnMoZXhwciwgbW9kaWZpZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBtb2RpZmllcnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghaXNPcmRlckJ5RGlyZWN0aW9uKG1vZGlmaWVycykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcmRlciBieSBkaXJlY3Rpb246ICR7bW9kaWZpZXJzfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPcmRlckJ5SXRlbU5vZGUuY3JlYXRlKGV4cHIsIFJhd05vZGUuY3JlYXRlV2l0aFNxbChtb2RpZmllcnMpKTtcbiAgICB9XG4gICAgaWYgKGlzRXhwcmVzc2lvbihtb2RpZmllcnMpKSB7XG4gICAgICAgIGxvZ09uY2UoXCJgb3JkZXJCeSguLi4sIGV4cHIpYCBpcyBkZXByZWNhdGVkLiBVc2UgYG9yZGVyQnkoLi4uLCAnYXNjJylgIG9yIGBvcmRlckJ5KC4uLiwgKG9iKSA9PiAuLi4pYCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgcmV0dXJuIE9yZGVyQnlJdGVtTm9kZS5jcmVhdGUoZXhwciwgbW9kaWZpZXJzLnRvT3BlcmF0aW9uTm9kZSgpKTtcbiAgICB9XG4gICAgY29uc3Qgbm9kZSA9IE9yZGVyQnlJdGVtTm9kZS5jcmVhdGUoZXhwcik7XG4gICAgaWYgKCFtb2RpZmllcnMpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIHJldHVybiBtb2RpZmllcnMobmV3IE9yZGVyQnlJdGVtQnVpbGRlcih7IG5vZGUgfSkpLnRvT3BlcmF0aW9uTm9kZSgpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9qc29uLXJlZmVyZW5jZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEpTT05SZWZlcmVuY2VOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdKU09OUmVmZXJlbmNlTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUocmVmZXJlbmNlLCB0cmF2ZXJzYWwpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnSlNPTlJlZmVyZW5jZU5vZGUnLFxuICAgICAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICAgICAgdHJhdmVyc2FsLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFRyYXZlcnNhbChub2RlLCB0cmF2ZXJzYWwpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgdHJhdmVyc2FsLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2pzb24tb3BlcmF0b3ItY2hhaW4tbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBKU09OT3BlcmF0b3JDaGFpbk5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0pTT05PcGVyYXRvckNoYWluTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUob3BlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnSlNPTk9wZXJhdG9yQ2hhaW5Ob2RlJyxcbiAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWVzOiBmcmVlemUoW10pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFZhbHVlKG5vZGUsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIHZhbHVlczogZnJlZXplKFsuLi5ub2RlLnZhbHVlcywgdmFsdWVdKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9qc29uLXBhdGgtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBKU09OUGF0aE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0pTT05QYXRoTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoaW5PcGVyYXRvcikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdKU09OUGF0aE5vZGUnLFxuICAgICAgICAgICAgaW5PcGVyYXRvcixcbiAgICAgICAgICAgIHBhdGhMZWdzOiBmcmVlemUoW10pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aExlZyhqc29uUGF0aE5vZGUsIHBhdGhMZWcpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5qc29uUGF0aE5vZGUsXG4gICAgICAgICAgICBwYXRoTGVnczogZnJlZXplKFsuLi5qc29uUGF0aE5vZGUucGF0aExlZ3MsIHBhdGhMZWddKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9yZWZlcmVuY2UtcGFyc2VyLmQudHNcIiAvPlxuaW1wb3J0IHsgQWxpYXNOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWxpYXMtbm9kZS5qcyc7XG5pbXBvcnQgeyBDb2x1bW5Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgUmVmZXJlbmNlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3JlZmVyZW5jZS1ub2RlLmpzJztcbmltcG9ydCB7IFRhYmxlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3RhYmxlLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNSZWFkb25seUFycmF5LCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IHBhcnNlRXhwcmVzc2lvbiwgaXNFeHByZXNzaW9uT3JGYWN0b3J5LCB9IGZyb20gJy4vZXhwcmVzc2lvbi1wYXJzZXIuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9pZGVudGlmaWVyLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNPcmRlckJ5RGlyZWN0aW9uLCBwYXJzZU9yZGVyQnksIH0gZnJvbSAnLi9vcmRlci1ieS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgT3BlcmF0b3JOb2RlLCBpc0pTT05PcGVyYXRvciwgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vcGVyYXRvci1ub2RlLmpzJztcbmltcG9ydCB7IEpTT05SZWZlcmVuY2VOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvanNvbi1yZWZlcmVuY2Utbm9kZS5qcyc7XG5pbXBvcnQgeyBKU09OT3BlcmF0b3JDaGFpbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9qc29uLW9wZXJhdG9yLWNoYWluLW5vZGUuanMnO1xuaW1wb3J0IHsgSlNPTlBhdGhOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvanNvbi1wYXRoLW5vZGUuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2ltcGxlUmVmZXJlbmNlRXhwcmVzc2lvbihleHApIHtcbiAgICBpZiAoaXNTdHJpbmcoZXhwKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmdSZWZlcmVuY2UoZXhwKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cC50b09wZXJhdGlvbk5vZGUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb25Pckxpc3QoYXJnKSB7XG4gICAgaWYgKGlzUmVhZG9ubHlBcnJheShhcmcpKSB7XG4gICAgICAgIHJldHVybiBhcmcubWFwKChpdCkgPT4gcGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uKGl0KSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gW3BhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbihhcmcpXTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uKGV4cCkge1xuICAgIGlmIChpc0V4cHJlc3Npb25PckZhY3RvcnkoZXhwKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uKGV4cCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZVNpbXBsZVJlZmVyZW5jZUV4cHJlc3Npb24oZXhwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUpTT05SZWZlcmVuY2UocmVmLCBvcCkge1xuICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSBwYXJzZVN0cmluZ1JlZmVyZW5jZShyZWYpO1xuICAgIGlmIChpc0pTT05PcGVyYXRvcihvcCkpIHtcbiAgICAgICAgcmV0dXJuIEpTT05SZWZlcmVuY2VOb2RlLmNyZWF0ZShyZWZlcmVuY2VOb2RlLCBKU09OT3BlcmF0b3JDaGFpbk5vZGUuY3JlYXRlKE9wZXJhdG9yTm9kZS5jcmVhdGUob3ApKSk7XG4gICAgfVxuICAgIGNvbnN0IG9wV2l0aG91dExhc3RDaGFyID0gb3Auc2xpY2UoMCwgLTEpO1xuICAgIGlmIChpc0pTT05PcGVyYXRvcihvcFdpdGhvdXRMYXN0Q2hhcikpIHtcbiAgICAgICAgcmV0dXJuIEpTT05SZWZlcmVuY2VOb2RlLmNyZWF0ZShyZWZlcmVuY2VOb2RlLCBKU09OUGF0aE5vZGUuY3JlYXRlKE9wZXJhdG9yTm9kZS5jcmVhdGUob3BXaXRob3V0TGFzdENoYXIpKSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBKU09OIG9wZXJhdG9yOiAke29wfWApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3RyaW5nUmVmZXJlbmNlKHJlZikge1xuICAgIGNvbnN0IENPTFVNTl9TRVBBUkFUT1IgPSAnLic7XG4gICAgaWYgKCFyZWYuaW5jbHVkZXMoQ09MVU1OX1NFUEFSQVRPUikpIHtcbiAgICAgICAgcmV0dXJuIFJlZmVyZW5jZU5vZGUuY3JlYXRlKENvbHVtbk5vZGUuY3JlYXRlKHJlZikpO1xuICAgIH1cbiAgICBjb25zdCBwYXJ0cyA9IHJlZi5zcGxpdChDT0xVTU5fU0VQQVJBVE9SKS5tYXAodHJpbSk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmdSZWZlcmVuY2VXaXRoVGFibGVBbmRTY2hlbWEocGFydHMpO1xuICAgIH1cbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVN0cmluZ1JlZmVyZW5jZVdpdGhUYWJsZShwYXJ0cyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBjb2x1bW4gcmVmZXJlbmNlICR7cmVmfWApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQWxpYXNlZFN0cmluZ1JlZmVyZW5jZShyZWYpIHtcbiAgICBjb25zdCBBTElBU19TRVBBUkFUT1IgPSAnIGFzICc7XG4gICAgaWYgKHJlZi5pbmNsdWRlcyhBTElBU19TRVBBUkFUT1IpKSB7XG4gICAgICAgIGNvbnN0IFtjb2x1bW5SZWYsIGFsaWFzXSA9IHJlZi5zcGxpdChBTElBU19TRVBBUkFUT1IpLm1hcCh0cmltKTtcbiAgICAgICAgcmV0dXJuIEFsaWFzTm9kZS5jcmVhdGUocGFyc2VTdHJpbmdSZWZlcmVuY2UoY29sdW1uUmVmKSwgSWRlbnRpZmllck5vZGUuY3JlYXRlKGFsaWFzKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmdSZWZlcmVuY2UocmVmKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDb2x1bW5OYW1lKGNvbHVtbikge1xuICAgIHJldHVybiBDb2x1bW5Ob2RlLmNyZWF0ZShjb2x1bW4pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT3JkZXJlZENvbHVtbk5hbWUoY29sdW1uKSB7XG4gICAgY29uc3QgT1JERVJfU0VQQVJBVE9SID0gJyAnO1xuICAgIGlmIChjb2x1bW4uaW5jbHVkZXMoT1JERVJfU0VQQVJBVE9SKSkge1xuICAgICAgICBjb25zdCBbY29sdW1uTmFtZSwgb3JkZXJdID0gY29sdW1uLnNwbGl0KE9SREVSX1NFUEFSQVRPUikubWFwKHRyaW0pO1xuICAgICAgICBpZiAoIWlzT3JkZXJCeURpcmVjdGlvbihvcmRlcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBvcmRlciBkaXJlY3Rpb24gXCIke29yZGVyfVwiIG5leHQgdG8gXCIke2NvbHVtbk5hbWV9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VPcmRlckJ5KFtjb2x1bW5OYW1lLCBvcmRlcl0pWzBdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlQ29sdW1uTmFtZShjb2x1bW4pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHBhcnNlU3RyaW5nUmVmZXJlbmNlV2l0aFRhYmxlQW5kU2NoZW1hKHBhcnRzKSB7XG4gICAgY29uc3QgW3NjaGVtYSwgdGFibGUsIGNvbHVtbl0gPSBwYXJ0cztcbiAgICByZXR1cm4gUmVmZXJlbmNlTm9kZS5jcmVhdGUoQ29sdW1uTm9kZS5jcmVhdGUoY29sdW1uKSwgVGFibGVOb2RlLmNyZWF0ZVdpdGhTY2hlbWEoc2NoZW1hLCB0YWJsZSkpO1xufVxuZnVuY3Rpb24gcGFyc2VTdHJpbmdSZWZlcmVuY2VXaXRoVGFibGUocGFydHMpIHtcbiAgICBjb25zdCBbdGFibGUsIGNvbHVtbl0gPSBwYXJ0cztcbiAgICByZXR1cm4gUmVmZXJlbmNlTm9kZS5jcmVhdGUoQ29sdW1uTm9kZS5jcmVhdGUoY29sdW1uKSwgVGFibGVOb2RlLmNyZWF0ZSh0YWJsZSkpO1xufVxuZnVuY3Rpb24gdHJpbShzdHIpIHtcbiAgICByZXR1cm4gc3RyLnRyaW0oKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcHJpbWl0aXZlLXZhbHVlLWxpc3Qtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQcmltaXRpdmVWYWx1ZUxpc3ROb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdQcmltaXRpdmVWYWx1ZUxpc3ROb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZSh2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnUHJpbWl0aXZlVmFsdWVMaXN0Tm9kZScsXG4gICAgICAgICAgICB2YWx1ZXM6IGZyZWV6ZShbLi4udmFsdWVzXSksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vdmFsdWUtbGlzdC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFZhbHVlTGlzdE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1ZhbHVlTGlzdE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHZhbHVlcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdWYWx1ZUxpc3ROb2RlJyxcbiAgICAgICAgICAgIHZhbHVlczogZnJlZXplKHZhbHVlcyksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vdmFsdWUtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBWYWx1ZU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1ZhbHVlTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnVmFsdWVOb2RlJyxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNyZWF0ZUltbWVkaWF0ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdWYWx1ZU5vZGUnLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vdmFsdWUtcGFyc2VyLmQudHNcIiAvPlxuaW1wb3J0IHsgUHJpbWl0aXZlVmFsdWVMaXN0Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3ByaW1pdGl2ZS12YWx1ZS1saXN0LW5vZGUuanMnO1xuaW1wb3J0IHsgVmFsdWVMaXN0Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3ZhbHVlLWxpc3Qtbm9kZS5qcyc7XG5pbXBvcnQgeyBWYWx1ZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS92YWx1ZS1ub2RlLmpzJztcbmltcG9ydCB7IGlzQm9vbGVhbiwgaXNOdWxsLCBpc051bWJlciwgaXNSZWFkb25seUFycmF5LCB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IHBhcnNlRXhwcmVzc2lvbiwgaXNFeHByZXNzaW9uT3JGYWN0b3J5LCB9IGZyb20gJy4vZXhwcmVzc2lvbi1wYXJzZXIuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmFsdWVFeHByZXNzaW9uT3JMaXN0KGFyZykge1xuICAgIGlmIChpc1JlYWRvbmx5QXJyYXkoYXJnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VWYWx1ZUV4cHJlc3Npb25MaXN0KGFyZyk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZVZhbHVlRXhwcmVzc2lvbihhcmcpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmFsdWVFeHByZXNzaW9uKGV4cCkge1xuICAgIGlmIChpc0V4cHJlc3Npb25PckZhY3RvcnkoZXhwKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uKGV4cCk7XG4gICAgfVxuICAgIHJldHVybiBWYWx1ZU5vZGUuY3JlYXRlKGV4cCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNTYWZlSW1tZWRpYXRlVmFsdWUodmFsdWUpIHtcbiAgICByZXR1cm4gaXNOdW1iZXIodmFsdWUpIHx8IGlzQm9vbGVhbih2YWx1ZSkgfHwgaXNOdWxsKHZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNhZmVJbW1lZGlhdGVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICghaXNTYWZlSW1tZWRpYXRlVmFsdWUodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zYWZlIGltbWVkaWF0ZSB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIFZhbHVlTm9kZS5jcmVhdGVJbW1lZGlhdGUodmFsdWUpO1xufVxuZnVuY3Rpb24gcGFyc2VWYWx1ZUV4cHJlc3Npb25MaXN0KGFyZykge1xuICAgIGlmIChhcmcuc29tZShpc0V4cHJlc3Npb25PckZhY3RvcnkpKSB7XG4gICAgICAgIHJldHVybiBWYWx1ZUxpc3ROb2RlLmNyZWF0ZShhcmcubWFwKChpdCkgPT4gcGFyc2VWYWx1ZUV4cHJlc3Npb24oaXQpKSk7XG4gICAgfVxuICAgIHJldHVybiBQcmltaXRpdmVWYWx1ZUxpc3ROb2RlLmNyZWF0ZShhcmcpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9wYXJlbnMtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQYXJlbnNOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdQYXJlbnNOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShub2RlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1BhcmVuc05vZGUnLFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9iaW5hcnktb3BlcmF0aW9uLXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IEJpbmFyeU9wZXJhdGlvbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9iaW5hcnktb3BlcmF0aW9uLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNCb29sZWFuLCBpc051bGwsIGlzU3RyaW5nLCBpc1VuZGVmaW5lZCwgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBpc09wZXJhdGlvbk5vZGVTb3VyY2UsIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmltcG9ydCB7IE9wZXJhdG9yTm9kZSwgT1BFUkFUT1JTLCB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdG9yLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uLCB9IGZyb20gJy4vcmVmZXJlbmNlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVZhbHVlRXhwcmVzc2lvbiwgcGFyc2VWYWx1ZUV4cHJlc3Npb25Pckxpc3QsIH0gZnJvbSAnLi92YWx1ZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgVmFsdWVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvdmFsdWUtbm9kZS5qcyc7XG5pbXBvcnQgeyBBbmROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYW5kLW5vZGUuanMnO1xuaW1wb3J0IHsgUGFyZW5zTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3BhcmVucy1ub2RlLmpzJztcbmltcG9ydCB7IE9yTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29yLW5vZGUuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24oYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICByZXR1cm4gcGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlVmFsdWVFeHByZXNzaW9uKGFyZ3NbMF0pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYXJndW1lbnRzOiAke0pTT04uc3RyaW5naWZ5KGFyZ3MpfWApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb24obGVmdCwgb3BlcmF0b3IsIHJpZ2h0KSB7XG4gICAgaWYgKGlzSXNPcGVyYXRvcihvcGVyYXRvcikgJiYgbmVlZHNJc09wZXJhdG9yKHJpZ2h0KSkge1xuICAgICAgICByZXR1cm4gQmluYXJ5T3BlcmF0aW9uTm9kZS5jcmVhdGUocGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uKGxlZnQpLCBwYXJzZU9wZXJhdG9yKG9wZXJhdG9yKSwgVmFsdWVOb2RlLmNyZWF0ZUltbWVkaWF0ZShyaWdodCkpO1xuICAgIH1cbiAgICByZXR1cm4gQmluYXJ5T3BlcmF0aW9uTm9kZS5jcmVhdGUocGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uKGxlZnQpLCBwYXJzZU9wZXJhdG9yKG9wZXJhdG9yKSwgcGFyc2VWYWx1ZUV4cHJlc3Npb25Pckxpc3QocmlnaHQpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uKGxlZnQsIG9wZXJhdG9yLCByaWdodCkge1xuICAgIHJldHVybiBCaW5hcnlPcGVyYXRpb25Ob2RlLmNyZWF0ZShwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb24obGVmdCksIHBhcnNlT3BlcmF0b3Iob3BlcmF0b3IpLCBwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb24ocmlnaHQpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZpbHRlck9iamVjdChvYmosIGNvbWJpbmF0b3IpIHtcbiAgICByZXR1cm4gcGFyc2VGaWx0ZXJMaXN0KE9iamVjdC5lbnRyaWVzKG9iailcbiAgICAgICAgLmZpbHRlcigoWywgdl0pID0+ICFpc1VuZGVmaW5lZCh2KSlcbiAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uKGssIG5lZWRzSXNPcGVyYXRvcih2KSA/ICdpcycgOiAnPScsIHYpKSwgY29tYmluYXRvcik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGaWx0ZXJMaXN0KGxpc3QsIGNvbWJpbmF0b3IsIHdpdGhQYXJlbnMgPSB0cnVlKSB7XG4gICAgY29uc3QgY29tYmluZSA9IGNvbWJpbmF0b3IgPT09ICdhbmQnID8gQW5kTm9kZS5jcmVhdGUgOiBPck5vZGUuY3JlYXRlO1xuICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQmluYXJ5T3BlcmF0aW9uTm9kZS5jcmVhdGUoVmFsdWVOb2RlLmNyZWF0ZUltbWVkaWF0ZSgxKSwgT3BlcmF0b3JOb2RlLmNyZWF0ZSgnPScpLCBWYWx1ZU5vZGUuY3JlYXRlSW1tZWRpYXRlKGNvbWJpbmF0b3IgPT09ICdhbmQnID8gMSA6IDApKTtcbiAgICB9XG4gICAgbGV0IG5vZGUgPSB0b09wZXJhdGlvbk5vZGUobGlzdFswXSk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgIG5vZGUgPSBjb21iaW5lKG5vZGUsIHRvT3BlcmF0aW9uTm9kZShsaXN0W2ldKSk7XG4gICAgfVxuICAgIGlmIChsaXN0Lmxlbmd0aCA+IDEgJiYgd2l0aFBhcmVucykge1xuICAgICAgICByZXR1cm4gUGFyZW5zTm9kZS5jcmVhdGUobm9kZSk7XG4gICAgfVxuICAgIHJldHVybiBub2RlO1xufVxuZnVuY3Rpb24gaXNJc09wZXJhdG9yKG9wZXJhdG9yKSB7XG4gICAgcmV0dXJuIG9wZXJhdG9yID09PSAnaXMnIHx8IG9wZXJhdG9yID09PSAnaXMgbm90Jztcbn1cbmZ1bmN0aW9uIG5lZWRzSXNPcGVyYXRvcih2YWx1ZSkge1xuICAgIHJldHVybiBpc051bGwodmFsdWUpIHx8IGlzQm9vbGVhbih2YWx1ZSk7XG59XG5mdW5jdGlvbiBwYXJzZU9wZXJhdG9yKG9wZXJhdG9yKSB7XG4gICAgaWYgKGlzU3RyaW5nKG9wZXJhdG9yKSAmJiBPUEVSQVRPUlMuaW5jbHVkZXMob3BlcmF0b3IpKSB7XG4gICAgICAgIHJldHVybiBPcGVyYXRvck5vZGUuY3JlYXRlKG9wZXJhdG9yKTtcbiAgICB9XG4gICAgaWYgKGlzT3BlcmF0aW9uTm9kZVNvdXJjZShvcGVyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIG9wZXJhdG9yLnRvT3BlcmF0aW9uTm9kZSgpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3BlcmF0b3IgJHtKU09OLnN0cmluZ2lmeShvcGVyYXRvcil9YCk7XG59XG5mdW5jdGlvbiB0b09wZXJhdGlvbk5vZGUobm9kZU9yU291cmNlKSB7XG4gICAgcmV0dXJuIGlzT3BlcmF0aW9uTm9kZVNvdXJjZShub2RlT3JTb3VyY2UpXG4gICAgICAgID8gbm9kZU9yU291cmNlLnRvT3BlcmF0aW9uTm9kZSgpXG4gICAgICAgIDogbm9kZU9yU291cmNlO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vcmRlci1ieS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9yZGVyQnlOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdPcmRlckJ5Tm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoaXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnT3JkZXJCeU5vZGUnLFxuICAgICAgICAgICAgaXRlbXM6IGZyZWV6ZShbLi4uaXRlbXNdKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhJdGVtcyhvcmRlckJ5LCBpdGVtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm9yZGVyQnksXG4gICAgICAgICAgICBpdGVtczogZnJlZXplKFsuLi5vcmRlckJ5Lml0ZW1zLCAuLi5pdGVtc10pLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3BhcnRpdGlvbi1ieS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBhcnRpdGlvbkJ5Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnUGFydGl0aW9uQnlOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShpdGVtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdQYXJ0aXRpb25CeU5vZGUnLFxuICAgICAgICAgICAgaXRlbXM6IGZyZWV6ZShpdGVtcyksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoSXRlbXMocGFydGl0aW9uQnksIGl0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ucGFydGl0aW9uQnksXG4gICAgICAgICAgICBpdGVtczogZnJlZXplKFsuLi5wYXJ0aXRpb25CeS5pdGVtcywgLi4uaXRlbXNdKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vdmVyLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBPcmRlckJ5Tm9kZSB9IGZyb20gJy4vb3JkZXItYnktbm9kZS5qcyc7XG5pbXBvcnQgeyBQYXJ0aXRpb25CeU5vZGUgfSBmcm9tICcuL3BhcnRpdGlvbi1ieS1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBPdmVyTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnT3Zlck5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdPdmVyTm9kZScsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoT3JkZXJCeUl0ZW1zKG92ZXJOb2RlLCBpdGVtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm92ZXJOb2RlLFxuICAgICAgICAgICAgb3JkZXJCeTogb3Zlck5vZGUub3JkZXJCeVxuICAgICAgICAgICAgICAgID8gT3JkZXJCeU5vZGUuY2xvbmVXaXRoSXRlbXMob3Zlck5vZGUub3JkZXJCeSwgaXRlbXMpXG4gICAgICAgICAgICAgICAgOiBPcmRlckJ5Tm9kZS5jcmVhdGUoaXRlbXMpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFBhcnRpdGlvbkJ5SXRlbXMob3Zlck5vZGUsIGl0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ub3Zlck5vZGUsXG4gICAgICAgICAgICBwYXJ0aXRpb25CeTogb3Zlck5vZGUucGFydGl0aW9uQnlcbiAgICAgICAgICAgICAgICA/IFBhcnRpdGlvbkJ5Tm9kZS5jbG9uZVdpdGhJdGVtcyhvdmVyTm9kZS5wYXJ0aXRpb25CeSwgaXRlbXMpXG4gICAgICAgICAgICAgICAgOiBQYXJ0aXRpb25CeU5vZGUuY3JlYXRlKGl0ZW1zKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9mcm9tLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgRnJvbU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0Zyb21Ob2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShmcm9tcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdGcm9tTm9kZScsXG4gICAgICAgICAgICBmcm9tczogZnJlZXplKGZyb21zKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhGcm9tcyhmcm9tLCBmcm9tcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmZyb20sXG4gICAgICAgICAgICBmcm9tczogZnJlZXplKFsuLi5mcm9tLmZyb21zLCAuLi5mcm9tc10pLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2dyb3VwLWJ5LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgR3JvdXBCeU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0dyb3VwQnlOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShpdGVtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdHcm91cEJ5Tm9kZScsXG4gICAgICAgICAgICBpdGVtczogZnJlZXplKGl0ZW1zKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhJdGVtcyhncm91cEJ5LCBpdGVtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmdyb3VwQnksXG4gICAgICAgICAgICBpdGVtczogZnJlZXplKFsuLi5ncm91cEJ5Lml0ZW1zLCAuLi5pdGVtc10pLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2hhdmluZy1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQW5kTm9kZSB9IGZyb20gJy4vYW5kLW5vZGUuanMnO1xuaW1wb3J0IHsgT3JOb2RlIH0gZnJvbSAnLi9vci1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBIYXZpbmdOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdIYXZpbmdOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShmaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnSGF2aW5nTm9kZScsXG4gICAgICAgICAgICBoYXZpbmc6IGZpbHRlcixcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhPcGVyYXRpb24oaGF2aW5nTm9kZSwgb3BlcmF0b3IsIG9wZXJhdGlvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmhhdmluZ05vZGUsXG4gICAgICAgICAgICBoYXZpbmc6IG9wZXJhdG9yID09PSAnQW5kJ1xuICAgICAgICAgICAgICAgID8gQW5kTm9kZS5jcmVhdGUoaGF2aW5nTm9kZS5oYXZpbmcsIG9wZXJhdGlvbilcbiAgICAgICAgICAgICAgICA6IE9yTm9kZS5jcmVhdGUoaGF2aW5nTm9kZS5oYXZpbmcsIG9wZXJhdGlvbiksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vaW5zZXJ0LXF1ZXJ5LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgSW5zZXJ0UXVlcnlOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdJbnNlcnRRdWVyeU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGludG8sIHdpdGhOb2RlLCByZXBsYWNlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0luc2VydFF1ZXJ5Tm9kZScsXG4gICAgICAgICAgICBpbnRvLFxuICAgICAgICAgICAgLi4uKHdpdGhOb2RlICYmIHsgd2l0aDogd2l0aE5vZGUgfSksXG4gICAgICAgICAgICByZXBsYWNlLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNyZWF0ZVdpdGhvdXRJbnRvKCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdJbnNlcnRRdWVyeU5vZGUnLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aChpbnNlcnRRdWVyeSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5pbnNlcnRRdWVyeSxcbiAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2xpc3Qtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBMaXN0Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnTGlzdE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGl0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0xpc3ROb2RlJyxcbiAgICAgICAgICAgIGl0ZW1zOiBmcmVlemUoaXRlbXMpLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3VwZGF0ZS1xdWVyeS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgRnJvbU5vZGUgfSBmcm9tICcuL2Zyb20tbm9kZS5qcyc7XG5pbXBvcnQgeyBMaXN0Tm9kZSB9IGZyb20gJy4vbGlzdC1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBVcGRhdGVRdWVyeU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1VwZGF0ZVF1ZXJ5Tm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUodGFibGVzLCB3aXRoTm9kZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdVcGRhdGVRdWVyeU5vZGUnLFxuICAgICAgICAgICAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB1c2UgdGhlIHJhdyB0YWJsZSBub2RlIHdoZW4gdGhlcmUncyBvbmx5IG9uZSB0YWJsZVxuICAgICAgICAgICAgLy8gYW5kIGRvbid0IHJlbmFtZSB0aGUgcHJvcGVydHkgdG8gc29tZXRoaW5nIGxpa2UgYHRhYmxlc2AuXG4gICAgICAgICAgICB0YWJsZTogdGFibGVzLmxlbmd0aCA9PT0gMSA/IHRhYmxlc1swXSA6IExpc3ROb2RlLmNyZWF0ZSh0YWJsZXMpLFxuICAgICAgICAgICAgLi4uKHdpdGhOb2RlICYmIHsgd2l0aDogd2l0aE5vZGUgfSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY3JlYXRlV2l0aG91dFRhYmxlKCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdVcGRhdGVRdWVyeU5vZGUnLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aEZyb21JdGVtcyh1cGRhdGVRdWVyeSwgZnJvbUl0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4udXBkYXRlUXVlcnksXG4gICAgICAgICAgICBmcm9tOiB1cGRhdGVRdWVyeS5mcm9tXG4gICAgICAgICAgICAgICAgPyBGcm9tTm9kZS5jbG9uZVdpdGhGcm9tcyh1cGRhdGVRdWVyeS5mcm9tLCBmcm9tSXRlbXMpXG4gICAgICAgICAgICAgICAgOiBGcm9tTm9kZS5jcmVhdGUoZnJvbUl0ZW1zKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhVcGRhdGVzKHVwZGF0ZVF1ZXJ5LCB1cGRhdGVzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4udXBkYXRlUXVlcnksXG4gICAgICAgICAgICB1cGRhdGVzOiB1cGRhdGVRdWVyeS51cGRhdGVzXG4gICAgICAgICAgICAgICAgPyBmcmVlemUoWy4uLnVwZGF0ZVF1ZXJ5LnVwZGF0ZXMsIC4uLnVwZGF0ZXNdKVxuICAgICAgICAgICAgICAgIDogdXBkYXRlcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhMaW1pdCh1cGRhdGVRdWVyeSwgbGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi51cGRhdGVRdWVyeSxcbiAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3VzaW5nLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVXNpbmdOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdVc2luZ05vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHRhYmxlcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdVc2luZ05vZGUnLFxuICAgICAgICAgICAgdGFibGVzOiBmcmVlemUodGFibGVzKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhUYWJsZXModXNpbmcsIHRhYmxlcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLnVzaW5nLFxuICAgICAgICAgICAgdGFibGVzOiBmcmVlemUoWy4uLnVzaW5nLnRhYmxlcywgLi4udGFibGVzXSksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZGVsZXRlLXF1ZXJ5LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBGcm9tTm9kZSB9IGZyb20gJy4vZnJvbS1ub2RlLmpzJztcbmltcG9ydCB7IFVzaW5nTm9kZSB9IGZyb20gJy4vdXNpbmctbm9kZS5qcyc7XG5pbXBvcnQgeyBRdWVyeU5vZGUgfSBmcm9tICcuL3F1ZXJ5LW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IERlbGV0ZVF1ZXJ5Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnRGVsZXRlUXVlcnlOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShmcm9tSXRlbXMsIHdpdGhOb2RlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0RlbGV0ZVF1ZXJ5Tm9kZScsXG4gICAgICAgICAgICBmcm9tOiBGcm9tTm9kZS5jcmVhdGUoZnJvbUl0ZW1zKSxcbiAgICAgICAgICAgIC4uLih3aXRoTm9kZSAmJiB7IHdpdGg6IHdpdGhOb2RlIH0pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIC8vIFRPRE86IHJlbW92ZSBpbiB2MC4yOVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBgUXVlcnlOb2RlLmNsb25lV2l0aG91dE9yZGVyQnlgIGluc3RlYWQuXG4gICAgICovXG4gICAgY2xvbmVXaXRoT3JkZXJCeUl0ZW1zOiAobm9kZSwgaXRlbXMpID0+IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhPcmRlckJ5SXRlbXMobm9kZSwgaXRlbXMpLFxuICAgIC8vIFRPRE86IHJlbW92ZSBpbiB2MC4yOVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBgUXVlcnlOb2RlLmNsb25lV2l0aG91dE9yZGVyQnlgIGluc3RlYWQuXG4gICAgICovXG4gICAgY2xvbmVXaXRob3V0T3JkZXJCeTogKG5vZGUpID0+IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhvdXRPcmRlckJ5KG5vZGUpLFxuICAgIGNsb25lV2l0aExpbWl0KGRlbGV0ZU5vZGUsIGxpbWl0KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uZGVsZXRlTm9kZSxcbiAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aG91dExpbWl0KGRlbGV0ZU5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5kZWxldGVOb2RlLFxuICAgICAgICAgICAgbGltaXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhVc2luZyhkZWxldGVOb2RlLCB0YWJsZXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5kZWxldGVOb2RlLFxuICAgICAgICAgICAgdXNpbmc6IGRlbGV0ZU5vZGUudXNpbmcgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gVXNpbmdOb2RlLmNsb25lV2l0aFRhYmxlcyhkZWxldGVOb2RlLnVzaW5nLCB0YWJsZXMpXG4gICAgICAgICAgICAgICAgOiBVc2luZ05vZGUuY3JlYXRlKHRhYmxlcyksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vd2hlcmUtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IEFuZE5vZGUgfSBmcm9tICcuL2FuZC1ub2RlLmpzJztcbmltcG9ydCB7IE9yTm9kZSB9IGZyb20gJy4vb3Itbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgV2hlcmVOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdXaGVyZU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGZpbHRlcikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdXaGVyZU5vZGUnLFxuICAgICAgICAgICAgd2hlcmU6IGZpbHRlcixcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhPcGVyYXRpb24od2hlcmVOb2RlLCBvcGVyYXRvciwgb3BlcmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ud2hlcmVOb2RlLFxuICAgICAgICAgICAgd2hlcmU6IG9wZXJhdG9yID09PSAnQW5kJ1xuICAgICAgICAgICAgICAgID8gQW5kTm9kZS5jcmVhdGUod2hlcmVOb2RlLndoZXJlLCBvcGVyYXRpb24pXG4gICAgICAgICAgICAgICAgOiBPck5vZGUuY3JlYXRlKHdoZXJlTm9kZS53aGVyZSwgb3BlcmF0aW9uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9yZXR1cm5pbmctbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBSZXR1cm5pbmdOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdSZXR1cm5pbmdOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShzZWxlY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1JldHVybmluZ05vZGUnLFxuICAgICAgICAgICAgc2VsZWN0aW9uczogZnJlZXplKHNlbGVjdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFNlbGVjdGlvbnMocmV0dXJuaW5nLCBzZWxlY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ucmV0dXJuaW5nLFxuICAgICAgICAgICAgc2VsZWN0aW9uczogcmV0dXJuaW5nLnNlbGVjdGlvbnNcbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbLi4ucmV0dXJuaW5nLnNlbGVjdGlvbnMsIC4uLnNlbGVjdGlvbnNdKVxuICAgICAgICAgICAgICAgIDogZnJlZXplKHNlbGVjdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2V4cGxhaW4tbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBFeHBsYWluTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnRXhwbGFpbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGZvcm1hdCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdFeHBsYWluTm9kZScsXG4gICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3doZW4tbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBXaGVuTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnV2hlbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdXaGVuTm9kZScsXG4gICAgICAgICAgICBjb25kaXRpb24sXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoUmVzdWx0KHdoZW5Ob2RlLCByZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi53aGVuTm9kZSxcbiAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9tZXJnZS1xdWVyeS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgV2hlbk5vZGUgfSBmcm9tICcuL3doZW4tbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTWVyZ2VRdWVyeU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ01lcmdlUXVlcnlOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShpbnRvLCB3aXRoTm9kZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdNZXJnZVF1ZXJ5Tm9kZScsXG4gICAgICAgICAgICBpbnRvLFxuICAgICAgICAgICAgLi4uKHdpdGhOb2RlICYmIHsgd2l0aDogd2l0aE5vZGUgfSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoVXNpbmcobWVyZ2VOb2RlLCB1c2luZykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm1lcmdlTm9kZSxcbiAgICAgICAgICAgIHVzaW5nLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFdoZW4obWVyZ2VOb2RlLCB3aGVuKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubWVyZ2VOb2RlLFxuICAgICAgICAgICAgd2hlbnM6IG1lcmdlTm9kZS53aGVuc1xuICAgICAgICAgICAgICAgID8gZnJlZXplKFsuLi5tZXJnZU5vZGUud2hlbnMsIHdoZW5dKVxuICAgICAgICAgICAgICAgIDogZnJlZXplKFt3aGVuXSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoVGhlbihtZXJnZU5vZGUsIHRoZW4pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5tZXJnZU5vZGUsXG4gICAgICAgICAgICB3aGVuczogbWVyZ2VOb2RlLndoZW5zXG4gICAgICAgICAgICAgICAgPyBmcmVlemUoW1xuICAgICAgICAgICAgICAgICAgICAuLi5tZXJnZU5vZGUud2hlbnMuc2xpY2UoMCwgLTEpLFxuICAgICAgICAgICAgICAgICAgICBXaGVuTm9kZS5jbG9uZVdpdGhSZXN1bHQobWVyZ2VOb2RlLndoZW5zW21lcmdlTm9kZS53aGVucy5sZW5ndGggLSAxXSwgdGhlbiksXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vdXRwdXQtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBPdXRwdXROb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdPdXRwdXROb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShzZWxlY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ091dHB1dE5vZGUnLFxuICAgICAgICAgICAgc2VsZWN0aW9uczogZnJlZXplKHNlbGVjdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFNlbGVjdGlvbnMob3V0cHV0LCBzZWxlY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICAgICAgc2VsZWN0aW9uczogb3V0cHV0LnNlbGVjdGlvbnNcbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbLi4ub3V0cHV0LnNlbGVjdGlvbnMsIC4uLnNlbGVjdGlvbnNdKVxuICAgICAgICAgICAgICAgIDogZnJlZXplKHNlbGVjdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3F1ZXJ5LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBJbnNlcnRRdWVyeU5vZGUgfSBmcm9tICcuL2luc2VydC1xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IFNlbGVjdFF1ZXJ5Tm9kZSB9IGZyb20gJy4vc2VsZWN0LXF1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgVXBkYXRlUXVlcnlOb2RlIH0gZnJvbSAnLi91cGRhdGUtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBEZWxldGVRdWVyeU5vZGUgfSBmcm9tICcuL2RlbGV0ZS1xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IFdoZXJlTm9kZSB9IGZyb20gJy4vd2hlcmUtbm9kZS5qcyc7XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBSZXR1cm5pbmdOb2RlIH0gZnJvbSAnLi9yZXR1cm5pbmctbm9kZS5qcyc7XG5pbXBvcnQgeyBFeHBsYWluTm9kZSB9IGZyb20gJy4vZXhwbGFpbi1ub2RlLmpzJztcbmltcG9ydCB7IE1lcmdlUXVlcnlOb2RlIH0gZnJvbSAnLi9tZXJnZS1xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IE91dHB1dE5vZGUgfSBmcm9tICcuL291dHB1dC1ub2RlLmpzJztcbmltcG9ydCB7IE9yZGVyQnlOb2RlIH0gZnJvbSAnLi9vcmRlci1ieS1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBRdWVyeU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIChTZWxlY3RRdWVyeU5vZGUuaXMobm9kZSkgfHxcbiAgICAgICAgICAgIEluc2VydFF1ZXJ5Tm9kZS5pcyhub2RlKSB8fFxuICAgICAgICAgICAgVXBkYXRlUXVlcnlOb2RlLmlzKG5vZGUpIHx8XG4gICAgICAgICAgICBEZWxldGVRdWVyeU5vZGUuaXMobm9kZSkgfHxcbiAgICAgICAgICAgIE1lcmdlUXVlcnlOb2RlLmlzKG5vZGUpKTtcbiAgICB9LFxuICAgIGNsb25lV2l0aEVuZE1vZGlmaWVyKG5vZGUsIG1vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIGVuZE1vZGlmaWVyczogbm9kZS5lbmRNb2RpZmllcnNcbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbLi4ubm9kZS5lbmRNb2RpZmllcnMsIG1vZGlmaWVyXSlcbiAgICAgICAgICAgICAgICA6IGZyZWV6ZShbbW9kaWZpZXJdKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhXaGVyZShub2RlLCBvcGVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgd2hlcmU6IG5vZGUud2hlcmVcbiAgICAgICAgICAgICAgICA/IFdoZXJlTm9kZS5jbG9uZVdpdGhPcGVyYXRpb24obm9kZS53aGVyZSwgJ0FuZCcsIG9wZXJhdGlvbilcbiAgICAgICAgICAgICAgICA6IFdoZXJlTm9kZS5jcmVhdGUob3BlcmF0aW9uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhKb2luKG5vZGUsIGpvaW4pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgam9pbnM6IG5vZGUuam9pbnMgPyBmcmVlemUoWy4uLm5vZGUuam9pbnMsIGpvaW5dKSA6IGZyZWV6ZShbam9pbl0pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFJldHVybmluZyhub2RlLCBzZWxlY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIHJldHVybmluZzogbm9kZS5yZXR1cm5pbmdcbiAgICAgICAgICAgICAgICA/IFJldHVybmluZ05vZGUuY2xvbmVXaXRoU2VsZWN0aW9ucyhub2RlLnJldHVybmluZywgc2VsZWN0aW9ucylcbiAgICAgICAgICAgICAgICA6IFJldHVybmluZ05vZGUuY3JlYXRlKHNlbGVjdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aG91dFJldHVybmluZyhub2RlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIHJldHVybmluZzogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aG91dFdoZXJlKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgd2hlcmU6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhFeHBsYWluKG5vZGUsIGZvcm1hdCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICBleHBsYWluOiBFeHBsYWluTm9kZS5jcmVhdGUoZm9ybWF0LCBvcHRpb25zPy50b09wZXJhdGlvbk5vZGUoKSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoVG9wKG5vZGUsIHRvcCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICB0b3AsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoT3V0cHV0KG5vZGUsIHNlbGVjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgb3V0cHV0OiBub2RlLm91dHB1dFxuICAgICAgICAgICAgICAgID8gT3V0cHV0Tm9kZS5jbG9uZVdpdGhTZWxlY3Rpb25zKG5vZGUub3V0cHV0LCBzZWxlY3Rpb25zKVxuICAgICAgICAgICAgICAgIDogT3V0cHV0Tm9kZS5jcmVhdGUoc2VsZWN0aW9ucyksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoT3JkZXJCeUl0ZW1zKG5vZGUsIGl0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIG9yZGVyQnk6IG5vZGUub3JkZXJCeVxuICAgICAgICAgICAgICAgID8gT3JkZXJCeU5vZGUuY2xvbmVXaXRoSXRlbXMobm9kZS5vcmRlckJ5LCBpdGVtcylcbiAgICAgICAgICAgICAgICA6IE9yZGVyQnlOb2RlLmNyZWF0ZShpdGVtcyksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRob3V0T3JkZXJCeShub2RlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIG9yZGVyQnk6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9zZWxlY3QtcXVlcnktbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IEZyb21Ob2RlIH0gZnJvbSAnLi9mcm9tLW5vZGUuanMnO1xuaW1wb3J0IHsgR3JvdXBCeU5vZGUgfSBmcm9tICcuL2dyb3VwLWJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgSGF2aW5nTm9kZSB9IGZyb20gJy4vaGF2aW5nLW5vZGUuanMnO1xuaW1wb3J0IHsgUXVlcnlOb2RlIH0gZnJvbSAnLi9xdWVyeS1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBTZWxlY3RRdWVyeU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1NlbGVjdFF1ZXJ5Tm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUod2l0aE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnU2VsZWN0UXVlcnlOb2RlJyxcbiAgICAgICAgICAgIC4uLih3aXRoTm9kZSAmJiB7IHdpdGg6IHdpdGhOb2RlIH0pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNyZWF0ZUZyb20oZnJvbUl0ZW1zLCB3aXRoTm9kZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdTZWxlY3RRdWVyeU5vZGUnLFxuICAgICAgICAgICAgZnJvbTogRnJvbU5vZGUuY3JlYXRlKGZyb21JdGVtcyksXG4gICAgICAgICAgICAuLi4od2l0aE5vZGUgJiYgeyB3aXRoOiB3aXRoTm9kZSB9KSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhTZWxlY3Rpb25zKHNlbGVjdCwgc2VsZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLnNlbGVjdCxcbiAgICAgICAgICAgIHNlbGVjdGlvbnM6IHNlbGVjdC5zZWxlY3Rpb25zXG4gICAgICAgICAgICAgICAgPyBmcmVlemUoWy4uLnNlbGVjdC5zZWxlY3Rpb25zLCAuLi5zZWxlY3Rpb25zXSlcbiAgICAgICAgICAgICAgICA6IGZyZWV6ZShzZWxlY3Rpb25zKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhEaXN0aW5jdE9uKHNlbGVjdCwgZXhwcmVzc2lvbnMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5zZWxlY3QsXG4gICAgICAgICAgICBkaXN0aW5jdE9uOiBzZWxlY3QuZGlzdGluY3RPblxuICAgICAgICAgICAgICAgID8gZnJlZXplKFsuLi5zZWxlY3QuZGlzdGluY3RPbiwgLi4uZXhwcmVzc2lvbnNdKVxuICAgICAgICAgICAgICAgIDogZnJlZXplKGV4cHJlc3Npb25zKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhGcm9udE1vZGlmaWVyKHNlbGVjdCwgbW9kaWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5zZWxlY3QsXG4gICAgICAgICAgICBmcm9udE1vZGlmaWVyczogc2VsZWN0LmZyb250TW9kaWZpZXJzXG4gICAgICAgICAgICAgICAgPyBmcmVlemUoWy4uLnNlbGVjdC5mcm9udE1vZGlmaWVycywgbW9kaWZpZXJdKVxuICAgICAgICAgICAgICAgIDogZnJlZXplKFttb2RpZmllcl0pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIC8vIFRPRE86IHJlbW92ZSBpbiB2MC4yOVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBgUXVlcnlOb2RlLmNsb25lV2l0aG91dE9yZGVyQnlgIGluc3RlYWQuXG4gICAgICovXG4gICAgY2xvbmVXaXRoT3JkZXJCeUl0ZW1zOiAobm9kZSwgaXRlbXMpID0+IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhPcmRlckJ5SXRlbXMobm9kZSwgaXRlbXMpLFxuICAgIGNsb25lV2l0aEdyb3VwQnlJdGVtcyhzZWxlY3ROb2RlLCBpdGVtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLnNlbGVjdE5vZGUsXG4gICAgICAgICAgICBncm91cEJ5OiBzZWxlY3ROb2RlLmdyb3VwQnlcbiAgICAgICAgICAgICAgICA/IEdyb3VwQnlOb2RlLmNsb25lV2l0aEl0ZW1zKHNlbGVjdE5vZGUuZ3JvdXBCeSwgaXRlbXMpXG4gICAgICAgICAgICAgICAgOiBHcm91cEJ5Tm9kZS5jcmVhdGUoaXRlbXMpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aExpbWl0KHNlbGVjdE5vZGUsIGxpbWl0KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uc2VsZWN0Tm9kZSxcbiAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aE9mZnNldChzZWxlY3ROb2RlLCBvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5zZWxlY3ROb2RlLFxuICAgICAgICAgICAgb2Zmc2V0LFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aEZldGNoKHNlbGVjdE5vZGUsIGZldGNoKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uc2VsZWN0Tm9kZSxcbiAgICAgICAgICAgIGZldGNoLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aEhhdmluZyhzZWxlY3ROb2RlLCBvcGVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5zZWxlY3ROb2RlLFxuICAgICAgICAgICAgaGF2aW5nOiBzZWxlY3ROb2RlLmhhdmluZ1xuICAgICAgICAgICAgICAgID8gSGF2aW5nTm9kZS5jbG9uZVdpdGhPcGVyYXRpb24oc2VsZWN0Tm9kZS5oYXZpbmcsICdBbmQnLCBvcGVyYXRpb24pXG4gICAgICAgICAgICAgICAgOiBIYXZpbmdOb2RlLmNyZWF0ZShvcGVyYXRpb24pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFNldE9wZXJhdGlvbnMoc2VsZWN0Tm9kZSwgc2V0T3BlcmF0aW9ucykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLnNlbGVjdE5vZGUsXG4gICAgICAgICAgICBzZXRPcGVyYXRpb25zOiBzZWxlY3ROb2RlLnNldE9wZXJhdGlvbnNcbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbLi4uc2VsZWN0Tm9kZS5zZXRPcGVyYXRpb25zLCAuLi5zZXRPcGVyYXRpb25zXSlcbiAgICAgICAgICAgICAgICA6IGZyZWV6ZShbLi4uc2V0T3BlcmF0aW9uc10pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aG91dFNlbGVjdGlvbnMoc2VsZWN0KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uc2VsZWN0LFxuICAgICAgICAgICAgc2VsZWN0aW9uczogW10sXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRob3V0TGltaXQoc2VsZWN0KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uc2VsZWN0LFxuICAgICAgICAgICAgbGltaXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhvdXRPZmZzZXQoc2VsZWN0KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uc2VsZWN0LFxuICAgICAgICAgICAgb2Zmc2V0OiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgLy8gVE9ETzogcmVtb3ZlIGluIHYwLjI5XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIGBRdWVyeU5vZGUuY2xvbmVXaXRob3V0T3JkZXJCeWAgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBjbG9uZVdpdGhvdXRPcmRlckJ5OiAobm9kZSkgPT4gUXVlcnlOb2RlLmNsb25lV2l0aG91dE9yZGVyQnkobm9kZSksXG4gICAgY2xvbmVXaXRob3V0R3JvdXBCeShzZWxlY3QpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5zZWxlY3QsXG4gICAgICAgICAgICBncm91cEJ5OiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vam9pbi1idWlsZGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgSm9pbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9qb2luLW5vZGUuanMnO1xuaW1wb3J0IHsgUmF3Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3Jhdy1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24sIHBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24sIH0gZnJvbSAnLi4vcGFyc2VyL2JpbmFyeS1vcGVyYXRpb24tcGFyc2VyLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBKb2luQnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgb24oLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IEpvaW5CdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgam9pbk5vZGU6IEpvaW5Ob2RlLmNsb25lV2l0aE9uKHRoaXMuI3Byb3BzLmpvaW5Ob2RlLCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uKGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEp1c3QgbGlrZSB7QGxpbmsgV2hlcmVJbnRlcmZhY2Uud2hlcmVSZWZ9IGJ1dCBhZGRzIGFuIGl0ZW0gdG8gdGhlIGpvaW4nc1xuICAgICAqIGBvbmAgY2xhdXNlIGluc3RlYWQuXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIFdoZXJlSW50ZXJmYWNlLndoZXJlUmVmfSBmb3IgZG9jdW1lbnRhdGlvbiBhbmQgZXhhbXBsZXMuXG4gICAgICovXG4gICAgb25SZWYobGhzLCBvcCwgcmhzKSB7XG4gICAgICAgIHJldHVybiBuZXcgSm9pbkJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBqb2luTm9kZTogSm9pbk5vZGUuY2xvbmVXaXRoT24odGhpcy4jcHJvcHMuam9pbk5vZGUsIHBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24obGhzLCBvcCwgcmhzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGBvbiB0cnVlYC5cbiAgICAgKi9cbiAgICBvblRydWUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgSm9pbkJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBqb2luTm9kZTogSm9pbk5vZGUuY2xvbmVXaXRoT24odGhpcy4jcHJvcHMuam9pbk5vZGUsIFJhd05vZGUuY3JlYXRlV2l0aFNxbCgndHJ1ZScpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuam9pbk5vZGU7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9wYXJ0aXRpb24tYnktaXRlbS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBhcnRpdGlvbkJ5SXRlbU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1BhcnRpdGlvbkJ5SXRlbU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHBhcnRpdGlvbkJ5KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1BhcnRpdGlvbkJ5SXRlbU5vZGUnLFxuICAgICAgICAgICAgcGFydGl0aW9uQnksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcGFydGl0aW9uLWJ5LXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IFBhcnRpdGlvbkJ5SXRlbU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9wYXJ0aXRpb24tYnktaXRlbS1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbk9yTGlzdCwgfSBmcm9tICcuL3JlZmVyZW5jZS1wYXJzZXIuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFydGl0aW9uQnkocGFydGl0aW9uQnkpIHtcbiAgICByZXR1cm4gcGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uT3JMaXN0KHBhcnRpdGlvbkJ5KS5tYXAoUGFydGl0aW9uQnlJdGVtTm9kZS5jcmVhdGUpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vdmVyLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBPdmVyTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL292ZXItbm9kZS5qcyc7XG5pbXBvcnQgeyBRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlT3JkZXJCeSwgfSBmcm9tICcuLi9wYXJzZXIvb3JkZXItYnktcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlUGFydGl0aW9uQnksIH0gZnJvbSAnLi4vcGFyc2VyL3BhcnRpdGlvbi1ieS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIE92ZXJCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBvcmRlckJ5KC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPdmVyQnVpbGRlcih7XG4gICAgICAgICAgICBvdmVyTm9kZTogT3Zlck5vZGUuY2xvbmVXaXRoT3JkZXJCeUl0ZW1zKHRoaXMuI3Byb3BzLm92ZXJOb2RlLCBwYXJzZU9yZGVyQnkoYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xlYXJPcmRlckJ5KCkge1xuICAgICAgICByZXR1cm4gbmV3IE92ZXJCdWlsZGVyKHtcbiAgICAgICAgICAgIG92ZXJOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRob3V0T3JkZXJCeSh0aGlzLiNwcm9wcy5vdmVyTm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBwYXJ0aXRpb25CeShwYXJ0aXRpb25CeSkge1xuICAgICAgICByZXR1cm4gbmV3IE92ZXJCdWlsZGVyKHtcbiAgICAgICAgICAgIG92ZXJOb2RlOiBPdmVyTm9kZS5jbG9uZVdpdGhQYXJ0aXRpb25CeUl0ZW1zKHRoaXMuI3Byb3BzLm92ZXJOb2RlLCBwYXJzZVBhcnRpdGlvbkJ5KHBhcnRpdGlvbkJ5KSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLm92ZXJOb2RlO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vc2VsZWN0aW9uLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBSZWZlcmVuY2VOb2RlIH0gZnJvbSAnLi9yZWZlcmVuY2Utbm9kZS5qcyc7XG5pbXBvcnQgeyBTZWxlY3RBbGxOb2RlIH0gZnJvbSAnLi9zZWxlY3QtYWxsLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFNlbGVjdGlvbk5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1NlbGVjdGlvbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdTZWxlY3Rpb25Ob2RlJyxcbiAgICAgICAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNyZWF0ZVNlbGVjdEFsbCgpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnU2VsZWN0aW9uTm9kZScsXG4gICAgICAgICAgICBzZWxlY3Rpb246IFNlbGVjdEFsbE5vZGUuY3JlYXRlKCksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY3JlYXRlU2VsZWN0QWxsRnJvbVRhYmxlKHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1NlbGVjdGlvbk5vZGUnLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiBSZWZlcmVuY2VOb2RlLmNyZWF0ZVNlbGVjdEFsbCh0YWJsZSksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vc2VsZWN0LXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzUmVhZG9ubHlBcnJheSwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvc2VsZWN0aW9uLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VBbGlhc2VkU3RyaW5nUmVmZXJlbmNlIH0gZnJvbSAnLi9yZWZlcmVuY2UtcGFyc2VyLmpzJztcbmltcG9ydCB7IGlzRHluYW1pY1JlZmVyZW5jZUJ1aWxkZXIsIH0gZnJvbSAnLi4vZHluYW1pYy9keW5hbWljLXJlZmVyZW5jZS1idWlsZGVyLmpzJztcbmltcG9ydCB7IHBhcnNlQWxpYXNlZEV4cHJlc3Npb24sIH0gZnJvbSAnLi9leHByZXNzaW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVRhYmxlIH0gZnJvbSAnLi90YWJsZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgZXhwcmVzc2lvbkJ1aWxkZXIsIH0gZnJvbSAnLi4vZXhwcmVzc2lvbi9leHByZXNzaW9uLWJ1aWxkZXIuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2VsZWN0QXJnKHNlbGVjdGlvbikge1xuICAgIGlmIChpc0Z1bmN0aW9uKHNlbGVjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlU2VsZWN0QXJnKHNlbGVjdGlvbihleHByZXNzaW9uQnVpbGRlcigpKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUmVhZG9ubHlBcnJheShzZWxlY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb24ubWFwKChpdCkgPT4gcGFyc2VTZWxlY3RFeHByZXNzaW9uKGl0KSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gW3BhcnNlU2VsZWN0RXhwcmVzc2lvbihzZWxlY3Rpb24pXTtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZVNlbGVjdEV4cHJlc3Npb24oc2VsZWN0aW9uKSB7XG4gICAgaWYgKGlzU3RyaW5nKHNlbGVjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIFNlbGVjdGlvbk5vZGUuY3JlYXRlKHBhcnNlQWxpYXNlZFN0cmluZ1JlZmVyZW5jZShzZWxlY3Rpb24pKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNEeW5hbWljUmVmZXJlbmNlQnVpbGRlcihzZWxlY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBTZWxlY3Rpb25Ob2RlLmNyZWF0ZShzZWxlY3Rpb24udG9PcGVyYXRpb25Ob2RlKCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFNlbGVjdGlvbk5vZGUuY3JlYXRlKHBhcnNlQWxpYXNlZEV4cHJlc3Npb24oc2VsZWN0aW9uKSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2VsZWN0QWxsKHRhYmxlKSB7XG4gICAgaWYgKCF0YWJsZSkge1xuICAgICAgICByZXR1cm4gW1NlbGVjdGlvbk5vZGUuY3JlYXRlU2VsZWN0QWxsKCldO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRhYmxlKSkge1xuICAgICAgICByZXR1cm4gdGFibGUubWFwKHBhcnNlU2VsZWN0QWxsQXJnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBbcGFyc2VTZWxlY3RBbGxBcmcodGFibGUpXTtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZVNlbGVjdEFsbEFyZyh0YWJsZSkge1xuICAgIGlmIChpc1N0cmluZyh0YWJsZSkpIHtcbiAgICAgICAgcmV0dXJuIFNlbGVjdGlvbk5vZGUuY3JlYXRlU2VsZWN0QWxsRnJvbVRhYmxlKHBhcnNlVGFibGUodGFibGUpKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHZhbHVlIHNlbGVjdEFsbCBleHByZXNzaW9uOiAke0pTT04uc3RyaW5naWZ5KHRhYmxlKX1gKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vdmFsdWVzLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVmFsdWVzTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnVmFsdWVzTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUodmFsdWVzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1ZhbHVlc05vZGUnLFxuICAgICAgICAgICAgdmFsdWVzOiBmcmVlemUodmFsdWVzKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kZWZhdWx0LWluc2VydC12YWx1ZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRJbnNlcnRWYWx1ZU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0RlZmF1bHRJbnNlcnRWYWx1ZU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdEZWZhdWx0SW5zZXJ0VmFsdWVOb2RlJyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9pbnNlcnQtdmFsdWVzLXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IENvbHVtbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jb2x1bW4tbm9kZS5qcyc7XG5pbXBvcnQgeyBQcmltaXRpdmVWYWx1ZUxpc3ROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcHJpbWl0aXZlLXZhbHVlLWxpc3Qtbm9kZS5qcyc7XG5pbXBvcnQgeyBWYWx1ZUxpc3ROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvdmFsdWUtbGlzdC1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSwgaXNGdW5jdGlvbiwgaXNSZWFkb25seUFycmF5LCBpc1VuZGVmaW5lZCwgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBwYXJzZVZhbHVlRXhwcmVzc2lvbiB9IGZyb20gJy4vdmFsdWUtcGFyc2VyLmpzJztcbmltcG9ydCB7IFZhbHVlc05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS92YWx1ZXMtbm9kZS5qcyc7XG5pbXBvcnQgeyBpc0V4cHJlc3Npb25PckZhY3RvcnkgfSBmcm9tICcuL2V4cHJlc3Npb24tcGFyc2VyLmpzJztcbmltcG9ydCB7IERlZmF1bHRJbnNlcnRWYWx1ZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9kZWZhdWx0LWluc2VydC12YWx1ZS1ub2RlLmpzJztcbmltcG9ydCB7IGV4cHJlc3Npb25CdWlsZGVyLCB9IGZyb20gJy4uL2V4cHJlc3Npb24vZXhwcmVzc2lvbi1idWlsZGVyLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUluc2VydEV4cHJlc3Npb24oYXJnKSB7XG4gICAgY29uc3Qgb2JqZWN0T3JMaXN0ID0gaXNGdW5jdGlvbihhcmcpID8gYXJnKGV4cHJlc3Npb25CdWlsZGVyKCkpIDogYXJnO1xuICAgIGNvbnN0IGxpc3QgPSBpc1JlYWRvbmx5QXJyYXkob2JqZWN0T3JMaXN0KVxuICAgICAgICA/IG9iamVjdE9yTGlzdFxuICAgICAgICA6IGZyZWV6ZShbb2JqZWN0T3JMaXN0XSk7XG4gICAgcmV0dXJuIHBhcnNlSW5zZXJ0Q29sdW1uc0FuZFZhbHVlcyhsaXN0KTtcbn1cbmZ1bmN0aW9uIHBhcnNlSW5zZXJ0Q29sdW1uc0FuZFZhbHVlcyhyb3dzKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IHBhcnNlQ29sdW1uTmFtZXNBbmRJbmRleGVzKHJvd3MpO1xuICAgIHJldHVybiBbXG4gICAgICAgIGZyZWV6ZShbLi4uY29sdW1ucy5rZXlzKCldLm1hcChDb2x1bW5Ob2RlLmNyZWF0ZSkpLFxuICAgICAgICBWYWx1ZXNOb2RlLmNyZWF0ZShyb3dzLm1hcCgocm93KSA9PiBwYXJzZVJvd1ZhbHVlcyhyb3csIGNvbHVtbnMpKSksXG4gICAgXTtcbn1cbmZ1bmN0aW9uIHBhcnNlQ29sdW1uTmFtZXNBbmRJbmRleGVzKHJvd3MpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICAgICAgY29uc3QgY29scyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcbiAgICAgICAgICAgIGlmICghY29sdW1ucy5oYXMoY29sKSAmJiByb3dbY29sXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5zZXQoY29sLCBjb2x1bW5zLnNpemUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW5zO1xufVxuZnVuY3Rpb24gcGFyc2VSb3dWYWx1ZXMocm93LCBjb2x1bW5zKSB7XG4gICAgY29uc3Qgcm93Q29sdW1ucyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgY29uc3Qgcm93VmFsdWVzID0gQXJyYXkuZnJvbSh7XG4gICAgICAgIGxlbmd0aDogY29sdW1ucy5zaXplLFxuICAgIH0pO1xuICAgIGxldCBoYXNVbmRlZmluZWRPckNvbXBsZXhDb2x1bW5zID0gZmFsc2U7XG4gICAgbGV0IGluZGV4ZWRSb3dDb2x1bW5zID0gcm93Q29sdW1ucy5sZW5ndGg7XG4gICAgZm9yIChjb25zdCBjb2wgb2Ygcm93Q29sdW1ucykge1xuICAgICAgICBjb25zdCBjb2x1bW5JZHggPSBjb2x1bW5zLmdldChjb2wpO1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQoY29sdW1uSWR4KSkge1xuICAgICAgICAgICAgaW5kZXhlZFJvd0NvbHVtbnMtLTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm93W2NvbF07XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkgfHwgaXNFeHByZXNzaW9uT3JGYWN0b3J5KHZhbHVlKSkge1xuICAgICAgICAgICAgaGFzVW5kZWZpbmVkT3JDb21wbGV4Q29sdW1ucyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcm93VmFsdWVzW2NvbHVtbklkeF0gPSB2YWx1ZTtcbiAgICB9XG4gICAgY29uc3QgaGFzTWlzc2luZ0NvbHVtbnMgPSBpbmRleGVkUm93Q29sdW1ucyA8IGNvbHVtbnMuc2l6ZTtcbiAgICBpZiAoaGFzTWlzc2luZ0NvbHVtbnMgfHwgaGFzVW5kZWZpbmVkT3JDb21wbGV4Q29sdW1ucykge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBEZWZhdWx0SW5zZXJ0VmFsdWVOb2RlLmNyZWF0ZSgpO1xuICAgICAgICByZXR1cm4gVmFsdWVMaXN0Tm9kZS5jcmVhdGUocm93VmFsdWVzLm1hcCgoaXQpID0+IGlzVW5kZWZpbmVkKGl0KSA/IGRlZmF1bHRWYWx1ZSA6IHBhcnNlVmFsdWVFeHByZXNzaW9uKGl0KSkpO1xuICAgIH1cbiAgICByZXR1cm4gUHJpbWl0aXZlVmFsdWVMaXN0Tm9kZS5jcmVhdGUocm93VmFsdWVzKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vY29sdW1uLXVwZGF0ZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENvbHVtblVwZGF0ZU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0NvbHVtblVwZGF0ZU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGNvbHVtbiwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQ29sdW1uVXBkYXRlTm9kZScsXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi91cGRhdGUtc2V0LXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IENvbHVtbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jb2x1bW4tbm9kZS5qcyc7XG5pbXBvcnQgeyBDb2x1bW5VcGRhdGVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY29sdW1uLXVwZGF0ZS1ub2RlLmpzJztcbmltcG9ydCB7IGV4cHJlc3Npb25CdWlsZGVyLCB9IGZyb20gJy4uL2V4cHJlc3Npb24vZXhwcmVzc2lvbi1idWlsZGVyLmpzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBwYXJzZVZhbHVlRXhwcmVzc2lvbiB9IGZyb20gJy4vdmFsdWUtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbiwgfSBmcm9tICcuL3JlZmVyZW5jZS1wYXJzZXIuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXBkYXRlKC4uLmFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIENvbHVtblVwZGF0ZU5vZGUuY3JlYXRlKHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbihhcmdzWzBdKSwgcGFyc2VWYWx1ZUV4cHJlc3Npb24oYXJnc1sxXSkpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VVcGRhdGVPYmplY3RFeHByZXNzaW9uKGFyZ3NbMF0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXBkYXRlT2JqZWN0RXhwcmVzc2lvbih1cGRhdGUpIHtcbiAgICBjb25zdCB1cGRhdGVPYmogPSBpc0Z1bmN0aW9uKHVwZGF0ZSkgPyB1cGRhdGUoZXhwcmVzc2lvbkJ1aWxkZXIoKSkgOiB1cGRhdGU7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHVwZGF0ZU9iailcbiAgICAgICAgLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIHJldHVybiBDb2x1bW5VcGRhdGVOb2RlLmNyZWF0ZShDb2x1bW5Ob2RlLmNyZWF0ZShrZXkpLCBwYXJzZVZhbHVlRXhwcmVzc2lvbih2YWx1ZSkpO1xuICAgIH0pO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vbi1kdXBsaWNhdGUta2V5LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgT25EdXBsaWNhdGVLZXlOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdPbkR1cGxpY2F0ZUtleU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHVwZGF0ZXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnT25EdXBsaWNhdGVLZXlOb2RlJyxcbiAgICAgICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vaW5zZXJ0LXJlc3VsdC5kLnRzXCIgLz5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiBhbiBpbnNlcnQgcXVlcnkuXG4gKlxuICogSWYgdGhlIHRhYmxlIGhhcyBhbiBhdXRvIGluY3JlbWVudGluZyBwcmltYXJ5IGtleSB7QGxpbmsgaW5zZXJ0SWR9IHdpbGwgaG9sZFxuICogdGhlIGdlbmVyYXRlZCBpZCBvbiBkaWFsZWN0cyB0aGF0IHN1cHBvcnQgaXQuIEZvciBleGFtcGxlIFBvc3RncmVTUUwgZG9lc24ndFxuICogcmV0dXJuIHRoZSBpZCBieSBkZWZhdWx0IGFuZCB7QGxpbmsgaW5zZXJ0SWR9IGlzIHVuZGVmaW5lZC4gT24gUG9zdGdyZVNRTCB5b3VcbiAqIG5lZWQgdG8gdXNlIHtAbGluayBSZXR1cm5pbmdJbnRlcmZhY2UucmV0dXJuaW5nfSBvciB7QGxpbmsgUmV0dXJuaW5nSW50ZXJmYWNlLnJldHVybmluZ0FsbH1cbiAqIHRvIGdldCBvdXQgdGhlIGluc2VydGVkIGlkLlxuICpcbiAqIHtAbGluayBudW1JbnNlcnRlZE9yVXBkYXRlZFJvd3N9IGhvbGRzIHRoZSBudW1iZXIgb2YgKGFjdHVhbGx5KSBpbnNlcnRlZCByb3dzLlxuICogT24gTXlTUUwsIHVwZGF0ZWQgcm93cyBhcmUgY291bnRlZCB0d2ljZSB3aGVuIHVzaW5nIGBvbiBkdXBsaWNhdGUga2V5IHVwZGF0ZWAuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB0eXBlIHsgTmV3UGVyc29uIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAqXG4gKiBhc3luYyBmdW5jdGlvbiBpbnNlcnRQZXJzb24ocGVyc29uOiBOZXdQZXJzb24pIHtcbiAqICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgICAuaW5zZXJ0SW50bygncGVyc29uJylcbiAqICAgICAudmFsdWVzKHBlcnNvbilcbiAqICAgICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICpcbiAqICAgY29uc29sZS5sb2cocmVzdWx0Lmluc2VydElkKSAvLyByZWxldmFudCBvbiBNeVNRTFxuICogICBjb25zb2xlLmxvZyhyZXN1bHQubnVtSW5zZXJ0ZWRPclVwZGF0ZWRSb3dzKSAvLyBhbHdheXMgcmVsZXZhbnRcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgSW5zZXJ0UmVzdWx0IHtcbiAgICAvKipcbiAgICAgKiBUaGUgYXV0byBpbmNyZW1lbnRpbmcgcHJpbWFyeSBrZXkgb2YgdGhlIGluc2VydGVkIHJvdy5cbiAgICAgKlxuICAgICAqIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVuZGVmaW5lZCB3aGVuIHRoZSBxdWVyeSBjb250YWlucyBhbiBgb24gY29uZmxpY3RgXG4gICAgICogY2xhdXNlIHRoYXQgbWFrZXMgdGhlIHF1ZXJ5IHN1Y2NlZWQgZXZlbiB3aGVuIG5vdGhpbmcgZ2V0cyBpbnNlcnRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgYWx3YXlzIHVuZGVmaW5lZCBvbiBkaWFsZWN0cyBsaWtlIFBvc3RncmVTUUwgdGhhdFxuICAgICAqIGRvbid0IHJldHVybiB0aGUgaW5zZXJ0ZWQgaWQgYnkgZGVmYXVsdC4gT24gdGhvc2UgZGlhbGVjdHMgeW91IG5lZWRcbiAgICAgKiB0byB1c2UgdGhlIHtAbGluayBSZXR1cm5pbmdJbnRlcmZhY2UucmV0dXJuaW5nIHwgcmV0dXJuaW5nfSBtZXRob2QuXG4gICAgICovXG4gICAgaW5zZXJ0SWQ7XG4gICAgLyoqXG4gICAgICogQWZmZWN0ZWQgcm93cyBjb3VudC5cbiAgICAgKi9cbiAgICBudW1JbnNlcnRlZE9yVXBkYXRlZFJvd3M7XG4gICAgY29uc3RydWN0b3IoaW5zZXJ0SWQsIG51bUluc2VydGVkT3JVcGRhdGVkUm93cykge1xuICAgICAgICB0aGlzLmluc2VydElkID0gaW5zZXJ0SWQ7XG4gICAgICAgIHRoaXMubnVtSW5zZXJ0ZWRPclVwZGF0ZWRSb3dzID0gbnVtSW5zZXJ0ZWRPclVwZGF0ZWRSb3dzO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vbm8tcmVzdWx0LWVycm9yLmQudHNcIiAvPlxuZXhwb3J0IGNsYXNzIE5vUmVzdWx0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgLyoqXG4gICAgICogVGhlIG9wZXJhdGlvbiBub2RlIHRyZWUgb2YgdGhlIHF1ZXJ5IHRoYXQgd2FzIGV4ZWN1dGVkLlxuICAgICAqL1xuICAgIG5vZGU7XG4gICAgY29uc3RydWN0b3Iobm9kZSkge1xuICAgICAgICBzdXBlcignbm8gcmVzdWx0Jyk7XG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9SZXN1bHRFcnJvckNvbnN0cnVjdG9yKGZuKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmbiwgJ3Byb3RvdHlwZScpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vbi1jb25mbGljdC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgV2hlcmVOb2RlIH0gZnJvbSAnLi93aGVyZS1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBPbkNvbmZsaWN0Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnT25Db25mbGljdE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdPbkNvbmZsaWN0Tm9kZScsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoKG5vZGUsIHByb3BzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aEluZGV4V2hlcmUobm9kZSwgb3BlcmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIGluZGV4V2hlcmU6IG5vZGUuaW5kZXhXaGVyZVxuICAgICAgICAgICAgICAgID8gV2hlcmVOb2RlLmNsb25lV2l0aE9wZXJhdGlvbihub2RlLmluZGV4V2hlcmUsICdBbmQnLCBvcGVyYXRpb24pXG4gICAgICAgICAgICAgICAgOiBXaGVyZU5vZGUuY3JlYXRlKG9wZXJhdGlvbiksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoSW5kZXhPcldoZXJlKG5vZGUsIG9wZXJhdGlvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICBpbmRleFdoZXJlOiBub2RlLmluZGV4V2hlcmVcbiAgICAgICAgICAgICAgICA/IFdoZXJlTm9kZS5jbG9uZVdpdGhPcGVyYXRpb24obm9kZS5pbmRleFdoZXJlLCAnT3InLCBvcGVyYXRpb24pXG4gICAgICAgICAgICAgICAgOiBXaGVyZU5vZGUuY3JlYXRlKG9wZXJhdGlvbiksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoVXBkYXRlV2hlcmUobm9kZSwgb3BlcmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIHVwZGF0ZVdoZXJlOiBub2RlLnVwZGF0ZVdoZXJlXG4gICAgICAgICAgICAgICAgPyBXaGVyZU5vZGUuY2xvbmVXaXRoT3BlcmF0aW9uKG5vZGUudXBkYXRlV2hlcmUsICdBbmQnLCBvcGVyYXRpb24pXG4gICAgICAgICAgICAgICAgOiBXaGVyZU5vZGUuY3JlYXRlKG9wZXJhdGlvbiksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoVXBkYXRlT3JXaGVyZShub2RlLCBvcGVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgdXBkYXRlV2hlcmU6IG5vZGUudXBkYXRlV2hlcmVcbiAgICAgICAgICAgICAgICA/IFdoZXJlTm9kZS5jbG9uZVdpdGhPcGVyYXRpb24obm9kZS51cGRhdGVXaGVyZSwgJ09yJywgb3BlcmF0aW9uKVxuICAgICAgICAgICAgICAgIDogV2hlcmVOb2RlLmNyZWF0ZShvcGVyYXRpb24pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aG91dEluZGV4V2hlcmUobm9kZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICBpbmRleFdoZXJlOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRob3V0VXBkYXRlV2hlcmUobm9kZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICB1cGRhdGVXaGVyZTogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL29uLWNvbmZsaWN0LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBDb2x1bW5Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9pZGVudGlmaWVyLW5vZGUuanMnO1xuaW1wb3J0IHsgT25Db25mbGljdE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vbi1jb25mbGljdC1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24sIHBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24sIH0gZnJvbSAnLi4vcGFyc2VyL2JpbmFyeS1vcGVyYXRpb24tcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlVXBkYXRlT2JqZWN0RXhwcmVzc2lvbiwgfSBmcm9tICcuLi9wYXJzZXIvdXBkYXRlLXNldC1wYXJzZXIuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIE9uQ29uZmxpY3RCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGEgc2luZ2xlIGNvbHVtbiBhcyB0aGUgY29uZmxpY3QgdGFyZ2V0LlxuICAgICAqXG4gICAgICogQWxzbyBzZWUgdGhlIHtAbGluayBjb2x1bW5zfSwge0BsaW5rIGNvbnN0cmFpbnR9IGFuZCB7QGxpbmsgZXhwcmVzc2lvbn1cbiAgICAgKiBtZXRob2RzIGZvciBhbHRlcm5hdGl2ZSB3YXlzIHRvIHNwZWNpZnkgdGhlIGNvbmZsaWN0IHRhcmdldC5cbiAgICAgKi9cbiAgICBjb2x1bW4oY29sdW1uKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbk5vZGUgPSBDb2x1bW5Ob2RlLmNyZWF0ZShjb2x1bW4pO1xuICAgICAgICByZXR1cm4gbmV3IE9uQ29uZmxpY3RCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgb25Db25mbGljdE5vZGU6IE9uQ29uZmxpY3ROb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZSwge1xuICAgICAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuI3Byb3BzLm9uQ29uZmxpY3ROb2RlLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgPyBmcmVlemUoWy4uLnRoaXMuI3Byb3BzLm9uQ29uZmxpY3ROb2RlLmNvbHVtbnMsIGNvbHVtbk5vZGVdKVxuICAgICAgICAgICAgICAgICAgICA6IGZyZWV6ZShbY29sdW1uTm9kZV0pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGEgbGlzdCBvZiBjb2x1bW5zIGFzIHRoZSBjb25mbGljdCB0YXJnZXQuXG4gICAgICpcbiAgICAgKiBBbHNvIHNlZSB0aGUge0BsaW5rIGNvbHVtbn0sIHtAbGluayBjb25zdHJhaW50fSBhbmQge0BsaW5rIGV4cHJlc3Npb259XG4gICAgICogbWV0aG9kcyBmb3IgYWx0ZXJuYXRpdmUgd2F5cyB0byBzcGVjaWZ5IHRoZSBjb25mbGljdCB0YXJnZXQuXG4gICAgICovXG4gICAgY29sdW1ucyhjb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbk5vZGVzID0gY29sdW1ucy5tYXAoQ29sdW1uTm9kZS5jcmVhdGUpO1xuICAgICAgICByZXR1cm4gbmV3IE9uQ29uZmxpY3RCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgb25Db25mbGljdE5vZGU6IE9uQ29uZmxpY3ROb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZSwge1xuICAgICAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuI3Byb3BzLm9uQ29uZmxpY3ROb2RlLmNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgPyBmcmVlemUoWy4uLnRoaXMuI3Byb3BzLm9uQ29uZmxpY3ROb2RlLmNvbHVtbnMsIC4uLmNvbHVtbk5vZGVzXSlcbiAgICAgICAgICAgICAgICAgICAgOiBmcmVlemUoY29sdW1uTm9kZXMpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGEgc3BlY2lmaWMgY29uc3RyYWludCBieSBuYW1lIGFzIHRoZSBjb25mbGljdCB0YXJnZXQuXG4gICAgICpcbiAgICAgKiBBbHNvIHNlZSB0aGUge0BsaW5rIGNvbHVtbn0sIHtAbGluayBjb2x1bW5zfSBhbmQge0BsaW5rIGV4cHJlc3Npb259XG4gICAgICogbWV0aG9kcyBmb3IgYWx0ZXJuYXRpdmUgd2F5cyB0byBzcGVjaWZ5IHRoZSBjb25mbGljdCB0YXJnZXQuXG4gICAgICovXG4gICAgY29uc3RyYWludChjb25zdHJhaW50TmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9uQ29uZmxpY3RCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgb25Db25mbGljdE5vZGU6IE9uQ29uZmxpY3ROb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZSwge1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQ6IElkZW50aWZpZXJOb2RlLmNyZWF0ZShjb25zdHJhaW50TmFtZSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZnkgYW4gZXhwcmVzc2lvbiBhcyB0aGUgY29uZmxpY3QgdGFyZ2V0LlxuICAgICAqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCBpZiB0aGUgdW5pcXVlIGluZGV4IGlzIGFuIGV4cHJlc3Npb24gaW5kZXguXG4gICAgICpcbiAgICAgKiBBbHNvIHNlZSB0aGUge0BsaW5rIGNvbHVtbn0sIHtAbGluayBjb2x1bW5zfSBhbmQge0BsaW5rIGNvbnN0cmFpbnR9XG4gICAgICogbWV0aG9kcyBmb3IgYWx0ZXJuYXRpdmUgd2F5cyB0byBzcGVjaWZ5IHRoZSBjb25mbGljdCB0YXJnZXQuXG4gICAgICovXG4gICAgZXhwcmVzc2lvbihleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBuZXcgT25Db25mbGljdEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBvbkNvbmZsaWN0Tm9kZTogT25Db25mbGljdE5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm9uQ29uZmxpY3ROb2RlLCB7XG4gICAgICAgICAgICAgICAgaW5kZXhFeHByZXNzaW9uOiBleHByZXNzaW9uLnRvT3BlcmF0aW9uTm9kZSgpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3aGVyZSguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgT25Db25mbGljdEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBvbkNvbmZsaWN0Tm9kZTogT25Db25mbGljdE5vZGUuY2xvbmVXaXRoSW5kZXhXaGVyZSh0aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZSwgcGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbihhcmdzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3aGVyZVJlZihsaHMsIG9wLCByaHMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPbkNvbmZsaWN0QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG9uQ29uZmxpY3ROb2RlOiBPbkNvbmZsaWN0Tm9kZS5jbG9uZVdpdGhJbmRleFdoZXJlKHRoaXMuI3Byb3BzLm9uQ29uZmxpY3ROb2RlLCBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uKGxocywgb3AsIHJocykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xlYXJXaGVyZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPbkNvbmZsaWN0QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG9uQ29uZmxpY3ROb2RlOiBPbkNvbmZsaWN0Tm9kZS5jbG9uZVdpdGhvdXRJbmRleFdoZXJlKHRoaXMuI3Byb3BzLm9uQ29uZmxpY3ROb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIFwiZG8gbm90aGluZ1wiIGNvbmZsaWN0IGFjdGlvbi5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCBpZCA9IDFcbiAgICAgKiBjb25zdCBmaXJzdF9uYW1lID0gJ0pvaG4nXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAudmFsdWVzKHtcdTAwQTBmaXJzdF9uYW1lLCBpZCB9KVxuICAgICAqICAgLm9uQ29uZmxpY3QoKG9jKSA9PiBvY1xuICAgICAqICAgICAuY29sdW1uKCdpZCcpXG4gICAgICogICAgIC5kb05vdGhpbmcoKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IGludG8gXCJwZXJzb25cIiAoXCJmaXJzdF9uYW1lXCIsIFwiaWRcIilcbiAgICAgKiB2YWx1ZXMgKCQxLCAkMilcbiAgICAgKiBvbiBjb25mbGljdCAoXCJpZFwiKSBkbyBub3RoaW5nXG4gICAgICogYGBgXG4gICAgICovXG4gICAgZG9Ob3RoaW5nKCkge1xuICAgICAgICByZXR1cm4gbmV3IE9uQ29uZmxpY3REb05vdGhpbmdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgb25Db25mbGljdE5vZGU6IE9uQ29uZmxpY3ROb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZSwge1xuICAgICAgICAgICAgICAgIGRvTm90aGluZzogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgXCJkbyB1cGRhdGUgc2V0XCIgY29uZmxpY3QgYWN0aW9uLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IGlkID0gMVxuICAgICAqIGNvbnN0IGZpcnN0X25hbWUgPSAnSm9obidcbiAgICAgKlxuICAgICAqIGF3YWl0IGRiXG4gICAgICogICAuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC52YWx1ZXMoe1x1MDBBMGZpcnN0X25hbWUsIGlkIH0pXG4gICAgICogICAub25Db25mbGljdCgob2MpID0+IG9jXG4gICAgICogICAgIC5jb2x1bW4oJ2lkJylcbiAgICAgKiAgICAgLmRvVXBkYXRlU2V0KHsgZmlyc3RfbmFtZSB9KVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IGludG8gXCJwZXJzb25cIiAoXCJmaXJzdF9uYW1lXCIsIFwiaWRcIilcbiAgICAgKiB2YWx1ZXMgKCQxLCAkMilcbiAgICAgKiBvbiBjb25mbGljdCAoXCJpZFwiKVxuICAgICAqIGRvIHVwZGF0ZSBzZXQgXCJmaXJzdF9uYW1lXCIgPSAkM1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogSW4gdGhlIG5leHQgZXhhbXBsZSB3ZSB1c2UgdGhlIGByZWZgIG1ldGhvZCB0byByZWZlcmVuY2VcbiAgICAgKiBjb2x1bW5zIG9mIHRoZSB2aXJ0dWFsIHRhYmxlIGBleGNsdWRlZGAgaW4gYSB0eXBlLXNhZmUgd2F5XG4gICAgICogdG8gY3JlYXRlIGFuIHVwc2VydCBvcGVyYXRpb246XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgTmV3UGVyc29uIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIHVwc2VydFBlcnNvbihwZXJzb246IE5ld1BlcnNvbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAqICAgYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgICAgLnZhbHVlcyhwZXJzb24pXG4gICAgICogICAgIC5vbkNvbmZsaWN0KChvYykgPT4gb2NcbiAgICAgKiAgICAgICAuY29sdW1uKCdpZCcpXG4gICAgICogICAgICAgLmRvVXBkYXRlU2V0KChlYikgPT4gKHtcbiAgICAgKiAgICAgICAgIGZpcnN0X25hbWU6IGViLnJlZignZXhjbHVkZWQuZmlyc3RfbmFtZScpLFxuICAgICAqICAgICAgICAgbGFzdF9uYW1lOiBlYi5yZWYoJ2V4Y2x1ZGVkLmxhc3RfbmFtZScpXG4gICAgICogICAgICAgfSlcbiAgICAgKiAgICAgKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGVyc29uXCIgKFwiZmlyc3RfbmFtZVwiLCBcImxhc3RfbmFtZVwiKVxuICAgICAqIHZhbHVlcyAoJDEsICQyKVxuICAgICAqIG9uIGNvbmZsaWN0IChcImlkXCIpXG4gICAgICogZG8gdXBkYXRlIHNldFxuICAgICAqICBcImZpcnN0X25hbWVcIiA9IGV4Y2x1ZGVkLlwiZmlyc3RfbmFtZVwiLFxuICAgICAqICBcImxhc3RfbmFtZVwiID0gZXhjbHVkZWQuXCJsYXN0X25hbWVcIlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGRvVXBkYXRlU2V0KHVwZGF0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IE9uQ29uZmxpY3RVcGRhdGVCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgb25Db25mbGljdE5vZGU6IE9uQ29uZmxpY3ROb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZSwge1xuICAgICAgICAgICAgICAgIHVwZGF0ZXM6IHBhcnNlVXBkYXRlT2JqZWN0RXhwcmVzc2lvbih1cGRhdGUpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE9uQ29uZmxpY3REb05vdGhpbmdCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgT25Db25mbGljdFVwZGF0ZUJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIHdoZXJlKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPbkNvbmZsaWN0VXBkYXRlQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG9uQ29uZmxpY3ROb2RlOiBPbkNvbmZsaWN0Tm9kZS5jbG9uZVdpdGhVcGRhdGVXaGVyZSh0aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZSwgcGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbihhcmdzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGEgd2hlcmUgY29uZGl0aW9uIGZvciB0aGUgdXBkYXRlIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgV2hlcmVJbnRlcmZhY2Uud2hlcmVSZWZ9IGZvciBtb3JlIGluZm8uXG4gICAgICovXG4gICAgd2hlcmVSZWYobGhzLCBvcCwgcmhzKSB7XG4gICAgICAgIHJldHVybiBuZXcgT25Db25mbGljdFVwZGF0ZUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBvbkNvbmZsaWN0Tm9kZTogT25Db25mbGljdE5vZGUuY2xvbmVXaXRoVXBkYXRlV2hlcmUodGhpcy4jcHJvcHMub25Db25mbGljdE5vZGUsIHBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24obGhzLCBvcCwgcmhzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjbGVhcldoZXJlKCkge1xuICAgICAgICByZXR1cm4gbmV3IE9uQ29uZmxpY3RVcGRhdGVCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgb25Db25mbGljdE5vZGU6IE9uQ29uZmxpY3ROb2RlLmNsb25lV2l0aG91dFVwZGF0ZVdoZXJlKHRoaXMuI3Byb3BzLm9uQ29uZmxpY3ROb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMub25Db25mbGljdE5vZGU7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi90b3Atbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBUb3BOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdUb3BOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShleHByZXNzaW9uLCBtb2RpZmllcnMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnVG9wTm9kZScsXG4gICAgICAgICAgICBleHByZXNzaW9uLFxuICAgICAgICAgICAgbW9kaWZpZXJzLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3RvcC1wYXJzZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBUb3BOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvdG9wLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNCaWdJbnQsIGlzTnVtYmVyLCBpc1VuZGVmaW5lZCB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRvcChleHByZXNzaW9uLCBtb2RpZmllcnMpIHtcbiAgICBpZiAoIWlzTnVtYmVyKGV4cHJlc3Npb24pICYmICFpc0JpZ0ludChleHByZXNzaW9uKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdG9wIGV4cHJlc3Npb246ICR7ZXhwcmVzc2lvbn1gKTtcbiAgICB9XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtb2RpZmllcnMpICYmICFpc1RvcE1vZGlmaWVycyhtb2RpZmllcnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0b3AgbW9kaWZpZXJzOiAke21vZGlmaWVyc31gKTtcbiAgICB9XG4gICAgcmV0dXJuIFRvcE5vZGUuY3JlYXRlKGV4cHJlc3Npb24sIG1vZGlmaWVycyk7XG59XG5mdW5jdGlvbiBpc1RvcE1vZGlmaWVycyhtb2RpZmllcnMpIHtcbiAgICByZXR1cm4gKG1vZGlmaWVycyA9PT0gJ3BlcmNlbnQnIHx8XG4gICAgICAgIG1vZGlmaWVycyA9PT0gJ3dpdGggdGllcycgfHxcbiAgICAgICAgbW9kaWZpZXJzID09PSAncGVyY2VudCB3aXRoIHRpZXMnKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vb3ItYWN0aW9uLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgT3JBY3Rpb25Ob2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdPckFjdGlvbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGFjdGlvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdPckFjdGlvbk5vZGUnLFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2luc2VydC1xdWVyeS1idWlsZGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgcGFyc2VTZWxlY3RBcmcsIHBhcnNlU2VsZWN0QWxsLCB9IGZyb20gJy4uL3BhcnNlci9zZWxlY3QtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlSW5zZXJ0RXhwcmVzc2lvbiwgfSBmcm9tICcuLi9wYXJzZXIvaW5zZXJ0LXZhbHVlcy1wYXJzZXIuanMnO1xuaW1wb3J0IHsgSW5zZXJ0UXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaW5zZXJ0LXF1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgUXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVVwZGF0ZU9iamVjdEV4cHJlc3Npb24sIH0gZnJvbSAnLi4vcGFyc2VyL3VwZGF0ZS1zZXQtcGFyc2VyLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IE9uRHVwbGljYXRlS2V5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29uLWR1cGxpY2F0ZS1rZXktbm9kZS5qcyc7XG5pbXBvcnQgeyBJbnNlcnRSZXN1bHQgfSBmcm9tICcuL2luc2VydC1yZXN1bHQuanMnO1xuaW1wb3J0IHsgaXNOb1Jlc3VsdEVycm9yQ29uc3RydWN0b3IsIE5vUmVzdWx0RXJyb3IsIH0gZnJvbSAnLi9uby1yZXN1bHQtZXJyb3IuanMnO1xuaW1wb3J0IHsgcGFyc2VFeHByZXNzaW9uLCB9IGZyb20gJy4uL3BhcnNlci9leHByZXNzaW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBDb2x1bW5Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgT25Db25mbGljdEJ1aWxkZXIsIH0gZnJvbSAnLi9vbi1jb25mbGljdC1idWlsZGVyLmpzJztcbmltcG9ydCB7IE9uQ29uZmxpY3ROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb24tY29uZmxpY3Qtbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVRvcCB9IGZyb20gJy4uL3BhcnNlci90b3AtcGFyc2VyLmpzJztcbmltcG9ydCB7IE9yQWN0aW9uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29yLWFjdGlvbi1ub2RlLmpzJztcbmV4cG9ydCBjbGFzcyBJbnNlcnRRdWVyeUJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbHVlcyB0byBpbnNlcnQgZm9yIGFuIHtAbGluayBLeXNlbHkuaW5zZXJ0SW50byB8IGluc2VydH0gcXVlcnkuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCB0YWtlcyBhbiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgY29sdW1uIG5hbWVzIGFuZCB2YWx1ZXMgYXJlXG4gICAgICogdmFsdWVzIHRvIGluc2VydC4gSW4gYWRkaXRpb24gdG8gdGhlIGNvbHVtbidzIHR5cGUsIHRoZSB2YWx1ZXMgY2FuIGJlXG4gICAgICogcmF3IHtAbGluayBzcWx9IHNuaXBwZXRzIG9yIHNlbGVjdCBxdWVyaWVzLlxuICAgICAqXG4gICAgICogWW91IG11c3QgcHJvdmlkZSBhbGwgZmllbGRzIHlvdSBoYXZlbid0IGV4cGxpY2l0bHkgbWFya2VkIGFzIG51bGxhYmxlXG4gICAgICogb3Igb3B0aW9uYWwgdXNpbmcge0BsaW5rIEdlbmVyYXRlZH0gb3Ige0BsaW5rIENvbHVtblR5cGV9LlxuICAgICAqXG4gICAgICogVGhlIHJldHVybiB2YWx1ZSBvZiBhbiBgaW5zZXJ0YCBxdWVyeSBpcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgSW5zZXJ0UmVzdWx0fS4gVGhlXG4gICAgICoge0BsaW5rIEluc2VydFJlc3VsdC5pbnNlcnRJZCB8IGluc2VydElkfSBmaWVsZCBob2xkcyB0aGUgYXV0byBpbmNyZW1lbnRlZCBwcmltYXJ5XG4gICAgICoga2V5IGlmIHRoZSBkYXRhYmFzZSByZXR1cm5lZCBvbmUuXG4gICAgICpcbiAgICAgKiBPbiBQb3N0Z3JlU1FMIGFuZCBzb21lIG90aGVyIGRpYWxlY3RzLCB5b3UgbmVlZCB0byBjYWxsIGByZXR1cm5pbmdgIHRvIGdldFxuICAgICAqIHNvbWV0aGluZyBvdXQgb2YgdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogQWxzbyBzZWUgdGhlIHtAbGluayBleHByZXNzaW9ufSBtZXRob2QgZm9yIGluc2VydGluZyB0aGUgcmVzdWx0IG9mIGEgc2VsZWN0XG4gICAgICogcXVlcnkgb3IgYW55IG90aGVyIGV4cHJlc3Npb24uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJpbnNlcnRcIiwgXCJTaW5nbGUgcm93XCIsIDEwKSAtLT5cbiAgICAgKlxuICAgICAqIEluc2VydCBhIHNpbmdsZSByb3c6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gICAgICogICAuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSmVubmlmZXInLFxuICAgICAqICAgICBsYXN0X25hbWU6ICdBbmlzdG9uJyxcbiAgICAgKiAgICAgYWdlOiA0MFxuICAgICAqICAgfSlcbiAgICAgKiAgIC5leGVjdXRlVGFrZUZpcnN0KClcbiAgICAgKlxuICAgICAqIC8vIGBpbnNlcnRJZGAgaXMgb25seSBhdmFpbGFibGUgb24gZGlhbGVjdHMgdGhhdFxuICAgICAqIC8vIGF1dG9tYXRpY2FsbHkgcmV0dXJuIHRoZSBpZCBvZiB0aGUgaW5zZXJ0ZWQgcm93XG4gICAgICogLy8gc3VjaCBhcyBNeVNRTCBhbmQgU1FMaXRlLiBPbiBQb3N0Z3JlU1FMLCBmb3IgZXhhbXBsZSxcbiAgICAgKiAvLyB5b3UgbmVlZCB0byBhZGQgYSBgcmV0dXJuaW5nYCBjbGF1c2UgdG8gdGhlIHF1ZXJ5IHRvXG4gICAgICogLy8gZ2V0IGFueXRoaW5nIG91dC4gU2VlIHRoZSBcInJldHVybmluZyBkYXRhXCIgZXhhbXBsZS5cbiAgICAgKiBjb25zb2xlLmxvZyhyZXN1bHQuaW5zZXJ0SWQpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IGludG8gYHBlcnNvbmAgKGBmaXJzdF9uYW1lYCwgYGxhc3RfbmFtZWAsIGBhZ2VgKSB2YWx1ZXMgKD8sID8sID8pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiA8IS0tIHNpdGVFeGFtcGxlKFwiaW5zZXJ0XCIsIFwiTXVsdGlwbGUgcm93c1wiLCAyMCkgLS0+XG4gICAgICpcbiAgICAgKiBPbiBkaWFsZWN0cyB0aGF0IHN1cHBvcnQgaXQgKGZvciBleGFtcGxlIFBvc3RncmVTUUwpIHlvdSBjYW4gaW5zZXJ0IG11bHRpcGxlXG4gICAgICogcm93cyBieSBwcm92aWRpbmcgYW4gYXJyYXkuIE5vdGUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIGlzIG9uY2UgYWdhaW4gdmVyeVxuICAgICAqIGRpYWxlY3Qtc3BlY2lmaWMuIFNvbWUgZGF0YWJhc2VzIG1heSBvbmx5IHJldHVybiB0aGUgaWQgb2YgdGhlICpsYXN0KiBpbnNlcnRlZFxuICAgICAqIHJvdyBhbmQgc29tZSByZXR1cm4gbm90aGluZyBhdCBhbGwgdW5sZXNzIHlvdSBjYWxsIGByZXR1cm5pbmdgLlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAudmFsdWVzKFt7XG4gICAgICogICAgIGZpcnN0X25hbWU6ICdKZW5uaWZlcicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0FuaXN0b24nLFxuICAgICAqICAgICBhZ2U6IDQwLFxuICAgICAqICAgfSwge1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnQXJub2xkJyxcbiAgICAgKiAgICAgbGFzdF9uYW1lOiAnU2Nod2FyemVuZWdnZXInLFxuICAgICAqICAgICBhZ2U6IDcwLFxuICAgICAqICAgfV0pXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgaW50byBcInBlcnNvblwiIChcImZpcnN0X25hbWVcIiwgXCJsYXN0X25hbWVcIiwgXCJhZ2VcIikgdmFsdWVzICgoJDEsICQyLCAkMyksICgkNCwgJDUsICQ2KSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJpbnNlcnRcIiwgXCJSZXR1cm5pbmcgZGF0YVwiLCAzMCkgLS0+XG4gICAgICpcbiAgICAgKiBPbiBzdXBwb3J0ZWQgZGlhbGVjdHMgbGlrZSBQb3N0Z3JlU1FMIHlvdSBuZWVkIHRvIGNoYWluIGByZXR1cm5pbmdgIHRvIHRoZSBxdWVyeSB0byBnZXRcbiAgICAgKiB0aGUgaW5zZXJ0ZWQgcm93J3MgY29sdW1ucyAob3IgYW55IG90aGVyIGV4cHJlc3Npb24pIGFzIHRoZSByZXR1cm4gdmFsdWUuIGByZXR1cm5pbmdgXG4gICAgICogd29ya3MganVzdCBsaWtlIGBzZWxlY3RgLiBSZWZlciB0byBgc2VsZWN0YCBtZXRob2QncyBleGFtcGxlcyBhbmQgZG9jdW1lbnRhdGlvbiBmb3JcbiAgICAgKiBtb3JlIGluZm8uXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gICAgICogICAuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSmVubmlmZXInLFxuICAgICAqICAgICBsYXN0X25hbWU6ICdBbmlzdG9uJyxcbiAgICAgKiAgICAgYWdlOiA0MCxcbiAgICAgKiAgIH0pXG4gICAgICogICAucmV0dXJuaW5nKFsnaWQnLCAnZmlyc3RfbmFtZSBhcyBuYW1lJ10pXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IGludG8gXCJwZXJzb25cIiAoXCJmaXJzdF9uYW1lXCIsIFwibGFzdF9uYW1lXCIsIFwiYWdlXCIpIHZhbHVlcyAoJDEsICQyLCAkMykgcmV0dXJuaW5nIFwiaWRcIiwgXCJmaXJzdF9uYW1lXCIgYXMgXCJuYW1lXCJcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJpbnNlcnRcIiwgXCJDb21wbGV4IHZhbHVlc1wiLCA0MCkgLS0+XG4gICAgICpcbiAgICAgKiBJbiBhZGRpdGlvbiB0byBwcmltaXRpdmVzLCB0aGUgdmFsdWVzIGNhbiBhbHNvIGJlIGFyYml0cmFyeSBleHByZXNzaW9ucy5cbiAgICAgKiBZb3UgY2FuIGJ1aWxkIHRoZSBleHByZXNzaW9ucyBieSB1c2luZyBhIGNhbGxiYWNrIGFuZCBjYWxsaW5nIHRoZSBtZXRob2RzXG4gICAgICogb24gdGhlIGV4cHJlc3Npb24gYnVpbGRlciBwYXNzZWQgdG8gaXQ6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGNvbnN0IGFuaSA9IFwiQW5pXCJcbiAgICAgKiBjb25zdCBzdG9uID0gXCJzdG9uXCJcbiAgICAgKlxuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gICAgICogICAuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC52YWx1ZXMoKHsgcmVmLCBzZWxlY3RGcm9tLCBmbiB9KSA9PiAoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSmVubmlmZXInLFxuICAgICAqICAgICBsYXN0X25hbWU6IHNxbDxzdHJpbmc+YGNvbmNhdCgke2FuaX0sICR7c3Rvbn0pYCxcbiAgICAgKiAgICAgbWlkZGxlX25hbWU6IHJlZignZmlyc3RfbmFtZScpLFxuICAgICAqICAgICBhZ2U6IHNlbGVjdEZyb20oJ3BlcnNvbicpXG4gICAgICogICAgICAgLnNlbGVjdChmbi5hdmc8bnVtYmVyPignYWdlJykuYXMoJ2F2Z19hZ2UnKSksXG4gICAgICogICB9KSlcbiAgICAgKiAgIC5leGVjdXRlVGFrZUZpcnN0KClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGVyc29uXCIgKFxuICAgICAqICAgXCJmaXJzdF9uYW1lXCIsXG4gICAgICogICBcImxhc3RfbmFtZVwiLFxuICAgICAqICAgXCJtaWRkbGVfbmFtZVwiLFxuICAgICAqICAgXCJhZ2VcIlxuICAgICAqIClcbiAgICAgKiB2YWx1ZXMgKFxuICAgICAqICAgJDEsXG4gICAgICogICBjb25jYXQoJDIsICQzKSxcbiAgICAgKiAgIFwiZmlyc3RfbmFtZVwiLFxuICAgICAqICAgKHNlbGVjdCBhdmcoXCJhZ2VcIikgYXMgXCJhdmdfYWdlXCIgZnJvbSBcInBlcnNvblwiKVxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFlvdSBjYW4gYWxzbyB1c2UgdGhlIGNhbGxiYWNrIHZlcnNpb24gb2Ygc3VicXVlcmllcyBvciByYXcgZXhwcmVzc2lvbnM6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLndpdGgoJ2plbm5pZmVyJywgKGRiKSA9PiBkYlxuICAgICAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gICAgICogICAud2hlcmUoJ2ZpcnN0X25hbWUnLCAnPScsICdKZW5uaWZlcicpXG4gICAgICogICAuc2VsZWN0KFsnaWQnLCAnZmlyc3RfbmFtZScsICdnZW5kZXInXSlcbiAgICAgKiAgIC5saW1pdCgxKVxuICAgICAqICkuaW5zZXJ0SW50bygncGV0JykudmFsdWVzKChlYikgPT4gKHtcbiAgICAgKiAgIG93bmVyX2lkOiBlYi5zZWxlY3RGcm9tKCdqZW5uaWZlcicpLnNlbGVjdCgnaWQnKSxcbiAgICAgKiAgIG5hbWU6IGViLnNlbGVjdEZyb20oJ2plbm5pZmVyJykuc2VsZWN0KCdmaXJzdF9uYW1lJyksXG4gICAgICogICBzcGVjaWVzOiAnY2F0JyxcbiAgICAgKiB9KSlcbiAgICAgKiAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiB3aXRoIFwiamVubmlmZXJcIiBhcyAoXG4gICAgICogICBzZWxlY3QgXCJpZFwiLCBcImZpcnN0X25hbWVcIiwgXCJnZW5kZXJcIlxuICAgICAqICAgZnJvbSBcInBlcnNvblwiXG4gICAgICogICB3aGVyZSBcImZpcnN0X25hbWVcIiA9ICQxXG4gICAgICogICBsaW1pdCAkMlxuICAgICAqIClcbiAgICAgKiBpbnNlcnQgaW50byBcInBldFwiIChcIm93bmVyX2lkXCIsIFwibmFtZVwiLCBcInNwZWNpZXNcIilcbiAgICAgKiB2YWx1ZXMgKFxuICAgICAqICAoc2VsZWN0IFwiaWRcIiBmcm9tIFwiamVubmlmZXJcIiksXG4gICAgICogIChzZWxlY3QgXCJmaXJzdF9uYW1lXCIgZnJvbSBcImplbm5pZmVyXCIpLFxuICAgICAqICAkM1xuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB2YWx1ZXMoaW5zZXJ0KSB7XG4gICAgICAgIGNvbnN0IFtjb2x1bW5zLCB2YWx1ZXNdID0gcGFyc2VJbnNlcnRFeHByZXNzaW9uKGluc2VydCk7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBJbnNlcnRRdWVyeU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgdmFsdWVzLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2x1bW5zIHRvIGluc2VydC5cbiAgICAgKlxuICAgICAqIFRoZSB7QGxpbmsgdmFsdWVzfSBtZXRob2Qgc2V0cyBib3RoIHRoZSBjb2x1bW5zIGFuZCB0aGUgdmFsdWVzIGFuZCB0aGlzIG1ldGhvZFxuICAgICAqIGlzIG5vdCBuZWVkZWQuIEJ1dCBpZiB5b3UgYXJlIHVzaW5nIHRoZSB7QGxpbmsgZXhwcmVzc2lvbn0gbWV0aG9kLCB5b3UgY2FuIHVzZVxuICAgICAqIHRoaXMgbWV0aG9kIHRvIHNldCB0aGUgY29sdW1ucyB0byBpbnNlcnQuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC5jb2x1bW5zKFsnZmlyc3RfbmFtZSddKVxuICAgICAqICAgLmV4cHJlc3Npb24oKGViKSA9PiBlYi5zZWxlY3RGcm9tKCdwZXQnKS5zZWxlY3QoJ3BldC5uYW1lJykpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgaW50byBcInBlcnNvblwiIChcImZpcnN0X25hbWVcIilcbiAgICAgKiBzZWxlY3QgXCJwZXRcIi5cIm5hbWVcIiBmcm9tIFwicGV0XCJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb2x1bW5zKGNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IEluc2VydFF1ZXJ5Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMucXVlcnlOb2RlLCB7XG4gICAgICAgICAgICAgICAgY29sdW1uczogZnJlZXplKGNvbHVtbnMubWFwKENvbHVtbk5vZGUuY3JlYXRlKSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluc2VydCBhbiBhcmJpdHJhcnkgZXhwcmVzc2lvbi4gRm9yIGV4YW1wbGUgdGhlIHJlc3VsdCBvZiBhIHNlbGVjdCBxdWVyeS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogPCEtLSBzaXRlRXhhbXBsZShcImluc2VydFwiLCBcIkluc2VydCBzdWJxdWVyeVwiLCA1MCkgLS0+XG4gICAgICpcbiAgICAgKiBZb3UgY2FuIGNyZWF0ZSBhbiBgSU5TRVJUIElOVE8gU0VMRUNUIEZST01gIHF1ZXJ5IHVzaW5nIHRoZSBgZXhwcmVzc2lvbmAgbWV0aG9kLlxuICAgICAqIFRoaXMgQVBJIGRvZXNuJ3QgZm9sbG93IG91ciBXWVNJV1lHIHByaW5jaXBsZXMgYW5kIG1pZ2h0IGJlIGEgYml0IGRpZmZpY3VsdCB0b1xuICAgICAqIHJlbWVtYmVyLiBUaGUgcmVhc29ucyBmb3IgdGhpcyBkZXNpZ24gc3RlbSBmcm9tIGltcGxlbWVudGF0aW9uIGRpZmZpY3VsdGllcy5cbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC5jb2x1bW5zKFsnZmlyc3RfbmFtZScsICdsYXN0X25hbWUnLCAnYWdlJ10pXG4gICAgICogICAuZXhwcmVzc2lvbigoZWIpID0+IGViXG4gICAgICogICAgIC5zZWxlY3RGcm9tKCdwZXQnKVxuICAgICAqICAgICAuc2VsZWN0KChlYikgPT4gW1xuICAgICAqICAgICAgICdwZXQubmFtZScsXG4gICAgICogICAgICAgZWIudmFsKCdQZXRzb24nKS5hcygnbGFzdF9uYW1lJyksXG4gICAgICogICAgICAgZWIubGl0KDcpLmFzKCdhZ2UnKSxcbiAgICAgKiAgICAgXSlcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGVyc29uXCIgKFwiZmlyc3RfbmFtZVwiLCBcImxhc3RfbmFtZVwiLCBcImFnZVwiKVxuICAgICAqIHNlbGVjdCBcInBldFwiLlwibmFtZVwiLCAkMSBhcyBcImxhc3RfbmFtZVwiLCA3IGFzIFwiYWdlIGZyb20gXCJwZXRcIlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGV4cHJlc3Npb24oZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogSW5zZXJ0UXVlcnlOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHBhcnNlRXhwcmVzc2lvbihleHByZXNzaW9uKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBgaW5zZXJ0IGludG8gXCJwZXJzb25cIiBkZWZhdWx0IHZhbHVlc2AgcXVlcnkuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC5kZWZhdWx0VmFsdWVzKClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGVyc29uXCIgZGVmYXVsdCB2YWx1ZXNcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkZWZhdWx0VmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogSW5zZXJ0UXVlcnlOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVzOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZCBhbnkgYWRkaXRpb25hbCBTUUwgdG8gdGhlIGVuZCBvZiB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSm9obicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0RvZScsXG4gICAgICogICAgIGdlbmRlcjogJ21hbGUnLFxuICAgICAqICAgfSlcbiAgICAgKiAgIC5tb2RpZnlFbmQoc3FsYC0tIFRoaXMgaXMgYSBjb21tZW50YClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgaW50byBgcGVyc29uYCAoXCJmaXJzdF9uYW1lXCIsIFwibGFzdF9uYW1lXCIsIFwiZ2VuZGVyXCIpXG4gICAgICogdmFsdWVzICg/LCA/LCA/KSAtLSBUaGlzIGlzIGEgY29tbWVudFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG1vZGlmeUVuZChtb2RpZmllcikge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEVuZE1vZGlmaWVyKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgbW9kaWZpZXIudG9PcGVyYXRpb25Ob2RlKCkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBhbiBgaW5zZXJ0IGludG9gIHF1ZXJ5IHRvIGFuIGBpbnNlcnQgaWdub3JlIGludG9gIHF1ZXJ5LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIGRpYWxlY3RzIGxpa2UgTXlTUUwuXG4gICAgICpcbiAgICAgKiBUbyBhdm9pZCBhIGZvb3RndW4sIHdoZW4gaW52b2tlZCB3aXRoIHRoZSBTUUxpdGUgZGlhbGVjdCwgdGhpcyBtZXRob2Qgd2lsbFxuICAgICAqIGJlIGhhbmRsZWQgbGlrZSB7QGxpbmsgb3JJZ25vcmV9LiBTZWUgYWxzbywge0BsaW5rIG9yQWJvcnR9LCB7QGxpbmsgb3JGYWlsfSxcbiAgICAgKiB7QGxpbmsgb3JSZXBsYWNlfSwgYW5kIHtAbGluayBvclJvbGxiYWNrfS5cbiAgICAgKlxuICAgICAqIElmIHlvdSB1c2UgdGhlIGlnbm9yZSBtb2RpZmllciwgaWdub3JhYmxlIGVycm9ycyB0aGF0IG9jY3VyIHdoaWxlIGV4ZWN1dGluZyB0aGVcbiAgICAgKiBpbnNlcnQgc3RhdGVtZW50IGFyZSBpZ25vcmVkLiBGb3IgZXhhbXBsZSwgd2l0aG91dCBpZ25vcmUsIGEgcm93IHRoYXQgZHVwbGljYXRlc1xuICAgICAqIGFuIGV4aXN0aW5nIHVuaXF1ZSBpbmRleCBvciBwcmltYXJ5IGtleSB2YWx1ZSBpbiB0aGUgdGFibGUgY2F1c2VzIGEgZHVwbGljYXRlLWtleVxuICAgICAqIGVycm9yIGFuZCB0aGUgc3RhdGVtZW50IGlzIGFib3J0ZWQuIFdpdGggaWdub3JlLCB0aGUgcm93IGlzIGRpc2NhcmRlZCBhbmQgbm8gZXJyb3JcbiAgICAgKiBvY2N1cnMuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC5pZ25vcmUoKVxuICAgICAqICAgLnZhbHVlcyh7XG4gICAgICogICAgIGZpcnN0X25hbWU6ICdKb2huJyxcbiAgICAgKiAgICAgbGFzdF9uYW1lOiAnRG9lJyxcbiAgICAgKiAgICAgZ2VuZGVyOiAnZmVtYWxlJyxcbiAgICAgKiAgIH0pXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IGlnbm9yZSBpbnRvIGBwZXJzb25gIChgZmlyc3RfbmFtZWAsIGBsYXN0X25hbWVgLCBgZ2VuZGVyYCkgdmFsdWVzICg/LCA/LCA/KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgb3IgaWdub3JlIGludG8gXCJwZXJzb25cIiAoXCJmaXJzdF9uYW1lXCIsIFwibGFzdF9uYW1lXCIsIFwiZ2VuZGVyXCIpIHZhbHVlcyAoPywgPywgPylcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBpZ25vcmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBJbnNlcnRRdWVyeU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwge1xuICAgICAgICAgICAgICAgIG9yQWN0aW9uOiBPckFjdGlvbk5vZGUuY3JlYXRlKCdpZ25vcmUnKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBhbiBgaW5zZXJ0IGludG9gIHF1ZXJ5IHRvIGFuIGBpbnNlcnQgb3IgaWdub3JlIGludG9gIHF1ZXJ5LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIGRpYWxlY3RzIGxpa2UgU1FMaXRlLlxuICAgICAqXG4gICAgICogVG8gYXZvaWQgYSBmb290Z3VuLCB3aGVuIGludm9rZWQgd2l0aCB0aGUgTXlTUUwgZGlhbGVjdCwgdGhpcyBtZXRob2Qgd2lsbFxuICAgICAqIGJlIGhhbmRsZWQgbGlrZSB7QGxpbmsgaWdub3JlfS5cbiAgICAgKlxuICAgICAqIFNlZSBhbHNvLCB7QGxpbmsgb3JBYm9ydH0sIHtAbGluayBvckZhaWx9LCB7QGxpbmsgb3JSZXBsYWNlfSwgYW5kIHtAbGluayBvclJvbGxiYWNrfS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5pbnNlcnRJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLm9ySWdub3JlKClcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSm9obicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0RvZScsXG4gICAgICogICAgIGdlbmRlcjogJ2ZlbWFsZScsXG4gICAgICogICB9KVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgb3IgaWdub3JlIGludG8gXCJwZXJzb25cIiAoXCJmaXJzdF9uYW1lXCIsIFwibGFzdF9uYW1lXCIsIFwiZ2VuZGVyXCIpIHZhbHVlcyAoPywgPywgPylcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgaWdub3JlIGludG8gYHBlcnNvbmAgKGBmaXJzdF9uYW1lYCwgYGxhc3RfbmFtZWAsIGBnZW5kZXJgKSB2YWx1ZXMgKD8sID8sID8pXG4gICAgICogYGBgXG4gICAgICovXG4gICAgb3JJZ25vcmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBJbnNlcnRRdWVyeU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwge1xuICAgICAgICAgICAgICAgIG9yQWN0aW9uOiBPckFjdGlvbk5vZGUuY3JlYXRlKCdpZ25vcmUnKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBhbiBgaW5zZXJ0IGludG9gIHF1ZXJ5IHRvIGFuIGBpbnNlcnQgb3IgYWJvcnQgaW50b2AgcXVlcnkuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHNvbWUgZGlhbGVjdHMgbGlrZSBTUUxpdGUuXG4gICAgICpcbiAgICAgKiBTZWUgYWxzbywge0BsaW5rIG9ySWdub3JlfSwge0BsaW5rIG9yRmFpbH0sIHtAbGluayBvclJlcGxhY2V9LCBhbmQge0BsaW5rIG9yUm9sbGJhY2t9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAub3JBYm9ydCgpXG4gICAgICogICAudmFsdWVzKHtcbiAgICAgKiAgICAgZmlyc3RfbmFtZTogJ0pvaG4nLFxuICAgICAqICAgICBsYXN0X25hbWU6ICdEb2UnLFxuICAgICAqICAgICBnZW5kZXI6ICdmZW1hbGUnLFxuICAgICAqICAgfSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChTUUxpdGUpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IG9yIGFib3J0IGludG8gXCJwZXJzb25cIiAoXCJmaXJzdF9uYW1lXCIsIFwibGFzdF9uYW1lXCIsIFwiZ2VuZGVyXCIpIHZhbHVlcyAoPywgPywgPylcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBvckFib3J0KCkge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogSW5zZXJ0UXVlcnlOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHtcbiAgICAgICAgICAgICAgICBvckFjdGlvbjogT3JBY3Rpb25Ob2RlLmNyZWF0ZSgnYWJvcnQnKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBhbiBgaW5zZXJ0IGludG9gIHF1ZXJ5IHRvIGFuIGBpbnNlcnQgb3IgZmFpbCBpbnRvYCBxdWVyeS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgYnkgc29tZSBkaWFsZWN0cyBsaWtlIFNRTGl0ZS5cbiAgICAgKlxuICAgICAqIFNlZSBhbHNvLCB7QGxpbmsgb3JJZ25vcmV9LCB7QGxpbmsgb3JBYm9ydH0sIHtAbGluayBvclJlcGxhY2V9LCBhbmQge0BsaW5rIG9yUm9sbGJhY2t9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAub3JGYWlsKClcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSm9obicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0RvZScsXG4gICAgICogICAgIGdlbmRlcjogJ2ZlbWFsZScsXG4gICAgICogICB9KVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgb3IgZmFpbCBpbnRvIFwicGVyc29uXCIgKFwiZmlyc3RfbmFtZVwiLCBcImxhc3RfbmFtZVwiLCBcImdlbmRlclwiKSB2YWx1ZXMgKD8sID8sID8pXG4gICAgICogYGBgXG4gICAgICovXG4gICAgb3JGYWlsKCkge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogSW5zZXJ0UXVlcnlOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHtcbiAgICAgICAgICAgICAgICBvckFjdGlvbjogT3JBY3Rpb25Ob2RlLmNyZWF0ZSgnZmFpbCcpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGFuIGBpbnNlcnQgaW50b2AgcXVlcnkgdG8gYW4gYGluc2VydCBvciByZXBsYWNlIGludG9gIHF1ZXJ5LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIGRpYWxlY3RzIGxpa2UgU1FMaXRlLlxuICAgICAqXG4gICAgICogWW91IGNhbiBhbHNvIHVzZSB7QGxpbmsgS3lzZWx5LnJlcGxhY2VJbnRvfSB0byBhY2hpZXZlIHRoZSBzYW1lIHJlc3VsdC5cbiAgICAgKlxuICAgICAqIFNlZSBhbHNvLCB7QGxpbmsgb3JJZ25vcmV9LCB7QGxpbmsgb3JBYm9ydH0sIHtAbGluayBvckZhaWx9LCBhbmQge0BsaW5rIG9yUm9sbGJhY2t9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAub3JSZXBsYWNlKClcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSm9obicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0RvZScsXG4gICAgICogICAgIGdlbmRlcjogJ2ZlbWFsZScsXG4gICAgICogICB9KVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgb3IgcmVwbGFjZSBpbnRvIFwicGVyc29uXCIgKFwiZmlyc3RfbmFtZVwiLCBcImxhc3RfbmFtZVwiLCBcImdlbmRlclwiKSB2YWx1ZXMgKD8sID8sID8pXG4gICAgICogYGBgXG4gICAgICovXG4gICAgb3JSZXBsYWNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogSW5zZXJ0UXVlcnlOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHtcbiAgICAgICAgICAgICAgICBvckFjdGlvbjogT3JBY3Rpb25Ob2RlLmNyZWF0ZSgncmVwbGFjZScpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGFuIGBpbnNlcnQgaW50b2AgcXVlcnkgdG8gYW4gYGluc2VydCBvciByb2xsYmFjayBpbnRvYCBxdWVyeS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgYnkgc29tZSBkaWFsZWN0cyBsaWtlIFNRTGl0ZS5cbiAgICAgKlxuICAgICAqIFNlZSBhbHNvLCB7QGxpbmsgb3JJZ25vcmV9LCB7QGxpbmsgb3JBYm9ydH0sIHtAbGluayBvckZhaWx9LCBhbmQge0BsaW5rIG9yUmVwbGFjZX0uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC5vclJvbGxiYWNrKClcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSm9obicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0RvZScsXG4gICAgICogICAgIGdlbmRlcjogJ2ZlbWFsZScsXG4gICAgICogICB9KVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgb3Igcm9sbGJhY2sgaW50byBcInBlcnNvblwiIChcImZpcnN0X25hbWVcIiwgXCJsYXN0X25hbWVcIiwgXCJnZW5kZXJcIikgdmFsdWVzICg/LCA/LCA/KVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG9yUm9sbGJhY2soKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBJbnNlcnRRdWVyeU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwge1xuICAgICAgICAgICAgICAgIG9yQWN0aW9uOiBPckFjdGlvbk5vZGUuY3JlYXRlKCdyb2xsYmFjaycpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGFuIGBpbnNlcnQgaW50b2AgcXVlcnkgdG8gYW4gYGluc2VydCB0b3AgaW50b2AgcXVlcnkuXG4gICAgICpcbiAgICAgKiBgdG9wYCBjbGF1c2UgaXMgb25seSBzdXBwb3J0ZWQgYnkgc29tZSBkaWFsZWN0cyBsaWtlIE1TIFNRTCBTZXJ2ZXIuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIEluc2VydCB0aGUgZmlyc3QgNSByb3dzOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYi5pbnNlcnRJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnRvcCg1KVxuICAgICAqICAgLmNvbHVtbnMoWydmaXJzdF9uYW1lJywgJ2dlbmRlciddKVxuICAgICAqICAgLmV4cHJlc3Npb24oXG4gICAgICogICAgIChlYikgPT4gZWIuc2VsZWN0RnJvbSgncGV0Jykuc2VsZWN0KFsnbmFtZScsIHNxbC5saXQoJ290aGVyJykuYXMoJ2dlbmRlcicpXSlcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNUyBTUUwgU2VydmVyKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCB0b3AoNSkgaW50byBcInBlcnNvblwiIChcImZpcnN0X25hbWVcIiwgXCJnZW5kZXJcIikgc2VsZWN0IFwibmFtZVwiLCAnb3RoZXInIGFzIFwiZ2VuZGVyXCIgZnJvbSBcInBldFwiXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBJbnNlcnQgdGhlIGZpcnN0IDUwIHBlcmNlbnQgb2Ygcm93czpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC50b3AoNTAsICdwZXJjZW50JylcbiAgICAgKiAgIC5jb2x1bW5zKFsnZmlyc3RfbmFtZScsICdnZW5kZXInXSlcbiAgICAgKiAgIC5leHByZXNzaW9uKFxuICAgICAqICAgICAoZWIpID0+IGViLnNlbGVjdEZyb20oJ3BldCcpLnNlbGVjdChbJ25hbWUnLCBzcWwubGl0KCdvdGhlcicpLmFzKCdnZW5kZXInKV0pXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTVMgU1FMIFNlcnZlcik6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgdG9wKDUwKSBwZXJjZW50IGludG8gXCJwZXJzb25cIiAoXCJmaXJzdF9uYW1lXCIsIFwiZ2VuZGVyXCIpIHNlbGVjdCBcIm5hbWVcIiwgJ290aGVyJyBhcyBcImdlbmRlclwiIGZyb20gXCJwZXRcIlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRvcChleHByZXNzaW9uLCBtb2RpZmllcnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhUb3AodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVRvcChleHByZXNzaW9uLCBtb2RpZmllcnMpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gYG9uIGNvbmZsaWN0YCBjbGF1c2UgdG8gdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogYG9uIGNvbmZsaWN0YCBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIGRpYWxlY3RzIGxpa2UgUG9zdGdyZVNRTCBhbmQgU1FMaXRlLiBPbiBNeVNRTFxuICAgICAqIHlvdSBjYW4gdXNlIHtAbGluayBpZ25vcmV9IGFuZCB7QGxpbmsgb25EdXBsaWNhdGVLZXlVcGRhdGV9IHRvIGFjaGlldmUgc2ltaWxhciByZXN1bHRzLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiXG4gICAgICogICAuaW5zZXJ0SW50bygncGV0JylcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBuYW1lOiAnQ2F0dG8nLFxuICAgICAqICAgICBzcGVjaWVzOiAnY2F0JyxcbiAgICAgKiAgICAgb3duZXJfaWQ6IDMsXG4gICAgICogICB9KVxuICAgICAqICAgLm9uQ29uZmxpY3QoKG9jKSA9PiBvY1xuICAgICAqICAgICAuY29sdW1uKCduYW1lJylcbiAgICAgKiAgICAgLmRvVXBkYXRlU2V0KHsgc3BlY2llczogJ2hhbXN0ZXInIH0pXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgaW50byBcInBldFwiIChcIm5hbWVcIiwgXCJzcGVjaWVzXCIsIFwib3duZXJfaWRcIilcbiAgICAgKiB2YWx1ZXMgKCQxLCAkMiwgJDMpXG4gICAgICogb24gY29uZmxpY3QgKFwibmFtZVwiKVxuICAgICAqIGRvIHVwZGF0ZSBzZXQgXCJzcGVjaWVzXCIgPSAkNFxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogWW91IGNhbiBwcm92aWRlIHRoZSBuYW1lIG9mIHRoZSBjb25zdHJhaW50IGluc3RlYWQgb2YgYSBjb2x1bW4gbmFtZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC5pbnNlcnRJbnRvKCdwZXQnKVxuICAgICAqICAgLnZhbHVlcyh7XG4gICAgICogICAgIG5hbWU6ICdDYXR0bycsXG4gICAgICogICAgIHNwZWNpZXM6ICdjYXQnLFxuICAgICAqICAgICBvd25lcl9pZDogMyxcbiAgICAgKiAgIH0pXG4gICAgICogICAub25Db25mbGljdCgob2MpID0+IG9jXG4gICAgICogICAgIC5jb25zdHJhaW50KCdwZXRfbmFtZV9rZXknKVxuICAgICAqICAgICAuZG9VcGRhdGVTZXQoeyBzcGVjaWVzOiAnaGFtc3RlcicgfSlcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGV0XCIgKFwibmFtZVwiLCBcInNwZWNpZXNcIiwgXCJvd25lcl9pZFwiKVxuICAgICAqIHZhbHVlcyAoJDEsICQyLCAkMylcbiAgICAgKiBvbiBjb25mbGljdCBvbiBjb25zdHJhaW50IFwicGV0X25hbWVfa2V5XCJcbiAgICAgKiBkbyB1cGRhdGUgc2V0IFwic3BlY2llc1wiID0gJDRcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGFuIGV4cHJlc3Npb24gYXMgdGhlIGNvbmZsaWN0IHRhcmdldCBpbiBjYXNlXG4gICAgICogdGhlIHVuaXF1ZSBpbmRleCBpcyBhbiBleHByZXNzaW9uIGluZGV4OlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLmluc2VydEludG8oJ3BldCcpXG4gICAgICogICAudmFsdWVzKHtcbiAgICAgKiAgICAgbmFtZTogJ0NhdHRvJyxcbiAgICAgKiAgICAgc3BlY2llczogJ2NhdCcsXG4gICAgICogICAgIG93bmVyX2lkOiAzLFxuICAgICAqICAgfSlcbiAgICAgKiAgIC5vbkNvbmZsaWN0KChvYykgPT4gb2NcbiAgICAgKiAgICAgLmV4cHJlc3Npb24oc3FsPHN0cmluZz5gbG93ZXIobmFtZSlgKVxuICAgICAqICAgICAuZG9VcGRhdGVTZXQoeyBzcGVjaWVzOiAnaGFtc3RlcicgfSlcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGV0XCIgKFwibmFtZVwiLCBcInNwZWNpZXNcIiwgXCJvd25lcl9pZFwiKVxuICAgICAqIHZhbHVlcyAoJDEsICQyLCAkMylcbiAgICAgKiBvbiBjb25mbGljdCAobG93ZXIobmFtZSkpXG4gICAgICogZG8gdXBkYXRlIHNldCBcInNwZWNpZXNcIiA9ICQ0XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIGFkZCBhIGZpbHRlciBmb3IgdGhlIHVwZGF0ZSBzdGF0ZW1lbnQgbGlrZSB0aGlzOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLmluc2VydEludG8oJ3BldCcpXG4gICAgICogICAudmFsdWVzKHtcbiAgICAgKiAgICAgbmFtZTogJ0NhdHRvJyxcbiAgICAgKiAgICAgc3BlY2llczogJ2NhdCcsXG4gICAgICogICAgIG93bmVyX2lkOiAzLFxuICAgICAqICAgfSlcbiAgICAgKiAgIC5vbkNvbmZsaWN0KChvYykgPT4gb2NcbiAgICAgKiAgICAgLmNvbHVtbignbmFtZScpXG4gICAgICogICAgIC5kb1VwZGF0ZVNldCh7IHNwZWNpZXM6ICdoYW1zdGVyJyB9KVxuICAgICAqICAgICAud2hlcmUoJ2V4Y2x1ZGVkLm5hbWUnLCAnIT0nLCAnQ2F0dG8nKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IGludG8gXCJwZXRcIiAoXCJuYW1lXCIsIFwic3BlY2llc1wiLCBcIm93bmVyX2lkXCIpXG4gICAgICogdmFsdWVzICgkMSwgJDIsICQzKVxuICAgICAqIG9uIGNvbmZsaWN0IChcIm5hbWVcIilcbiAgICAgKiBkbyB1cGRhdGUgc2V0IFwic3BlY2llc1wiID0gJDRcbiAgICAgKiB3aGVyZSBcImV4Y2x1ZGVkXCIuXCJuYW1lXCIgIT0gJDVcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFlvdSBjYW4gY3JlYXRlIGFuIGBvbiBjb25mbGljdCBkbyBub3RoaW5nYCBjbGF1c2VzIGxpa2UgdGhpczpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC5pbnNlcnRJbnRvKCdwZXQnKVxuICAgICAqICAgLnZhbHVlcyh7XG4gICAgICogICAgIG5hbWU6ICdDYXR0bycsXG4gICAgICogICAgIHNwZWNpZXM6ICdjYXQnLFxuICAgICAqICAgICBvd25lcl9pZDogMyxcbiAgICAgKiAgIH0pXG4gICAgICogICAub25Db25mbGljdCgob2MpID0+IG9jXG4gICAgICogICAgIC5jb2x1bW4oJ25hbWUnKVxuICAgICAqICAgICAuZG9Ob3RoaW5nKClcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGV0XCIgKFwibmFtZVwiLCBcInNwZWNpZXNcIiwgXCJvd25lcl9pZFwiKVxuICAgICAqIHZhbHVlcyAoJDEsICQyLCAkMylcbiAgICAgKiBvbiBjb25mbGljdCAoXCJuYW1lXCIpIGRvIG5vdGhpbmdcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFlvdSBjYW4gcmVmZXIgdG8gdGhlIGNvbHVtbnMgb2YgdGhlIHZpcnR1YWwgYGV4Y2x1ZGVkYCB0YWJsZVxuICAgICAqIGluIGEgdHlwZS1zYWZlIHdheSB1c2luZyBhIGNhbGxiYWNrIGFuZCB0aGUgYHJlZmAgbWV0aG9kIG9mXG4gICAgICogYEV4cHJlc3Npb25CdWlsZGVyYDpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBpZDogMSxcbiAgICAgKiAgICAgZmlyc3RfbmFtZTogJ0pvaG4nLFxuICAgICAqICAgICBsYXN0X25hbWU6ICdEb2UnLFxuICAgICAqICAgICBnZW5kZXI6ICdtYWxlJyxcbiAgICAgKiAgIH0pXG4gICAgICogICAub25Db25mbGljdChvYyA9PiBvY1xuICAgICAqICAgICAuY29sdW1uKCdpZCcpXG4gICAgICogICAgIC5kb1VwZGF0ZVNldCh7XG4gICAgICogICAgICAgZmlyc3RfbmFtZTogKGViKSA9PiBlYi5yZWYoJ2V4Y2x1ZGVkLmZpcnN0X25hbWUnKSxcbiAgICAgKiAgICAgICBsYXN0X25hbWU6IChlYikgPT4gZWIucmVmKCdleGNsdWRlZC5sYXN0X25hbWUnKVxuICAgICAqICAgICB9KVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IGludG8gXCJwZXJzb25cIiAoXCJpZFwiLCBcImZpcnN0X25hbWVcIiwgXCJsYXN0X25hbWVcIiwgXCJnZW5kZXJcIilcbiAgICAgKiB2YWx1ZXMgKCQxLCAkMiwgJDMsICQ0KVxuICAgICAqIG9uIGNvbmZsaWN0IChcImlkXCIpXG4gICAgICogZG8gdXBkYXRlIHNldFxuICAgICAqICBcImZpcnN0X25hbWVcIiA9IFwiZXhjbHVkZWRcIi5cImZpcnN0X25hbWVcIixcbiAgICAgKiAgXCJsYXN0X25hbWVcIiA9IFwiZXhjbHVkZWRcIi5cImxhc3RfbmFtZVwiXG4gICAgICogYGBgXG4gICAgICovXG4gICAgb25Db25mbGljdChjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogSW5zZXJ0UXVlcnlOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHtcbiAgICAgICAgICAgICAgICBvbkNvbmZsaWN0OiBjYWxsYmFjayhuZXcgT25Db25mbGljdEJ1aWxkZXIoe1xuICAgICAgICAgICAgICAgICAgICBvbkNvbmZsaWN0Tm9kZTogT25Db25mbGljdE5vZGUuY3JlYXRlKCksXG4gICAgICAgICAgICAgICAgfSkpLnRvT3BlcmF0aW9uTm9kZSgpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGBvbiBkdXBsaWNhdGUga2V5IHVwZGF0ZWAgdG8gdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogSWYgeW91IHNwZWNpZnkgYG9uIGR1cGxpY2F0ZSBrZXkgdXBkYXRlYCwgYW5kIGEgcm93IGlzIGluc2VydGVkIHRoYXQgd291bGQgY2F1c2VcbiAgICAgKiBhIGR1cGxpY2F0ZSB2YWx1ZSBpbiBhIHVuaXF1ZSBpbmRleCBvciBwcmltYXJ5IGtleSwgYW4gdXBkYXRlIG9mIHRoZSBvbGQgcm93IG9jY3Vycy5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBieSBzb21lIGRpYWxlY3RzIGxpa2UgTXlTUUwuIE9uIG1vc3QgZGlhbGVjdHMgeW91IHNob3VsZFxuICAgICAqIHVzZSB7QGxpbmsgb25Db25mbGljdH0gaW5zdGVhZC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAudmFsdWVzKHtcbiAgICAgKiAgICAgaWQ6IDEsXG4gICAgICogICAgIGZpcnN0X25hbWU6ICdKb2huJyxcbiAgICAgKiAgICAgbGFzdF9uYW1lOiAnRG9lJyxcbiAgICAgKiAgICAgZ2VuZGVyOiAnbWFsZScsXG4gICAgICogICB9KVxuICAgICAqICAgLm9uRHVwbGljYXRlS2V5VXBkYXRlKHsgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0pXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IGludG8gYHBlcnNvbmAgKGBpZGAsIGBmaXJzdF9uYW1lYCwgYGxhc3RfbmFtZWAsIGBnZW5kZXJgKVxuICAgICAqIHZhbHVlcyAoPywgPywgPywgPylcbiAgICAgKiBvbiBkdXBsaWNhdGUga2V5IHVwZGF0ZSBgdXBkYXRlZF9hdGAgPSA/XG4gICAgICogYGBgXG4gICAgICovXG4gICAgb25EdXBsaWNhdGVLZXlVcGRhdGUodXBkYXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBJbnNlcnRRdWVyeU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwge1xuICAgICAgICAgICAgICAgIG9uRHVwbGljYXRlS2V5OiBPbkR1cGxpY2F0ZUtleU5vZGUuY3JlYXRlKHBhcnNlVXBkYXRlT2JqZWN0RXhwcmVzc2lvbih1cGRhdGUpKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuaW5nKHNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFJldHVybmluZyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QXJnKHNlbGVjdGlvbikpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuaW5nQWxsKCkge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFJldHVybmluZyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QWxsKCkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3V0cHV0KGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhPdXRwdXQodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVNlbGVjdEFyZyhhcmdzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvdXRwdXRBbGwodGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhPdXRwdXQodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVNlbGVjdEFsbCh0YWJsZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIGFsbCBgcmV0dXJuaW5nYCBjbGF1c2VzIGZyb20gdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAudmFsdWVzKHsgZmlyc3RfbmFtZTogJ0phbWVzJywgbGFzdF9uYW1lOiAnU21pdGgnLCBnZW5kZXI6ICdtYWxlJyB9KVxuICAgICAqICAgLnJldHVybmluZyhbJ2ZpcnN0X25hbWUnXSlcbiAgICAgKiAgIC5jbGVhclJldHVybmluZygpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGVyc29uXCIgKFwiZmlyc3RfbmFtZVwiLCBcImxhc3RfbmFtZVwiLCBcImdlbmRlclwiKSB2YWx1ZXMgKCQxLCAkMiwgJDMpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgY2xlYXJSZXR1cm5pbmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRob3V0UmV0dXJuaW5nKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqXG4gICAgICogSWYgeW91IHdhbnQgdG8gY29uZGl0aW9uYWxseSBjYWxsIGEgbWV0aG9kIG9uIGB0aGlzYCwgc2VlXG4gICAgICogdGhlIHtAbGluayAkaWZ9IG1ldGhvZC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogVGhlIG5leHQgZXhhbXBsZSB1c2VzIGEgaGVscGVyIGZ1bmN0aW9uIGBsb2dgIHRvIGxvZyBhIHF1ZXJ5OlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgdHlwZSB7IENvbXBpbGFibGUgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBsb2c8VCBleHRlbmRzIENvbXBpbGFibGU+KHFiOiBUKTogVCB7XG4gICAgICogICBjb25zb2xlLmxvZyhxYi5jb21waWxlKCkpXG4gICAgICogICByZXR1cm4gcWJcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBhd2FpdCBkYi5pbnNlcnRJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnZhbHVlcyh7IGZpcnN0X25hbWU6ICdKb2huJywgbGFzdF9uYW1lOiAnRG9lJywgZ2VuZGVyOiAnbWFsZScgfSlcbiAgICAgKiAgIC4kY2FsbChsb2cpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCBgZnVuYyh0aGlzKWAgaWYgYGNvbmRpdGlvbmAgaXMgdHJ1ZS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGVzcGVjaWFsbHkgaGFuZHkgd2l0aCBvcHRpb25hbCBzZWxlY3RzLiBBbnkgYHJldHVybmluZ2Agb3IgYHJldHVybmluZ0FsbGBcbiAgICAgKiBtZXRob2QgY2FsbHMgYWRkIGNvbHVtbnMgYXMgb3B0aW9uYWwgZmllbGRzIHRvIHRoZSBvdXRwdXQgdHlwZSB3aGVuIGNhbGxlZCBpbnNpZGVcbiAgICAgKiB0aGUgYGZ1bmNgIGNhbGxiYWNrLiBUaGlzIGlzIGJlY2F1c2Ugd2UgY2FuJ3Qga25vdyBpZiB0aG9zZSBzZWxlY3Rpb25zIHdlcmUgYWN0dWFsbHlcbiAgICAgKiBtYWRlIGJlZm9yZSBydW5uaW5nIHRoZSBjb2RlLlxuICAgICAqXG4gICAgICogWW91IGNhbiBhbHNvIGNhbGwgYW55IG90aGVyIG1ldGhvZHMgaW5zaWRlIHRoZSBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgdHlwZSB7IE5ld1BlcnNvbiB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gICAgICpcbiAgICAgKiBhc3luYyBmdW5jdGlvbiBpbnNlcnRQZXJzb24odmFsdWVzOiBOZXdQZXJzb24sIHJldHVybkxhc3ROYW1lOiBib29sZWFuKSB7XG4gICAgICogICByZXR1cm4gYXdhaXQgZGJcbiAgICAgKiAgICAgLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAgIC52YWx1ZXModmFsdWVzKVxuICAgICAqICAgICAucmV0dXJuaW5nKFsnaWQnLCAnZmlyc3RfbmFtZSddKVxuICAgICAqICAgICAuJGlmKHJldHVybkxhc3ROYW1lLCAocWIpID0+IHFiLnJldHVybmluZygnbGFzdF9uYW1lJykpXG4gICAgICogICAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQW55IHNlbGVjdGlvbnMgYWRkZWQgaW5zaWRlIHRoZSBgaWZgIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYXMgb3B0aW9uYWwgZmllbGRzIHRvIHRoZVxuICAgICAqIG91dHB1dCB0eXBlIHNpbmNlIHdlIGNhbid0IGtub3cgaWYgdGhlIHNlbGVjdGlvbnMgd2VyZSBhY3R1YWxseSBtYWRlIGJlZm9yZSBydW5uaW5nXG4gICAgICogdGhlIGNvZGUuIEluIHRoZSBleGFtcGxlIGFib3ZlIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgYGluc2VydFBlcnNvbmAgZnVuY3Rpb24gaXM6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIFByb21pc2U8e1xuICAgICAqICAgaWQ6IG51bWJlclxuICAgICAqICAgZmlyc3RfbmFtZTogc3RyaW5nXG4gICAgICogICBsYXN0X25hbWU/OiBzdHJpbmdcbiAgICAgKiB9PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgICRpZihjb25kaXRpb24sIGZ1bmMpIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIG91dHB1dCB0eXBlIG9mIHRoZSBxdWVyeS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGNhbGwgZG9lc24ndCBjaGFuZ2UgdGhlIFNRTCBpbiBhbnkgd2F5LiBUaGlzIG1ldGhvZHMgc2ltcGx5XG4gICAgICogcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBgSW5zZXJ0UXVlcnlCdWlsZGVyYCB3aXRoIGEgbmV3IG91dHB1dCB0eXBlLlxuICAgICAqL1xuICAgICRjYXN0VG8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHRoaXMuI3Byb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTmFycm93cyAocGFydHMgb2YpIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiBLeXNlbHkgdHJpZXMgdG8gYmUgYXMgdHlwZS1zYWZlIGFzIHBvc3NpYmxlLCBidXQgaW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIG1ha2VcbiAgICAgKiBjb21wcm9taXNlcyBmb3IgYmV0dGVyIG1haW50YWluYWJpbGl0eSBhbmQgY29tcGlsYXRpb24gcGVyZm9ybWFuY2UuIEF0IHByZXNlbnQsXG4gICAgICogS3lzZWx5IGRvZXNuJ3QgbmFycm93IHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgcXVlcnkgYmFzZWQgb24ge0BsaW5rIHZhbHVlc30gaW5wdXRcbiAgICAgKiB3aGVuIHVzaW5nIHtAbGluayByZXR1cm5pbmd9IG9yIHtAbGluayByZXR1cm5pbmdBbGx9LlxuICAgICAqXG4gICAgICogVGhpcyB1dGlsaXR5IG1ldGhvZCBpcyB2ZXJ5IHVzZWZ1bCBmb3IgdGhlc2Ugc2l0dWF0aW9ucywgYXMgaXQgcmVtb3ZlcyB1bm5jZXNzYXJ5XG4gICAgICogcnVudGltZSBhc3NlcnRpb24vZ3VhcmQgY29kZS4gSXRzIGlucHV0IHR5cGUgaXMgbGltaXRlZCB0byB0aGUgb3V0cHV0IHR5cGVcbiAgICAgKiBvZiB0aGUgcXVlcnksIHNvIHlvdSBjYW4ndCBhZGQgYSBjb2x1bW4gdGhhdCBkb2Vzbid0IGV4aXN0LCBvciBjaGFuZ2UgYSBjb2x1bW4nc1xuICAgICAqIHR5cGUgdG8gc29tZXRoaW5nIHRoYXQgZG9lc24ndCBleGlzdCBpbiBpdHMgdW5pb24gdHlwZS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogVHVybiB0aGlzIGNvZGU6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgUGVyc29uIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAgICAgKlxuICAgICAqIGNvbnN0IHBlcnNvbiA9IGF3YWl0IGRiLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAudmFsdWVzKHtcbiAgICAgKiAgICAgZmlyc3RfbmFtZTogJ0pvaG4nLFxuICAgICAqICAgICBsYXN0X25hbWU6ICdEb2UnLFxuICAgICAqICAgICBnZW5kZXI6ICdtYWxlJyxcbiAgICAgKiAgICAgbnVsbGFibGVfY29sdW1uOiAnaGVsbCB5ZWFoISdcbiAgICAgKiAgIH0pXG4gICAgICogICAucmV0dXJuaW5nQWxsKClcbiAgICAgKiAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICpcbiAgICAgKiBpZiAoaXNXaXRoTm9OdWxsVmFsdWUocGVyc29uKSkge1xuICAgICAqICAgZnVuY3Rpb25UaGF0RXhwZWN0c1BlcnNvbldpdGhOb25OdWxsVmFsdWUocGVyc29uKVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGlzV2l0aE5vTnVsbFZhbHVlKHBlcnNvbjogUGVyc29uKTogcGVyc29uIGlzIFBlcnNvbiAmIHsgbnVsbGFibGVfY29sdW1uOiBzdHJpbmcgfSB7XG4gICAgICogICByZXR1cm4gcGVyc29uLm51bGxhYmxlX2NvbHVtbiAhPSBudWxsXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogSW50byB0aGlzOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgdHlwZSB7IE5vdE51bGwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBjb25zdCBwZXJzb24gPSBhd2FpdCBkYi5pbnNlcnRJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnZhbHVlcyh7XG4gICAgICogICAgIGZpcnN0X25hbWU6ICdKb2huJyxcbiAgICAgKiAgICAgbGFzdF9uYW1lOiAnRG9lJyxcbiAgICAgKiAgICAgZ2VuZGVyOiAnbWFsZScsXG4gICAgICogICAgIG51bGxhYmxlX2NvbHVtbjogJ2hlbGwgeWVhaCEnXG4gICAgICogICB9KVxuICAgICAqICAgLnJldHVybmluZ0FsbCgpXG4gICAgICogICAuJG5hcnJvd1R5cGU8eyBudWxsYWJsZV9jb2x1bW46IE5vdE51bGwgfT4oKVxuICAgICAqICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uVGhhdEV4cGVjdHNQZXJzb25XaXRoTm9uTnVsbFZhbHVlKHBlcnNvbilcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAkbmFycm93VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIodGhpcy4jcHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3NlcnRzIHRoYXQgcXVlcnkncyBvdXRwdXQgcm93IHR5cGUgZXF1YWxzIHRoZSBnaXZlbiB0eXBlIGBUYC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHNpbXBsaWZ5IGV4Y2Vzc2l2ZWx5IGNvbXBsZXggdHlwZXMgdG8gbWFrZSBUeXBlU2NyaXB0IGhhcHB5XG4gICAgICogYW5kIG11Y2ggZmFzdGVyLlxuICAgICAqXG4gICAgICogS3lzZWx5IHVzZXMgY29tcGxleCB0eXBlIG1hZ2ljIHRvIGFjaGlldmUgaXRzIHR5cGUgc2FmZXR5LiBUaGlzIGNvbXBsZXhpdHkgaXMgc29tZXRpbWVzIHRvbyBtdWNoXG4gICAgICogZm9yIFR5cGVTY3JpcHQgYW5kIHlvdSBnZXQgZXJyb3JzIGxpa2UgdGhpczpcbiAgICAgKlxuICAgICAqIGBgYFxuICAgICAqIGVycm9yIFRTMjU4OTogVHlwZSBpbnN0YW50aWF0aW9uIGlzIGV4Y2Vzc2l2ZWx5IGRlZXAgYW5kIHBvc3NpYmx5IGluZmluaXRlLlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogSW4gdGhlc2UgY2FzZSB5b3UgY2FuIG9mdGVuIHVzZSB0aGlzIG1ldGhvZCB0byBoZWxwIFR5cGVTY3JpcHQgYSBsaXR0bGUgYml0LiBXaGVuIHlvdSB1c2UgdGhpc1xuICAgICAqIG1ldGhvZCB0byBhc3NlcnQgdGhlIG91dHB1dCB0eXBlIG9mIGEgcXVlcnksIEt5c2VseSBjYW4gZHJvcCB0aGUgY29tcGxleCBvdXRwdXQgdHlwZSB0aGF0XG4gICAgICogY29uc2lzdHMgb2YgbXVsdGlwbGUgbmVzdGVkIGhlbHBlciB0eXBlcyBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoZSBzaW1wbGUgYXNzZXJ0ZWQgdHlwZS5cbiAgICAgKlxuICAgICAqIFVzaW5nIHRoaXMgbWV0aG9kIGRvZXNuJ3QgcmVkdWNlIHR5cGUgc2FmZXR5IGF0IGFsbC4gWW91IGhhdmUgdG8gcGFzcyBpbiBhIHR5cGUgdGhhdCBpc1xuICAgICAqIHN0cnVjdHVyYWxseSBlcXVhbCB0byB0aGUgY3VycmVudCB0eXBlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgTmV3UGVyc29uLCBOZXdQZXQsIFNwZWNpZXMgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICAgICAqXG4gICAgICogYXN5bmMgZnVuY3Rpb24gaW5zZXJ0UGVyc29uQW5kUGV0KHBlcnNvbjogTmV3UGVyc29uLCBwZXQ6IE9taXQ8TmV3UGV0LCAnb3duZXJfaWQnPikge1xuICAgICAqICAgcmV0dXJuIGF3YWl0IGRiXG4gICAgICogICAgIC53aXRoKCduZXdfcGVyc29uJywgKHFiKSA9PiBxYlxuICAgICAqICAgICAgIC5pbnNlcnRJbnRvKCdwZXJzb24nKVxuICAgICAqICAgICAgIC52YWx1ZXMocGVyc29uKVxuICAgICAqICAgICAgIC5yZXR1cm5pbmcoJ2lkJylcbiAgICAgKiAgICAgICAuJGFzc2VydFR5cGU8eyBpZDogbnVtYmVyIH0+KClcbiAgICAgKiAgICAgKVxuICAgICAqICAgICAud2l0aCgnbmV3X3BldCcsIChxYikgPT4gcWJcbiAgICAgKiAgICAgICAuaW5zZXJ0SW50bygncGV0JylcbiAgICAgKiAgICAgICAudmFsdWVzKChlYikgPT4gKHtcbiAgICAgKiAgICAgICAgIG93bmVyX2lkOiBlYi5zZWxlY3RGcm9tKCduZXdfcGVyc29uJykuc2VsZWN0KCdpZCcpLFxuICAgICAqICAgICAgICAgLi4ucGV0XG4gICAgICogICAgICAgfSkpXG4gICAgICogICAgICAgLnJldHVybmluZyhbJ25hbWUgYXMgcGV0X25hbWUnLCAnc3BlY2llcyddKVxuICAgICAqICAgICAgIC4kYXNzZXJ0VHlwZTx7IHBldF9uYW1lOiBzdHJpbmcsIHNwZWNpZXM6IFNwZWNpZXMgfT4oKVxuICAgICAqICAgICApXG4gICAgICogICAgIC5zZWxlY3RGcm9tKFsnbmV3X3BlcnNvbicsICduZXdfcGV0J10pXG4gICAgICogICAgIC5zZWxlY3RBbGwoKVxuICAgICAqICAgICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAkYXNzZXJ0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIodGhpcy4jcHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29weSBvZiB0aGlzIEluc2VydFF1ZXJ5QnVpbGRlciBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbiBwbHVnaW4gaW5zdGFsbGVkLlxuICAgICAqL1xuICAgIHdpdGhQbHVnaW4ocGx1Z2luKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhQbHVnaW4ocGx1Z2luKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBxdWVyeSBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiByb3dzLlxuICAgICAqXG4gICAgICogQWxzbyBzZWUgdGhlIHtAbGluayBleGVjdXRlVGFrZUZpcnN0fSBhbmQge0BsaW5rIGV4ZWN1dGVUYWtlRmlyc3RPclRocm93fSBtZXRob2RzLlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBpbGVkUXVlcnkgPSB0aGlzLmNvbXBpbGUoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KGNvbXBpbGVkUXVlcnksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgICAgICBjb25zdCB7IGFkYXB0ZXIgfSA9IHRoaXMuI3Byb3BzLmV4ZWN1dG9yO1xuICAgICAgICBjb25zdCBxdWVyeSA9IGNvbXBpbGVkUXVlcnkucXVlcnk7XG4gICAgICAgIGlmICgocXVlcnkucmV0dXJuaW5nICYmIGFkYXB0ZXIuc3VwcG9ydHNSZXR1cm5pbmcpIHx8XG4gICAgICAgICAgICAocXVlcnkub3V0cHV0ICYmIGFkYXB0ZXIuc3VwcG9ydHNPdXRwdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBJbnNlcnRSZXN1bHQocmVzdWx0Lmluc2VydElkLCByZXN1bHQubnVtQWZmZWN0ZWRSb3dzID8/IEJpZ0ludCgwKSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBxdWVyeSBhbmQgcmV0dXJucyB0aGUgZmlyc3QgcmVzdWx0IG9yIHVuZGVmaW5lZCBpZlxuICAgICAqIHRoZSBxdWVyeSByZXR1cm5lZCBubyByZXN1bHQuXG4gICAgICovXG4gICAgYXN5bmMgZXhlY3V0ZVRha2VGaXJzdCgpIHtcbiAgICAgICAgY29uc3QgW3Jlc3VsdF0gPSBhd2FpdCB0aGlzLmV4ZWN1dGUoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHF1ZXJ5IGFuZCByZXR1cm5zIHRoZSBmaXJzdCByZXN1bHQgb3IgdGhyb3dzIGlmXG4gICAgICogdGhlIHF1ZXJ5IHJldHVybmVkIG5vIHJlc3VsdC5cbiAgICAgKlxuICAgICAqIEJ5IGRlZmF1bHQgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIE5vUmVzdWx0RXJyb3J9IGlzIHRocm93biwgYnV0IHlvdSBjYW5cbiAgICAgKiBwcm92aWRlIGEgY3VzdG9tIGVycm9yIGNsYXNzLCBvciBjYWxsYmFjayBhcyB0aGUgb25seSBhcmd1bWVudCB0byB0aHJvdyBhIGRpZmZlcmVudFxuICAgICAqIGVycm9yLlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGVUYWtlRmlyc3RPclRocm93KGVycm9yQ29uc3RydWN0b3IgPSBOb1Jlc3VsdEVycm9yKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZVRha2VGaXJzdCgpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNOb1Jlc3VsdEVycm9yQ29uc3RydWN0b3IoZXJyb3JDb25zdHJ1Y3RvcilcbiAgICAgICAgICAgICAgICA/IG5ldyBlcnJvckNvbnN0cnVjdG9yKHRoaXMudG9PcGVyYXRpb25Ob2RlKCkpXG4gICAgICAgICAgICAgICAgOiBlcnJvckNvbnN0cnVjdG9yKHRoaXMudG9PcGVyYXRpb25Ob2RlKCkpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgKnN0cmVhbShjaHVua1NpemUgPSAxMDApIHtcbiAgICAgICAgY29uc3QgY29tcGlsZWRRdWVyeSA9IHRoaXMuY29tcGlsZSgpO1xuICAgICAgICBjb25zdCBzdHJlYW0gPSB0aGlzLiNwcm9wcy5leGVjdXRvci5zdHJlYW0oY29tcGlsZWRRdWVyeSwgY2h1bmtTaXplLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIHN0cmVhbSkge1xuICAgICAgICAgICAgeWllbGQqIGl0ZW0ucm93cztcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBleHBsYWluKGZvcm1hdCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEV4cGxhaW4odGhpcy4jcHJvcHMucXVlcnlOb2RlLCBmb3JtYXQsIG9wdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGJ1aWxkZXIuZXhlY3V0ZSgpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZGVsZXRlLXJlc3VsdC5kLnRzXCIgLz5cbmV4cG9ydCBjbGFzcyBEZWxldGVSZXN1bHQge1xuICAgIG51bURlbGV0ZWRSb3dzO1xuICAgIGNvbnN0cnVjdG9yKG51bURlbGV0ZWRSb3dzKSB7XG4gICAgICAgIHRoaXMubnVtRGVsZXRlZFJvd3MgPSBudW1EZWxldGVkUm93cztcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2xpbWl0LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTGltaXROb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdMaW1pdE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGxpbWl0KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0xpbWl0Tm9kZScsXG4gICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kZWxldGUtcXVlcnktYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IHBhcnNlSm9pbiwgfSBmcm9tICcuLi9wYXJzZXIvam9pbi1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VUYWJsZUV4cHJlc3Npb25Pckxpc3QsIH0gZnJvbSAnLi4vcGFyc2VyL3RhYmxlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVNlbGVjdEFyZywgcGFyc2VTZWxlY3RBbGwsIH0gZnJvbSAnLi4vcGFyc2VyL3NlbGVjdC1wYXJzZXIuanMnO1xuaW1wb3J0IHsgUXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBpc05vUmVzdWx0RXJyb3JDb25zdHJ1Y3RvciwgTm9SZXN1bHRFcnJvciwgfSBmcm9tICcuL25vLXJlc3VsdC1lcnJvci5qcyc7XG5pbXBvcnQgeyBEZWxldGVSZXN1bHQgfSBmcm9tICcuL2RlbGV0ZS1yZXN1bHQuanMnO1xuaW1wb3J0IHsgRGVsZXRlUXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvZGVsZXRlLXF1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgTGltaXROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvbGltaXQtbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZU9yZGVyQnksIH0gZnJvbSAnLi4vcGFyc2VyL29yZGVyLWJ5LXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uLCBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uLCB9IGZyb20gJy4uL3BhcnNlci9iaW5hcnktb3BlcmF0aW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVZhbHVlRXhwcmVzc2lvbiwgfSBmcm9tICcuLi9wYXJzZXIvdmFsdWUtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlVG9wIH0gZnJvbSAnLi4vcGFyc2VyL3RvcC1wYXJzZXIuanMnO1xuZXhwb3J0IGNsYXNzIERlbGV0ZVF1ZXJ5QnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgd2hlcmUoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFdoZXJlKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbihhcmdzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3aGVyZVJlZihsaHMsIG9wLCByaHMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWxldGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhXaGVyZSh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24obGhzLCBvcCwgcmhzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjbGVhcldoZXJlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aG91dFdoZXJlKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGEgYGRlbGV0ZSBmcm9tYCBxdWVyeSBpbnRvIGEgYGRlbGV0ZSB0b3AgZnJvbWAgcXVlcnkuXG4gICAgICpcbiAgICAgKiBgdG9wYCBjbGF1c2UgaXMgb25seSBzdXBwb3J0ZWQgYnkgc29tZSBkaWFsZWN0cyBsaWtlIE1TIFNRTCBTZXJ2ZXIuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIERlbGV0ZSB0aGUgZmlyc3QgNSByb3dzOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLmRlbGV0ZUZyb20oJ3BlcnNvbicpXG4gICAgICogICAudG9wKDUpXG4gICAgICogICAud2hlcmUoJ2FnZScsICc+JywgMTgpXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE1TIFNRTCBTZXJ2ZXIpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogZGVsZXRlIHRvcCg1KSBmcm9tIFwicGVyc29uXCIgd2hlcmUgXCJhZ2VcIiA+IEAxXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBEZWxldGUgdGhlIGZpcnN0IDUwJSBvZiByb3dzOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLmRlbGV0ZUZyb20oJ3BlcnNvbicpXG4gICAgICogICAudG9wKDUwLCAncGVyY2VudCcpXG4gICAgICogICAud2hlcmUoJ2FnZScsICc+JywgMTgpXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE1TIFNRTCBTZXJ2ZXIpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogZGVsZXRlIHRvcCg1MCkgcGVyY2VudCBmcm9tIFwicGVyc29uXCIgd2hlcmUgXCJhZ2VcIiA+IEAxXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdG9wKGV4cHJlc3Npb24sIG1vZGlmaWVycykge1xuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFRvcCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlVG9wKGV4cHJlc3Npb24sIG1vZGlmaWVycykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdXNpbmcodGFibGVzKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBEZWxldGVRdWVyeU5vZGUuY2xvbmVXaXRoVXNpbmcodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVRhYmxlRXhwcmVzc2lvbk9yTGlzdCh0YWJsZXMpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlubmVySm9pbiguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNqb2luKCdJbm5lckpvaW4nLCBhcmdzKTtcbiAgICB9XG4gICAgbGVmdEpvaW4oLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jam9pbignTGVmdEpvaW4nLCBhcmdzKTtcbiAgICB9XG4gICAgcmlnaHRKb2luKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2pvaW4oJ1JpZ2h0Sm9pbicsIGFyZ3MpO1xuICAgIH1cbiAgICBmdWxsSm9pbiguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNqb2luKCdGdWxsSm9pbicsIGFyZ3MpO1xuICAgIH1cbiAgICAjam9pbihqb2luVHlwZSwgYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEpvaW4odGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZUpvaW4oam9pblR5cGUsIGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybmluZyhzZWxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWxldGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhSZXR1cm5pbmcodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVNlbGVjdEFyZyhzZWxlY3Rpb24pKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybmluZ0FsbCh0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFJldHVybmluZyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QWxsKHRhYmxlKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvdXRwdXQoYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aE91dHB1dCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QXJnKGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG91dHB1dEFsbCh0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aE91dHB1dCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QWxsKHRhYmxlKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgYWxsIGByZXR1cm5pbmdgIGNsYXVzZXMgZnJvbSB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuZGVsZXRlRnJvbSgncGV0JylcbiAgICAgKiAgIC5yZXR1cm5pbmdBbGwoKVxuICAgICAqICAgLndoZXJlKCduYW1lJywgJz0nLCAnTWF4JylcbiAgICAgKiAgIC5jbGVhclJldHVybmluZygpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGRlbGV0ZSBmcm9tIFwicGV0XCIgd2hlcmUgXCJuYW1lXCIgPSBcIk1heFwiXG4gICAgICogYGBgXG4gICAgICovXG4gICAgY2xlYXJSZXR1cm5pbmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRob3V0UmV0dXJuaW5nKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIGBsaW1pdGAgY2xhdXNlIGZyb20gdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLmRlbGV0ZUZyb20oJ3BldCcpXG4gICAgICogICAucmV0dXJuaW5nQWxsKClcbiAgICAgKiAgIC53aGVyZSgnbmFtZScsICc9JywgJ01heCcpXG4gICAgICogICAubGltaXQoNSlcbiAgICAgKiAgIC5jbGVhckxpbWl0KClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogZGVsZXRlIGZyb20gXCJwZXRcIiB3aGVyZSBcIm5hbWVcIiA9IFwiTWF4XCIgcmV0dXJuaW5nICpcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjbGVhckxpbWl0KCkge1xuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogRGVsZXRlUXVlcnlOb2RlLmNsb25lV2l0aG91dExpbWl0KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvcmRlckJ5KC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWxldGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhPcmRlckJ5SXRlbXModGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZU9yZGVyQnkoYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xlYXJPcmRlckJ5KCkge1xuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aG91dE9yZGVyQnkodGhpcy4jcHJvcHMucXVlcnlOb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBsaW1pdCBjbGF1c2UgdG8gdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogQSBsaW1pdCBjbGF1c2UgaW4gYSBkZWxldGUgcXVlcnkgaXMgb25seSBzdXBwb3J0ZWQgYnkgc29tZSBkaWFsZWN0c1xuICAgICAqIGxpa2UgTXlTUUwuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIERlbGV0ZSA1IG9sZGVzdCBpdGVtcyBpbiBhIHRhYmxlOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLmRlbGV0ZUZyb20oJ3BldCcpXG4gICAgICogICAub3JkZXJCeSgnY3JlYXRlZF9hdCcpXG4gICAgICogICAubGltaXQoNSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBkZWxldGUgZnJvbSBgcGV0YCBvcmRlciBieSBgY3JlYXRlZF9hdGAgbGltaXQgP1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGxpbWl0KGxpbWl0KSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBEZWxldGVRdWVyeU5vZGUuY2xvbmVXaXRoTGltaXQodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBMaW1pdE5vZGUuY3JlYXRlKHBhcnNlVmFsdWVFeHByZXNzaW9uKGxpbWl0KSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBhZGQgYW55IGFkZGl0aW9uYWwgU1FMIHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLmRlbGV0ZUZyb20oJ3BlcnNvbicpXG4gICAgICogICAud2hlcmUoJ2ZpcnN0X25hbWUnLCAnPScsICdKb2huJylcbiAgICAgKiAgIC5tb2RpZnlFbmQoc3FsYC0tIFRoaXMgaXMgYSBjb21tZW50YClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBkZWxldGUgZnJvbSBgcGVyc29uYFxuICAgICAqIHdoZXJlIGBmaXJzdF9uYW1lYCA9IFwiSm9oblwiIC0tIFRoaXMgaXMgYSBjb21tZW50XG4gICAgICogYGBgXG4gICAgICovXG4gICAgbW9kaWZ5RW5kKG1vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoRW5kTW9kaWZpZXIodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBtb2RpZmllci50b09wZXJhdGlvbk5vZGUoKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqXG4gICAgICogSWYgeW91IHdhbnQgdG8gY29uZGl0aW9uYWxseSBjYWxsIGEgbWV0aG9kIG9uIGB0aGlzYCwgc2VlXG4gICAgICogdGhlIHtAbGluayAkaWZ9IG1ldGhvZC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogVGhlIG5leHQgZXhhbXBsZSB1c2VzIGEgaGVscGVyIGZ1bmN0aW9uIGBsb2dgIHRvIGxvZyBhIHF1ZXJ5OlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgdHlwZSB7IENvbXBpbGFibGUgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBsb2c8VCBleHRlbmRzIENvbXBpbGFibGU+KHFiOiBUKTogVCB7XG4gICAgICogICBjb25zb2xlLmxvZyhxYi5jb21waWxlKCkpXG4gICAgICogICByZXR1cm4gcWJcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBhd2FpdCBkYi5kZWxldGVGcm9tKCdwZXJzb24nKVxuICAgICAqICAgLiRjYWxsKGxvZylcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsIGBmdW5jKHRoaXMpYCBpZiBgY29uZGl0aW9uYCBpcyB0cnVlLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgZXNwZWNpYWxseSBoYW5keSB3aXRoIG9wdGlvbmFsIHNlbGVjdHMuIEFueSBgcmV0dXJuaW5nYCBvciBgcmV0dXJuaW5nQWxsYFxuICAgICAqIG1ldGhvZCBjYWxscyBhZGQgY29sdW1ucyBhcyBvcHRpb25hbCBmaWVsZHMgdG8gdGhlIG91dHB1dCB0eXBlIHdoZW4gY2FsbGVkIGluc2lkZVxuICAgICAqIHRoZSBgZnVuY2AgY2FsbGJhY2suIFRoaXMgaXMgYmVjYXVzZSB3ZSBjYW4ndCBrbm93IGlmIHRob3NlIHNlbGVjdGlvbnMgd2VyZSBhY3R1YWxseVxuICAgICAqIG1hZGUgYmVmb3JlIHJ1bm5pbmcgdGhlIGNvZGUuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIGFsc28gY2FsbCBhbnkgb3RoZXIgbWV0aG9kcyBpbnNpZGUgdGhlIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVBlcnNvbihpZDogbnVtYmVyLCByZXR1cm5MYXN0TmFtZTogYm9vbGVhbikge1xuICAgICAqICAgcmV0dXJuIGF3YWl0IGRiXG4gICAgICogICAgIC5kZWxldGVGcm9tKCdwZXJzb24nKVxuICAgICAqICAgICAud2hlcmUoJ2lkJywgJz0nLCBpZClcbiAgICAgKiAgICAgLnJldHVybmluZyhbJ2lkJywgJ2ZpcnN0X25hbWUnXSlcbiAgICAgKiAgICAgLiRpZihyZXR1cm5MYXN0TmFtZSwgKHFiKSA9PiBxYi5yZXR1cm5pbmcoJ2xhc3RfbmFtZScpKVxuICAgICAqICAgICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEFueSBzZWxlY3Rpb25zIGFkZGVkIGluc2lkZSB0aGUgYGlmYCBjYWxsYmFjayB3aWxsIGJlIGFkZGVkIGFzIG9wdGlvbmFsIGZpZWxkcyB0byB0aGVcbiAgICAgKiBvdXRwdXQgdHlwZSBzaW5jZSB3ZSBjYW4ndCBrbm93IGlmIHRoZSBzZWxlY3Rpb25zIHdlcmUgYWN0dWFsbHkgbWFkZSBiZWZvcmUgcnVubmluZ1xuICAgICAqIHRoZSBjb2RlLiBJbiB0aGUgZXhhbXBsZSBhYm92ZSB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGBkZWxldGVQZXJzb25gIGZ1bmN0aW9uIGlzOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBQcm9taXNlPHtcbiAgICAgKiAgIGlkOiBudW1iZXJcbiAgICAgKiAgIGZpcnN0X25hbWU6IHN0cmluZ1xuICAgICAqICAgbGFzdF9uYW1lPzogc3RyaW5nXG4gICAgICogfT5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAkaWYoY29uZGl0aW9uLCBmdW5jKSB7XG4gICAgICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBjYWxsIGRvZXNuJ3QgY2hhbmdlIHRoZSBTUUwgaW4gYW55IHdheS4gVGhpcyBtZXRob2RzIHNpbXBseVxuICAgICAqIHJldHVybnMgYSBjb3B5IG9mIHRoaXMgYERlbGV0ZVF1ZXJ5QnVpbGRlcmAgd2l0aCBhIG5ldyBvdXRwdXQgdHlwZS5cbiAgICAgKi9cbiAgICAkY2FzdFRvKCkge1xuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih0aGlzLiNwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgKHBhcnRzIG9mKSB0aGUgb3V0cHV0IHR5cGUgb2YgdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogS3lzZWx5IHRyaWVzIHRvIGJlIGFzIHR5cGUtc2FmZSBhcyBwb3NzaWJsZSwgYnV0IGluIHNvbWUgY2FzZXMgd2UgaGF2ZSB0byBtYWtlXG4gICAgICogY29tcHJvbWlzZXMgZm9yIGJldHRlciBtYWludGFpbmFiaWxpdHkgYW5kIGNvbXBpbGF0aW9uIHBlcmZvcm1hbmNlLiBBdCBwcmVzZW50LFxuICAgICAqIEt5c2VseSBkb2Vzbid0IG5hcnJvdyB0aGUgb3V0cHV0IHR5cGUgb2YgdGhlIHF1ZXJ5IHdoZW4gdXNpbmcge0BsaW5rIHdoZXJlfSBhbmQge0BsaW5rIHJldHVybmluZ30gb3Ige0BsaW5rIHJldHVybmluZ0FsbH0uXG4gICAgICpcbiAgICAgKiBUaGlzIHV0aWxpdHkgbWV0aG9kIGlzIHZlcnkgdXNlZnVsIGZvciB0aGVzZSBzaXR1YXRpb25zLCBhcyBpdCByZW1vdmVzIHVubmNlc3NhcnlcbiAgICAgKiBydW50aW1lIGFzc2VydGlvbi9ndWFyZCBjb2RlLiBJdHMgaW5wdXQgdHlwZSBpcyBsaW1pdGVkIHRvIHRoZSBvdXRwdXQgdHlwZVxuICAgICAqIG9mIHRoZSBxdWVyeSwgc28geW91IGNhbid0IGFkZCBhIGNvbHVtbiB0aGF0IGRvZXNuJ3QgZXhpc3QsIG9yIGNoYW5nZSBhIGNvbHVtbidzXG4gICAgICogdHlwZSB0byBzb21ldGhpbmcgdGhhdCBkb2Vzbid0IGV4aXN0IGluIGl0cyB1bmlvbiB0eXBlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBUdXJuIHRoaXMgY29kZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHR5cGUgeyBQZXJzb24gfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICAgICAqXG4gICAgICogY29uc3QgcGVyc29uID0gYXdhaXQgZGIuZGVsZXRlRnJvbSgncGVyc29uJylcbiAgICAgKiAgIC53aGVyZSgnaWQnLCAnPScsIDMpXG4gICAgICogICAud2hlcmUoJ251bGxhYmxlX2NvbHVtbicsICdpcyBub3QnLCBudWxsKVxuICAgICAqICAgLnJldHVybmluZ0FsbCgpXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqXG4gICAgICogaWYgKGlzV2l0aE5vTnVsbFZhbHVlKHBlcnNvbikpIHtcbiAgICAgKiAgIGZ1bmN0aW9uVGhhdEV4cGVjdHNQZXJzb25XaXRoTm9uTnVsbFZhbHVlKHBlcnNvbilcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBpc1dpdGhOb051bGxWYWx1ZShwZXJzb246IFBlcnNvbik6IHBlcnNvbiBpcyBQZXJzb24gJiB7IG51bGxhYmxlX2NvbHVtbjogc3RyaW5nIH0ge1xuICAgICAqICAgcmV0dXJuIHBlcnNvbi5udWxsYWJsZV9jb2x1bW4gIT0gbnVsbFxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEludG8gdGhpczpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHR5cGUgeyBOb3ROdWxsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogY29uc3QgcGVyc29uID0gYXdhaXQgZGIuZGVsZXRlRnJvbSgncGVyc29uJylcbiAgICAgKiAgIC53aGVyZSgnaWQnLCAnPScsIDMpXG4gICAgICogICAud2hlcmUoJ251bGxhYmxlX2NvbHVtbicsICdpcyBub3QnLCBudWxsKVxuICAgICAqICAgLnJldHVybmluZ0FsbCgpXG4gICAgICogICAuJG5hcnJvd1R5cGU8eyBudWxsYWJsZV9jb2x1bW46IE5vdE51bGwgfT4oKVxuICAgICAqICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uVGhhdEV4cGVjdHNQZXJzb25XaXRoTm9uTnVsbFZhbHVlKHBlcnNvbilcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAkbmFycm93VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWxldGVRdWVyeUJ1aWxkZXIodGhpcy4jcHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3NlcnRzIHRoYXQgcXVlcnkncyBvdXRwdXQgcm93IHR5cGUgZXF1YWxzIHRoZSBnaXZlbiB0eXBlIGBUYC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHNpbXBsaWZ5IGV4Y2Vzc2l2ZWx5IGNvbXBsZXggdHlwZXMgdG8gbWFrZSBUeXBlU2NyaXB0IGhhcHB5XG4gICAgICogYW5kIG11Y2ggZmFzdGVyLlxuICAgICAqXG4gICAgICogS3lzZWx5IHVzZXMgY29tcGxleCB0eXBlIG1hZ2ljIHRvIGFjaGlldmUgaXRzIHR5cGUgc2FmZXR5LiBUaGlzIGNvbXBsZXhpdHkgaXMgc29tZXRpbWVzIHRvbyBtdWNoXG4gICAgICogZm9yIFR5cGVTY3JpcHQgYW5kIHlvdSBnZXQgZXJyb3JzIGxpa2UgdGhpczpcbiAgICAgKlxuICAgICAqIGBgYFxuICAgICAqIGVycm9yIFRTMjU4OTogVHlwZSBpbnN0YW50aWF0aW9uIGlzIGV4Y2Vzc2l2ZWx5IGRlZXAgYW5kIHBvc3NpYmx5IGluZmluaXRlLlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogSW4gdGhlc2UgY2FzZSB5b3UgY2FuIG9mdGVuIHVzZSB0aGlzIG1ldGhvZCB0byBoZWxwIFR5cGVTY3JpcHQgYSBsaXR0bGUgYml0LiBXaGVuIHlvdSB1c2UgdGhpc1xuICAgICAqIG1ldGhvZCB0byBhc3NlcnQgdGhlIG91dHB1dCB0eXBlIG9mIGEgcXVlcnksIEt5c2VseSBjYW4gZHJvcCB0aGUgY29tcGxleCBvdXRwdXQgdHlwZSB0aGF0XG4gICAgICogY29uc2lzdHMgb2YgbXVsdGlwbGUgbmVzdGVkIGhlbHBlciB0eXBlcyBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoZSBzaW1wbGUgYXNzZXJ0ZWQgdHlwZS5cbiAgICAgKlxuICAgICAqIFVzaW5nIHRoaXMgbWV0aG9kIGRvZXNuJ3QgcmVkdWNlIHR5cGUgc2FmZXR5IGF0IGFsbC4gWW91IGhhdmUgdG8gcGFzcyBpbiBhIHR5cGUgdGhhdCBpc1xuICAgICAqIHN0cnVjdHVyYWxseSBlcXVhbCB0byB0aGUgY3VycmVudCB0eXBlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgU3BlY2llcyB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gICAgICpcbiAgICAgKiBhc3luYyBmdW5jdGlvbiBkZWxldGVQZXJzb25BbmRQZXRzKHBlcnNvbklkOiBudW1iZXIpIHtcbiAgICAgKiAgIHJldHVybiBhd2FpdCBkYlxuICAgICAqICAgICAud2l0aCgnZGVsZXRlZF9wZXJzb24nLCAocWIpID0+IHFiXG4gICAgICogICAgICAgIC5kZWxldGVGcm9tKCdwZXJzb24nKVxuICAgICAqICAgICAgICAud2hlcmUoJ2lkJywgJz0nLCBwZXJzb25JZClcbiAgICAgKiAgICAgICAgLnJldHVybmluZygnZmlyc3RfbmFtZScpXG4gICAgICogICAgICAgIC4kYXNzZXJ0VHlwZTx7IGZpcnN0X25hbWU6IHN0cmluZyB9PigpXG4gICAgICogICAgIClcbiAgICAgKiAgICAgLndpdGgoJ2RlbGV0ZWRfcGV0cycsIChxYikgPT4gcWJcbiAgICAgKiAgICAgICAuZGVsZXRlRnJvbSgncGV0JylcbiAgICAgKiAgICAgICAud2hlcmUoJ293bmVyX2lkJywgJz0nLCBwZXJzb25JZClcbiAgICAgKiAgICAgICAucmV0dXJuaW5nKFsnbmFtZSBhcyBwZXRfbmFtZScsICdzcGVjaWVzJ10pXG4gICAgICogICAgICAgLiRhc3NlcnRUeXBlPHsgcGV0X25hbWU6IHN0cmluZywgc3BlY2llczogU3BlY2llcyB9PigpXG4gICAgICogICAgIClcbiAgICAgKiAgICAgLnNlbGVjdEZyb20oWydkZWxldGVkX3BlcnNvbicsICdkZWxldGVkX3BldHMnXSlcbiAgICAgKiAgICAgLnNlbGVjdEFsbCgpXG4gICAgICogICAgIC5leGVjdXRlKClcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgJGFzc2VydFR5cGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHRoaXMuI3Byb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBEZWxldGVRdWVyeUJ1aWxkZXIgaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gcGx1Z2luIGluc3RhbGxlZC5cbiAgICAgKi9cbiAgICB3aXRoUGx1Z2luKHBsdWdpbikge1xuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNwcm9wcy5leGVjdXRvci53aXRoUGx1Z2luKHBsdWdpbiksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBjb21waWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IuY29tcGlsZVF1ZXJ5KHRoaXMudG9PcGVyYXRpb25Ob2RlKCksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyB0aGUgcXVlcnkgYW5kIHJldHVybnMgYW4gYXJyYXkgb2Ygcm93cy5cbiAgICAgKlxuICAgICAqIEFsc28gc2VlIHRoZSB7QGxpbmsgZXhlY3V0ZVRha2VGaXJzdH0gYW5kIHtAbGluayBleGVjdXRlVGFrZUZpcnN0T3JUaHJvd30gbWV0aG9kcy5cbiAgICAgKi9cbiAgICBhc3luYyBleGVjdXRlKCkge1xuICAgICAgICBjb25zdCBjb21waWxlZFF1ZXJ5ID0gdGhpcy5jb21waWxlKCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmV4ZWN1dGVRdWVyeShjb21waWxlZFF1ZXJ5LCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICAgICAgY29uc3QgeyBhZGFwdGVyIH0gPSB0aGlzLiNwcm9wcy5leGVjdXRvcjtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBjb21waWxlZFF1ZXJ5LnF1ZXJ5O1xuICAgICAgICBpZiAoKHF1ZXJ5LnJldHVybmluZyAmJiBhZGFwdGVyLnN1cHBvcnRzUmV0dXJuaW5nKSB8fFxuICAgICAgICAgICAgKHF1ZXJ5Lm91dHB1dCAmJiBhZGFwdGVyLnN1cHBvcnRzT3V0cHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yb3dzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbbmV3IERlbGV0ZVJlc3VsdChyZXN1bHQubnVtQWZmZWN0ZWRSb3dzID8/IEJpZ0ludCgwKSldO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyB0aGUgcXVlcnkgYW5kIHJldHVybnMgdGhlIGZpcnN0IHJlc3VsdCBvciB1bmRlZmluZWQgaWZcbiAgICAgKiB0aGUgcXVlcnkgcmV0dXJuZWQgbm8gcmVzdWx0LlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGVUYWtlRmlyc3QoKSB7XG4gICAgICAgIGNvbnN0IFtyZXN1bHRdID0gYXdhaXQgdGhpcy5leGVjdXRlKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBxdWVyeSBhbmQgcmV0dXJucyB0aGUgZmlyc3QgcmVzdWx0IG9yIHRocm93cyBpZlxuICAgICAqIHRoZSBxdWVyeSByZXR1cm5lZCBubyByZXN1bHQuXG4gICAgICpcbiAgICAgKiBCeSBkZWZhdWx0IGFuIGluc3RhbmNlIG9mIHtAbGluayBOb1Jlc3VsdEVycm9yfSBpcyB0aHJvd24sIGJ1dCB5b3UgY2FuXG4gICAgICogcHJvdmlkZSBhIGN1c3RvbSBlcnJvciBjbGFzcywgb3IgY2FsbGJhY2sgYXMgdGhlIG9ubHkgYXJndW1lbnQgdG8gdGhyb3cgYSBkaWZmZXJlbnRcbiAgICAgKiBlcnJvci5cbiAgICAgKi9cbiAgICBhc3luYyBleGVjdXRlVGFrZUZpcnN0T3JUaHJvdyhlcnJvckNvbnN0cnVjdG9yID0gTm9SZXN1bHRFcnJvcikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVUYWtlRmlyc3QoKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzTm9SZXN1bHRFcnJvckNvbnN0cnVjdG9yKGVycm9yQ29uc3RydWN0b3IpXG4gICAgICAgICAgICAgICAgPyBuZXcgZXJyb3JDb25zdHJ1Y3Rvcih0aGlzLnRvT3BlcmF0aW9uTm9kZSgpKVxuICAgICAgICAgICAgICAgIDogZXJyb3JDb25zdHJ1Y3Rvcih0aGlzLnRvT3BlcmF0aW9uTm9kZSgpKTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jICpzdHJlYW0oY2h1bmtTaXplID0gMTAwKSB7XG4gICAgICAgIGNvbnN0IGNvbXBpbGVkUXVlcnkgPSB0aGlzLmNvbXBpbGUoKTtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gdGhpcy4jcHJvcHMuZXhlY3V0b3Iuc3RyZWFtKGNvbXBpbGVkUXVlcnksIGNodW5rU2l6ZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiBzdHJlYW0pIHtcbiAgICAgICAgICAgIHlpZWxkKiBpdGVtLnJvd3M7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZXhwbGFpbihmb3JtYXQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBEZWxldGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhFeHBsYWluKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgZm9ybWF0LCBvcHRpb25zKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBidWlsZGVyLmV4ZWN1dGUoKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3VwZGF0ZS1yZXN1bHQuZC50c1wiIC8+XG5leHBvcnQgY2xhc3MgVXBkYXRlUmVzdWx0IHtcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHJvd3MgdGhlIHVwZGF0ZSBxdWVyeSB1cGRhdGVkIChldmVuIGlmIG5vdCBjaGFuZ2VkKS5cbiAgICAgKi9cbiAgICBudW1VcGRhdGVkUm93cztcbiAgICAvKipcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHJvd3MgdGhlIHVwZGF0ZSBxdWVyeSBjaGFuZ2VkLlxuICAgICAqXG4gICAgICogVGhpcyBpcyAqKm9wdGlvbmFsKiogYW5kIG9ubHkgc3VwcG9ydGVkIGluIGRpYWxlY3RzIHN1Y2ggYXMgTXlTUUwuXG4gICAgICogWW91IHdvdWxkIHByb2JhYmx5IHVzZSB7QGxpbmsgbnVtVXBkYXRlZFJvd3N9IGluIG1vc3QgY2FzZXMuXG4gICAgICovXG4gICAgbnVtQ2hhbmdlZFJvd3M7XG4gICAgY29uc3RydWN0b3IobnVtVXBkYXRlZFJvd3MsIG51bUNoYW5nZWRSb3dzKSB7XG4gICAgICAgIHRoaXMubnVtVXBkYXRlZFJvd3MgPSBudW1VcGRhdGVkUm93cztcbiAgICAgICAgdGhpcy5udW1DaGFuZ2VkUm93cyA9IG51bUNoYW5nZWRSb3dzO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vdXBkYXRlLXF1ZXJ5LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBwYXJzZUpvaW4sIH0gZnJvbSAnLi4vcGFyc2VyL2pvaW4tcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlVGFibGVFeHByZXNzaW9uT3JMaXN0LCB9IGZyb20gJy4uL3BhcnNlci90YWJsZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VTZWxlY3RBcmcsIHBhcnNlU2VsZWN0QWxsLCB9IGZyb20gJy4uL3BhcnNlci9zZWxlY3QtcGFyc2VyLmpzJztcbmltcG9ydCB7IFF1ZXJ5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3F1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgVXBkYXRlUXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvdXBkYXRlLXF1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VVcGRhdGUsIH0gZnJvbSAnLi4vcGFyc2VyL3VwZGF0ZS1zZXQtcGFyc2VyLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IFVwZGF0ZVJlc3VsdCB9IGZyb20gJy4vdXBkYXRlLXJlc3VsdC5qcyc7XG5pbXBvcnQgeyBpc05vUmVzdWx0RXJyb3JDb25zdHJ1Y3RvciwgTm9SZXN1bHRFcnJvciwgfSBmcm9tICcuL25vLXJlc3VsdC1lcnJvci5qcyc7XG5pbXBvcnQgeyBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uLCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uLCB9IGZyb20gJy4uL3BhcnNlci9iaW5hcnktb3BlcmF0aW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVZhbHVlRXhwcmVzc2lvbiwgfSBmcm9tICcuLi9wYXJzZXIvdmFsdWUtcGFyc2VyLmpzJztcbmltcG9ydCB7IExpbWl0Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2xpbWl0LW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VUb3AgfSBmcm9tICcuLi9wYXJzZXIvdG9wLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZU9yZGVyQnksIH0gZnJvbSAnLi4vcGFyc2VyL29yZGVyLWJ5LXBhcnNlci5qcyc7XG5leHBvcnQgY2xhc3MgVXBkYXRlUXVlcnlCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICB3aGVyZSguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoV2hlcmUodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uKGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdoZXJlUmVmKGxocywgb3AsIHJocykge1xuICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFdoZXJlKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VSZWZlcmVudGlhbEJpbmFyeU9wZXJhdGlvbihsaHMsIG9wLCByaHMpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFyV2hlcmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRob3V0V2hlcmUodGhpcy4jcHJvcHMucXVlcnlOb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgYW4gYHVwZGF0ZWAgcXVlcnkgaW50byBhIGB1cGRhdGUgdG9wYCBxdWVyeS5cbiAgICAgKlxuICAgICAqIGB0b3BgIGNsYXVzZSBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIGRpYWxlY3RzIGxpa2UgTVMgU1FMIFNlcnZlci5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogVXBkYXRlIHRoZSBmaXJzdCByb3c6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnVwZGF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLnRvcCgxKVxuICAgICAqICAgLnNldCh7IGZpcnN0X25hbWU6ICdGb28nIH0pXG4gICAgICogICAud2hlcmUoJ2FnZScsICc+JywgMTgpXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE1TIFNRTCBTZXJ2ZXIpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogdXBkYXRlIHRvcCgxKSBcInBlcnNvblwiIHNldCBcImZpcnN0X25hbWVcIiA9IEAxIHdoZXJlIFwiYWdlXCIgPiBAMlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVXBkYXRlIHRoZSA1MCUgZmlyc3Qgcm93czpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIudXBkYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAudG9wKDUwLCAncGVyY2VudCcpXG4gICAgICogICAuc2V0KHsgZmlyc3RfbmFtZTogJ0ZvbycgfSlcbiAgICAgKiAgIC53aGVyZSgnYWdlJywgJz4nLCAxOClcbiAgICAgKiAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTVMgU1FMIFNlcnZlcik6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiB1cGRhdGUgdG9wKDUwKSBwZXJjZW50IFwicGVyc29uXCIgc2V0IFwiZmlyc3RfbmFtZVwiID0gQDEgd2hlcmUgXCJhZ2VcIiA+IEAyXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdG9wKGV4cHJlc3Npb24sIG1vZGlmaWVycykge1xuICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFRvcCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlVG9wKGV4cHJlc3Npb24sIG1vZGlmaWVycykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnJvbShmcm9tKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBVcGRhdGVRdWVyeU5vZGUuY2xvbmVXaXRoRnJvbUl0ZW1zKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VUYWJsZUV4cHJlc3Npb25Pckxpc3QoZnJvbSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5uZXJKb2luKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2pvaW4oJ0lubmVySm9pbicsIGFyZ3MpO1xuICAgIH1cbiAgICBsZWZ0Sm9pbiguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNqb2luKCdMZWZ0Sm9pbicsIGFyZ3MpO1xuICAgIH1cbiAgICByaWdodEpvaW4oLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jam9pbignUmlnaHRKb2luJywgYXJncyk7XG4gICAgfVxuICAgIGZ1bGxKb2luKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2pvaW4oJ0Z1bGxKb2luJywgYXJncyk7XG4gICAgfVxuICAgICNqb2luKGpvaW5UeXBlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoSm9pbih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlSm9pbihqb2luVHlwZSwgYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3JkZXJCeSguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoT3JkZXJCeUl0ZW1zKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VPcmRlckJ5KGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFyT3JkZXJCeSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhvdXRPcmRlckJ5KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgbGltaXQgY2xhdXNlIHRvIHRoZSB1cGRhdGUgcXVlcnkgZm9yIHN1cHBvcnRlZCBkYXRhYmFzZXMsIHN1Y2ggYXMgTXlTUUwuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIFVwZGF0ZSB0aGUgZmlyc3QgMiByb3dzIGluIHRoZSAncGVyc29uJyB0YWJsZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC51cGRhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5zZXQoeyBmaXJzdF9uYW1lOiAnRm9vJyB9KVxuICAgICAqICAgLmxpbWl0KDIpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogdXBkYXRlIGBwZXJzb25gIHNldCBgZmlyc3RfbmFtZWAgPSA/IGxpbWl0ID9cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBsaW1pdChsaW1pdCkge1xuICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogVXBkYXRlUXVlcnlOb2RlLmNsb25lV2l0aExpbWl0KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgTGltaXROb2RlLmNyZWF0ZShwYXJzZVZhbHVlRXhwcmVzc2lvbihsaW1pdCkpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNldCguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBVcGRhdGVRdWVyeU5vZGUuY2xvbmVXaXRoVXBkYXRlcyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlVXBkYXRlKC4uLmFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybmluZyhzZWxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhSZXR1cm5pbmcodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVNlbGVjdEFyZyhzZWxlY3Rpb24pKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybmluZ0FsbCh0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFJldHVybmluZyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QWxsKHRhYmxlKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvdXRwdXQoYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aE91dHB1dCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QXJnKGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG91dHB1dEFsbCh0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aE91dHB1dCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QWxsKHRhYmxlKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZCBhbnkgYWRkaXRpb25hbCBTUUwgdG8gdGhlIGVuZCBvZiB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGIudXBkYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuc2V0KHsgYWdlOiAzOSB9KVxuICAgICAqICAgLndoZXJlKCdmaXJzdF9uYW1lJywgJz0nLCAnSm9obicpXG4gICAgICogICAubW9kaWZ5RW5kKHNxbC5yYXcoJy0tIFRoaXMgaXMgYSBjb21tZW50JykpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogdXBkYXRlIGBwZXJzb25gXG4gICAgICogc2V0IGBhZ2VgID0gMzlcbiAgICAgKiB3aGVyZSBgZmlyc3RfbmFtZWAgPSBcIkpvaG5cIiAtLSBUaGlzIGlzIGEgY29tbWVudFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG1vZGlmeUVuZChtb2RpZmllcikge1xuICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEVuZE1vZGlmaWVyKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgbW9kaWZpZXIudG9PcGVyYXRpb25Ob2RlKCkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIGFsbCBgcmV0dXJuaW5nYCBjbGF1c2VzIGZyb20gdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGRiLnVwZGF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLnJldHVybmluZ0FsbCgpXG4gICAgICogICAuc2V0KHsgYWdlOiAzOSB9KVxuICAgICAqICAgLndoZXJlKCdmaXJzdF9uYW1lJywgJz0nLCAnSm9obicpXG4gICAgICogICAuY2xlYXJSZXR1cm5pbmcoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiB1cGRhdGUgXCJwZXJzb25cIiBzZXQgXCJhZ2VcIiA9IDM5IHdoZXJlIFwiZmlyc3RfbmFtZVwiID0gXCJKb2huXCJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjbGVhclJldHVybmluZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhvdXRSZXR1cm5pbmcodGhpcy4jcHJvcHMucXVlcnlOb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBjb25kaXRpb25hbGx5IGNhbGwgYSBtZXRob2Qgb24gYHRoaXNgLCBzZWVcbiAgICAgKiB0aGUge0BsaW5rICRpZn0gbWV0aG9kLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBUaGUgbmV4dCBleGFtcGxlIHVzZXMgYSBoZWxwZXIgZnVuY3Rpb24gYGxvZ2AgdG8gbG9nIGEgcXVlcnk6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgQ29tcGlsYWJsZSB9IGZyb20gJ2t5c2VseSdcbiAgICAgKiBpbXBvcnQgdHlwZSB7IFBlcnNvblVwZGF0ZSB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBsb2c8VCBleHRlbmRzIENvbXBpbGFibGU+KHFiOiBUKTogVCB7XG4gICAgICogICBjb25zb2xlLmxvZyhxYi5jb21waWxlKCkpXG4gICAgICogICByZXR1cm4gcWJcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBjb25zdCB2YWx1ZXMgPSB7XG4gICAgICogICBmaXJzdF9uYW1lOiAnSm9obicsXG4gICAgICogfSBzYXRpc2ZpZXMgUGVyc29uVXBkYXRlXG4gICAgICpcbiAgICAgKiBkYi51cGRhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5zZXQodmFsdWVzKVxuICAgICAqICAgLiRjYWxsKGxvZylcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsIGBmdW5jKHRoaXMpYCBpZiBgY29uZGl0aW9uYCBpcyB0cnVlLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgZXNwZWNpYWxseSBoYW5keSB3aXRoIG9wdGlvbmFsIHNlbGVjdHMuIEFueSBgcmV0dXJuaW5nYCBvciBgcmV0dXJuaW5nQWxsYFxuICAgICAqIG1ldGhvZCBjYWxscyBhZGQgY29sdW1ucyBhcyBvcHRpb25hbCBmaWVsZHMgdG8gdGhlIG91dHB1dCB0eXBlIHdoZW4gY2FsbGVkIGluc2lkZVxuICAgICAqIHRoZSBgZnVuY2AgY2FsbGJhY2suIFRoaXMgaXMgYmVjYXVzZSB3ZSBjYW4ndCBrbm93IGlmIHRob3NlIHNlbGVjdGlvbnMgd2VyZSBhY3R1YWxseVxuICAgICAqIG1hZGUgYmVmb3JlIHJ1bm5pbmcgdGhlIGNvZGUuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIGFsc28gY2FsbCBhbnkgb3RoZXIgbWV0aG9kcyBpbnNpZGUgdGhlIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgUGVyc29uVXBkYXRlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVBlcnNvbihpZDogbnVtYmVyLCB1cGRhdGVzOiBQZXJzb25VcGRhdGUsIHJldHVybkxhc3ROYW1lOiBib29sZWFuKSB7XG4gICAgICogICByZXR1cm4gYXdhaXQgZGJcbiAgICAgKiAgICAgLnVwZGF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgICAuc2V0KHVwZGF0ZXMpXG4gICAgICogICAgIC53aGVyZSgnaWQnLCAnPScsIGlkKVxuICAgICAqICAgICAucmV0dXJuaW5nKFsnaWQnLCAnZmlyc3RfbmFtZSddKVxuICAgICAqICAgICAuJGlmKHJldHVybkxhc3ROYW1lLCAocWIpID0+IHFiLnJldHVybmluZygnbGFzdF9uYW1lJykpXG4gICAgICogICAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQW55IHNlbGVjdGlvbnMgYWRkZWQgaW5zaWRlIHRoZSBgaWZgIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYXMgb3B0aW9uYWwgZmllbGRzIHRvIHRoZVxuICAgICAqIG91dHB1dCB0eXBlIHNpbmNlIHdlIGNhbid0IGtub3cgaWYgdGhlIHNlbGVjdGlvbnMgd2VyZSBhY3R1YWxseSBtYWRlIGJlZm9yZSBydW5uaW5nXG4gICAgICogdGhlIGNvZGUuIEluIHRoZSBleGFtcGxlIGFib3ZlIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgYHVwZGF0ZVBlcnNvbmAgZnVuY3Rpb24gaXM6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIFByb21pc2U8e1xuICAgICAqICAgaWQ6IG51bWJlclxuICAgICAqICAgZmlyc3RfbmFtZTogc3RyaW5nXG4gICAgICogICBsYXN0X25hbWU/OiBzdHJpbmdcbiAgICAgKiB9PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgICRpZihjb25kaXRpb24sIGZ1bmMpIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIG91dHB1dCB0eXBlIG9mIHRoZSBxdWVyeS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGNhbGwgZG9lc24ndCBjaGFuZ2UgdGhlIFNRTCBpbiBhbnkgd2F5LiBUaGlzIG1ldGhvZHMgc2ltcGx5XG4gICAgICogcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBgVXBkYXRlUXVlcnlCdWlsZGVyYCB3aXRoIGEgbmV3IG91dHB1dCB0eXBlLlxuICAgICAqL1xuICAgICRjYXN0VG8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHRoaXMuI3Byb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTmFycm93cyAocGFydHMgb2YpIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiBLeXNlbHkgdHJpZXMgdG8gYmUgYXMgdHlwZS1zYWZlIGFzIHBvc3NpYmxlLCBidXQgaW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIG1ha2VcbiAgICAgKiBjb21wcm9taXNlcyBmb3IgYmV0dGVyIG1haW50YWluYWJpbGl0eSBhbmQgY29tcGlsYXRpb24gcGVyZm9ybWFuY2UuIEF0IHByZXNlbnQsXG4gICAgICogS3lzZWx5IGRvZXNuJ3QgbmFycm93IHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgcXVlcnkgYmFzZWQgb24ge0BsaW5rIHNldH0gaW5wdXRcbiAgICAgKiB3aGVuIHVzaW5nIHtAbGluayB3aGVyZX0gYW5kL29yIHtAbGluayByZXR1cm5pbmd9IG9yIHtAbGluayByZXR1cm5pbmdBbGx9LlxuICAgICAqXG4gICAgICogVGhpcyB1dGlsaXR5IG1ldGhvZCBpcyB2ZXJ5IHVzZWZ1bCBmb3IgdGhlc2Ugc2l0dWF0aW9ucywgYXMgaXQgcmVtb3ZlcyB1bm5jZXNzYXJ5XG4gICAgICogcnVudGltZSBhc3NlcnRpb24vZ3VhcmQgY29kZS4gSXRzIGlucHV0IHR5cGUgaXMgbGltaXRlZCB0byB0aGUgb3V0cHV0IHR5cGVcbiAgICAgKiBvZiB0aGUgcXVlcnksIHNvIHlvdSBjYW4ndCBhZGQgYSBjb2x1bW4gdGhhdCBkb2Vzbid0IGV4aXN0LCBvciBjaGFuZ2UgYSBjb2x1bW4nc1xuICAgICAqIHR5cGUgdG8gc29tZXRoaW5nIHRoYXQgZG9lc24ndCBleGlzdCBpbiBpdHMgdW5pb24gdHlwZS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogVHVybiB0aGlzIGNvZGU6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgUGVyc29uIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAgICAgKlxuICAgICAqIGNvbnN0IGlkID0gMVxuICAgICAqIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAqXG4gICAgICogY29uc3QgcGVyc29uID0gYXdhaXQgZGIudXBkYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuc2V0KHsgZGVsZXRlZF9hdDogbm93IH0pXG4gICAgICogICAud2hlcmUoJ2lkJywgJz0nLCBpZClcbiAgICAgKiAgIC53aGVyZSgnbnVsbGFibGVfY29sdW1uJywgJ2lzIG5vdCcsIG51bGwpXG4gICAgICogICAucmV0dXJuaW5nQWxsKClcbiAgICAgKiAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICpcbiAgICAgKiBpZiAoaXNXaXRoTm9OdWxsVmFsdWUocGVyc29uKSkge1xuICAgICAqICAgZnVuY3Rpb25UaGF0RXhwZWN0c1BlcnNvbldpdGhOb25OdWxsVmFsdWUocGVyc29uKVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGlzV2l0aE5vTnVsbFZhbHVlKHBlcnNvbjogUGVyc29uKTogcGVyc29uIGlzIFBlcnNvbiAmIHsgbnVsbGFibGVfY29sdW1uOiBzdHJpbmcgfSB7XG4gICAgICogICByZXR1cm4gcGVyc29uLm51bGxhYmxlX2NvbHVtbiAhPSBudWxsXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogSW50byB0aGlzOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgdHlwZSB7IE5vdE51bGwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBjb25zdCBpZCA9IDFcbiAgICAgKiBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgKlxuICAgICAqIGNvbnN0IHBlcnNvbiA9IGF3YWl0IGRiLnVwZGF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLnNldCh7IGRlbGV0ZWRfYXQ6IG5vdyB9KVxuICAgICAqICAgLndoZXJlKCdpZCcsICc9JywgaWQpXG4gICAgICogICAud2hlcmUoJ251bGxhYmxlX2NvbHVtbicsICdpcyBub3QnLCBudWxsKVxuICAgICAqICAgLnJldHVybmluZ0FsbCgpXG4gICAgICogICAuJG5hcnJvd1R5cGU8eyBkZWxldGVkX2F0OiBEYXRlOyBudWxsYWJsZV9jb2x1bW46IE5vdE51bGwgfT4oKVxuICAgICAqICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uVGhhdEV4cGVjdHNQZXJzb25XaXRoTm9uTnVsbFZhbHVlKHBlcnNvbilcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAkbmFycm93VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVRdWVyeUJ1aWxkZXIodGhpcy4jcHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3NlcnRzIHRoYXQgcXVlcnkncyBvdXRwdXQgcm93IHR5cGUgZXF1YWxzIHRoZSBnaXZlbiB0eXBlIGBUYC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHNpbXBsaWZ5IGV4Y2Vzc2l2ZWx5IGNvbXBsZXggdHlwZXMgdG8gbWFrZSBUeXBlU2NyaXB0IGhhcHB5XG4gICAgICogYW5kIG11Y2ggZmFzdGVyLlxuICAgICAqXG4gICAgICogS3lzZWx5IHVzZXMgY29tcGxleCB0eXBlIG1hZ2ljIHRvIGFjaGlldmUgaXRzIHR5cGUgc2FmZXR5LiBUaGlzIGNvbXBsZXhpdHkgaXMgc29tZXRpbWVzIHRvbyBtdWNoXG4gICAgICogZm9yIFR5cGVTY3JpcHQgYW5kIHlvdSBnZXQgZXJyb3JzIGxpa2UgdGhpczpcbiAgICAgKlxuICAgICAqIGBgYFxuICAgICAqIGVycm9yIFRTMjU4OTogVHlwZSBpbnN0YW50aWF0aW9uIGlzIGV4Y2Vzc2l2ZWx5IGRlZXAgYW5kIHBvc3NpYmx5IGluZmluaXRlLlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogSW4gdGhlc2UgY2FzZSB5b3UgY2FuIG9mdGVuIHVzZSB0aGlzIG1ldGhvZCB0byBoZWxwIFR5cGVTY3JpcHQgYSBsaXR0bGUgYml0LiBXaGVuIHlvdSB1c2UgdGhpc1xuICAgICAqIG1ldGhvZCB0byBhc3NlcnQgdGhlIG91dHB1dCB0eXBlIG9mIGEgcXVlcnksIEt5c2VseSBjYW4gZHJvcCB0aGUgY29tcGxleCBvdXRwdXQgdHlwZSB0aGF0XG4gICAgICogY29uc2lzdHMgb2YgbXVsdGlwbGUgbmVzdGVkIGhlbHBlciB0eXBlcyBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoZSBzaW1wbGUgYXNzZXJ0ZWQgdHlwZS5cbiAgICAgKlxuICAgICAqIFVzaW5nIHRoaXMgbWV0aG9kIGRvZXNuJ3QgcmVkdWNlIHR5cGUgc2FmZXR5IGF0IGFsbC4gWW91IGhhdmUgdG8gcGFzcyBpbiBhIHR5cGUgdGhhdCBpc1xuICAgICAqIHN0cnVjdHVyYWxseSBlcXVhbCB0byB0aGUgY3VycmVudCB0eXBlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgUGVyc29uVXBkYXRlLCBQZXRVcGRhdGUsIFNwZWNpZXMgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICAgICAqXG4gICAgICogY29uc3QgcGVyc29uID0ge1xuICAgICAqICAgaWQ6IDEsXG4gICAgICogICBnZW5kZXI6ICdvdGhlcicsXG4gICAgICogfSBzYXRpc2ZpZXMgUGVyc29uVXBkYXRlXG4gICAgICpcbiAgICAgKiBjb25zdCBwZXQgPSB7XG4gICAgICogICBuYW1lOiAnRmx1ZmZ5JyxcbiAgICAgKiB9IHNhdGlzZmllcyBQZXRVcGRhdGVcbiAgICAgKlxuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gICAgICogICAud2l0aCgndXBkYXRlZF9wZXJzb24nLCAocWIpID0+IHFiXG4gICAgICogICAgIC51cGRhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgICAgLnNldChwZXJzb24pXG4gICAgICogICAgIC53aGVyZSgnaWQnLCAnPScsIHBlcnNvbi5pZClcbiAgICAgKiAgICAgLnJldHVybmluZygnZmlyc3RfbmFtZScpXG4gICAgICogICAgIC4kYXNzZXJ0VHlwZTx7IGZpcnN0X25hbWU6IHN0cmluZyB9PigpXG4gICAgICogICApXG4gICAgICogICAud2l0aCgndXBkYXRlZF9wZXQnLCAocWIpID0+IHFiXG4gICAgICogICAgIC51cGRhdGVUYWJsZSgncGV0JylcbiAgICAgKiAgICAgLnNldChwZXQpXG4gICAgICogICAgIC53aGVyZSgnb3duZXJfaWQnLCAnPScsIHBlcnNvbi5pZClcbiAgICAgKiAgICAgLnJldHVybmluZyhbJ25hbWUgYXMgcGV0X25hbWUnLCAnc3BlY2llcyddKVxuICAgICAqICAgICAuJGFzc2VydFR5cGU8eyBwZXRfbmFtZTogc3RyaW5nLCBzcGVjaWVzOiBTcGVjaWVzIH0+KClcbiAgICAgKiAgIClcbiAgICAgKiAgIC5zZWxlY3RGcm9tKFsndXBkYXRlZF9wZXJzb24nLCAndXBkYXRlZF9wZXQnXSlcbiAgICAgKiAgIC5zZWxlY3RBbGwoKVxuICAgICAqICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAkYXNzZXJ0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVRdWVyeUJ1aWxkZXIodGhpcy4jcHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29weSBvZiB0aGlzIFVwZGF0ZVF1ZXJ5QnVpbGRlciBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbiBwbHVnaW4gaW5zdGFsbGVkLlxuICAgICAqL1xuICAgIHdpdGhQbHVnaW4ocGx1Z2luKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhQbHVnaW4ocGx1Z2luKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBxdWVyeSBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiByb3dzLlxuICAgICAqXG4gICAgICogQWxzbyBzZWUgdGhlIHtAbGluayBleGVjdXRlVGFrZUZpcnN0fSBhbmQge0BsaW5rIGV4ZWN1dGVUYWtlRmlyc3RPclRocm93fSBtZXRob2RzLlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBpbGVkUXVlcnkgPSB0aGlzLmNvbXBpbGUoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KGNvbXBpbGVkUXVlcnksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgICAgICBjb25zdCB7IGFkYXB0ZXIgfSA9IHRoaXMuI3Byb3BzLmV4ZWN1dG9yO1xuICAgICAgICBjb25zdCBxdWVyeSA9IGNvbXBpbGVkUXVlcnkucXVlcnk7XG4gICAgICAgIGlmICgocXVlcnkucmV0dXJuaW5nICYmIGFkYXB0ZXIuc3VwcG9ydHNSZXR1cm5pbmcpIHx8XG4gICAgICAgICAgICAocXVlcnkub3V0cHV0ICYmIGFkYXB0ZXIuc3VwcG9ydHNPdXRwdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBVcGRhdGVSZXN1bHQocmVzdWx0Lm51bUFmZmVjdGVkUm93cyA/PyBCaWdJbnQoMCksIHJlc3VsdC5udW1DaGFuZ2VkUm93cyksXG4gICAgICAgIF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBxdWVyeSBhbmQgcmV0dXJucyB0aGUgZmlyc3QgcmVzdWx0IG9yIHVuZGVmaW5lZCBpZlxuICAgICAqIHRoZSBxdWVyeSByZXR1cm5lZCBubyByZXN1bHQuXG4gICAgICovXG4gICAgYXN5bmMgZXhlY3V0ZVRha2VGaXJzdCgpIHtcbiAgICAgICAgY29uc3QgW3Jlc3VsdF0gPSBhd2FpdCB0aGlzLmV4ZWN1dGUoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHF1ZXJ5IGFuZCByZXR1cm5zIHRoZSBmaXJzdCByZXN1bHQgb3IgdGhyb3dzIGlmXG4gICAgICogdGhlIHF1ZXJ5IHJldHVybmVkIG5vIHJlc3VsdC5cbiAgICAgKlxuICAgICAqIEJ5IGRlZmF1bHQgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIE5vUmVzdWx0RXJyb3J9IGlzIHRocm93biwgYnV0IHlvdSBjYW5cbiAgICAgKiBwcm92aWRlIGEgY3VzdG9tIGVycm9yIGNsYXNzLCBvciBjYWxsYmFjayBhcyB0aGUgb25seSBhcmd1bWVudCB0byB0aHJvdyBhIGRpZmZlcmVudFxuICAgICAqIGVycm9yLlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGVUYWtlRmlyc3RPclRocm93KGVycm9yQ29uc3RydWN0b3IgPSBOb1Jlc3VsdEVycm9yKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZVRha2VGaXJzdCgpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNOb1Jlc3VsdEVycm9yQ29uc3RydWN0b3IoZXJyb3JDb25zdHJ1Y3RvcilcbiAgICAgICAgICAgICAgICA/IG5ldyBlcnJvckNvbnN0cnVjdG9yKHRoaXMudG9PcGVyYXRpb25Ob2RlKCkpXG4gICAgICAgICAgICAgICAgOiBlcnJvckNvbnN0cnVjdG9yKHRoaXMudG9PcGVyYXRpb25Ob2RlKCkpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgKnN0cmVhbShjaHVua1NpemUgPSAxMDApIHtcbiAgICAgICAgY29uc3QgY29tcGlsZWRRdWVyeSA9IHRoaXMuY29tcGlsZSgpO1xuICAgICAgICBjb25zdCBzdHJlYW0gPSB0aGlzLiNwcm9wcy5leGVjdXRvci5zdHJlYW0oY29tcGlsZWRRdWVyeSwgY2h1bmtTaXplLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIHN0cmVhbSkge1xuICAgICAgICAgICAgeWllbGQqIGl0ZW0ucm93cztcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBleHBsYWluKGZvcm1hdCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gbmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEV4cGxhaW4odGhpcy4jcHJvcHMucXVlcnlOb2RlLCBmb3JtYXQsIG9wdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGJ1aWxkZXIuZXhlY3V0ZSgpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vY29tbW9uLXRhYmxlLWV4cHJlc3Npb24tbmFtZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ29sdW1uTm9kZSB9IGZyb20gJy4vY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgVGFibGVOb2RlIH0gZnJvbSAnLi90YWJsZS1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDb21tb25UYWJsZUV4cHJlc3Npb25OYW1lTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnQ29tbW9uVGFibGVFeHByZXNzaW9uTmFtZU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHRhYmxlTmFtZSwgY29sdW1uTmFtZXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQ29tbW9uVGFibGVFeHByZXNzaW9uTmFtZU5vZGUnLFxuICAgICAgICAgICAgdGFibGU6IFRhYmxlTm9kZS5jcmVhdGUodGFibGVOYW1lKSxcbiAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbk5hbWVzXG4gICAgICAgICAgICAgICAgPyBmcmVlemUoY29sdW1uTmFtZXMubWFwKENvbHVtbk5vZGUuY3JlYXRlKSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jb21tb24tdGFibGUtZXhwcmVzc2lvbi1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENvbW1vblRhYmxlRXhwcmVzc2lvbk5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0NvbW1vblRhYmxlRXhwcmVzc2lvbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG5hbWUsIGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQ29tbW9uVGFibGVFeHByZXNzaW9uTm9kZScsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgZXhwcmVzc2lvbixcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGgobm9kZSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vY3RlLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBDb21tb25UYWJsZUV4cHJlc3Npb25Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY29tbW9uLXRhYmxlLWV4cHJlc3Npb24tbm9kZS5qcyc7XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgY2xhc3MgQ1RFQnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFrZXMgdGhlIGNvbW1vbiB0YWJsZSBleHByZXNzaW9uIG1hdGVyaWFsaXplZC5cbiAgICAgKi9cbiAgICBtYXRlcmlhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ1RFQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENvbW1vblRhYmxlRXhwcmVzc2lvbk5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWQ6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBjb21tb24gdGFibGUgZXhwcmVzc2lvbiBub3QgbWF0ZXJpYWxpemVkLlxuICAgICAqL1xuICAgIG5vdE1hdGVyaWFsaXplZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDVEVCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ29tbW9uVGFibGVFeHByZXNzaW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplZDogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLm5vZGU7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi93aXRoLXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IENvbW1vblRhYmxlRXhwcmVzc2lvbk5hbWVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY29tbW9uLXRhYmxlLWV4cHJlc3Npb24tbmFtZS1ub2RlLmpzJztcbmltcG9ydCB7IGNyZWF0ZVF1ZXJ5Q3JlYXRvciB9IGZyb20gJy4vcGFyc2UtdXRpbHMuanMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IENURUJ1aWxkZXIgfSBmcm9tICcuLi9xdWVyeS1idWlsZGVyL2N0ZS1idWlsZGVyLmpzJztcbmltcG9ydCB7IENvbW1vblRhYmxlRXhwcmVzc2lvbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jb21tb24tdGFibGUtZXhwcmVzc2lvbi1ub2RlLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNvbW1vblRhYmxlRXhwcmVzc2lvbihuYW1lT3JCdWlsZGVyQ2FsbGJhY2ssIGV4cHJlc3Npb24pIHtcbiAgICBjb25zdCBleHByZXNzaW9uTm9kZSA9IGV4cHJlc3Npb24oY3JlYXRlUXVlcnlDcmVhdG9yKCkpLnRvT3BlcmF0aW9uTm9kZSgpO1xuICAgIGlmIChpc0Z1bmN0aW9uKG5hbWVPckJ1aWxkZXJDYWxsYmFjaykpIHtcbiAgICAgICAgcmV0dXJuIG5hbWVPckJ1aWxkZXJDYWxsYmFjayhjdGVCdWlsZGVyRmFjdG9yeShleHByZXNzaW9uTm9kZSkpLnRvT3BlcmF0aW9uTm9kZSgpO1xuICAgIH1cbiAgICByZXR1cm4gQ29tbW9uVGFibGVFeHByZXNzaW9uTm9kZS5jcmVhdGUocGFyc2VDb21tb25UYWJsZUV4cHJlc3Npb25OYW1lKG5hbWVPckJ1aWxkZXJDYWxsYmFjayksIGV4cHJlc3Npb25Ob2RlKTtcbn1cbmZ1bmN0aW9uIGN0ZUJ1aWxkZXJGYWN0b3J5KGV4cHJlc3Npb25Ob2RlKSB7XG4gICAgcmV0dXJuIChuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgQ1RFQnVpbGRlcih7XG4gICAgICAgICAgICBub2RlOiBDb21tb25UYWJsZUV4cHJlc3Npb25Ob2RlLmNyZWF0ZShwYXJzZUNvbW1vblRhYmxlRXhwcmVzc2lvbk5hbWUobmFtZSksIGV4cHJlc3Npb25Ob2RlKSxcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIHBhcnNlQ29tbW9uVGFibGVFeHByZXNzaW9uTmFtZShuYW1lKSB7XG4gICAgaWYgKG5hbWUuaW5jbHVkZXMoJygnKSkge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IG5hbWUuc3BsaXQoL1tcXChcXCldLyk7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gcGFydHNbMF07XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBwYXJ0c1sxXS5zcGxpdCgnLCcpLm1hcCgoaXQpID0+IGl0LnRyaW0oKSk7XG4gICAgICAgIHJldHVybiBDb21tb25UYWJsZUV4cHJlc3Npb25OYW1lTm9kZS5jcmVhdGUodGFibGUsIGNvbHVtbnMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIENvbW1vblRhYmxlRXhwcmVzc2lvbk5hbWVOb2RlLmNyZWF0ZShuYW1lKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3dpdGgtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBXaXRoTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnV2l0aE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGV4cHJlc3Npb24sIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdXaXRoTm9kZScsXG4gICAgICAgICAgICBleHByZXNzaW9uczogZnJlZXplKFtleHByZXNzaW9uXSksXG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoRXhwcmVzc2lvbih3aXRoTm9kZSwgZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLndpdGhOb2RlLFxuICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGZyZWV6ZShbLi4ud2l0aE5vZGUuZXhwcmVzc2lvbnMsIGV4cHJlc3Npb25dKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9yYW5kb20tc3RyaW5nLmQudHNcIiAvPlxuY29uc3QgQ0hBUlMgPSBbXG4gICAgJ0EnLFxuICAgICdCJyxcbiAgICAnQycsXG4gICAgJ0QnLFxuICAgICdFJyxcbiAgICAnRicsXG4gICAgJ0cnLFxuICAgICdIJyxcbiAgICAnSScsXG4gICAgJ0onLFxuICAgICdLJyxcbiAgICAnTCcsXG4gICAgJ00nLFxuICAgICdOJyxcbiAgICAnTycsXG4gICAgJ1AnLFxuICAgICdRJyxcbiAgICAnUicsXG4gICAgJ1MnLFxuICAgICdUJyxcbiAgICAnVScsXG4gICAgJ1YnLFxuICAgICdXJyxcbiAgICAnWCcsXG4gICAgJ1knLFxuICAgICdaJyxcbiAgICAnYScsXG4gICAgJ2InLFxuICAgICdjJyxcbiAgICAnZCcsXG4gICAgJ2UnLFxuICAgICdmJyxcbiAgICAnZycsXG4gICAgJ2gnLFxuICAgICdpJyxcbiAgICAnaicsXG4gICAgJ2snLFxuICAgICdsJyxcbiAgICAnbScsXG4gICAgJ24nLFxuICAgICdvJyxcbiAgICAncCcsXG4gICAgJ3EnLFxuICAgICdyJyxcbiAgICAncycsXG4gICAgJ3QnLFxuICAgICd1JyxcbiAgICAndicsXG4gICAgJ3cnLFxuICAgICd4JyxcbiAgICAneScsXG4gICAgJ3onLFxuICAgICcwJyxcbiAgICAnMScsXG4gICAgJzInLFxuICAgICczJyxcbiAgICAnNCcsXG4gICAgJzUnLFxuICAgICc2JyxcbiAgICAnNycsXG4gICAgJzgnLFxuICAgICc5Jyxcbl07XG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tU3RyaW5nKGxlbmd0aCkge1xuICAgIGxldCBjaGFycyA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY2hhcnMgKz0gcmFuZG9tQ2hhcigpO1xuICAgIH1cbiAgICByZXR1cm4gY2hhcnM7XG59XG5mdW5jdGlvbiByYW5kb21DaGFyKCkge1xuICAgIHJldHVybiBDSEFSU1t+fihNYXRoLnJhbmRvbSgpICogQ0hBUlMubGVuZ3RoKV07XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3F1ZXJ5LWlkLmQudHNcIiAvPlxuaW1wb3J0IHsgcmFuZG9tU3RyaW5nIH0gZnJvbSAnLi9yYW5kb20tc3RyaW5nLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVRdWVyeUlkKCkge1xuICAgIHJldHVybiBuZXcgTGF6eVF1ZXJ5SWQoKTtcbn1cbmNsYXNzIExhenlRdWVyeUlkIHtcbiAgICAjcXVlcnlJZDtcbiAgICBnZXQgcXVlcnlJZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuI3F1ZXJ5SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy4jcXVlcnlJZCA9IHJhbmRvbVN0cmluZyg4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy4jcXVlcnlJZDtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL29wZXJhdGlvbi1ub2RlLXRyYW5zZm9ybWVyLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgcmVxdWlyZUFsbFByb3BzIH0gZnJvbSAnLi4vdXRpbC9yZXF1aXJlLWFsbC1wcm9wcy5qcyc7XG4vKipcbiAqIFRyYW5zZm9ybXMgYW4gb3BlcmF0aW9uIG5vZGUgdHJlZSBpbnRvIGFub3RoZXIgb25lLlxuICpcbiAqIEt5c2VseSBxdWVyaWVzIGFyZSBleHByZXNzZWQgaW50ZXJuYWxseSBhcyBhIHRyZWUgb2Ygb2JqZWN0cyAob3BlcmF0aW9uIG5vZGVzKS5cbiAqIGBPcGVyYXRpb25Ob2RlVHJhbnNmb3JtZXJgIHRha2VzIHN1Y2ggYSB0cmVlIGFzIGl0cyBpbnB1dCBhbmQgcmV0dXJucyBhXG4gKiB0cmFuc2Zvcm1lZCBkZWVwIGNvcHkgb2YgaXQuIEJ5IGRlZmF1bHQgdGhlIGBPcGVyYXRpb25Ob2RlVHJhbnNmb3JtZXJgXG4gKiBkb2VzIG5vdGhpbmcuIFlvdSBuZWVkIHRvIG92ZXJyaWRlIG9uZSBvciBtb3JlIG1ldGhvZHMgdG8gbWFrZSBpdCBkb1xuICogc29tZXRoaW5nLlxuICpcbiAqIFRoZXJlJ3MgYSBtZXRob2QgZm9yIGVhY2ggbm9kZSB0eXBlLiBGb3IgZXhhbXBsZSBpZiB5b3UnZCBsaWtlIHRvIGNvbnZlcnRcbiAqIGVhY2ggaWRlbnRpZmllciAodGFibGUgbmFtZSwgY29sdW1uIG5hbWUsIGFsaWFzIGV0Yy4pIGZyb20gY2FtZWxDYXNlIHRvXG4gKiBzbmFrZV9jYXNlLCB5b3UnZCBkbyBzb21ldGhpbmcgbGlrZSB0aGlzOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyB0eXBlIElkZW50aWZpZXJOb2RlLCBPcGVyYXRpb25Ob2RlVHJhbnNmb3JtZXIgfSBmcm9tICdreXNlbHknXG4gKiBpbXBvcnQgc25ha2VDYXNlIGZyb20gJ2xvZGFzaC9zbmFrZUNhc2UnXG4gKlxuICogY2xhc3MgQ2FtZWxDYXNlVHJhbnNmb3JtZXIgZXh0ZW5kcyBPcGVyYXRpb25Ob2RlVHJhbnNmb3JtZXIge1xuICogICBvdmVycmlkZSB0cmFuc2Zvcm1JZGVudGlmaWVyKG5vZGU6IElkZW50aWZpZXJOb2RlKTogSWRlbnRpZmllck5vZGUge1xuICogICAgIG5vZGUgPSBzdXBlci50cmFuc2Zvcm1JZGVudGlmaWVyKG5vZGUpXG4gKlxuICogICAgIHJldHVybiB7XG4gKiAgICAgICAuLi5ub2RlLFxuICogICAgICAgbmFtZTogc25ha2VDYXNlKG5vZGUubmFtZSksXG4gKiAgICAgfVxuICogICB9XG4gKiB9XG4gKlxuICogY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgQ2FtZWxDYXNlVHJhbnNmb3JtZXIoKVxuICpcbiAqIGNvbnN0IHF1ZXJ5ID0gZGIuc2VsZWN0RnJvbSgncGVyc29uJykuc2VsZWN0KFsnZmlyc3RfbmFtZScsICdsYXN0X25hbWUnXSlcbiAqXG4gKiBjb25zdCB0cmVlID0gdHJhbnNmb3JtZXIudHJhbnNmb3JtTm9kZShxdWVyeS50b09wZXJhdGlvbk5vZGUoKSlcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgT3BlcmF0aW9uTm9kZVRyYW5zZm9ybWVyIHtcbiAgICBub2RlU3RhY2sgPSBbXTtcbiAgICAjdHJhbnNmb3JtZXJzID0gZnJlZXplKHtcbiAgICAgICAgQWxpYXNOb2RlOiB0aGlzLnRyYW5zZm9ybUFsaWFzLmJpbmQodGhpcyksXG4gICAgICAgIENvbHVtbk5vZGU6IHRoaXMudHJhbnNmb3JtQ29sdW1uLmJpbmQodGhpcyksXG4gICAgICAgIElkZW50aWZpZXJOb2RlOiB0aGlzLnRyYW5zZm9ybUlkZW50aWZpZXIuYmluZCh0aGlzKSxcbiAgICAgICAgU2NoZW1hYmxlSWRlbnRpZmllck5vZGU6IHRoaXMudHJhbnNmb3JtU2NoZW1hYmxlSWRlbnRpZmllci5iaW5kKHRoaXMpLFxuICAgICAgICBSYXdOb2RlOiB0aGlzLnRyYW5zZm9ybVJhdy5iaW5kKHRoaXMpLFxuICAgICAgICBSZWZlcmVuY2VOb2RlOiB0aGlzLnRyYW5zZm9ybVJlZmVyZW5jZS5iaW5kKHRoaXMpLFxuICAgICAgICBTZWxlY3RRdWVyeU5vZGU6IHRoaXMudHJhbnNmb3JtU2VsZWN0UXVlcnkuYmluZCh0aGlzKSxcbiAgICAgICAgU2VsZWN0aW9uTm9kZTogdGhpcy50cmFuc2Zvcm1TZWxlY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgVGFibGVOb2RlOiB0aGlzLnRyYW5zZm9ybVRhYmxlLmJpbmQodGhpcyksXG4gICAgICAgIEZyb21Ob2RlOiB0aGlzLnRyYW5zZm9ybUZyb20uYmluZCh0aGlzKSxcbiAgICAgICAgU2VsZWN0QWxsTm9kZTogdGhpcy50cmFuc2Zvcm1TZWxlY3RBbGwuYmluZCh0aGlzKSxcbiAgICAgICAgQW5kTm9kZTogdGhpcy50cmFuc2Zvcm1BbmQuYmluZCh0aGlzKSxcbiAgICAgICAgT3JOb2RlOiB0aGlzLnRyYW5zZm9ybU9yLmJpbmQodGhpcyksXG4gICAgICAgIFZhbHVlTm9kZTogdGhpcy50cmFuc2Zvcm1WYWx1ZS5iaW5kKHRoaXMpLFxuICAgICAgICBWYWx1ZUxpc3ROb2RlOiB0aGlzLnRyYW5zZm9ybVZhbHVlTGlzdC5iaW5kKHRoaXMpLFxuICAgICAgICBQcmltaXRpdmVWYWx1ZUxpc3ROb2RlOiB0aGlzLnRyYW5zZm9ybVByaW1pdGl2ZVZhbHVlTGlzdC5iaW5kKHRoaXMpLFxuICAgICAgICBQYXJlbnNOb2RlOiB0aGlzLnRyYW5zZm9ybVBhcmVucy5iaW5kKHRoaXMpLFxuICAgICAgICBKb2luTm9kZTogdGhpcy50cmFuc2Zvcm1Kb2luLmJpbmQodGhpcyksXG4gICAgICAgIE9wZXJhdG9yTm9kZTogdGhpcy50cmFuc2Zvcm1PcGVyYXRvci5iaW5kKHRoaXMpLFxuICAgICAgICBXaGVyZU5vZGU6IHRoaXMudHJhbnNmb3JtV2hlcmUuYmluZCh0aGlzKSxcbiAgICAgICAgSW5zZXJ0UXVlcnlOb2RlOiB0aGlzLnRyYW5zZm9ybUluc2VydFF1ZXJ5LmJpbmQodGhpcyksXG4gICAgICAgIERlbGV0ZVF1ZXJ5Tm9kZTogdGhpcy50cmFuc2Zvcm1EZWxldGVRdWVyeS5iaW5kKHRoaXMpLFxuICAgICAgICBSZXR1cm5pbmdOb2RlOiB0aGlzLnRyYW5zZm9ybVJldHVybmluZy5iaW5kKHRoaXMpLFxuICAgICAgICBDcmVhdGVUYWJsZU5vZGU6IHRoaXMudHJhbnNmb3JtQ3JlYXRlVGFibGUuYmluZCh0aGlzKSxcbiAgICAgICAgQWRkQ29sdW1uTm9kZTogdGhpcy50cmFuc2Zvcm1BZGRDb2x1bW4uYmluZCh0aGlzKSxcbiAgICAgICAgQ29sdW1uRGVmaW5pdGlvbk5vZGU6IHRoaXMudHJhbnNmb3JtQ29sdW1uRGVmaW5pdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wVGFibGVOb2RlOiB0aGlzLnRyYW5zZm9ybURyb3BUYWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICBEYXRhVHlwZU5vZGU6IHRoaXMudHJhbnNmb3JtRGF0YVR5cGUuYmluZCh0aGlzKSxcbiAgICAgICAgT3JkZXJCeU5vZGU6IHRoaXMudHJhbnNmb3JtT3JkZXJCeS5iaW5kKHRoaXMpLFxuICAgICAgICBPcmRlckJ5SXRlbU5vZGU6IHRoaXMudHJhbnNmb3JtT3JkZXJCeUl0ZW0uYmluZCh0aGlzKSxcbiAgICAgICAgR3JvdXBCeU5vZGU6IHRoaXMudHJhbnNmb3JtR3JvdXBCeS5iaW5kKHRoaXMpLFxuICAgICAgICBHcm91cEJ5SXRlbU5vZGU6IHRoaXMudHJhbnNmb3JtR3JvdXBCeUl0ZW0uYmluZCh0aGlzKSxcbiAgICAgICAgVXBkYXRlUXVlcnlOb2RlOiB0aGlzLnRyYW5zZm9ybVVwZGF0ZVF1ZXJ5LmJpbmQodGhpcyksXG4gICAgICAgIENvbHVtblVwZGF0ZU5vZGU6IHRoaXMudHJhbnNmb3JtQ29sdW1uVXBkYXRlLmJpbmQodGhpcyksXG4gICAgICAgIExpbWl0Tm9kZTogdGhpcy50cmFuc2Zvcm1MaW1pdC5iaW5kKHRoaXMpLFxuICAgICAgICBPZmZzZXROb2RlOiB0aGlzLnRyYW5zZm9ybU9mZnNldC5iaW5kKHRoaXMpLFxuICAgICAgICBPbkNvbmZsaWN0Tm9kZTogdGhpcy50cmFuc2Zvcm1PbkNvbmZsaWN0LmJpbmQodGhpcyksXG4gICAgICAgIE9uRHVwbGljYXRlS2V5Tm9kZTogdGhpcy50cmFuc2Zvcm1PbkR1cGxpY2F0ZUtleS5iaW5kKHRoaXMpLFxuICAgICAgICBDcmVhdGVJbmRleE5vZGU6IHRoaXMudHJhbnNmb3JtQ3JlYXRlSW5kZXguYmluZCh0aGlzKSxcbiAgICAgICAgRHJvcEluZGV4Tm9kZTogdGhpcy50cmFuc2Zvcm1Ecm9wSW5kZXguYmluZCh0aGlzKSxcbiAgICAgICAgTGlzdE5vZGU6IHRoaXMudHJhbnNmb3JtTGlzdC5iaW5kKHRoaXMpLFxuICAgICAgICBQcmltYXJ5S2V5Q29uc3RyYWludE5vZGU6IHRoaXMudHJhbnNmb3JtUHJpbWFyeUtleUNvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgVW5pcXVlQ29uc3RyYWludE5vZGU6IHRoaXMudHJhbnNmb3JtVW5pcXVlQ29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBSZWZlcmVuY2VzTm9kZTogdGhpcy50cmFuc2Zvcm1SZWZlcmVuY2VzLmJpbmQodGhpcyksXG4gICAgICAgIENoZWNrQ29uc3RyYWludE5vZGU6IHRoaXMudHJhbnNmb3JtQ2hlY2tDb25zdHJhaW50LmJpbmQodGhpcyksXG4gICAgICAgIFdpdGhOb2RlOiB0aGlzLnRyYW5zZm9ybVdpdGguYmluZCh0aGlzKSxcbiAgICAgICAgQ29tbW9uVGFibGVFeHByZXNzaW9uTm9kZTogdGhpcy50cmFuc2Zvcm1Db21tb25UYWJsZUV4cHJlc3Npb24uYmluZCh0aGlzKSxcbiAgICAgICAgQ29tbW9uVGFibGVFeHByZXNzaW9uTmFtZU5vZGU6IHRoaXMudHJhbnNmb3JtQ29tbW9uVGFibGVFeHByZXNzaW9uTmFtZS5iaW5kKHRoaXMpLFxuICAgICAgICBIYXZpbmdOb2RlOiB0aGlzLnRyYW5zZm9ybUhhdmluZy5iaW5kKHRoaXMpLFxuICAgICAgICBDcmVhdGVTY2hlbWFOb2RlOiB0aGlzLnRyYW5zZm9ybUNyZWF0ZVNjaGVtYS5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wU2NoZW1hTm9kZTogdGhpcy50cmFuc2Zvcm1Ecm9wU2NoZW1hLmJpbmQodGhpcyksXG4gICAgICAgIEFsdGVyVGFibGVOb2RlOiB0aGlzLnRyYW5zZm9ybUFsdGVyVGFibGUuYmluZCh0aGlzKSxcbiAgICAgICAgRHJvcENvbHVtbk5vZGU6IHRoaXMudHJhbnNmb3JtRHJvcENvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBSZW5hbWVDb2x1bW5Ob2RlOiB0aGlzLnRyYW5zZm9ybVJlbmFtZUNvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBBbHRlckNvbHVtbk5vZGU6IHRoaXMudHJhbnNmb3JtQWx0ZXJDb2x1bW4uYmluZCh0aGlzKSxcbiAgICAgICAgTW9kaWZ5Q29sdW1uTm9kZTogdGhpcy50cmFuc2Zvcm1Nb2RpZnlDb2x1bW4uYmluZCh0aGlzKSxcbiAgICAgICAgQWRkQ29uc3RyYWludE5vZGU6IHRoaXMudHJhbnNmb3JtQWRkQ29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wQ29uc3RyYWludE5vZGU6IHRoaXMudHJhbnNmb3JtRHJvcENvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgUmVuYW1lQ29uc3RyYWludE5vZGU6IHRoaXMudHJhbnNmb3JtUmVuYW1lQ29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBGb3JlaWduS2V5Q29uc3RyYWludE5vZGU6IHRoaXMudHJhbnNmb3JtRm9yZWlnbktleUNvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgQ3JlYXRlVmlld05vZGU6IHRoaXMudHJhbnNmb3JtQ3JlYXRlVmlldy5iaW5kKHRoaXMpLFxuICAgICAgICBSZWZyZXNoTWF0ZXJpYWxpemVkVmlld05vZGU6IHRoaXMudHJhbnNmb3JtUmVmcmVzaE1hdGVyaWFsaXplZFZpZXcuYmluZCh0aGlzKSxcbiAgICAgICAgRHJvcFZpZXdOb2RlOiB0aGlzLnRyYW5zZm9ybURyb3BWaWV3LmJpbmQodGhpcyksXG4gICAgICAgIEdlbmVyYXRlZE5vZGU6IHRoaXMudHJhbnNmb3JtR2VuZXJhdGVkLmJpbmQodGhpcyksXG4gICAgICAgIERlZmF1bHRWYWx1ZU5vZGU6IHRoaXMudHJhbnNmb3JtRGVmYXVsdFZhbHVlLmJpbmQodGhpcyksXG4gICAgICAgIE9uTm9kZTogdGhpcy50cmFuc2Zvcm1Pbi5iaW5kKHRoaXMpLFxuICAgICAgICBWYWx1ZXNOb2RlOiB0aGlzLnRyYW5zZm9ybVZhbHVlcy5iaW5kKHRoaXMpLFxuICAgICAgICBTZWxlY3RNb2RpZmllck5vZGU6IHRoaXMudHJhbnNmb3JtU2VsZWN0TW9kaWZpZXIuYmluZCh0aGlzKSxcbiAgICAgICAgQ3JlYXRlVHlwZU5vZGU6IHRoaXMudHJhbnNmb3JtQ3JlYXRlVHlwZS5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wVHlwZU5vZGU6IHRoaXMudHJhbnNmb3JtRHJvcFR5cGUuYmluZCh0aGlzKSxcbiAgICAgICAgRXhwbGFpbk5vZGU6IHRoaXMudHJhbnNmb3JtRXhwbGFpbi5iaW5kKHRoaXMpLFxuICAgICAgICBEZWZhdWx0SW5zZXJ0VmFsdWVOb2RlOiB0aGlzLnRyYW5zZm9ybURlZmF1bHRJbnNlcnRWYWx1ZS5iaW5kKHRoaXMpLFxuICAgICAgICBBZ2dyZWdhdGVGdW5jdGlvbk5vZGU6IHRoaXMudHJhbnNmb3JtQWdncmVnYXRlRnVuY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgT3Zlck5vZGU6IHRoaXMudHJhbnNmb3JtT3Zlci5iaW5kKHRoaXMpLFxuICAgICAgICBQYXJ0aXRpb25CeU5vZGU6IHRoaXMudHJhbnNmb3JtUGFydGl0aW9uQnkuYmluZCh0aGlzKSxcbiAgICAgICAgUGFydGl0aW9uQnlJdGVtTm9kZTogdGhpcy50cmFuc2Zvcm1QYXJ0aXRpb25CeUl0ZW0uYmluZCh0aGlzKSxcbiAgICAgICAgU2V0T3BlcmF0aW9uTm9kZTogdGhpcy50cmFuc2Zvcm1TZXRPcGVyYXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgQmluYXJ5T3BlcmF0aW9uTm9kZTogdGhpcy50cmFuc2Zvcm1CaW5hcnlPcGVyYXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgVW5hcnlPcGVyYXRpb25Ob2RlOiB0aGlzLnRyYW5zZm9ybVVuYXJ5T3BlcmF0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIFVzaW5nTm9kZTogdGhpcy50cmFuc2Zvcm1Vc2luZy5iaW5kKHRoaXMpLFxuICAgICAgICBGdW5jdGlvbk5vZGU6IHRoaXMudHJhbnNmb3JtRnVuY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgQ2FzZU5vZGU6IHRoaXMudHJhbnNmb3JtQ2FzZS5iaW5kKHRoaXMpLFxuICAgICAgICBXaGVuTm9kZTogdGhpcy50cmFuc2Zvcm1XaGVuLmJpbmQodGhpcyksXG4gICAgICAgIEpTT05SZWZlcmVuY2VOb2RlOiB0aGlzLnRyYW5zZm9ybUpTT05SZWZlcmVuY2UuYmluZCh0aGlzKSxcbiAgICAgICAgSlNPTlBhdGhOb2RlOiB0aGlzLnRyYW5zZm9ybUpTT05QYXRoLmJpbmQodGhpcyksXG4gICAgICAgIEpTT05QYXRoTGVnTm9kZTogdGhpcy50cmFuc2Zvcm1KU09OUGF0aExlZy5iaW5kKHRoaXMpLFxuICAgICAgICBKU09OT3BlcmF0b3JDaGFpbk5vZGU6IHRoaXMudHJhbnNmb3JtSlNPTk9wZXJhdG9yQ2hhaW4uYmluZCh0aGlzKSxcbiAgICAgICAgVHVwbGVOb2RlOiB0aGlzLnRyYW5zZm9ybVR1cGxlLmJpbmQodGhpcyksXG4gICAgICAgIE1lcmdlUXVlcnlOb2RlOiB0aGlzLnRyYW5zZm9ybU1lcmdlUXVlcnkuYmluZCh0aGlzKSxcbiAgICAgICAgTWF0Y2hlZE5vZGU6IHRoaXMudHJhbnNmb3JtTWF0Y2hlZC5iaW5kKHRoaXMpLFxuICAgICAgICBBZGRJbmRleE5vZGU6IHRoaXMudHJhbnNmb3JtQWRkSW5kZXguYmluZCh0aGlzKSxcbiAgICAgICAgQ2FzdE5vZGU6IHRoaXMudHJhbnNmb3JtQ2FzdC5iaW5kKHRoaXMpLFxuICAgICAgICBGZXRjaE5vZGU6IHRoaXMudHJhbnNmb3JtRmV0Y2guYmluZCh0aGlzKSxcbiAgICAgICAgVG9wTm9kZTogdGhpcy50cmFuc2Zvcm1Ub3AuYmluZCh0aGlzKSxcbiAgICAgICAgT3V0cHV0Tm9kZTogdGhpcy50cmFuc2Zvcm1PdXRwdXQuYmluZCh0aGlzKSxcbiAgICAgICAgT3JBY3Rpb25Ob2RlOiB0aGlzLnRyYW5zZm9ybU9yQWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIENvbGxhdGVOb2RlOiB0aGlzLnRyYW5zZm9ybUNvbGxhdGUuYmluZCh0aGlzKSxcbiAgICB9KTtcbiAgICB0cmFuc2Zvcm1Ob2RlKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vZGVTdGFjay5wdXNoKG5vZGUpO1xuICAgICAgICBjb25zdCBvdXQgPSB0aGlzLnRyYW5zZm9ybU5vZGVJbXBsKG5vZGUsIHF1ZXJ5SWQpO1xuICAgICAgICB0aGlzLm5vZGVTdGFjay5wb3AoKTtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZShvdXQpO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Ob2RlSW1wbChub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiN0cmFuc2Zvcm1lcnNbbm9kZS5raW5kXShub2RlLCBxdWVyeUlkKTtcbiAgICB9XG4gICAgdHJhbnNmb3JtTm9kZUxpc3QobGlzdCwgcXVlcnlJZCkge1xuICAgICAgICBpZiAoIWxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBsaXN0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmcmVlemUobGlzdC5tYXAoKG5vZGUpID0+IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLCBxdWVyeUlkKSkpO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1TZWxlY3RRdWVyeShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1NlbGVjdFF1ZXJ5Tm9kZScsXG4gICAgICAgICAgICBmcm9tOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5mcm9tLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHNlbGVjdGlvbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5zZWxlY3Rpb25zLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGRpc3RpbmN0T246IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5kaXN0aW5jdE9uLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGpvaW5zOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuam9pbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZ3JvdXBCeTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuZ3JvdXBCeSwgcXVlcnlJZCksXG4gICAgICAgICAgICBvcmRlckJ5OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5vcmRlckJ5LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHdoZXJlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS53aGVyZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBmcm9udE1vZGlmaWVyczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmZyb250TW9kaWZpZXJzLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGVuZE1vZGlmaWVyczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmVuZE1vZGlmaWVycywgcXVlcnlJZCksXG4gICAgICAgICAgICBsaW1pdDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubGltaXQsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5vZmZzZXQsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgd2l0aDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUud2l0aCwgcXVlcnlJZCksXG4gICAgICAgICAgICBoYXZpbmc6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmhhdmluZywgcXVlcnlJZCksXG4gICAgICAgICAgICBleHBsYWluOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5leHBsYWluLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHNldE9wZXJhdGlvbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5zZXRPcGVyYXRpb25zLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGZldGNoOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5mZXRjaCwgcXVlcnlJZCksXG4gICAgICAgICAgICB0b3A6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnRvcCwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1TZWxlY3Rpb24obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdTZWxlY3Rpb25Ob2RlJyxcbiAgICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuc2VsZWN0aW9uLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUNvbHVtbihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0NvbHVtbk5vZGUnLFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5jb2x1bW4sIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQWxpYXMobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdBbGlhc05vZGUnLFxuICAgICAgICAgICAgbm9kZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubm9kZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBhbGlhczogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuYWxpYXMsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtVGFibGUobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdUYWJsZU5vZGUnLFxuICAgICAgICAgICAgdGFibGU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnRhYmxlLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUZyb20obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdGcm9tTm9kZScsXG4gICAgICAgICAgICBmcm9tczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmZyb21zLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVJlZmVyZW5jZShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1JlZmVyZW5jZU5vZGUnLFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5jb2x1bW4sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgdGFibGU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnRhYmxlLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUFuZChub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0FuZE5vZGUnLFxuICAgICAgICAgICAgbGVmdDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubGVmdCwgcXVlcnlJZCksXG4gICAgICAgICAgICByaWdodDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUucmlnaHQsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtT3Iobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdPck5vZGUnLFxuICAgICAgICAgICAgbGVmdDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubGVmdCwgcXVlcnlJZCksXG4gICAgICAgICAgICByaWdodDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUucmlnaHQsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtVmFsdWVMaXN0KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnVmFsdWVMaXN0Tm9kZScsXG4gICAgICAgICAgICB2YWx1ZXM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS52YWx1ZXMsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtUGFyZW5zKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnUGFyZW5zTm9kZScsXG4gICAgICAgICAgICBub2RlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5ub2RlLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUpvaW4obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdKb2luTm9kZScsXG4gICAgICAgICAgICBqb2luVHlwZTogbm9kZS5qb2luVHlwZSxcbiAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS50YWJsZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBvbjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub24sIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtUmF3KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnUmF3Tm9kZScsXG4gICAgICAgICAgICBzcWxGcmFnbWVudHM6IGZyZWV6ZShbLi4ubm9kZS5zcWxGcmFnbWVudHNdKSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5wYXJhbWV0ZXJzLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVdoZXJlKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnV2hlcmVOb2RlJyxcbiAgICAgICAgICAgIHdoZXJlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS53aGVyZSwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1JbnNlcnRRdWVyeShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0luc2VydFF1ZXJ5Tm9kZScsXG4gICAgICAgICAgICBpbnRvOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5pbnRvLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5jb2x1bW5zLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHZhbHVlczogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudmFsdWVzLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHJldHVybmluZzogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUucmV0dXJuaW5nLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG9uQ29uZmxpY3Q6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm9uQ29uZmxpY3QsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgb25EdXBsaWNhdGVLZXk6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm9uRHVwbGljYXRlS2V5LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGVuZE1vZGlmaWVyczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmVuZE1vZGlmaWVycywgcXVlcnlJZCksXG4gICAgICAgICAgICB3aXRoOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS53aXRoLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGlnbm9yZTogbm9kZS5pZ25vcmUsXG4gICAgICAgICAgICBvckFjdGlvbjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub3JBY3Rpb24sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgcmVwbGFjZTogbm9kZS5yZXBsYWNlLFxuICAgICAgICAgICAgZXhwbGFpbjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuZXhwbGFpbiwgcXVlcnlJZCksXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWVzOiBub2RlLmRlZmF1bHRWYWx1ZXMsXG4gICAgICAgICAgICB0b3A6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnRvcCwgcXVlcnlJZCksXG4gICAgICAgICAgICBvdXRwdXQ6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm91dHB1dCwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1WYWx1ZXMobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdWYWx1ZXNOb2RlJyxcbiAgICAgICAgICAgIHZhbHVlczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLnZhbHVlcywgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1EZWxldGVRdWVyeShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0RlbGV0ZVF1ZXJ5Tm9kZScsXG4gICAgICAgICAgICBmcm9tOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5mcm9tLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHVzaW5nOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS51c2luZywgcXVlcnlJZCksXG4gICAgICAgICAgICBqb2luczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmpvaW5zLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHdoZXJlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS53aGVyZSwgcXVlcnlJZCksXG4gICAgICAgICAgICByZXR1cm5pbmc6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnJldHVybmluZywgcXVlcnlJZCksXG4gICAgICAgICAgICBlbmRNb2RpZmllcnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5lbmRNb2RpZmllcnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgd2l0aDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUud2l0aCwgcXVlcnlJZCksXG4gICAgICAgICAgICBvcmRlckJ5OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5vcmRlckJ5LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5saW1pdCwgcXVlcnlJZCksXG4gICAgICAgICAgICBleHBsYWluOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5leHBsYWluLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHRvcDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudG9wLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG91dHB1dDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub3V0cHV0LCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVJldHVybmluZyhub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1JldHVybmluZ05vZGUnLFxuICAgICAgICAgICAgc2VsZWN0aW9uczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLnNlbGVjdGlvbnMsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQ3JlYXRlVGFibGUobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDcmVhdGVUYWJsZU5vZGUnLFxuICAgICAgICAgICAgdGFibGU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnRhYmxlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5jb2x1bW5zLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuY29uc3RyYWludHMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgdGVtcG9yYXJ5OiBub2RlLnRlbXBvcmFyeSxcbiAgICAgICAgICAgIGlmTm90RXhpc3RzOiBub2RlLmlmTm90RXhpc3RzLFxuICAgICAgICAgICAgb25Db21taXQ6IG5vZGUub25Db21taXQsXG4gICAgICAgICAgICBmcm9udE1vZGlmaWVyczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmZyb250TW9kaWZpZXJzLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGVuZE1vZGlmaWVyczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmVuZE1vZGlmaWVycywgcXVlcnlJZCksXG4gICAgICAgICAgICBzZWxlY3RRdWVyeTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuc2VsZWN0UXVlcnksIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQ29sdW1uRGVmaW5pdGlvbihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0NvbHVtbkRlZmluaXRpb25Ob2RlJyxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuY29sdW1uLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5kYXRhVHlwZSwgcXVlcnlJZCksXG4gICAgICAgICAgICByZWZlcmVuY2VzOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5yZWZlcmVuY2VzLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHByaW1hcnlLZXk6IG5vZGUucHJpbWFyeUtleSxcbiAgICAgICAgICAgIGF1dG9JbmNyZW1lbnQ6IG5vZGUuYXV0b0luY3JlbWVudCxcbiAgICAgICAgICAgIHVuaXF1ZTogbm9kZS51bmlxdWUsXG4gICAgICAgICAgICBub3ROdWxsOiBub2RlLm5vdE51bGwsXG4gICAgICAgICAgICB1bnNpZ25lZDogbm9kZS51bnNpZ25lZCxcbiAgICAgICAgICAgIGRlZmF1bHRUbzogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuZGVmYXVsdFRvLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGNoZWNrOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5jaGVjaywgcXVlcnlJZCksXG4gICAgICAgICAgICBnZW5lcmF0ZWQ6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmdlbmVyYXRlZCwgcXVlcnlJZCksXG4gICAgICAgICAgICBmcm9udE1vZGlmaWVyczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmZyb250TW9kaWZpZXJzLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGVuZE1vZGlmaWVyczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmVuZE1vZGlmaWVycywgcXVlcnlJZCksXG4gICAgICAgICAgICBudWxsc05vdERpc3RpbmN0OiBub2RlLm51bGxzTm90RGlzdGluY3QsXG4gICAgICAgICAgICBpZGVudGl0eTogbm9kZS5pZGVudGl0eSxcbiAgICAgICAgICAgIGlmTm90RXhpc3RzOiBub2RlLmlmTm90RXhpc3RzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQWRkQ29sdW1uKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQWRkQ29sdW1uTm9kZScsXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmNvbHVtbiwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Ecm9wVGFibGUobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdEcm9wVGFibGVOb2RlJyxcbiAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS50YWJsZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBpZkV4aXN0czogbm9kZS5pZkV4aXN0cyxcbiAgICAgICAgICAgIGNhc2NhZGU6IG5vZGUuY2FzY2FkZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybU9yZGVyQnkobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdPcmRlckJ5Tm9kZScsXG4gICAgICAgICAgICBpdGVtczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLml0ZW1zLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybU9yZGVyQnlJdGVtKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnT3JkZXJCeUl0ZW1Ob2RlJyxcbiAgICAgICAgICAgIG9yZGVyQnk6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm9yZGVyQnksIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5kaXJlY3Rpb24sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgY29sbGF0aW9uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5jb2xsYXRpb24sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgbnVsbHM6IG5vZGUubnVsbHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Hcm91cEJ5KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnR3JvdXBCeU5vZGUnLFxuICAgICAgICAgICAgaXRlbXM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5pdGVtcywgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Hcm91cEJ5SXRlbShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0dyb3VwQnlJdGVtTm9kZScsXG4gICAgICAgICAgICBncm91cEJ5OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5ncm91cEJ5LCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVVwZGF0ZVF1ZXJ5KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnVXBkYXRlUXVlcnlOb2RlJyxcbiAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS50YWJsZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBmcm9tOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5mcm9tLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGpvaW5zOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuam9pbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgd2hlcmU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLndoZXJlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHVwZGF0ZXM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS51cGRhdGVzLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHJldHVybmluZzogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUucmV0dXJuaW5nLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGVuZE1vZGlmaWVyczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmVuZE1vZGlmaWVycywgcXVlcnlJZCksXG4gICAgICAgICAgICB3aXRoOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS53aXRoLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGV4cGxhaW46IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmV4cGxhaW4sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgbGltaXQ6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmxpbWl0LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHRvcDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudG9wLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG91dHB1dDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub3V0cHV0LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG9yZGVyQnk6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm9yZGVyQnksIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQ29sdW1uVXBkYXRlKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQ29sdW1uVXBkYXRlTm9kZScsXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmNvbHVtbiwgcXVlcnlJZCksXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudmFsdWUsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtTGltaXQobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdMaW1pdE5vZGUnLFxuICAgICAgICAgICAgbGltaXQ6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmxpbWl0LCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybU9mZnNldChub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ09mZnNldE5vZGUnLFxuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5vZmZzZXQsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtT25Db25mbGljdChub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ09uQ29uZmxpY3ROb2RlJyxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5jb2x1bW5zLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmNvbnN0cmFpbnQsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgaW5kZXhFeHByZXNzaW9uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5pbmRleEV4cHJlc3Npb24sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgaW5kZXhXaGVyZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuaW5kZXhXaGVyZSwgcXVlcnlJZCksXG4gICAgICAgICAgICB1cGRhdGVzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUudXBkYXRlcywgcXVlcnlJZCksXG4gICAgICAgICAgICB1cGRhdGVXaGVyZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudXBkYXRlV2hlcmUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZG9Ob3RoaW5nOiBub2RlLmRvTm90aGluZyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybU9uRHVwbGljYXRlS2V5KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnT25EdXBsaWNhdGVLZXlOb2RlJyxcbiAgICAgICAgICAgIHVwZGF0ZXM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS51cGRhdGVzLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUNyZWF0ZUluZGV4KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQ3JlYXRlSW5kZXhOb2RlJyxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm5hbWUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgdGFibGU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnRhYmxlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5jb2x1bW5zLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHVuaXF1ZTogbm9kZS51bmlxdWUsXG4gICAgICAgICAgICB1c2luZzogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudXNpbmcsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgaWZOb3RFeGlzdHM6IG5vZGUuaWZOb3RFeGlzdHMsXG4gICAgICAgICAgICB3aGVyZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUud2hlcmUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgbnVsbHNOb3REaXN0aW5jdDogbm9kZS5udWxsc05vdERpc3RpbmN0LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtTGlzdChub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0xpc3ROb2RlJyxcbiAgICAgICAgICAgIGl0ZW1zOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuaXRlbXMsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtRHJvcEluZGV4KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnRHJvcEluZGV4Tm9kZScsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5uYW1lLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS50YWJsZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBpZkV4aXN0czogbm9kZS5pZkV4aXN0cyxcbiAgICAgICAgICAgIGNhc2NhZGU6IG5vZGUuY2FzY2FkZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVByaW1hcnlLZXlDb25zdHJhaW50KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnUHJpbWFyeUtleUNvbnN0cmFpbnROb2RlJyxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5jb2x1bW5zLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm5hbWUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZGVmZXJyYWJsZTogbm9kZS5kZWZlcnJhYmxlLFxuICAgICAgICAgICAgaW5pdGlhbGx5RGVmZXJyZWQ6IG5vZGUuaW5pdGlhbGx5RGVmZXJyZWQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1VbmlxdWVDb25zdHJhaW50KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnVW5pcXVlQ29uc3RyYWludE5vZGUnLFxuICAgICAgICAgICAgY29sdW1uczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmNvbHVtbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubmFtZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBudWxsc05vdERpc3RpbmN0OiBub2RlLm51bGxzTm90RGlzdGluY3QsXG4gICAgICAgICAgICBkZWZlcnJhYmxlOiBub2RlLmRlZmVycmFibGUsXG4gICAgICAgICAgICBpbml0aWFsbHlEZWZlcnJlZDogbm9kZS5pbml0aWFsbHlEZWZlcnJlZCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUZvcmVpZ25LZXlDb25zdHJhaW50KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnRm9yZWlnbktleUNvbnN0cmFpbnROb2RlJyxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5jb2x1bW5zLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHJlZmVyZW5jZXM6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnJlZmVyZW5jZXMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubmFtZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBvbkRlbGV0ZTogbm9kZS5vbkRlbGV0ZSxcbiAgICAgICAgICAgIG9uVXBkYXRlOiBub2RlLm9uVXBkYXRlLFxuICAgICAgICAgICAgZGVmZXJyYWJsZTogbm9kZS5kZWZlcnJhYmxlLFxuICAgICAgICAgICAgaW5pdGlhbGx5RGVmZXJyZWQ6IG5vZGUuaW5pdGlhbGx5RGVmZXJyZWQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1TZXRPcGVyYXRpb24obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdTZXRPcGVyYXRpb25Ob2RlJyxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBub2RlLm9wZXJhdG9yLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuZXhwcmVzc2lvbiwgcXVlcnlJZCksXG4gICAgICAgICAgICBhbGw6IG5vZGUuYWxsLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtUmVmZXJlbmNlcyhub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1JlZmVyZW5jZXNOb2RlJyxcbiAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS50YWJsZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuY29sdW1ucywgcXVlcnlJZCksXG4gICAgICAgICAgICBvbkRlbGV0ZTogbm9kZS5vbkRlbGV0ZSxcbiAgICAgICAgICAgIG9uVXBkYXRlOiBub2RlLm9uVXBkYXRlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQ2hlY2tDb25zdHJhaW50KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQ2hlY2tDb25zdHJhaW50Tm9kZScsXG4gICAgICAgICAgICBleHByZXNzaW9uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5leHByZXNzaW9uLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm5hbWUsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtV2l0aChub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1dpdGhOb2RlJyxcbiAgICAgICAgICAgIGV4cHJlc3Npb25zOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuZXhwcmVzc2lvbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgcmVjdXJzaXZlOiBub2RlLnJlY3Vyc2l2ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUNvbW1vblRhYmxlRXhwcmVzc2lvbihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0NvbW1vblRhYmxlRXhwcmVzc2lvbk5vZGUnLFxuICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubmFtZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBtYXRlcmlhbGl6ZWQ6IG5vZGUubWF0ZXJpYWxpemVkLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuZXhwcmVzc2lvbiwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Db21tb25UYWJsZUV4cHJlc3Npb25OYW1lKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQ29tbW9uVGFibGVFeHByZXNzaW9uTmFtZU5vZGUnLFxuICAgICAgICAgICAgdGFibGU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnRhYmxlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5jb2x1bW5zLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUhhdmluZyhub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0hhdmluZ05vZGUnLFxuICAgICAgICAgICAgaGF2aW5nOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5oYXZpbmcsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQ3JlYXRlU2NoZW1hKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQ3JlYXRlU2NoZW1hTm9kZScsXG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnNjaGVtYSwgcXVlcnlJZCksXG4gICAgICAgICAgICBpZk5vdEV4aXN0czogbm9kZS5pZk5vdEV4aXN0cyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybURyb3BTY2hlbWEobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdEcm9wU2NoZW1hTm9kZScsXG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnNjaGVtYSwgcXVlcnlJZCksXG4gICAgICAgICAgICBpZkV4aXN0czogbm9kZS5pZkV4aXN0cyxcbiAgICAgICAgICAgIGNhc2NhZGU6IG5vZGUuY2FzY2FkZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUFsdGVyVGFibGUobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdBbHRlclRhYmxlTm9kZScsXG4gICAgICAgICAgICB0YWJsZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudGFibGUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgcmVuYW1lVG86IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnJlbmFtZVRvLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHNldFNjaGVtYTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuc2V0U2NoZW1hLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGNvbHVtbkFsdGVyYXRpb25zOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuY29sdW1uQWx0ZXJhdGlvbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgYWRkQ29uc3RyYWludDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuYWRkQ29uc3RyYWludCwgcXVlcnlJZCksXG4gICAgICAgICAgICBkcm9wQ29uc3RyYWludDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuZHJvcENvbnN0cmFpbnQsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgcmVuYW1lQ29uc3RyYWludDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUucmVuYW1lQ29uc3RyYWludCwgcXVlcnlJZCksXG4gICAgICAgICAgICBhZGRJbmRleDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuYWRkSW5kZXgsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZHJvcEluZGV4OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5kcm9wSW5kZXgsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtRHJvcENvbHVtbihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0Ryb3BDb2x1bW5Ob2RlJyxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuY29sdW1uLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVJlbmFtZUNvbHVtbihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1JlbmFtZUNvbHVtbk5vZGUnLFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5jb2x1bW4sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgcmVuYW1lVG86IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnJlbmFtZVRvLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUFsdGVyQ29sdW1uKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQWx0ZXJDb2x1bW5Ob2RlJyxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuY29sdW1uLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5kYXRhVHlwZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBkYXRhVHlwZUV4cHJlc3Npb246IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmRhdGFUeXBlRXhwcmVzc2lvbiwgcXVlcnlJZCksXG4gICAgICAgICAgICBzZXREZWZhdWx0OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5zZXREZWZhdWx0LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGRyb3BEZWZhdWx0OiBub2RlLmRyb3BEZWZhdWx0LFxuICAgICAgICAgICAgc2V0Tm90TnVsbDogbm9kZS5zZXROb3ROdWxsLFxuICAgICAgICAgICAgZHJvcE5vdE51bGw6IG5vZGUuZHJvcE5vdE51bGwsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Nb2RpZnlDb2x1bW4obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdNb2RpZnlDb2x1bW5Ob2RlJyxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuY29sdW1uLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUFkZENvbnN0cmFpbnQobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdBZGRDb25zdHJhaW50Tm9kZScsXG4gICAgICAgICAgICBjb25zdHJhaW50OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5jb25zdHJhaW50LCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybURyb3BDb25zdHJhaW50KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnRHJvcENvbnN0cmFpbnROb2RlJyxcbiAgICAgICAgICAgIGNvbnN0cmFpbnROYW1lOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5jb25zdHJhaW50TmFtZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBpZkV4aXN0czogbm9kZS5pZkV4aXN0cyxcbiAgICAgICAgICAgIG1vZGlmaWVyOiBub2RlLm1vZGlmaWVyLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtUmVuYW1lQ29uc3RyYWludChub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1JlbmFtZUNvbnN0cmFpbnROb2RlJyxcbiAgICAgICAgICAgIG9sZE5hbWU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm9sZE5hbWUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgbmV3TmFtZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubmV3TmFtZSwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1DcmVhdGVWaWV3KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQ3JlYXRlVmlld05vZGUnLFxuICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubmFtZSwgcXVlcnlJZCksXG4gICAgICAgICAgICB0ZW1wb3Jhcnk6IG5vZGUudGVtcG9yYXJ5LFxuICAgICAgICAgICAgb3JSZXBsYWNlOiBub2RlLm9yUmVwbGFjZSxcbiAgICAgICAgICAgIGlmTm90RXhpc3RzOiBub2RlLmlmTm90RXhpc3RzLFxuICAgICAgICAgICAgbWF0ZXJpYWxpemVkOiBub2RlLm1hdGVyaWFsaXplZCxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5jb2x1bW5zLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGFzOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5hcywgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1SZWZyZXNoTWF0ZXJpYWxpemVkVmlldyhub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1JlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3Tm9kZScsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5uYW1lLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGNvbmN1cnJlbnRseTogbm9kZS5jb25jdXJyZW50bHksXG4gICAgICAgICAgICB3aXRoTm9EYXRhOiBub2RlLndpdGhOb0RhdGEsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Ecm9wVmlldyhub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0Ryb3BWaWV3Tm9kZScsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5uYW1lLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGlmRXhpc3RzOiBub2RlLmlmRXhpc3RzLFxuICAgICAgICAgICAgbWF0ZXJpYWxpemVkOiBub2RlLm1hdGVyaWFsaXplZCxcbiAgICAgICAgICAgIGNhc2NhZGU6IG5vZGUuY2FzY2FkZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUdlbmVyYXRlZChub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0dlbmVyYXRlZE5vZGUnLFxuICAgICAgICAgICAgYnlEZWZhdWx0OiBub2RlLmJ5RGVmYXVsdCxcbiAgICAgICAgICAgIGFsd2F5czogbm9kZS5hbHdheXMsXG4gICAgICAgICAgICBpZGVudGl0eTogbm9kZS5pZGVudGl0eSxcbiAgICAgICAgICAgIHN0b3JlZDogbm9kZS5zdG9yZWQsXG4gICAgICAgICAgICBleHByZXNzaW9uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5leHByZXNzaW9uLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybURlZmF1bHRWYWx1ZShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0RlZmF1bHRWYWx1ZU5vZGUnLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5kZWZhdWx0VmFsdWUsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtT24obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdPbk5vZGUnLFxuICAgICAgICAgICAgb246IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm9uLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVNlbGVjdE1vZGlmaWVyKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnU2VsZWN0TW9kaWZpZXJOb2RlJyxcbiAgICAgICAgICAgIG1vZGlmaWVyOiBub2RlLm1vZGlmaWVyLFxuICAgICAgICAgICAgcmF3TW9kaWZpZXI6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnJhd01vZGlmaWVyLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG9mOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUub2YsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQ3JlYXRlVHlwZShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0NyZWF0ZVR5cGVOb2RlJyxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm5hbWUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZW51bTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuZW51bSwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Ecm9wVHlwZShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0Ryb3BUeXBlTm9kZScsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5uYW1lLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGlmRXhpc3RzOiBub2RlLmlmRXhpc3RzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtRXhwbGFpbihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0V4cGxhaW5Ob2RlJyxcbiAgICAgICAgICAgIGZvcm1hdDogbm9kZS5mb3JtYXQsXG4gICAgICAgICAgICBvcHRpb25zOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5vcHRpb25zLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVNjaGVtYWJsZUlkZW50aWZpZXIobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdTY2hlbWFibGVJZGVudGlmaWVyTm9kZScsXG4gICAgICAgICAgICBzY2hlbWE6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnNjaGVtYSwgcXVlcnlJZCksXG4gICAgICAgICAgICBpZGVudGlmaWVyOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5pZGVudGlmaWVyLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUFnZ3JlZ2F0ZUZ1bmN0aW9uKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQWdncmVnYXRlRnVuY3Rpb25Ob2RlJyxcbiAgICAgICAgICAgIGZ1bmM6IG5vZGUuZnVuYyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZWQ6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5hZ2dyZWdhdGVkLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGRpc3RpbmN0OiBub2RlLmRpc3RpbmN0LFxuICAgICAgICAgICAgb3JkZXJCeTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub3JkZXJCeSwgcXVlcnlJZCksXG4gICAgICAgICAgICB3aXRoaW5Hcm91cDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUud2l0aGluR3JvdXAsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZmlsdGVyOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5maWx0ZXIsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgb3ZlcjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub3ZlciwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1PdmVyKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnT3Zlck5vZGUnLFxuICAgICAgICAgICAgb3JkZXJCeTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub3JkZXJCeSwgcXVlcnlJZCksXG4gICAgICAgICAgICBwYXJ0aXRpb25CeTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUucGFydGl0aW9uQnksIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtUGFydGl0aW9uQnkobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdQYXJ0aXRpb25CeU5vZGUnLFxuICAgICAgICAgICAgaXRlbXM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5pdGVtcywgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1QYXJ0aXRpb25CeUl0ZW0obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdQYXJ0aXRpb25CeUl0ZW1Ob2RlJyxcbiAgICAgICAgICAgIHBhcnRpdGlvbkJ5OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5wYXJ0aXRpb25CeSwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1CaW5hcnlPcGVyYXRpb24obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdCaW5hcnlPcGVyYXRpb25Ob2RlJyxcbiAgICAgICAgICAgIGxlZnRPcGVyYW5kOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5sZWZ0T3BlcmFuZCwgcXVlcnlJZCksXG4gICAgICAgICAgICBvcGVyYXRvcjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub3BlcmF0b3IsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgcmlnaHRPcGVyYW5kOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5yaWdodE9wZXJhbmQsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtVW5hcnlPcGVyYXRpb24obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdVbmFyeU9wZXJhdGlvbk5vZGUnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm9wZXJhdG9yLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG9wZXJhbmQ6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm9wZXJhbmQsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtVXNpbmcobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdVc2luZ05vZGUnLFxuICAgICAgICAgICAgdGFibGVzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUudGFibGVzLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUZ1bmN0aW9uKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnRnVuY3Rpb25Ob2RlJyxcbiAgICAgICAgICAgIGZ1bmM6IG5vZGUuZnVuYyxcbiAgICAgICAgICAgIGFyZ3VtZW50czogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmFyZ3VtZW50cywgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1DYXNlKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQ2FzZU5vZGUnLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnZhbHVlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHdoZW46IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS53aGVuLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGVsc2U6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmVsc2UsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgaXNTdGF0ZW1lbnQ6IG5vZGUuaXNTdGF0ZW1lbnQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1XaGVuKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnV2hlbk5vZGUnLFxuICAgICAgICAgICAgY29uZGl0aW9uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5jb25kaXRpb24sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgcmVzdWx0OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5yZXN1bHQsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtSlNPTlJlZmVyZW5jZShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0pTT05SZWZlcmVuY2VOb2RlJyxcbiAgICAgICAgICAgIHJlZmVyZW5jZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUucmVmZXJlbmNlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHRyYXZlcnNhbDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudHJhdmVyc2FsLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUpTT05QYXRoKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnSlNPTlBhdGhOb2RlJyxcbiAgICAgICAgICAgIGluT3BlcmF0b3I6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmluT3BlcmF0b3IsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgcGF0aExlZ3M6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5wYXRoTGVncywgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1KU09OUGF0aExlZyhub2RlLCBfcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdKU09OUGF0aExlZ05vZGUnLFxuICAgICAgICAgICAgdHlwZTogbm9kZS50eXBlLFxuICAgICAgICAgICAgdmFsdWU6IG5vZGUudmFsdWUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1KU09OT3BlcmF0b3JDaGFpbihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0pTT05PcGVyYXRvckNoYWluTm9kZScsXG4gICAgICAgICAgICBvcGVyYXRvcjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub3BlcmF0b3IsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgdmFsdWVzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUudmFsdWVzLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVR1cGxlKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnVHVwbGVOb2RlJyxcbiAgICAgICAgICAgIHZhbHVlczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLnZhbHVlcywgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1NZXJnZVF1ZXJ5KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnTWVyZ2VRdWVyeU5vZGUnLFxuICAgICAgICAgICAgaW50bzogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuaW50bywgcXVlcnlJZCksXG4gICAgICAgICAgICB1c2luZzogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudXNpbmcsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgd2hlbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS53aGVucywgcXVlcnlJZCksXG4gICAgICAgICAgICB3aXRoOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS53aXRoLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHRvcDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudG9wLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGVuZE1vZGlmaWVyczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmVuZE1vZGlmaWVycywgcXVlcnlJZCksXG4gICAgICAgICAgICBvdXRwdXQ6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm91dHB1dCwgcXVlcnlJZCksXG4gICAgICAgICAgICByZXR1cm5pbmc6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnJldHVybmluZywgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1NYXRjaGVkKG5vZGUsIF9xdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ01hdGNoZWROb2RlJyxcbiAgICAgICAgICAgIG5vdDogbm9kZS5ub3QsXG4gICAgICAgICAgICBieVNvdXJjZTogbm9kZS5ieVNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUFkZEluZGV4KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQWRkSW5kZXhOb2RlJyxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm5hbWUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgY29sdW1uczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmNvbHVtbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgdW5pcXVlOiBub2RlLnVuaXF1ZSxcbiAgICAgICAgICAgIHVzaW5nOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS51c2luZywgcXVlcnlJZCksXG4gICAgICAgICAgICBpZk5vdEV4aXN0czogbm9kZS5pZk5vdEV4aXN0cyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUNhc3Qobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDYXN0Tm9kZScsXG4gICAgICAgICAgICBleHByZXNzaW9uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5leHByZXNzaW9uLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5kYXRhVHlwZSwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1GZXRjaChub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0ZldGNoTm9kZScsXG4gICAgICAgICAgICByb3dDb3VudDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUucm93Q291bnQsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgbW9kaWZpZXI6IG5vZGUubW9kaWZpZXIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Ub3Aobm9kZSwgX3F1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnVG9wTm9kZScsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBub2RlLmV4cHJlc3Npb24sXG4gICAgICAgICAgICBtb2RpZmllcnM6IG5vZGUubW9kaWZpZXJzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtT3V0cHV0KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnT3V0cHV0Tm9kZScsXG4gICAgICAgICAgICBzZWxlY3Rpb25zOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuc2VsZWN0aW9ucywgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1EYXRhVHlwZShub2RlLCBfcXVlcnlJZCkge1xuICAgICAgICAvLyBBbiBPYmplY3QuZnJlZXplZCBsZWFmIG5vZGUuIE5vIG5lZWQgdG8gY2xvbmUuXG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1TZWxlY3RBbGwobm9kZSwgX3F1ZXJ5SWQpIHtcbiAgICAgICAgLy8gQW4gT2JqZWN0LmZyZWV6ZWQgbGVhZiBub2RlLiBObyBuZWVkIHRvIGNsb25lLlxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgdHJhbnNmb3JtSWRlbnRpZmllcihub2RlLCBfcXVlcnlJZCkge1xuICAgICAgICAvLyBBbiBPYmplY3QuZnJlZXplZCBsZWFmIG5vZGUuIE5vIG5lZWQgdG8gY2xvbmUuXG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1WYWx1ZShub2RlLCBfcXVlcnlJZCkge1xuICAgICAgICAvLyBBbiBPYmplY3QuZnJlZXplZCBsZWFmIG5vZGUuIE5vIG5lZWQgdG8gY2xvbmUuXG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1QcmltaXRpdmVWYWx1ZUxpc3Qobm9kZSwgX3F1ZXJ5SWQpIHtcbiAgICAgICAgLy8gQW4gT2JqZWN0LmZyZWV6ZWQgbGVhZiBub2RlLiBObyBuZWVkIHRvIGNsb25lLlxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgdHJhbnNmb3JtT3BlcmF0b3Iobm9kZSwgX3F1ZXJ5SWQpIHtcbiAgICAgICAgLy8gQW4gT2JqZWN0LmZyZWV6ZWQgbGVhZiBub2RlLiBObyBuZWVkIHRvIGNsb25lLlxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgdHJhbnNmb3JtRGVmYXVsdEluc2VydFZhbHVlKG5vZGUsIF9xdWVyeUlkKSB7XG4gICAgICAgIC8vIEFuIE9iamVjdC5mcmVlemVkIGxlYWYgbm9kZS4gTm8gbmVlZCB0byBjbG9uZS5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIHRyYW5zZm9ybU9yQWN0aW9uKG5vZGUsIF9xdWVyeUlkKSB7XG4gICAgICAgIC8vIEFuIE9iamVjdC5mcmVlemVkIGxlYWYgbm9kZS4gTm8gbmVlZCB0byBjbG9uZS5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIHRyYW5zZm9ybUNvbGxhdGUobm9kZSwgX3F1ZXJ5SWQpIHtcbiAgICAgICAgLy8gQW4gT2JqZWN0LmZyZWV6ZWQgbGVhZiBub2RlLiBObyBuZWVkIHRvIGNsb25lLlxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3dpdGgtc2NoZW1hLXRyYW5zZm9ybWVyLmQudHNcIiAvPlxuaW1wb3J0IHsgQWxpYXNOb2RlIH0gZnJvbSAnLi4vLi4vb3BlcmF0aW9uLW5vZGUvYWxpYXMtbm9kZS5qcyc7XG5pbXBvcnQgeyBJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4uLy4uL29wZXJhdGlvbi1ub2RlL2lkZW50aWZpZXItbm9kZS5qcyc7XG5pbXBvcnQgeyBMaXN0Tm9kZSB9IGZyb20gJy4uLy4uL29wZXJhdGlvbi1ub2RlL2xpc3Qtbm9kZS5qcyc7XG5pbXBvcnQgeyBPcGVyYXRpb25Ob2RlVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi9vcGVyYXRpb24tbm9kZS9vcGVyYXRpb24tbm9kZS10cmFuc2Zvcm1lci5qcyc7XG5pbXBvcnQgeyBTY2hlbWFibGVJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4uLy4uL29wZXJhdGlvbi1ub2RlL3NjaGVtYWJsZS1pZGVudGlmaWVyLW5vZGUuanMnO1xuaW1wb3J0IHsgVGFibGVOb2RlIH0gZnJvbSAnLi4vLi4vb3BlcmF0aW9uLW5vZGUvdGFibGUtbm9kZS5qcyc7XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi8uLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vLyBUaGlzIG9iamVjdCBleGlzdCBvbmx5IHNvIHRoYXQgd2UgZ2V0IGEgdHlwZSBlcnJvciB3aGVuIGEgbmV3IFJvb3RPcGVyYXRpb25Ob2RlXG4vLyBpcyBhZGRlZC4gSWYgeW91IGdldCBhIHR5cGUgZXJyb3IgaGVyZSwgbWFrZSBzdXJlIHRvIGFkZCB0aGUgbmV3IHJvb3Qgbm9kZSBhbmRcbi8vIGhhbmRsZSBpdCBjb3JyZWN0bHkgaW4gdGhlIHRyYW5zZm9ybWVyLlxuLy9cbi8vIERPIE5PVCBSRUZBQ1RPUiBUSElTIEVWRU4gSUYgSVQgU0VFTVMgVVNFTEVTUyBUTyBZT1UhXG5jb25zdCBST09UX09QRVJBVElPTl9OT0RFUyA9IGZyZWV6ZSh7XG4gICAgQWx0ZXJUYWJsZU5vZGU6IHRydWUsXG4gICAgQ3JlYXRlSW5kZXhOb2RlOiB0cnVlLFxuICAgIENyZWF0ZVNjaGVtYU5vZGU6IHRydWUsXG4gICAgQ3JlYXRlVGFibGVOb2RlOiB0cnVlLFxuICAgIENyZWF0ZVR5cGVOb2RlOiB0cnVlLFxuICAgIENyZWF0ZVZpZXdOb2RlOiB0cnVlLFxuICAgIFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3Tm9kZTogdHJ1ZSxcbiAgICBEZWxldGVRdWVyeU5vZGU6IHRydWUsXG4gICAgRHJvcEluZGV4Tm9kZTogdHJ1ZSxcbiAgICBEcm9wU2NoZW1hTm9kZTogdHJ1ZSxcbiAgICBEcm9wVGFibGVOb2RlOiB0cnVlLFxuICAgIERyb3BUeXBlTm9kZTogdHJ1ZSxcbiAgICBEcm9wVmlld05vZGU6IHRydWUsXG4gICAgSW5zZXJ0UXVlcnlOb2RlOiB0cnVlLFxuICAgIFJhd05vZGU6IHRydWUsXG4gICAgU2VsZWN0UXVlcnlOb2RlOiB0cnVlLFxuICAgIFVwZGF0ZVF1ZXJ5Tm9kZTogdHJ1ZSxcbiAgICBNZXJnZVF1ZXJ5Tm9kZTogdHJ1ZSxcbn0pO1xuY29uc3QgU0NIRU1BTEVTU19GVU5DVElPTlMgPSB7XG4gICAganNvbl9hZ2c6IHRydWUsXG4gICAgdG9fanNvbjogdHJ1ZSxcbn07XG5leHBvcnQgY2xhc3MgV2l0aFNjaGVtYVRyYW5zZm9ybWVyIGV4dGVuZHMgT3BlcmF0aW9uTm9kZVRyYW5zZm9ybWVyIHtcbiAgICAjc2NoZW1hO1xuICAgICNzY2hlbWFibGVJZHMgPSBuZXcgU2V0KCk7XG4gICAgI2N0ZXMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3RydWN0b3Ioc2NoZW1hKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuI3NjaGVtYSA9IHNjaGVtYTtcbiAgICB9XG4gICAgdHJhbnNmb3JtTm9kZUltcGwobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICBpZiAoIXRoaXMuI2lzUm9vdE9wZXJhdGlvbk5vZGUobm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzdXBlci50cmFuc2Zvcm1Ob2RlSW1wbChub2RlLCBxdWVyeUlkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdGVzID0gdGhpcy4jY29sbGVjdENURXMobm9kZSk7XG4gICAgICAgIGZvciAoY29uc3QgY3RlIG9mIGN0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuI2N0ZXMuYWRkKGN0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFibGVzID0gdGhpcy4jY29sbGVjdFNjaGVtYWJsZUlkcyhub2RlKTtcbiAgICAgICAgZm9yIChjb25zdCB0YWJsZSBvZiB0YWJsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuI3NjaGVtYWJsZUlkcy5hZGQodGFibGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gc3VwZXIudHJhbnNmb3JtTm9kZUltcGwobm9kZSwgcXVlcnlJZCk7XG4gICAgICAgIGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XG4gICAgICAgICAgICB0aGlzLiNzY2hlbWFibGVJZHMuZGVsZXRlKHRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGN0ZSBvZiBjdGVzKSB7XG4gICAgICAgICAgICB0aGlzLiNjdGVzLmRlbGV0ZShjdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZDtcbiAgICB9XG4gICAgdHJhbnNmb3JtU2NoZW1hYmxlSWRlbnRpZmllcihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gc3VwZXIudHJhbnNmb3JtU2NoZW1hYmxlSWRlbnRpZmllcihub2RlLCBxdWVyeUlkKTtcbiAgICAgICAgaWYgKHRyYW5zZm9ybWVkLnNjaGVtYSB8fCAhdGhpcy4jc2NoZW1hYmxlSWRzLmhhcyhub2RlLmlkZW50aWZpZXIubmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udHJhbnNmb3JtZWQsXG4gICAgICAgICAgICBzY2hlbWE6IElkZW50aWZpZXJOb2RlLmNyZWF0ZSh0aGlzLiNzY2hlbWEpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICB0cmFuc2Zvcm1SZWZlcmVuY2VzKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSBzdXBlci50cmFuc2Zvcm1SZWZlcmVuY2VzKG5vZGUsIHF1ZXJ5SWQpO1xuICAgICAgICBpZiAodHJhbnNmb3JtZWQudGFibGUudGFibGUuc2NoZW1hKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnRyYW5zZm9ybWVkLFxuICAgICAgICAgICAgdGFibGU6IFRhYmxlTm9kZS5jcmVhdGVXaXRoU2NoZW1hKHRoaXMuI3NjaGVtYSwgdHJhbnNmb3JtZWQudGFibGUudGFibGUuaWRlbnRpZmllci5uYW1lKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQWdncmVnYXRlRnVuY3Rpb24obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3VwZXIudHJhbnNmb3JtQWdncmVnYXRlRnVuY3Rpb24oeyAuLi5ub2RlLCBhZ2dyZWdhdGVkOiBbXSB9LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZWQ6IHRoaXMuI3RyYW5zZm9ybVRhYmxlQXJnc1dpdGhvdXRTY2hlbWFzKG5vZGUsIHF1ZXJ5SWQsICdhZ2dyZWdhdGVkJyksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRyYW5zZm9ybUZ1bmN0aW9uKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN1cGVyLnRyYW5zZm9ybUZ1bmN0aW9uKHsgLi4ubm9kZSwgYXJndW1lbnRzOiBbXSB9LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGFyZ3VtZW50czogdGhpcy4jdHJhbnNmb3JtVGFibGVBcmdzV2l0aG91dFNjaGVtYXMobm9kZSwgcXVlcnlJZCwgJ2FyZ3VtZW50cycpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICAjdHJhbnNmb3JtVGFibGVBcmdzV2l0aG91dFNjaGVtYXMobm9kZSwgcXVlcnlJZCwgYXJnc0tleSkge1xuICAgICAgICByZXR1cm4gU0NIRU1BTEVTU19GVU5DVElPTlNbbm9kZS5mdW5jXVxuICAgICAgICAgICAgPyBub2RlW2FyZ3NLZXldLm1hcCgoYXJnKSA9PiAhVGFibGVOb2RlLmlzKGFyZykgfHwgYXJnLnRhYmxlLnNjaGVtYVxuICAgICAgICAgICAgICAgID8gdGhpcy50cmFuc2Zvcm1Ob2RlKGFyZywgcXVlcnlJZClcbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uYXJnLFxuICAgICAgICAgICAgICAgICAgICB0YWJsZTogdGhpcy50cmFuc2Zvcm1JZGVudGlmaWVyKGFyZy50YWJsZS5pZGVudGlmaWVyLCBxdWVyeUlkKSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGVbYXJnc0tleV0sIHF1ZXJ5SWQpO1xuICAgIH1cbiAgICAjaXNSb290T3BlcmF0aW9uTm9kZShub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgaW4gUk9PVF9PUEVSQVRJT05fTk9ERVM7XG4gICAgfVxuICAgICNjb2xsZWN0U2NoZW1hYmxlSWRzKG5vZGUpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hYmxlSWRzID0gbmV3IFNldCgpO1xuICAgICAgICBpZiAoJ25hbWUnIGluIG5vZGUgJiYgbm9kZS5uYW1lICYmIFNjaGVtYWJsZUlkZW50aWZpZXJOb2RlLmlzKG5vZGUubmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuI2NvbGxlY3RTY2hlbWFibGVJZChub2RlLm5hbWUsIHNjaGVtYWJsZUlkcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCdmcm9tJyBpbiBub2RlICYmIG5vZGUuZnJvbSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBmcm9tIG9mIG5vZGUuZnJvbS5mcm9tcykge1xuICAgICAgICAgICAgICAgIHRoaXMuI2NvbGxlY3RTY2hlbWFibGVJZHNGcm9tVGFibGVFeHByKGZyb20sIHNjaGVtYWJsZUlkcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCdpbnRvJyBpbiBub2RlICYmIG5vZGUuaW50bykge1xuICAgICAgICAgICAgdGhpcy4jY29sbGVjdFNjaGVtYWJsZUlkc0Zyb21UYWJsZUV4cHIobm9kZS5pbnRvLCBzY2hlbWFibGVJZHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgndGFibGUnIGluIG5vZGUgJiYgbm9kZS50YWJsZSkge1xuICAgICAgICAgICAgdGhpcy4jY29sbGVjdFNjaGVtYWJsZUlkc0Zyb21UYWJsZUV4cHIobm9kZS50YWJsZSwgc2NoZW1hYmxlSWRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2pvaW5zJyBpbiBub2RlICYmIG5vZGUuam9pbnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgam9pbiBvZiBub2RlLmpvaW5zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jY29sbGVjdFNjaGVtYWJsZUlkc0Zyb21UYWJsZUV4cHIoam9pbi50YWJsZSwgc2NoZW1hYmxlSWRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJ3VzaW5nJyBpbiBub2RlICYmIG5vZGUudXNpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuI2NvbGxlY3RTY2hlbWFibGVJZHNGcm9tVGFibGVFeHByKG5vZGUudXNpbmcsIHNjaGVtYWJsZUlkcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVtYWJsZUlkcztcbiAgICB9XG4gICAgI2NvbGxlY3RDVEVzKG5vZGUpIHtcbiAgICAgICAgY29uc3QgY3RlcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgaWYgKCd3aXRoJyBpbiBub2RlICYmIG5vZGUud2l0aCkge1xuICAgICAgICAgICAgdGhpcy4jY29sbGVjdENURUlkcyhub2RlLndpdGgsIGN0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdGVzO1xuICAgIH1cbiAgICAjY29sbGVjdFNjaGVtYWJsZUlkc0Zyb21UYWJsZUV4cHIobm9kZSwgc2NoZW1hYmxlSWRzKSB7XG4gICAgICAgIGlmIChUYWJsZU5vZGUuaXMobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuI2NvbGxlY3RTY2hlbWFibGVJZChub2RlLnRhYmxlLCBzY2hlbWFibGVJZHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFsaWFzTm9kZS5pcyhub2RlKSAmJiBUYWJsZU5vZGUuaXMobm9kZS5ub2RlKSkge1xuICAgICAgICAgICAgdGhpcy4jY29sbGVjdFNjaGVtYWJsZUlkKG5vZGUubm9kZS50YWJsZSwgc2NoZW1hYmxlSWRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChMaXN0Tm9kZS5pcyhub2RlKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB0YWJsZSBvZiBub2RlLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jY29sbGVjdFNjaGVtYWJsZUlkc0Zyb21UYWJsZUV4cHIodGFibGUsIHNjaGVtYWJsZUlkcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2NvbGxlY3RTY2hlbWFibGVJZChub2RlLCBzY2hlbWFibGVJZHMpIHtcbiAgICAgICAgY29uc3QgaWQgPSBub2RlLmlkZW50aWZpZXIubmFtZTtcbiAgICAgICAgaWYgKCF0aGlzLiNzY2hlbWFibGVJZHMuaGFzKGlkKSAmJiAhdGhpcy4jY3Rlcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICBzY2hlbWFibGVJZHMuYWRkKGlkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjY29sbGVjdENURUlkcyhub2RlLCBjdGVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXhwciBvZiBub2RlLmV4cHJlc3Npb25zKSB7XG4gICAgICAgICAgICBjb25zdCBjdGVJZCA9IGV4cHIubmFtZS50YWJsZS50YWJsZS5pZGVudGlmaWVyLm5hbWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuI2N0ZXMuaGFzKGN0ZUlkKSkge1xuICAgICAgICAgICAgICAgIGN0ZXMuYWRkKGN0ZUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vd2l0aC1zY2hlbWEtcGx1Z2luLmQudHNcIiAvPlxuaW1wb3J0IHsgV2l0aFNjaGVtYVRyYW5zZm9ybWVyIH0gZnJvbSAnLi93aXRoLXNjaGVtYS10cmFuc2Zvcm1lci5qcyc7XG5leHBvcnQgY2xhc3MgV2l0aFNjaGVtYVBsdWdpbiB7XG4gICAgI3RyYW5zZm9ybWVyO1xuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSkge1xuICAgICAgICB0aGlzLiN0cmFuc2Zvcm1lciA9IG5ldyBXaXRoU2NoZW1hVHJhbnNmb3JtZXIoc2NoZW1hKTtcbiAgICB9XG4gICAgdHJhbnNmb3JtUXVlcnkoYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jdHJhbnNmb3JtZXIudHJhbnNmb3JtTm9kZShhcmdzLm5vZGUsIGFyZ3MucXVlcnlJZCk7XG4gICAgfVxuICAgIGFzeW5jIHRyYW5zZm9ybVJlc3VsdChhcmdzKSB7XG4gICAgICAgIHJldHVybiBhcmdzLnJlc3VsdDtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL21hdGNoZWQtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBNYXRjaGVkTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnTWF0Y2hlZE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG5vdCwgYnlTb3VyY2UgPSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdNYXRjaGVkTm9kZScsXG4gICAgICAgICAgICBub3QsXG4gICAgICAgICAgICBieVNvdXJjZSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9tZXJnZS1wYXJzZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBNYXRjaGVkTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL21hdGNoZWQtbm9kZS5qcyc7XG5pbXBvcnQgeyBpc09wZXJhdGlvbk5vZGVTb3VyY2UsIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmltcG9ydCB7IFJhd05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9yYXctbm9kZS5qcyc7XG5pbXBvcnQgeyBXaGVuTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3doZW4tbm9kZS5qcyc7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IHBhcnNlRmlsdGVyTGlzdCwgcGFyc2VSZWZlcmVudGlhbEJpbmFyeU9wZXJhdGlvbiwgcGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbiwgfSBmcm9tICcuL2JpbmFyeS1vcGVyYXRpb24tcGFyc2VyLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU1lcmdlV2hlbih0eXBlLCBhcmdzLCByZWZSaWdodCkge1xuICAgIHJldHVybiBXaGVuTm9kZS5jcmVhdGUocGFyc2VGaWx0ZXJMaXN0KFtcbiAgICAgICAgTWF0Y2hlZE5vZGUuY3JlYXRlKCF0eXBlLmlzTWF0Y2hlZCwgdHlwZS5ieVNvdXJjZSksXG4gICAgICAgIC4uLihhcmdzICYmIGFyZ3MubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgYXJncy5sZW5ndGggPT09IDMgJiYgcmVmUmlnaHRcbiAgICAgICAgICAgICAgICAgICAgPyBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgIDogcGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbihhcmdzKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICAgIDogW10pLFxuICAgIF0sICdhbmQnLCBmYWxzZSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWVyZ2VUaGVuKHJlc3VsdCkge1xuICAgIGlmIChpc1N0cmluZyhyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiBSYXdOb2RlLmNyZWF0ZShbcmVzdWx0XSwgW10pO1xuICAgIH1cbiAgICBpZiAoaXNPcGVyYXRpb25Ob2RlU291cmNlKHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC50b09wZXJhdGlvbk5vZGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZGVmZXJyZWQuZC50c1wiIC8+XG5leHBvcnQgY2xhc3MgRGVmZXJyZWQge1xuICAgICNwcm9taXNlO1xuICAgICNyZXNvbHZlO1xuICAgICNyZWplY3Q7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuI3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNyZWplY3QgPSByZWplY3Q7XG4gICAgICAgICAgICB0aGlzLiNyZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBwcm9taXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvbWlzZTtcbiAgICB9XG4gICAgcmVzb2x2ZSA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy4jcmVzb2x2ZSkge1xuICAgICAgICAgICAgdGhpcy4jcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJlamVjdCA9IChyZWFzb24pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuI3JlamVjdCkge1xuICAgICAgICAgICAgdGhpcy4jcmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9wcm92aWRlLWNvbnRyb2xsZWQtY29ubmVjdGlvbi5kLnRzXCIgLz5cbmltcG9ydCB7IERlZmVycmVkIH0gZnJvbSAnLi9kZWZlcnJlZC5qcyc7XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvdmlkZUNvbnRyb2xsZWRDb25uZWN0aW9uKGNvbm5lY3Rpb25Qcm92aWRlcikge1xuICAgIGNvbnN0IGNvbm5lY3Rpb25EZWZlciA9IG5ldyBEZWZlcnJlZCgpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb25SZWxlYXNlRGVmZXIgPSBuZXcgRGVmZXJyZWQoKTtcbiAgICBjb25uZWN0aW9uUHJvdmlkZXJcbiAgICAgICAgLnByb3ZpZGVDb25uZWN0aW9uKGFzeW5jIChjb25uZWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbm5lY3Rpb25EZWZlci5yZXNvbHZlKGNvbm5lY3Rpb24pO1xuICAgICAgICByZXR1cm4gYXdhaXQgY29ubmVjdGlvblJlbGVhc2VEZWZlci5wcm9taXNlO1xuICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXgpID0+IGNvbm5lY3Rpb25EZWZlci5yZWplY3QoZXgpKTtcbiAgICAvLyBDcmVhdGUgY29tcG9zaXRlIG9mIHRoZSBjb25uZWN0aW9uIGFuZCB0aGUgcmVsZWFzZSBtZXRob2QgaW5zdGVhZCBvZlxuICAgIC8vIG1vZGlmeWluZyB0aGUgY29ubmVjdGlvbiBvciBjcmVhdGluZyBhIG5ldyBuZXN0aW5nIGBEYXRhYmFzZUNvbm5lY3Rpb25gLlxuICAgIC8vIFRoaXMgd2F5IHdlIGRvbid0IGFjY2lkZW50YWxseSBvdmVycmlkZSBhbnkgbWV0aG9kcyBvZiAzcmQgcGFydHlcbiAgICAvLyBjb25uZWN0aW9ucyBhbmQgZG9uJ3QgcmV0dXJuIHdyYXBwZWQgY29ubmVjdGlvbnMgdG8gZHJpdmVycyB0aGF0XG4gICAgLy8gZXhwZWN0IGEgY2VydGFpbiBzcGVjaWZpYyBjb25uZWN0aW9uIGNsYXNzLlxuICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICBjb25uZWN0aW9uOiBhd2FpdCBjb25uZWN0aW9uRGVmZXIucHJvbWlzZSxcbiAgICAgICAgcmVsZWFzZTogY29ubmVjdGlvblJlbGVhc2VEZWZlci5yZXNvbHZlLFxuICAgIH0pO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9xdWVyeS1leGVjdXRvci1iYXNlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgcHJvdmlkZUNvbnRyb2xsZWRDb25uZWN0aW9uIH0gZnJvbSAnLi4vdXRpbC9wcm92aWRlLWNvbnRyb2xsZWQtY29ubmVjdGlvbi5qcyc7XG5pbXBvcnQgeyBsb2dPbmNlIH0gZnJvbSAnLi4vdXRpbC9sb2ctb25jZS5qcyc7XG5jb25zdCBOT19QTFVHSU5TID0gZnJlZXplKFtdKTtcbmV4cG9ydCBjbGFzcyBRdWVyeUV4ZWN1dG9yQmFzZSB7XG4gICAgI3BsdWdpbnM7XG4gICAgY29uc3RydWN0b3IocGx1Z2lucyA9IE5PX1BMVUdJTlMpIHtcbiAgICAgICAgdGhpcy4jcGx1Z2lucyA9IHBsdWdpbnM7XG4gICAgfVxuICAgIGdldCBwbHVnaW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGx1Z2lucztcbiAgICB9XG4gICAgdHJhbnNmb3JtUXVlcnkobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0aGlzLiNwbHVnaW5zKSB7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZE5vZGUgPSBwbHVnaW4udHJhbnNmb3JtUXVlcnkoeyBub2RlLCBxdWVyeUlkIH0pO1xuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIHJ1bnRpbWUgY2hlY2sgaGVyZS4gVGhlcmUgaXMgbm8gZ29vZCB3YXlcbiAgICAgICAgICAgIC8vIHRvIHdyaXRlIHR5cGVzIHRoYXQgZW5mb3JjZSB0aGlzIGNvbnN0cmFpbnQuXG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtZWROb2RlLmtpbmQgPT09IG5vZGUua2luZCkge1xuICAgICAgICAgICAgICAgIG5vZGUgPSB0cmFuc2Zvcm1lZE5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoW1xuICAgICAgICAgICAgICAgICAgICBgS3lzZWx5UGx1Z2luLnRyYW5zZm9ybVF1ZXJ5IG11c3QgcmV0dXJuIGEgbm9kZWAsXG4gICAgICAgICAgICAgICAgICAgIGBvZiB0aGUgc2FtZSBraW5kIHRoYXQgd2FzIGdpdmVuIHRvIGl0LmAsXG4gICAgICAgICAgICAgICAgICAgIGBUaGUgcGx1Z2luIHdhcyBnaXZlbiBhICR7bm9kZS5raW5kfWAsXG4gICAgICAgICAgICAgICAgICAgIGBidXQgaXQgcmV0dXJuZWQgYSAke3RyYW5zZm9ybWVkTm9kZS5raW5kfWAsXG4gICAgICAgICAgICAgICAgXS5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlUXVlcnkoY29tcGlsZWRRdWVyeSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm92aWRlQ29ubmVjdGlvbihhc3luYyAoY29ubmVjdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29ubmVjdGlvbi5leGVjdXRlUXVlcnkoY29tcGlsZWRRdWVyeSk7XG4gICAgICAgICAgICBpZiAoJ251bVVwZGF0ZWRPckRlbGV0ZWRSb3dzJyBpbiByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBsb2dPbmNlKCdreXNlbHk6d2FybmluZzogb3V0ZGF0ZWQgZHJpdmVyL3BsdWdpbiBkZXRlY3RlZCEgYFF1ZXJ5UmVzdWx0Lm51bVVwZGF0ZWRPckRlbGV0ZWRSb3dzYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBRdWVyeVJlc3VsdC5udW1BZmZlY3RlZFJvd3NgLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuI3RyYW5zZm9ybVJlc3VsdChyZXN1bHQsIHF1ZXJ5SWQpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgKnN0cmVhbShjb21waWxlZFF1ZXJ5LCBjaHVua1NpemUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgY29uc3QgeyBjb25uZWN0aW9uLCByZWxlYXNlIH0gPSBhd2FpdCBwcm92aWRlQ29udHJvbGxlZENvbm5lY3Rpb24odGhpcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHJlc3VsdCBvZiBjb25uZWN0aW9uLnN0cmVhbVF1ZXJ5KGNvbXBpbGVkUXVlcnksIGNodW5rU2l6ZSkpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCBhd2FpdCB0aGlzLiN0cmFuc2Zvcm1SZXN1bHQocmVzdWx0LCBxdWVyeUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHJlbGVhc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyAjdHJhbnNmb3JtUmVzdWx0KHJlc3VsdCwgcXVlcnlJZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0aGlzLiNwbHVnaW5zKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBwbHVnaW4udHJhbnNmb3JtUmVzdWx0KHsgcmVzdWx0LCBxdWVyeUlkIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9ub29wLXF1ZXJ5LWV4ZWN1dG9yLmQudHNcIiAvPlxuaW1wb3J0IHsgUXVlcnlFeGVjdXRvckJhc2UgfSBmcm9tICcuL3F1ZXJ5LWV4ZWN1dG9yLWJhc2UuanMnO1xuLyoqXG4gKiBBIHtAbGluayBRdWVyeUV4ZWN1dG9yfSBzdWJjbGFzcyB0aGF0IGNhbiBiZSB1c2VkIHdoZW4geW91IGRvbid0XG4gKiBoYXZlIGEge0BsaW5rIFF1ZXJ5Q29tcGlsZXJ9LCB7QGxpbmsgQ29ubmVjdGlvblByb3ZpZGVyfSBvciBhbnlcbiAqIG90aGVyIG5lZWRlZCB0aGluZ3MgdG8gYWN0dWFsbHkgZXhlY3V0ZSBxdWVyaWVzLlxuICovXG5leHBvcnQgY2xhc3MgTm9vcFF1ZXJ5RXhlY3V0b3IgZXh0ZW5kcyBRdWVyeUV4ZWN1dG9yQmFzZSB7XG4gICAgZ2V0IGFkYXB0ZXIoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBxdWVyeSBjYW5ub3QgYmUgY29tcGlsZWQgdG8gU1FMJyk7XG4gICAgfVxuICAgIGNvbXBpbGVRdWVyeSgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIHF1ZXJ5IGNhbm5vdCBiZSBjb21waWxlZCB0byBTUUwnKTtcbiAgICB9XG4gICAgcHJvdmlkZUNvbm5lY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBxdWVyeSBjYW5ub3QgYmUgZXhlY3V0ZWQnKTtcbiAgICB9XG4gICAgd2l0aENvbm5lY3Rpb25Qcm92aWRlcigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0aGlzIHF1ZXJ5IGNhbm5vdCBoYXZlIGEgY29ubmVjdGlvbiBwcm92aWRlcicpO1xuICAgIH1cbiAgICB3aXRoUGx1Z2luKHBsdWdpbikge1xuICAgICAgICByZXR1cm4gbmV3IE5vb3BRdWVyeUV4ZWN1dG9yKFsuLi50aGlzLnBsdWdpbnMsIHBsdWdpbl0pO1xuICAgIH1cbiAgICB3aXRoUGx1Z2lucyhwbHVnaW5zKSB7XG4gICAgICAgIHJldHVybiBuZXcgTm9vcFF1ZXJ5RXhlY3V0b3IoWy4uLnRoaXMucGx1Z2lucywgLi4ucGx1Z2luc10pO1xuICAgIH1cbiAgICB3aXRoUGx1Z2luQXRGcm9udChwbHVnaW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb29wUXVlcnlFeGVjdXRvcihbcGx1Z2luLCAuLi50aGlzLnBsdWdpbnNdKTtcbiAgICB9XG4gICAgd2l0aG91dFBsdWdpbnMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTm9vcFF1ZXJ5RXhlY3V0b3IoW10pO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCBOT09QX1FVRVJZX0VYRUNVVE9SID0gbmV3IE5vb3BRdWVyeUV4ZWN1dG9yKCk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL21lcmdlLXJlc3VsdC5kLnRzXCIgLz5cbmV4cG9ydCBjbGFzcyBNZXJnZVJlc3VsdCB7XG4gICAgbnVtQ2hhbmdlZFJvd3M7XG4gICAgY29uc3RydWN0b3IobnVtQ2hhbmdlZFJvd3MpIHtcbiAgICAgICAgdGhpcy5udW1DaGFuZ2VkUm93cyA9IG51bUNoYW5nZWRSb3dzO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vbWVyZ2UtcXVlcnktYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IEluc2VydFF1ZXJ5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2luc2VydC1xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IE1lcmdlUXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvbWVyZ2UtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IFVwZGF0ZVF1ZXJ5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3VwZGF0ZS1xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlSW5zZXJ0RXhwcmVzc2lvbiwgfSBmcm9tICcuLi9wYXJzZXIvaW5zZXJ0LXZhbHVlcy1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VKb2luLCB9IGZyb20gJy4uL3BhcnNlci9qb2luLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZU1lcmdlVGhlbiwgcGFyc2VNZXJnZVdoZW4gfSBmcm9tICcuLi9wYXJzZXIvbWVyZ2UtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlU2VsZWN0QWxsLCBwYXJzZVNlbGVjdEFyZywgfSBmcm9tICcuLi9wYXJzZXIvc2VsZWN0LXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVRvcCB9IGZyb20gJy4uL3BhcnNlci90b3AtcGFyc2VyLmpzJztcbmltcG9ydCB7IE5PT1BfUVVFUllfRVhFQ1VUT1IgfSBmcm9tICcuLi9xdWVyeS1leGVjdXRvci9ub29wLXF1ZXJ5LWV4ZWN1dG9yLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IE1lcmdlUmVzdWx0IH0gZnJvbSAnLi9tZXJnZS1yZXN1bHQuanMnO1xuaW1wb3J0IHsgTm9SZXN1bHRFcnJvciwgaXNOb1Jlc3VsdEVycm9yQ29uc3RydWN0b3IsIH0gZnJvbSAnLi9uby1yZXN1bHQtZXJyb3IuanMnO1xuaW1wb3J0IHsgVXBkYXRlUXVlcnlCdWlsZGVyIH0gZnJvbSAnLi91cGRhdGUtcXVlcnktYnVpbGRlci5qcyc7XG5leHBvcnQgY2xhc3MgTWVyZ2VRdWVyeUJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWRkIGFueSBhZGRpdGlvbmFsIFNRTCB0byB0aGUgZW5kIG9mIHRoZSBxdWVyeS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLm1lcmdlSW50bygncGVyc29uJylcbiAgICAgKiAgIC51c2luZygncGV0JywgJ3BldC5vd25lcl9pZCcsICdwZXJzb24uaWQnKVxuICAgICAqICAgLndoZW5NYXRjaGVkKClcbiAgICAgKiAgIC50aGVuRGVsZXRlKClcbiAgICAgKiAgIC5tb2RpZnlFbmQoc3FsLnJhdygnLS0gdGhpcyBpcyBhIGNvbW1lbnQnKSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIG1lcmdlIGludG8gXCJwZXJzb25cIiB1c2luZyBcInBldFwiIG9uIFwicGV0XCIuXCJvd25lcl9pZFwiID0gXCJwZXJzb25cIi5cImlkXCIgd2hlbiBtYXRjaGVkIHRoZW4gZGVsZXRlIC0tIHRoaXMgaXMgYSBjb21tZW50XG4gICAgICogYGBgXG4gICAgICovXG4gICAgbW9kaWZ5RW5kKG1vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhFbmRNb2RpZmllcih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIG1vZGlmaWVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgYSBgbWVyZ2UgaW50b2AgcXVlcnkgdG8gYW4gYG1lcmdlIHRvcCBpbnRvYCBxdWVyeS5cbiAgICAgKlxuICAgICAqIGB0b3BgIGNsYXVzZSBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIGRpYWxlY3RzIGxpa2UgTVMgU1FMIFNlcnZlci5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogQWZmZWN0IDUgbWF0Y2hlZCByb3dzIGF0IG1vc3Q6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLm1lcmdlSW50bygncGVyc29uJylcbiAgICAgKiAgIC50b3AoNSlcbiAgICAgKiAgIC51c2luZygncGV0JywgJ3BlcnNvbi5pZCcsICdwZXQub3duZXJfaWQnKVxuICAgICAqICAgLndoZW5NYXRjaGVkKClcbiAgICAgKiAgIC50aGVuRGVsZXRlKClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNUyBTUUwgU2VydmVyKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIG1lcmdlIHRvcCg1KSBpbnRvIFwicGVyc29uXCJcbiAgICAgKiB1c2luZyBcInBldFwiIG9uIFwicGVyc29uXCIuXCJpZFwiID0gXCJwZXRcIi5cIm93bmVyX2lkXCJcbiAgICAgKiB3aGVuIG1hdGNoZWQgdGhlblxuICAgICAqICAgZGVsZXRlXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBBZmZlY3QgNTAlIG9mIG1hdGNoZWQgcm93czpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIubWVyZ2VJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnRvcCg1MCwgJ3BlcmNlbnQnKVxuICAgICAqICAgLnVzaW5nKCdwZXQnLCAncGVyc29uLmlkJywgJ3BldC5vd25lcl9pZCcpXG4gICAgICogICAud2hlbk1hdGNoZWQoKVxuICAgICAqICAgLnRoZW5EZWxldGUoKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE1TIFNRTCBTZXJ2ZXIpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogbWVyZ2UgdG9wKDUwKSBwZXJjZW50IGludG8gXCJwZXJzb25cIlxuICAgICAqIHVzaW5nIFwicGV0XCIgb24gXCJwZXJzb25cIi5cImlkXCIgPSBcInBldFwiLlwib3duZXJfaWRcIlxuICAgICAqIHdoZW4gbWF0Y2hlZCB0aGVuXG4gICAgICogICBkZWxldGVcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB0b3AoZXhwcmVzc2lvbiwgbW9kaWZpZXJzKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhUb3AodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVRvcChleHByZXNzaW9uLCBtb2RpZmllcnMpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVzaW5nKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBXaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogTWVyZ2VRdWVyeU5vZGUuY2xvbmVXaXRoVXNpbmcodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZUpvaW4oJ1VzaW5nJywgYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuaW5nKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFJldHVybmluZyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QXJnKGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybmluZ0FsbCh0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IE1lcmdlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoUmV0dXJuaW5nKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VTZWxlY3RBbGwodGFibGUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG91dHB1dChhcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhPdXRwdXQodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVNlbGVjdEFyZyhhcmdzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvdXRwdXRBbGwodGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aE91dHB1dCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QWxsKHRhYmxlKSksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBXaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBhZGQgYW55IGFkZGl0aW9uYWwgU1FMIHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGF3YWl0IGRiXG4gICAgICogICAubWVyZ2VJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnVzaW5nKCdwZXQnLCAncGV0Lm93bmVyX2lkJywgJ3BlcnNvbi5pZCcpXG4gICAgICogICAud2hlbk1hdGNoZWQoKVxuICAgICAqICAgLnRoZW5EZWxldGUoKVxuICAgICAqICAgLm1vZGlmeUVuZChzcWwucmF3KCctLSB0aGlzIGlzIGEgY29tbWVudCcpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogbWVyZ2UgaW50byBcInBlcnNvblwiIHVzaW5nIFwicGV0XCIgb24gXCJwZXRcIi5cIm93bmVyX2lkXCIgPSBcInBlcnNvblwiLlwiaWRcIiB3aGVuIG1hdGNoZWQgdGhlbiBkZWxldGUgLS0gdGhpcyBpcyBhIGNvbW1lbnRcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBtb2RpZnlFbmQobW9kaWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBXaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEVuZE1vZGlmaWVyKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgbW9kaWZpZXIudG9PcGVyYXRpb25Ob2RlKCkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VlIHtAbGluayBNZXJnZVF1ZXJ5QnVpbGRlci50b3B9LlxuICAgICAqL1xuICAgIHRvcChleHByZXNzaW9uLCBtb2RpZmllcnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBXaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFRvcCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlVG9wKGV4cHJlc3Npb24sIG1vZGlmaWVycykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIHNpbXBsZSBgd2hlbiBtYXRjaGVkYCBjbGF1c2UgdG8gdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogRm9yIGEgYHdoZW4gbWF0Y2hlZGAgY2xhdXNlIHdpdGggYW4gYGFuZGAgY29uZGl0aW9uLCBzZWUge0BsaW5rIHdoZW5NYXRjaGVkQW5kfS5cbiAgICAgKlxuICAgICAqIEZvciBhIHNpbXBsZSBgd2hlbiBub3QgbWF0Y2hlZGAgY2xhdXNlLCBzZWUge0BsaW5rIHdoZW5Ob3RNYXRjaGVkfS5cbiAgICAgKlxuICAgICAqIEZvciBhIGB3aGVuIG5vdCBtYXRjaGVkYCBjbGF1c2Ugd2l0aCBhbiBgYW5kYCBjb25kaXRpb24sIHNlZSB7QGxpbmsgd2hlbk5vdE1hdGNoZWRBbmR9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiLm1lcmdlSW50bygncGVyc29uJylcbiAgICAgKiAgIC51c2luZygncGV0JywgJ3BlcnNvbi5pZCcsICdwZXQub3duZXJfaWQnKVxuICAgICAqICAgLndoZW5NYXRjaGVkKClcbiAgICAgKiAgIC50aGVuRGVsZXRlKClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIG1lcmdlIGludG8gXCJwZXJzb25cIlxuICAgICAqIHVzaW5nIFwicGV0XCIgb24gXCJwZXJzb25cIi5cImlkXCIgPSBcInBldFwiLlwib3duZXJfaWRcIlxuICAgICAqIHdoZW4gbWF0Y2hlZCB0aGVuXG4gICAgICogICBkZWxldGVcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB3aGVuTWF0Y2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3doZW5NYXRjaGVkKFtdKTtcbiAgICB9XG4gICAgd2hlbk1hdGNoZWRBbmQoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jd2hlbk1hdGNoZWQoYXJncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIGB3aGVuIG1hdGNoZWRgIGNsYXVzZSB0byB0aGUgcXVlcnkgd2l0aCBhbiBgYW5kYCBjb25kaXRpb24uIEJ1dCB1bmxpa2VcbiAgICAgKiB7QGxpbmsgd2hlbk1hdGNoZWRBbmR9LCB0aGlzIG1ldGhvZCBhY2NlcHRzIGEgY29sdW1uIHJlZmVyZW5jZSBhcyB0aGUgM3JkIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgc2ltaWxhciB0byB7QGxpbmsgU2VsZWN0UXVlcnlCdWlsZGVyLndoZXJlUmVmfSwgc28gc2VlIHRoZSBkb2N1bWVudGF0aW9uXG4gICAgICogZm9yIHRoYXQgbWV0aG9kIGZvciBtb3JlIGV4YW1wbGVzLlxuICAgICAqL1xuICAgIHdoZW5NYXRjaGVkQW5kUmVmKGxocywgb3AsIHJocykge1xuICAgICAgICByZXR1cm4gdGhpcy4jd2hlbk1hdGNoZWQoW2xocywgb3AsIHJoc10sIHRydWUpO1xuICAgIH1cbiAgICAjd2hlbk1hdGNoZWQoYXJncywgcmVmUmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRjaGVkVGhlbmFibGVNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogTWVyZ2VRdWVyeU5vZGUuY2xvbmVXaXRoV2hlbih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlTWVyZ2VXaGVuKHsgaXNNYXRjaGVkOiB0cnVlIH0sIGFyZ3MsIHJlZlJpZ2h0KSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgc2ltcGxlIGB3aGVuIG5vdCBtYXRjaGVkYCBjbGF1c2UgdG8gdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogRm9yIGEgYHdoZW4gbm90IG1hdGNoZWRgIGNsYXVzZSB3aXRoIGFuIGBhbmRgIGNvbmRpdGlvbiwgc2VlIHtAbGluayB3aGVuTm90TWF0Y2hlZEFuZH0uXG4gICAgICpcbiAgICAgKiBGb3IgYSBzaW1wbGUgYHdoZW4gbWF0Y2hlZGAgY2xhdXNlLCBzZWUge0BsaW5rIHdoZW5NYXRjaGVkfS5cbiAgICAgKlxuICAgICAqIEZvciBhIGB3aGVuIG1hdGNoZWRgIGNsYXVzZSB3aXRoIGFuIGBhbmRgIGNvbmRpdGlvbiwgc2VlIHtAbGluayB3aGVuTWF0Y2hlZEFuZH0uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGIubWVyZ2VJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnVzaW5nKCdwZXQnLCAncGVyc29uLmlkJywgJ3BldC5vd25lcl9pZCcpXG4gICAgICogICAud2hlbk5vdE1hdGNoZWQoKVxuICAgICAqICAgLnRoZW5JbnNlcnRWYWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSm9obicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0RvZScsXG4gICAgICogICB9KVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogbWVyZ2UgaW50byBcInBlcnNvblwiXG4gICAgICogdXNpbmcgXCJwZXRcIiBvbiBcInBlcnNvblwiLlwiaWRcIiA9IFwicGV0XCIuXCJvd25lcl9pZFwiXG4gICAgICogd2hlbiBub3QgbWF0Y2hlZCB0aGVuXG4gICAgICogICBpbnNlcnQgKFwiZmlyc3RfbmFtZVwiLCBcImxhc3RfbmFtZVwiKSB2YWx1ZXMgKCQxLCAkMilcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB3aGVuTm90TWF0Y2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3doZW5Ob3RNYXRjaGVkKFtdKTtcbiAgICB9XG4gICAgd2hlbk5vdE1hdGNoZWRBbmQoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jd2hlbk5vdE1hdGNoZWQoYXJncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIGB3aGVuIG5vdCBtYXRjaGVkYCBjbGF1c2UgdG8gdGhlIHF1ZXJ5IHdpdGggYW4gYGFuZGAgY29uZGl0aW9uLiBCdXQgdW5saWtlXG4gICAgICoge0BsaW5rIHdoZW5Ob3RNYXRjaGVkQW5kfSwgdGhpcyBtZXRob2QgYWNjZXB0cyBhIGNvbHVtbiByZWZlcmVuY2UgYXMgdGhlIDNyZCBhcmd1bWVudC5cbiAgICAgKlxuICAgICAqIFVubGlrZSB7QGxpbmsgd2hlbk1hdGNoZWRBbmRSZWZ9LCB5b3UgY2Fubm90IHJlZmVyZW5jZSBjb2x1bW5zIGZyb20gdGhlIHRhcmdldCB0YWJsZS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHNpbWlsYXIgdG8ge0BsaW5rIFNlbGVjdFF1ZXJ5QnVpbGRlci53aGVyZVJlZn0sIHNvIHNlZSB0aGUgZG9jdW1lbnRhdGlvblxuICAgICAqIGZvciB0aGF0IG1ldGhvZCBmb3IgbW9yZSBleGFtcGxlcy5cbiAgICAgKi9cbiAgICB3aGVuTm90TWF0Y2hlZEFuZFJlZihsaHMsIG9wLCByaHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3doZW5Ob3RNYXRjaGVkKFtsaHMsIG9wLCByaHNdLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIHNpbXBsZSBgd2hlbiBub3QgbWF0Y2hlZCBieSBzb3VyY2VgIGNsYXVzZSB0byB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiBTdXBwb3J0ZWQgaW4gTVMgU1FMIFNlcnZlci5cbiAgICAgKlxuICAgICAqIFNpbWlsYXIgdG8ge0BsaW5rIHdoZW5Ob3RNYXRjaGVkfSwgYnV0IHJldHVybnMgYSB7QGxpbmsgTWF0Y2hlZFRoZW5hYmxlTWVyZ2VRdWVyeUJ1aWxkZXJ9LlxuICAgICAqL1xuICAgIHdoZW5Ob3RNYXRjaGVkQnlTb3VyY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiN3aGVuTm90TWF0Y2hlZChbXSwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICB3aGVuTm90TWF0Y2hlZEJ5U291cmNlQW5kKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3doZW5Ob3RNYXRjaGVkKGFyZ3MsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgYHdoZW4gbm90IG1hdGNoZWQgYnkgc291cmNlYCBjbGF1c2UgdG8gdGhlIHF1ZXJ5IHdpdGggYW4gYGFuZGAgY29uZGl0aW9uLlxuICAgICAqXG4gICAgICogU2ltaWxhciB0byB7QGxpbmsgd2hlbk5vdE1hdGNoZWRBbmRSZWZ9LCBidXQgeW91IGNhbiByZWZlcmVuY2UgY29sdW1ucyBmcm9tXG4gICAgICogdGhlIHRhcmdldCB0YWJsZSwgYW5kIG5vdCBmcm9tIHNvdXJjZSB0YWJsZSBhbmQgcmV0dXJucyBhIHtAbGluayBNYXRjaGVkVGhlbmFibGVNZXJnZVF1ZXJ5QnVpbGRlcn0uXG4gICAgICovXG4gICAgd2hlbk5vdE1hdGNoZWRCeVNvdXJjZUFuZFJlZihsaHMsIG9wLCByaHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3doZW5Ob3RNYXRjaGVkKFtsaHMsIG9wLCByaHNdLCB0cnVlLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuaW5nKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBXaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFJldHVybmluZyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QXJnKGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybmluZ0FsbCh0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IFdoZW5lYWJsZU1lcmdlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoUmV0dXJuaW5nKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VTZWxlY3RBbGwodGFibGUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG91dHB1dChhcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgV2hlbmVhYmxlTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhPdXRwdXQodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVNlbGVjdEFyZyhhcmdzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvdXRwdXRBbGwodGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBXaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aE91dHB1dCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QWxsKHRhYmxlKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAjd2hlbk5vdE1hdGNoZWQoYXJncywgcmVmUmlnaHQgPSBmYWxzZSwgYnlTb3VyY2UgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBNZXJnZVF1ZXJ5Tm9kZS5jbG9uZVdpdGhXaGVuKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VNZXJnZVdoZW4oeyBpc01hdGNoZWQ6IGZhbHNlLCBieVNvdXJjZSB9LCBhcmdzLCByZWZSaWdodCkpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBCdWlsZGVyID0gYnlTb3VyY2VcbiAgICAgICAgICAgID8gTWF0Y2hlZFRoZW5hYmxlTWVyZ2VRdWVyeUJ1aWxkZXJcbiAgICAgICAgICAgIDogTm90TWF0Y2hlZFRoZW5hYmxlTWVyZ2VRdWVyeUJ1aWxkZXI7XG4gICAgICAgIHJldHVybiBuZXcgQnVpbGRlcihwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBjb25kaXRpb25hbGx5IGNhbGwgYSBtZXRob2Qgb24gYHRoaXNgLCBzZWVcbiAgICAgKiB0aGUge0BsaW5rICRpZn0gbWV0aG9kLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBUaGUgbmV4dCBleGFtcGxlIHVzZXMgYSBoZWxwZXIgZnVuY3Rpb24gYGxvZ2AgdG8gbG9nIGEgcXVlcnk6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgQ29tcGlsYWJsZSB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGxvZzxUIGV4dGVuZHMgQ29tcGlsYWJsZT4ocWI6IFQpOiBUIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHFiLmNvbXBpbGUoKSlcbiAgICAgKiAgIHJldHVybiBxYlxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLnVwZGF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLnNldCh7IGZpcnN0X25hbWU6ICdKb2huJyB9KVxuICAgICAqICAgLiRjYWxsKGxvZylcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsIGBmdW5jKHRoaXMpYCBpZiBgY29uZGl0aW9uYCBpcyB0cnVlLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgZXNwZWNpYWxseSBoYW5keSB3aXRoIG9wdGlvbmFsIHNlbGVjdHMuIEFueSBgcmV0dXJuaW5nYCBvciBgcmV0dXJuaW5nQWxsYFxuICAgICAqIG1ldGhvZCBjYWxscyBhZGQgY29sdW1ucyBhcyBvcHRpb25hbCBmaWVsZHMgdG8gdGhlIG91dHB1dCB0eXBlIHdoZW4gY2FsbGVkIGluc2lkZVxuICAgICAqIHRoZSBgZnVuY2AgY2FsbGJhY2suIFRoaXMgaXMgYmVjYXVzZSB3ZSBjYW4ndCBrbm93IGlmIHRob3NlIHNlbGVjdGlvbnMgd2VyZSBhY3R1YWxseVxuICAgICAqIG1hZGUgYmVmb3JlIHJ1bm5pbmcgdGhlIGNvZGUuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIGFsc28gY2FsbCBhbnkgb3RoZXIgbWV0aG9kcyBpbnNpZGUgdGhlIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgUGVyc29uVXBkYXRlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVBlcnNvbihpZDogbnVtYmVyLCB1cGRhdGVzOiBQZXJzb25VcGRhdGUsIHJldHVybkxhc3ROYW1lOiBib29sZWFuKSB7XG4gICAgICogICByZXR1cm4gYXdhaXQgZGJcbiAgICAgKiAgICAgLnVwZGF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgICAuc2V0KHVwZGF0ZXMpXG4gICAgICogICAgIC53aGVyZSgnaWQnLCAnPScsIGlkKVxuICAgICAqICAgICAucmV0dXJuaW5nKFsnaWQnLCAnZmlyc3RfbmFtZSddKVxuICAgICAqICAgICAuJGlmKHJldHVybkxhc3ROYW1lLCAocWIpID0+IHFiLnJldHVybmluZygnbGFzdF9uYW1lJykpXG4gICAgICogICAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQW55IHNlbGVjdGlvbnMgYWRkZWQgaW5zaWRlIHRoZSBgaWZgIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYXMgb3B0aW9uYWwgZmllbGRzIHRvIHRoZVxuICAgICAqIG91dHB1dCB0eXBlIHNpbmNlIHdlIGNhbid0IGtub3cgaWYgdGhlIHNlbGVjdGlvbnMgd2VyZSBhY3R1YWxseSBtYWRlIGJlZm9yZSBydW5uaW5nXG4gICAgICogdGhlIGNvZGUuIEluIHRoZSBleGFtcGxlIGFib3ZlIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgYHVwZGF0ZVBlcnNvbmAgZnVuY3Rpb24gaXM6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIFByb21pc2U8e1xuICAgICAqICAgaWQ6IG51bWJlclxuICAgICAqICAgZmlyc3RfbmFtZTogc3RyaW5nXG4gICAgICogICBsYXN0X25hbWU/OiBzdHJpbmdcbiAgICAgKiB9PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgICRpZihjb25kaXRpb24sIGZ1bmMpIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBXaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBxdWVyeSBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiByb3dzLlxuICAgICAqXG4gICAgICogQWxzbyBzZWUgdGhlIHtAbGluayBleGVjdXRlVGFrZUZpcnN0fSBhbmQge0BsaW5rIGV4ZWN1dGVUYWtlRmlyc3RPclRocm93fSBtZXRob2RzLlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBpbGVkUXVlcnkgPSB0aGlzLmNvbXBpbGUoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KGNvbXBpbGVkUXVlcnksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgICAgICBjb25zdCB7IGFkYXB0ZXIgfSA9IHRoaXMuI3Byb3BzLmV4ZWN1dG9yO1xuICAgICAgICBjb25zdCBxdWVyeSA9IGNvbXBpbGVkUXVlcnkucXVlcnk7XG4gICAgICAgIGlmICgocXVlcnkucmV0dXJuaW5nICYmIGFkYXB0ZXIuc3VwcG9ydHNSZXR1cm5pbmcpIHx8XG4gICAgICAgICAgICAocXVlcnkub3V0cHV0ICYmIGFkYXB0ZXIuc3VwcG9ydHNPdXRwdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtuZXcgTWVyZ2VSZXN1bHQocmVzdWx0Lm51bUFmZmVjdGVkUm93cyldO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyB0aGUgcXVlcnkgYW5kIHJldHVybnMgdGhlIGZpcnN0IHJlc3VsdCBvciB1bmRlZmluZWQgaWZcbiAgICAgKiB0aGUgcXVlcnkgcmV0dXJuZWQgbm8gcmVzdWx0LlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGVUYWtlRmlyc3QoKSB7XG4gICAgICAgIGNvbnN0IFtyZXN1bHRdID0gYXdhaXQgdGhpcy5leGVjdXRlKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBxdWVyeSBhbmQgcmV0dXJucyB0aGUgZmlyc3QgcmVzdWx0IG9yIHRocm93cyBpZlxuICAgICAqIHRoZSBxdWVyeSByZXR1cm5lZCBubyByZXN1bHQuXG4gICAgICpcbiAgICAgKiBCeSBkZWZhdWx0IGFuIGluc3RhbmNlIG9mIHtAbGluayBOb1Jlc3VsdEVycm9yfSBpcyB0aHJvd24sIGJ1dCB5b3UgY2FuXG4gICAgICogcHJvdmlkZSBhIGN1c3RvbSBlcnJvciBjbGFzcywgb3IgY2FsbGJhY2sgYXMgdGhlIG9ubHkgYXJndW1lbnQgdG8gdGhyb3cgYSBkaWZmZXJlbnRcbiAgICAgKiBlcnJvci5cbiAgICAgKi9cbiAgICBhc3luYyBleGVjdXRlVGFrZUZpcnN0T3JUaHJvdyhlcnJvckNvbnN0cnVjdG9yID0gTm9SZXN1bHRFcnJvcikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVUYWtlRmlyc3QoKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzTm9SZXN1bHRFcnJvckNvbnN0cnVjdG9yKGVycm9yQ29uc3RydWN0b3IpXG4gICAgICAgICAgICAgICAgPyBuZXcgZXJyb3JDb25zdHJ1Y3Rvcih0aGlzLnRvT3BlcmF0aW9uTm9kZSgpKVxuICAgICAgICAgICAgICAgIDogZXJyb3JDb25zdHJ1Y3Rvcih0aGlzLnRvT3BlcmF0aW9uTm9kZSgpKTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE1hdGNoZWRUaGVuYWJsZU1lcmdlUXVlcnlCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyB0aGUgYGRlbGV0ZWAgYWN0aW9uLlxuICAgICAqXG4gICAgICogVG8gcGVyZm9ybSB0aGUgYGRvIG5vdGhpbmdgIGFjdGlvbiwgc2VlIHtAbGluayB0aGVuRG9Ob3RoaW5nfS5cbiAgICAgKlxuICAgICAqIFRvIHBlcmZvcm0gdGhlIGB1cGRhdGVgIGFjdGlvbiwgc2VlIHtAbGluayB0aGVuVXBkYXRlfSBvciB7QGxpbmsgdGhlblVwZGF0ZVNldH0uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGIubWVyZ2VJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnVzaW5nKCdwZXQnLCAncGVyc29uLmlkJywgJ3BldC5vd25lcl9pZCcpXG4gICAgICogICAud2hlbk1hdGNoZWQoKVxuICAgICAqICAgLnRoZW5EZWxldGUoKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogbWVyZ2UgaW50byBcInBlcnNvblwiXG4gICAgICogdXNpbmcgXCJwZXRcIiBvbiBcInBlcnNvblwiLlwiaWRcIiA9IFwicGV0XCIuXCJvd25lcl9pZFwiXG4gICAgICogd2hlbiBtYXRjaGVkIHRoZW5cbiAgICAgKiAgIGRlbGV0ZVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRoZW5EZWxldGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgV2hlbmVhYmxlTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IE1lcmdlUXVlcnlOb2RlLmNsb25lV2l0aFRoZW4odGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZU1lcmdlVGhlbignZGVsZXRlJykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgdGhlIGBkbyBub3RoaW5nYCBhY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHN1cHBvcnRlZCBpbiBQb3N0Z3JlU1FMLlxuICAgICAqXG4gICAgICogVG8gcGVyZm9ybSB0aGUgYGRlbGV0ZWAgYWN0aW9uLCBzZWUge0BsaW5rIHRoZW5EZWxldGV9LlxuICAgICAqXG4gICAgICogVG8gcGVyZm9ybSB0aGUgYHVwZGF0ZWAgYWN0aW9uLCBzZWUge0BsaW5rIHRoZW5VcGRhdGV9IG9yIHtAbGluayB0aGVuVXBkYXRlU2V0fS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYi5tZXJnZUludG8oJ3BlcnNvbicpXG4gICAgICogICAudXNpbmcoJ3BldCcsICdwZXJzb24uaWQnLCAncGV0Lm93bmVyX2lkJylcbiAgICAgKiAgIC53aGVuTWF0Y2hlZCgpXG4gICAgICogICAudGhlbkRvTm90aGluZygpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBtZXJnZSBpbnRvIFwicGVyc29uXCJcbiAgICAgKiB1c2luZyBcInBldFwiIG9uIFwicGVyc29uXCIuXCJpZFwiID0gXCJwZXRcIi5cIm93bmVyX2lkXCJcbiAgICAgKiB3aGVuIG1hdGNoZWQgdGhlblxuICAgICAqICAgZG8gbm90aGluZ1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRoZW5Eb05vdGhpbmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgV2hlbmVhYmxlTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IE1lcmdlUXVlcnlOb2RlLmNsb25lV2l0aFRoZW4odGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZU1lcmdlVGhlbignZG8gbm90aGluZycpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYHVwZGF0ZWAgb3BlcmF0aW9uIHdpdGggYSBmdWxsLWZsZWRnZWQge0BsaW5rIFVwZGF0ZVF1ZXJ5QnVpbGRlcn0uXG4gICAgICogVGhpcyBpcyBoYW5keSB3aGVuIG11bHRpcGxlIGBzZXRgIGludm9jYXRpb25zIGFyZSBuZWVkZWQuXG4gICAgICpcbiAgICAgKiBGb3IgYSBzaG9ydGhhbmQgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCwgc2VlIHtAbGluayB0aGVuVXBkYXRlU2V0fS5cbiAgICAgKlxuICAgICAqIFRvIHBlcmZvcm0gdGhlIGBkZWxldGVgIGFjdGlvbiwgc2VlIHtAbGluayB0aGVuRGVsZXRlfS5cbiAgICAgKlxuICAgICAqIFRvIHBlcmZvcm0gdGhlIGBkbyBub3RoaW5nYCBhY3Rpb24sIHNlZSB7QGxpbmsgdGhlbkRvTm90aGluZ30uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGIubWVyZ2VJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnVzaW5nKCdwZXQnLCAncGVyc29uLmlkJywgJ3BldC5vd25lcl9pZCcpXG4gICAgICogICAud2hlbk1hdGNoZWQoKVxuICAgICAqICAgLnRoZW5VcGRhdGUoKHViKSA9PiB1YlxuICAgICAqICAgICAuc2V0KHNxbGBtZXRhZGF0YVsnaGFzX3BldHMnXWAsICdZJylcbiAgICAgKiAgICAgLnNldCh7XG4gICAgICogICAgICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAqICAgICB9KVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogbWVyZ2UgaW50byBcInBlcnNvblwiXG4gICAgICogdXNpbmcgXCJwZXRcIiBvbiBcInBlcnNvblwiLlwiaWRcIiA9IFwicGV0XCIuXCJvd25lcl9pZFwiXG4gICAgICogd2hlbiBtYXRjaGVkIHRoZW5cbiAgICAgKiAgIHVwZGF0ZSBzZXQgbWV0YWRhdGFbJ2hhc19wZXRzJ10gPSAkMSwgXCJ1cGRhdGVkX2F0XCIgPSAkMlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRoZW5VcGRhdGUoc2V0KSB7XG4gICAgICAgIHJldHVybiBuZXcgV2hlbmVhYmxlTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IE1lcmdlUXVlcnlOb2RlLmNsb25lV2l0aFRoZW4odGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZU1lcmdlVGhlbihzZXQobmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAgICAgcXVlcnlJZDogdGhpcy4jcHJvcHMucXVlcnlJZCxcbiAgICAgICAgICAgICAgICBleGVjdXRvcjogTk9PUF9RVUVSWV9FWEVDVVRPUixcbiAgICAgICAgICAgICAgICBxdWVyeU5vZGU6IFVwZGF0ZVF1ZXJ5Tm9kZS5jcmVhdGVXaXRob3V0VGFibGUoKSxcbiAgICAgICAgICAgIH0pKSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdGhlblVwZGF0ZVNldCguLi5hcmdzKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgbm90IHN1cmUgaG93IHRvIHR5cGUgdGhpcyBzbyBpdCB3b24ndCBjb21wbGFpbiBhYm91dCBzZXQoLi4uYXJncykuXG4gICAgICAgIHJldHVybiB0aGlzLnRoZW5VcGRhdGUoKHViKSA9PiB1Yi5zZXQoLi4uYXJncykpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBOb3RNYXRjaGVkVGhlbmFibGVNZXJnZVF1ZXJ5QnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgdGhlIGBkbyBub3RoaW5nYCBhY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHN1cHBvcnRlZCBpbiBQb3N0Z3JlU1FMLlxuICAgICAqXG4gICAgICogVG8gcGVyZm9ybSB0aGUgYGluc2VydGAgYWN0aW9uLCBzZWUge0BsaW5rIHRoZW5JbnNlcnRWYWx1ZXN9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiLm1lcmdlSW50bygncGVyc29uJylcbiAgICAgKiAgIC51c2luZygncGV0JywgJ3BlcnNvbi5pZCcsICdwZXQub3duZXJfaWQnKVxuICAgICAqICAgLndoZW5Ob3RNYXRjaGVkKClcbiAgICAgKiAgIC50aGVuRG9Ob3RoaW5nKClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIG1lcmdlIGludG8gXCJwZXJzb25cIlxuICAgICAqIHVzaW5nIFwicGV0XCIgb24gXCJwZXJzb25cIi5cImlkXCIgPSBcInBldFwiLlwib3duZXJfaWRcIlxuICAgICAqIHdoZW4gbm90IG1hdGNoZWQgdGhlblxuICAgICAqICAgZG8gbm90aGluZ1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRoZW5Eb05vdGhpbmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgV2hlbmVhYmxlTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IE1lcmdlUXVlcnlOb2RlLmNsb25lV2l0aFRoZW4odGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZU1lcmdlVGhlbignZG8gbm90aGluZycpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoZW5JbnNlcnRWYWx1ZXMoaW5zZXJ0KSB7XG4gICAgICAgIGNvbnN0IFtjb2x1bW5zLCB2YWx1ZXNdID0gcGFyc2VJbnNlcnRFeHByZXNzaW9uKGluc2VydCk7XG4gICAgICAgIHJldHVybiBuZXcgV2hlbmVhYmxlTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IE1lcmdlUXVlcnlOb2RlLmNsb25lV2l0aFRoZW4odGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZU1lcmdlVGhlbihJbnNlcnRRdWVyeU5vZGUuY2xvbmVXaXRoKEluc2VydFF1ZXJ5Tm9kZS5jcmVhdGVXaXRob3V0SW50bygpLCB7XG4gICAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgICAgICB9KSkpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3F1ZXJ5LWNyZWF0b3IuZC50c1wiIC8+XG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RRdWVyeUJ1aWxkZXIsIH0gZnJvbSAnLi9xdWVyeS1idWlsZGVyL3NlbGVjdC1xdWVyeS1idWlsZGVyLmpzJztcbmltcG9ydCB7IEluc2VydFF1ZXJ5QnVpbGRlciB9IGZyb20gJy4vcXVlcnktYnVpbGRlci9pbnNlcnQtcXVlcnktYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBEZWxldGVRdWVyeUJ1aWxkZXIgfSBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIvZGVsZXRlLXF1ZXJ5LWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgVXBkYXRlUXVlcnlCdWlsZGVyIH0gZnJvbSAnLi9xdWVyeS1idWlsZGVyL3VwZGF0ZS1xdWVyeS1idWlsZGVyLmpzJztcbmltcG9ydCB7IERlbGV0ZVF1ZXJ5Tm9kZSB9IGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvZGVsZXRlLXF1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgSW5zZXJ0UXVlcnlOb2RlIH0gZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9pbnNlcnQtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBTZWxlY3RRdWVyeU5vZGUgfSBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3NlbGVjdC1xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IFVwZGF0ZVF1ZXJ5Tm9kZSB9IGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvdXBkYXRlLXF1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VUYWJsZSwgcGFyc2VUYWJsZUV4cHJlc3Npb25Pckxpc3QsIHBhcnNlQWxpYXNlZFRhYmxlLCB9IGZyb20gJy4vcGFyc2VyL3RhYmxlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUNvbW1vblRhYmxlRXhwcmVzc2lvbiwgfSBmcm9tICcuL3BhcnNlci93aXRoLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBXaXRoTm9kZSB9IGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvd2l0aC1ub2RlLmpzJztcbmltcG9ydCB7IGNyZWF0ZVF1ZXJ5SWQgfSBmcm9tICcuL3V0aWwvcXVlcnktaWQuanMnO1xuaW1wb3J0IHsgV2l0aFNjaGVtYVBsdWdpbiB9IGZyb20gJy4vcGx1Z2luL3dpdGgtc2NoZW1hL3dpdGgtc2NoZW1hLXBsdWdpbi5qcyc7XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IHBhcnNlU2VsZWN0QXJnLCB9IGZyb20gJy4vcGFyc2VyL3NlbGVjdC1wYXJzZXIuanMnO1xuaW1wb3J0IHsgTWVyZ2VRdWVyeUJ1aWxkZXIgfSBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIvbWVyZ2UtcXVlcnktYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBNZXJnZVF1ZXJ5Tm9kZSB9IGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvbWVyZ2UtcXVlcnktbm9kZS5qcyc7XG5leHBvcnQgY2xhc3MgUXVlcnlDcmVhdG9yIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYHNlbGVjdGAgcXVlcnkgYnVpbGRlciBmb3IgdGhlIGdpdmVuIHRhYmxlIG9yIHRhYmxlcy5cbiAgICAgKlxuICAgICAqIFRoZSB0YWJsZXMgcGFzc2VkIHRvIHRoaXMgbWV0aG9kIGFyZSBidWlsdCBhcyB0aGUgcXVlcnkncyBgZnJvbWAgY2xhdXNlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBDcmVhdGUgYSBzZWxlY3QgcXVlcnkgZm9yIG9uZSB0YWJsZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZGIuc2VsZWN0RnJvbSgncGVyc29uJykuc2VsZWN0QWxsKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHNlbGVjdCAqIGZyb20gXCJwZXJzb25cIlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQ3JlYXRlIGEgc2VsZWN0IHF1ZXJ5IGZvciBvbmUgdGFibGUgd2l0aCBhbiBhbGlhczpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcGVyc29ucyA9IGF3YWl0IGRiLnNlbGVjdEZyb20oJ3BlcnNvbiBhcyBwJylcbiAgICAgKiAgIC5zZWxlY3QoWydwLmlkJywgJ2ZpcnN0X25hbWUnXSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKHBlcnNvbnNbMF0uaWQpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBzZWxlY3QgXCJwXCIuXCJpZFwiLCBcImZpcnN0X25hbWVcIiBmcm9tIFwicGVyc29uXCIgYXMgXCJwXCJcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIENyZWF0ZSBhIHNlbGVjdCBxdWVyeSBmcm9tIGEgc3VicXVlcnk6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHBlcnNvbnMgPSBhd2FpdCBkYi5zZWxlY3RGcm9tKFxuICAgICAqICAgICAoZWIpID0+IGViLnNlbGVjdEZyb20oJ3BlcnNvbicpLnNlbGVjdCgncGVyc29uLmlkIGFzIGlkZW50aWZpZXInKS5hcygncCcpXG4gICAgICogICApXG4gICAgICogICAuc2VsZWN0KCdwLmlkZW50aWZpZXInKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cocGVyc29uc1swXS5pZGVudGlmaWVyKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IFwicFwiLlwiaWRlbnRpZmllclwiLFxuICAgICAqIGZyb20gKFxuICAgICAqICAgc2VsZWN0IFwicGVyc29uXCIuXCJpZFwiIGFzIFwiaWRlbnRpZmllclwiIGZyb20gXCJwZXJzb25cIlxuICAgICAqICkgYXMgcFxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQ3JlYXRlIGEgc2VsZWN0IHF1ZXJ5IGZyb20gcmF3IHNxbDpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHtcdTAwQTBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBjb25zdCBpdGVtcyA9IGF3YWl0IGRiXG4gICAgICogICAuc2VsZWN0RnJvbShzcWw8eyBvbmU6IG51bWJlciB9PmAoc2VsZWN0IDEgYXMgb25lKWAuYXMoJ3EnKSlcbiAgICAgKiAgIC5zZWxlY3QoJ3Eub25lJylcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGl0ZW1zWzBdLm9uZSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHNlbGVjdCBcInFcIi5cIm9uZVwiLFxuICAgICAqIGZyb20gKFxuICAgICAqICAgc2VsZWN0IDEgYXMgb25lXG4gICAgICogKSBhcyBxXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBXaGVuIHlvdSB1c2UgdGhlIGBzcWxgIHRhZyB5b3UgbmVlZCB0byBhbHNvIHByb3ZpZGUgdGhlIHJlc3VsdCB0eXBlIG9mIHRoZVxuICAgICAqIHJhdyBzbmlwcGV0IC8gcXVlcnkgc28gdGhhdCBLeXNlbHkgY2FuIGZpZ3VyZSBvdXQgd2hhdCBjb2x1bW5zIGFyZVxuICAgICAqIGF2YWlsYWJsZSBmb3IgdGhlIHJlc3Qgb2YgdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogVGhlIGBzZWxlY3RGcm9tYCBtZXRob2QgYWxzbyBhY2NlcHRzIGFuIGFycmF5IGZvciBtdWx0aXBsZSB0YWJsZXMuIEFsbFxuICAgICAqIHRoZSBhYm92ZSBleGFtcGxlcyBjYW4gYWxzbyBiZSB1c2VkIGluIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQge1x1MDBBMHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGNvbnN0IGl0ZW1zID0gYXdhaXQgZGIuc2VsZWN0RnJvbShbXG4gICAgICogICAgICdwZXJzb24gYXMgcCcsXG4gICAgICogICAgIGRiLnNlbGVjdEZyb20oJ3BldCcpLnNlbGVjdCgncGV0LnNwZWNpZXMnKS5hcygnYScpLFxuICAgICAqICAgICBzcWw8eyBvbmU6IG51bWJlciB9PmAoc2VsZWN0IDEgYXMgb25lKWAuYXMoJ3EnKVxuICAgICAqICAgXSlcbiAgICAgKiAgIC5zZWxlY3QoWydwLmlkJywgJ2Euc3BlY2llcycsICdxLm9uZSddKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IFwicFwiLmlkLCBcImFcIi5cInNwZWNpZXNcIiwgXCJxXCIuXCJvbmVcIlxuICAgICAqIGZyb21cbiAgICAgKiAgIFwicGVyc29uXCIgYXMgXCJwXCIsXG4gICAgICogICAoc2VsZWN0IFwicGV0XCIuXCJzcGVjaWVzXCIgZnJvbSBcInBldFwiKSBhcyBhLFxuICAgICAqICAgKHNlbGVjdCAxIGFzIG9uZSkgYXMgXCJxXCJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzZWxlY3RGcm9tKGZyb20pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVNlbGVjdFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jcHJvcHMuZXhlY3V0b3IsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jcmVhdGVGcm9tKHBhcnNlVGFibGVFeHByZXNzaW9uT3JMaXN0KGZyb20pLCB0aGlzLiNwcm9wcy53aXRoTm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZWxlY3ROb0Zyb20oc2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVTZWxlY3RRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoU2VsZWN0aW9ucyhTZWxlY3RRdWVyeU5vZGUuY3JlYXRlKHRoaXMuI3Byb3BzLndpdGhOb2RlKSwgcGFyc2VTZWxlY3RBcmcoc2VsZWN0aW9uKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc2VydCBxdWVyeS5cbiAgICAgKlxuICAgICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBxdWVyeSBpcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgSW5zZXJ0UmVzdWx0fS4ge0BsaW5rIEluc2VydFJlc3VsdH1cbiAgICAgKiBoYXMgdGhlIHtAbGluayBJbnNlcnRSZXN1bHQuaW5zZXJ0SWQgfCBpbnNlcnRJZH0gZmllbGQgdGhhdCBob2xkcyB0aGUgYXV0byBpbmNyZW1lbnRlZCBpZCBvZlxuICAgICAqIHRoZSBpbnNlcnRlZCByb3cgaWYgdGhlIGRiIHJldHVybmVkIG9uZS5cbiAgICAgKlxuICAgICAqIFNlZSB0aGUge0BsaW5rIEluc2VydFF1ZXJ5QnVpbGRlci52YWx1ZXMgfCB2YWx1ZXN9IG1ldGhvZCBmb3IgbW9yZSBpbmZvIGFuZCBleGFtcGxlcy4gQWxzbyBzZWVcbiAgICAgKiB0aGUge0BsaW5rIFJldHVybmluZ0ludGVyZmFjZS5yZXR1cm5pbmcgfCByZXR1cm5pbmd9IG1ldGhvZCBmb3IgYSB3YXkgdG8gcmV0dXJuIGNvbHVtbnNcbiAgICAgKiBvbiBzdXBwb3J0ZWQgZGF0YWJhc2VzIGxpa2UgUG9zdGdyZVNRTC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICAgICAqICAgLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAudmFsdWVzKHtcbiAgICAgKiAgICAgZmlyc3RfbmFtZTogJ0plbm5pZmVyJyxcbiAgICAgKiAgICAgbGFzdF9uYW1lOiAnQW5pc3RvbidcbiAgICAgKiAgIH0pXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdCgpXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhyZXN1bHQuaW5zZXJ0SWQpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBTb21lIGRhdGFiYXNlcyBsaWtlIFBvc3RncmVTUUwgc3VwcG9ydCB0aGUgYHJldHVybmluZ2AgbWV0aG9kOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCB7IGlkIH0gPSBhd2FpdCBkYlxuICAgICAqICAgLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAudmFsdWVzKHtcbiAgICAgKiAgICAgZmlyc3RfbmFtZTogJ0plbm5pZmVyJyxcbiAgICAgKiAgICAgbGFzdF9uYW1lOiAnQW5pc3RvbidcbiAgICAgKiAgIH0pXG4gICAgICogICAucmV0dXJuaW5nKCdpZCcpXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGluc2VydEludG8odGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBJbnNlcnRRdWVyeU5vZGUuY3JlYXRlKHBhcnNlVGFibGUodGFibGUpLCB0aGlzLiNwcm9wcy53aXRoTm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgXCJyZXBsYWNlIGludG9cIiBxdWVyeS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgYnkgc29tZSBkaWFsZWN0cyBsaWtlIE15U1FMIG9yIFNRTGl0ZS5cbiAgICAgKlxuICAgICAqIFNpbWlsYXIgdG8gTXlTUUwncyB7QGxpbmsgSW5zZXJ0UXVlcnlCdWlsZGVyLm9uRHVwbGljYXRlS2V5VXBkYXRlfSB0aGF0IGRlbGV0ZXNcbiAgICAgKiBhbmQgaW5zZXJ0cyB2YWx1ZXMgb24gY29sbGlzaW9uIGluc3RlYWQgb2YgdXBkYXRpbmcgZXhpc3Rpbmcgcm93cy5cbiAgICAgKlxuICAgICAqIEFuIGFsaWFzIG9mIFNRTGl0ZSdzIHtAbGluayBJbnNlcnRRdWVyeUJ1aWxkZXIub3JSZXBsYWNlfS5cbiAgICAgKlxuICAgICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBxdWVyeSBpcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgSW5zZXJ0UmVzdWx0fS4ge0BsaW5rIEluc2VydFJlc3VsdH1cbiAgICAgKiBoYXMgdGhlIHtAbGluayBJbnNlcnRSZXN1bHQuaW5zZXJ0SWQgfCBpbnNlcnRJZH0gZmllbGQgdGhhdCBob2xkcyB0aGUgYXV0byBpbmNyZW1lbnRlZCBpZCBvZlxuICAgICAqIHRoZSBpbnNlcnRlZCByb3cgaWYgdGhlIGRiIHJldHVybmVkIG9uZS5cbiAgICAgKlxuICAgICAqIFNlZSB0aGUge0BsaW5rIEluc2VydFF1ZXJ5QnVpbGRlci52YWx1ZXMgfCB2YWx1ZXN9IG1ldGhvZCBmb3IgbW9yZSBpbmZvIGFuZCBleGFtcGxlcy5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICAgICAqICAgLnJlcGxhY2VJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnZhbHVlcyh7XG4gICAgICogICAgIGZpcnN0X25hbWU6ICdKZW5uaWZlcicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0FuaXN0b24nXG4gICAgICogICB9KVxuICAgICAqICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKHJlc3VsdC5pbnNlcnRJZClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiByZXBsYWNlIGludG8gYHBlcnNvbmAgKGBmaXJzdF9uYW1lYCwgYGxhc3RfbmFtZWApIHZhbHVlcyAoPywgPylcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZXBsYWNlSW50byh0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jcHJvcHMuZXhlY3V0b3IsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IEluc2VydFF1ZXJ5Tm9kZS5jcmVhdGUocGFyc2VUYWJsZSh0YWJsZSksIHRoaXMuI3Byb3BzLndpdGhOb2RlLCB0cnVlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkZWxldGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiBTZWUgdGhlIHtAbGluayBEZWxldGVRdWVyeUJ1aWxkZXIud2hlcmV9IG1ldGhvZCBmb3IgZXhhbXBsZXMgb24gaG93IHRvIHNwZWNpZnlcbiAgICAgKiBhIHdoZXJlIGNsYXVzZSBmb3IgdGhlIGRlbGV0ZSBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBxdWVyeSBpcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGVsZXRlUmVzdWx0fS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogPCEtLSBzaXRlRXhhbXBsZShcImRlbGV0ZVwiLCBcIlNpbmdsZSByb3dcIiwgMTApIC0tPlxuICAgICAqXG4gICAgICogRGVsZXRlIGEgc2luZ2xlIHJvdzpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAgICAgKiAgIC5kZWxldGVGcm9tKCdwZXJzb24nKVxuICAgICAqICAgLndoZXJlKCdwZXJzb24uaWQnLCAnPScsIDEpXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdCgpXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhyZXN1bHQubnVtRGVsZXRlZFJvd3MpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBkZWxldGUgZnJvbSBcInBlcnNvblwiIHdoZXJlIFwicGVyc29uXCIuXCJpZFwiID0gJDFcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFNvbWUgZGF0YWJhc2VzIHN1Y2ggYXMgTXlTUUwgc3VwcG9ydCBkZWxldGluZyBmcm9tIG11bHRpcGxlIHRhYmxlczpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAgICAgKiAgIC5kZWxldGVGcm9tKFsncGVyc29uJywgJ3BldCddKVxuICAgICAqICAgLnVzaW5nKCdwZXJzb24nKVxuICAgICAqICAgLmlubmVySm9pbigncGV0JywgJ3BldC5vd25lcl9pZCcsICdwZXJzb24uaWQnKVxuICAgICAqICAgLndoZXJlKCdwZXJzb24uaWQnLCAnPScsIDEpXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdCgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogZGVsZXRlIGZyb20gYHBlcnNvbmAsIGBwZXRgXG4gICAgICogdXNpbmcgYHBlcnNvbmBcbiAgICAgKiBpbm5lciBqb2luIGBwZXRgIG9uIGBwZXRgLmBvd25lcl9pZGAgPSBgcGVyc29uYC5gaWRgXG4gICAgICogd2hlcmUgYHBlcnNvbmAuYGlkYCA9ID9cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkZWxldGVGcm9tKGZyb20pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWxldGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBEZWxldGVRdWVyeU5vZGUuY3JlYXRlKHBhcnNlVGFibGVFeHByZXNzaW9uT3JMaXN0KGZyb20pLCB0aGlzLiNwcm9wcy53aXRoTm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIHVwZGF0ZSBxdWVyeS5cbiAgICAgKlxuICAgICAqIFNlZSB0aGUge0BsaW5rIFVwZGF0ZVF1ZXJ5QnVpbGRlci53aGVyZX0gbWV0aG9kIGZvciBleGFtcGxlcyBvbiBob3cgdG8gc3BlY2lmeVxuICAgICAqIGEgd2hlcmUgY2xhdXNlIGZvciB0aGUgdXBkYXRlIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIFNlZSB0aGUge0BsaW5rIFVwZGF0ZVF1ZXJ5QnVpbGRlci5zZXR9IG1ldGhvZCBmb3IgZXhhbXBsZXMgb24gaG93IHRvXG4gICAgICogc3BlY2lmeSB0aGUgdXBkYXRlcy5cbiAgICAgKlxuICAgICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHF1ZXJ5IGlzIGFuIHtAbGluayBVcGRhdGVSZXN1bHR9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gICAgICogICAudXBkYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuc2V0KHsgZmlyc3RfbmFtZTogJ0plbm5pZmVyJyB9KVxuICAgICAqICAgLndoZXJlKCdwZXJzb24uaWQnLCAnPScsIDEpXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdCgpXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhyZXN1bHQubnVtVXBkYXRlZFJvd3MpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdXBkYXRlVGFibGUodGFibGVzKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNwcm9wcy5leGVjdXRvcixcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogVXBkYXRlUXVlcnlOb2RlLmNyZWF0ZShwYXJzZVRhYmxlRXhwcmVzc2lvbk9yTGlzdCh0YWJsZXMpLCB0aGlzLiNwcm9wcy53aXRoTm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbWVyZ2UgcXVlcnkuXG4gICAgICpcbiAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBxdWVyeSBpcyBhIHtAbGluayBNZXJnZVJlc3VsdH0uXG4gICAgICpcbiAgICAgKiBTZWUgdGhlIHtAbGluayBNZXJnZVF1ZXJ5QnVpbGRlci51c2luZ30gbWV0aG9kIGZvciBleGFtcGxlcyBvbiBob3cgdG8gc3BlY2lmeVxuICAgICAqIHRoZSBvdGhlciB0YWJsZS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogPCEtLSBzaXRlRXhhbXBsZShcIm1lcmdlXCIsIFwiU291cmNlIHJvdyBleGlzdGVuY2VcIiwgMTApIC0tPlxuICAgICAqXG4gICAgICogVXBkYXRlIGEgdGFyZ2V0IGNvbHVtbiBiYXNlZCBvbiB0aGUgZXhpc3RlbmNlIG9mIGEgc291cmNlIHJvdzpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAgICAgKiAgIC5tZXJnZUludG8oJ3BlcnNvbiBhcyB0YXJnZXQnKVxuICAgICAqICAgLnVzaW5nKCdwZXQgYXMgc291cmNlJywgJ3NvdXJjZS5vd25lcl9pZCcsICd0YXJnZXQuaWQnKVxuICAgICAqICAgLndoZW5NYXRjaGVkQW5kKCd0YXJnZXQuaGFzX3BldHMnLCAnIT0nLCAnWScpXG4gICAgICogICAudGhlblVwZGF0ZVNldCh7IGhhc19wZXRzOiAnWScgfSlcbiAgICAgKiAgIC53aGVuTm90TWF0Y2hlZEJ5U291cmNlQW5kKCd0YXJnZXQuaGFzX3BldHMnLCAnPScsICdZJylcbiAgICAgKiAgIC50aGVuVXBkYXRlU2V0KHsgaGFzX3BldHM6ICdOJyB9KVxuICAgICAqICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKHJlc3VsdC5udW1DaGFuZ2VkUm93cylcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIG1lcmdlIGludG8gXCJwZXJzb25cIlxuICAgICAqIHVzaW5nIFwicGV0XCJcbiAgICAgKiBvbiBcInBldFwiLlwib3duZXJfaWRcIiA9IFwicGVyc29uXCIuXCJpZFwiXG4gICAgICogd2hlbiBtYXRjaGVkIGFuZCBcImhhc19wZXRzXCIgIT0gJDFcbiAgICAgKiB0aGVuIHVwZGF0ZSBzZXQgXCJoYXNfcGV0c1wiID0gJDJcbiAgICAgKiB3aGVuIG5vdCBtYXRjaGVkIGJ5IHNvdXJjZSBhbmQgXCJoYXNfcGV0c1wiID0gJDNcbiAgICAgKiB0aGVuIHVwZGF0ZSBzZXQgXCJoYXNfcGV0c1wiID0gJDRcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJtZXJnZVwiLCBcIlRlbXBvcmFyeSBjaGFuZ2VzIHRhYmxlXCIsIDIwKSAtLT5cbiAgICAgKlxuICAgICAqIE1lcmdlIG5ldyBlbnRyaWVzIGZyb20gYSB0ZW1wb3JhcnkgY2hhbmdlcyB0YWJsZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAgICAgKiAgIC5tZXJnZUludG8oJ3dpbmUgYXMgdGFyZ2V0JylcbiAgICAgKiAgIC51c2luZyhcbiAgICAgKiAgICAgJ3dpbmVfc3RvY2tfY2hhbmdlIGFzIHNvdXJjZScsXG4gICAgICogICAgICdzb3VyY2Uud2luZV9uYW1lJyxcbiAgICAgKiAgICAgJ3RhcmdldC5uYW1lJyxcbiAgICAgKiAgIClcbiAgICAgKiAgIC53aGVuTm90TWF0Y2hlZEFuZCgnc291cmNlLnN0b2NrX2RlbHRhJywgJz4nLCAwKVxuICAgICAqICAgLnRoZW5JbnNlcnRWYWx1ZXMoKHsgcmVmIH0pID0+ICh7XG4gICAgICogICAgIG5hbWU6IHJlZignc291cmNlLndpbmVfbmFtZScpLFxuICAgICAqICAgICBzdG9jazogcmVmKCdzb3VyY2Uuc3RvY2tfZGVsdGEnKSxcbiAgICAgKiAgIH0pKVxuICAgICAqICAgLndoZW5NYXRjaGVkQW5kKFxuICAgICAqICAgICAoZWIpID0+IGViKCd0YXJnZXQuc3RvY2snLCAnKycsIGViLnJlZignc291cmNlLnN0b2NrX2RlbHRhJykpLFxuICAgICAqICAgICAnPicsXG4gICAgICogICAgIDAsXG4gICAgICogICApXG4gICAgICogICAudGhlblVwZGF0ZVNldCgnc3RvY2snLCAoZWIpID0+XG4gICAgICogICAgIGViKCd0YXJnZXQuc3RvY2snLCAnKycsIGViLnJlZignc291cmNlLnN0b2NrX2RlbHRhJykpLFxuICAgICAqICAgKVxuICAgICAqICAgLndoZW5NYXRjaGVkKClcbiAgICAgKiAgIC50aGVuRGVsZXRlKClcbiAgICAgKiAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBtZXJnZSBpbnRvIFwid2luZVwiIGFzIFwidGFyZ2V0XCJcbiAgICAgKiB1c2luZyBcIndpbmVfc3RvY2tfY2hhbmdlXCIgYXMgXCJzb3VyY2VcIlxuICAgICAqIG9uIFwic291cmNlXCIuXCJ3aW5lX25hbWVcIiA9IFwidGFyZ2V0XCIuXCJuYW1lXCJcbiAgICAgKiB3aGVuIG5vdCBtYXRjaGVkIGFuZCBcInNvdXJjZVwiLlwic3RvY2tfZGVsdGFcIiA+ICQxXG4gICAgICogdGhlbiBpbnNlcnQgKFwibmFtZVwiLCBcInN0b2NrXCIpIHZhbHVlcyAoXCJzb3VyY2VcIi5cIndpbmVfbmFtZVwiLCBcInNvdXJjZVwiLlwic3RvY2tfZGVsdGFcIilcbiAgICAgKiB3aGVuIG1hdGNoZWQgYW5kIFwidGFyZ2V0XCIuXCJzdG9ja1wiICsgXCJzb3VyY2VcIi5cInN0b2NrX2RlbHRhXCIgPiAkMlxuICAgICAqIHRoZW4gdXBkYXRlIHNldCBcInN0b2NrXCIgPSBcInRhcmdldFwiLlwic3RvY2tcIiArIFwic291cmNlXCIuXCJzdG9ja19kZWx0YVwiXG4gICAgICogd2hlbiBtYXRjaGVkXG4gICAgICogdGhlbiBkZWxldGVcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBtZXJnZUludG8odGFyZ2V0VGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jcHJvcHMuZXhlY3V0b3IsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IE1lcmdlUXVlcnlOb2RlLmNyZWF0ZShwYXJzZUFsaWFzZWRUYWJsZSh0YXJnZXRUYWJsZSksIHRoaXMuI3Byb3BzLndpdGhOb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgd2l0aGAgcXVlcnkgKENvbW1vbiBUYWJsZSBFeHByZXNzaW9uKS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogPCEtLSBzaXRlRXhhbXBsZShcImN0ZVwiLCBcIlNpbXBsZSBzZWxlY3RzXCIsIDEwKSAtLT5cbiAgICAgKlxuICAgICAqIENvbW1vbiB0YWJsZSBleHByZXNzaW9ucyAoQ1RFKSBhcmUgYSBncmVhdCB3YXkgdG8gbW9kdWxhcml6ZSBjb21wbGV4IHF1ZXJpZXMuXG4gICAgICogRXNzZW50aWFsbHkgdGhleSBhbGxvdyB5b3UgdG8gcnVuIG11bHRpcGxlIHNlcGFyYXRlIHF1ZXJpZXMgd2l0aGluIGFcbiAgICAgKiBzaW5nbGUgcm91bmR0cmlwIHRvIHRoZSBEQi5cbiAgICAgKlxuICAgICAqIFNpbmNlIENURXMgYXJlIGEgcGFydCBvZiB0aGUgbWFpbiBxdWVyeSwgcXVlcnkgb3B0aW1pemVycyBpbnNpZGUgREJcbiAgICAgKiBlbmdpbmVzIGFyZSBhYmxlIHRvIG9wdGltaXplIHRoZSBvdmVyYWxsIHF1ZXJ5LiBGb3IgZXhhbXBsZSwgcG9zdGdyZXNcbiAgICAgKiBpcyBhYmxlIHRvIGlubGluZSB0aGUgQ1RFcyBpbnNpZGUgdGhlIHVzaW5nIHF1ZXJpZXMgaWYgaXQgZGVjaWRlcyBpdCdzXG4gICAgICogZmFzdGVyLlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICAgICAqICAgLy8gQ3JlYXRlIGEgQ1RFIGNhbGxlZCBgamVubmlmZXJzYCB0aGF0IHNlbGVjdHMgYWxsXG4gICAgICogICAvLyBwZXJzb25zIG5hbWVkICdKZW5uaWZlcicuXG4gICAgICogICAud2l0aCgnamVubmlmZXJzJywgKGRiKSA9PiBkYlxuICAgICAqICAgICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAgICAgKiAgICAgLndoZXJlKCdmaXJzdF9uYW1lJywgJz0nLCAnSmVubmlmZXInKVxuICAgICAqICAgICAuc2VsZWN0KFsnaWQnLCAnYWdlJ10pXG4gICAgICogICApXG4gICAgICogICAvLyBTZWxlY3QgYWxsIHJvd3MgZnJvbSB0aGUgYGplbm5pZmVyc2AgQ1RFIGFuZFxuICAgICAqICAgLy8gZnVydGhlciBmaWx0ZXIgaXQuXG4gICAgICogICAud2l0aCgnYWR1bHRfamVubmlmZXJzJywgKGRiKSA9PiBkYlxuICAgICAqICAgICAuc2VsZWN0RnJvbSgnamVubmlmZXJzJylcbiAgICAgKiAgICAgLndoZXJlKCdhZ2UnLCAnPicsIDE4KVxuICAgICAqICAgICAuc2VsZWN0KFsnaWQnLCAnYWdlJ10pXG4gICAgICogICApXG4gICAgICogICAvLyBGaW5hbGx5IHNlbGVjdCBhbGwgYWR1bHQgamVubmlmZXJzIHRoYXQgYXJlXG4gICAgICogICAvLyBhbHNvIHlvdW5nZXIgdGhhbiA2MC5cbiAgICAgKiAgIC5zZWxlY3RGcm9tKCdhZHVsdF9qZW5uaWZlcnMnKVxuICAgICAqICAgLndoZXJlKCdhZ2UnLCAnPCcsIDYwKVxuICAgICAqICAgLnNlbGVjdEFsbCgpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiA8IS0tIHNpdGVFeGFtcGxlKFwiY3RlXCIsIFwiSW5zZXJ0cywgdXBkYXRlcyBhbmQgZGVsZXRpb25zXCIsIDIwKSAtLT5cbiAgICAgKlxuICAgICAqIFNvbWUgZGF0YWJhc2VzIGxpa2UgcG9zdGdyZXMgYWxzbyBhbGxvdyB5b3UgdG8gcnVuIG90aGVyIHF1ZXJpZXMgdGhhbiBzZWxlY3RzXG4gICAgICogaW4gQ1RFcy4gT24gdGhlc2UgZGF0YWJhc2VzIENURXMgYXJlIGV4dHJlbWVseSBwb3dlcmZ1bDpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAgICAgKiAgIC53aXRoKCduZXdfcGVyc29uJywgKGRiKSA9PiBkYlxuICAgICAqICAgICAuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgICAgLnZhbHVlcyh7XG4gICAgICogICAgICAgZmlyc3RfbmFtZTogJ0plbm5pZmVyJyxcbiAgICAgKiAgICAgICBhZ2U6IDM1LFxuICAgICAqICAgICB9KVxuICAgICAqICAgICAucmV0dXJuaW5nKCdpZCcpXG4gICAgICogICApXG4gICAgICogICAud2l0aCgnbmV3X3BldCcsIChkYikgPT4gZGJcbiAgICAgKiAgICAgLmluc2VydEludG8oJ3BldCcpXG4gICAgICogICAgIC52YWx1ZXMoe1xuICAgICAqICAgICAgIG5hbWU6ICdEb2dnbycsXG4gICAgICogICAgICAgc3BlY2llczogJ2RvZycsXG4gICAgICogICAgICAgaXNfZmF2b3JpdGU6IHRydWUsXG4gICAgICogICAgICAgLy8gVXNlIHRoZSBpZCBvZiB0aGUgcGVyc29uIHdlIGp1c3QgaW5zZXJ0ZWQuXG4gICAgICogICAgICAgb3duZXJfaWQ6IGRiXG4gICAgICogICAgICAgICAuc2VsZWN0RnJvbSgnbmV3X3BlcnNvbicpXG4gICAgICogICAgICAgICAuc2VsZWN0KCdpZCcpXG4gICAgICogICAgIH0pXG4gICAgICogICAgIC5yZXR1cm5pbmcoJ2lkJylcbiAgICAgKiAgIClcbiAgICAgKiAgIC5zZWxlY3RGcm9tKFsnbmV3X3BlcnNvbicsICduZXdfcGV0J10pXG4gICAgICogICAuc2VsZWN0KFtcbiAgICAgKiAgICAgJ25ld19wZXJzb24uaWQgYXMgcGVyc29uX2lkJyxcbiAgICAgKiAgICAgJ25ld19wZXQuaWQgYXMgcGV0X2lkJ1xuICAgICAqICAgXSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBDVEUgbmFtZSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGNvbHVtbiBuYW1lcyBpbiBhZGRpdGlvbiB0b1xuICAgICAqIGEgbmFtZS4gSW4gdGhhdCBjYXNlIEt5c2VseSByZXF1aXJlcyB0aGUgZXhwcmVzc2lvbiB0byByZXR1blxuICAgICAqIHJvd3Mgd2l0aCB0aGUgc2FtZSBjb2x1bW5zLlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLndpdGgoJ2plbm5pZmVycyhpZCwgYWdlKScsIChkYikgPT4gZGJcbiAgICAgKiAgICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gICAgICogICAgIC53aGVyZSgnZmlyc3RfbmFtZScsICc9JywgJ0plbm5pZmVyJylcbiAgICAgKiAgICAgLy8gVGhpcyBpcyBvayBzaW5jZSB3ZSByZXR1cm4gY29sdW1ucyB3aXRoIHRoZSBzYW1lXG4gICAgICogICAgIC8vIG5hbWVzIGFzIHNwZWNpZmllZCBieSBgamVubmlmZXJzKGlkLCBhZ2UpYC5cbiAgICAgKiAgICAgLnNlbGVjdChbJ2lkJywgJ2FnZSddKVxuICAgICAqICAgKVxuICAgICAqICAgLnNlbGVjdEZyb20oJ2plbm5pZmVycycpXG4gICAgICogICAuc2VsZWN0QWxsKClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBmaXJzdCBhcmd1bWVudCBjYW4gYWxzbyBiZSBhIGNhbGxiYWNrLiBUaGUgY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogYSBgQ1RFQnVpbGRlcmAgaW5zdGFuY2UgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIENURTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC53aXRoKFxuICAgICAqICAgICAoY3RlKSA9PiBjdGUoJ2plbm5pZmVycycpLm1hdGVyaWFsaXplZCgpLFxuICAgICAqICAgICAoZGIpID0+IGRiXG4gICAgICogICAgICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gICAgICogICAgICAgLndoZXJlKCdmaXJzdF9uYW1lJywgJz0nLCAnSmVubmlmZXInKVxuICAgICAqICAgICAgIC5zZWxlY3QoWydpZCcsICdhZ2UnXSlcbiAgICAgKiAgIClcbiAgICAgKiAgIC5zZWxlY3RGcm9tKCdqZW5uaWZlcnMnKVxuICAgICAqICAgLnNlbGVjdEFsbCgpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgd2l0aChuYW1lT3JCdWlsZGVyLCBleHByZXNzaW9uKSB7XG4gICAgICAgIGNvbnN0IGN0ZSA9IHBhcnNlQ29tbW9uVGFibGVFeHByZXNzaW9uKG5hbWVPckJ1aWxkZXIsIGV4cHJlc3Npb24pO1xuICAgICAgICByZXR1cm4gbmV3IFF1ZXJ5Q3JlYXRvcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHdpdGhOb2RlOiB0aGlzLiNwcm9wcy53aXRoTm9kZVxuICAgICAgICAgICAgICAgID8gV2l0aE5vZGUuY2xvbmVXaXRoRXhwcmVzc2lvbih0aGlzLiNwcm9wcy53aXRoTm9kZSwgY3RlKVxuICAgICAgICAgICAgICAgIDogV2l0aE5vZGUuY3JlYXRlKGN0ZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcmVjdXJzaXZlIGB3aXRoYCBxdWVyeSAoQ29tbW9uIFRhYmxlIEV4cHJlc3Npb24pLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHJlY3Vyc2l2ZW5lc3MgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgd2hvbGUgYHdpdGhgIHN0YXRlbWVudC5cbiAgICAgKiBZb3UgY2Fubm90IGhhdmUgcmVjdXJzaXZlIGFuZCBub24tcmVjdXJzaXZlIENURXMgaW4gYSBzYW1lIGB3aXRoYCBzdGF0ZW1lbnQuXG4gICAgICogVGhlcmVmb3JlIHRoZSByZWN1cnNpdmVuZXNzIGlzIGRldGVybWluZWQgYnkgdGhlICoqZmlyc3QqKiBgd2l0aGAgb3JcbiAgICAgKiBgd2l0aFJlY3VzaXZlYCBjYWxsIHlvdSBtYWtlLlxuICAgICAqXG4gICAgICogU2VlIHRoZSB7QGxpbmsgd2l0aH0gbWV0aG9kIGZvciBleGFtcGxlcyBhbmQgbW9yZSBkb2N1bWVudGF0aW9uLlxuICAgICAqL1xuICAgIHdpdGhSZWN1cnNpdmUobmFtZU9yQnVpbGRlciwgZXhwcmVzc2lvbikge1xuICAgICAgICBjb25zdCBjdGUgPSBwYXJzZUNvbW1vblRhYmxlRXhwcmVzc2lvbihuYW1lT3JCdWlsZGVyLCBleHByZXNzaW9uKTtcbiAgICAgICAgcmV0dXJuIG5ldyBRdWVyeUNyZWF0b3Ioe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICB3aXRoTm9kZTogdGhpcy4jcHJvcHMud2l0aE5vZGVcbiAgICAgICAgICAgICAgICA/IFdpdGhOb2RlLmNsb25lV2l0aEV4cHJlc3Npb24odGhpcy4jcHJvcHMud2l0aE5vZGUsIGN0ZSlcbiAgICAgICAgICAgICAgICA6IFdpdGhOb2RlLmNyZWF0ZShjdGUsIHsgcmVjdXJzaXZlOiB0cnVlIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBxdWVyeSBjcmVhdG9yIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIHBsdWdpbiBpbnN0YWxsZWQuXG4gICAgICovXG4gICAgd2l0aFBsdWdpbihwbHVnaW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBRdWVyeUNyZWF0b3Ioe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jcHJvcHMuZXhlY3V0b3Iud2l0aFBsdWdpbihwbHVnaW4pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBxdWVyeSBjcmVhdG9yIGluc3RhbmNlIHdpdGhvdXQgYW55IHBsdWdpbnMuXG4gICAgICovXG4gICAgd2l0aG91dFBsdWdpbnMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUXVlcnlDcmVhdG9yKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhvdXRQbHVnaW5zKCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzY2hlbWEgdG8gYmUgdXNlZCBmb3IgYWxsIHRhYmxlIHJlZmVyZW5jZXMgdGhhdCBkb24ndCBleHBsaWNpdGx5XG4gICAgICogc3BlY2lmeSBhIHNjaGVtYS5cbiAgICAgKlxuICAgICAqIFRoaXMgb25seSBhZmZlY3RzIHRoZSBxdWVyeSBjcmVhdGVkIHRocm91Z2ggdGhlIGJ1aWxkZXIgcmV0dXJuZWQgZnJvbVxuICAgICAqIHRoaXMgbWV0aG9kIGFuZCBkb2Vzbid0IG1vZGlmeSB0aGUgYGRiYCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIFNlZSBbdGhpcyByZWNpcGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9reXNlbHktb3JnL2t5c2VseS9ibG9iL21hc3Rlci9zaXRlL2RvY3MvcmVjaXBlcy8wMDA3LXNjaGVtYXMubWQpXG4gICAgICogZm9yIGEgbW9yZSBkZXRhaWxlZCBleHBsYW5hdGlvbi5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC53aXRoU2NoZW1hKCdtYW1tYWxzJylcbiAgICAgKiAgIC5zZWxlY3RGcm9tKCdwZXQnKVxuICAgICAqICAgLnNlbGVjdEFsbCgpXG4gICAgICogICAuaW5uZXJKb2luKCdwdWJsaWMucGVyc29uJywgJ3B1YmxpYy5wZXJzb24uaWQnLCAncGV0Lm93bmVyX2lkJylcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHNlbGVjdCAqIGZyb20gXCJtYW1tYWxzXCIuXCJwZXRcIlxuICAgICAqIGlubmVyIGpvaW4gXCJwdWJsaWNcIi5cInBlcnNvblwiXG4gICAgICogb24gXCJwdWJsaWNcIi5cInBlcnNvblwiLlwiaWRcIiA9IFwibWFtbWFsc1wiLlwicGV0XCIuXCJvd25lcl9pZFwiXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgd2l0aFNjaGVtYWAgaXMgc21hcnQgZW5vdWdoIHRvIG5vdCBhZGQgc2NoZW1hIGZvciBhbGlhc2VzLFxuICAgICAqIGNvbW1vbiB0YWJsZSBleHByZXNzaW9ucyBvciBvdGhlciBwbGFjZXMgd2hlcmUgdGhlIHNjaGVtYVxuICAgICAqIGRvZXNuJ3QgYmVsb25nIHRvOlxuICAgICAqXG4gICAgICogYGBgXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC53aXRoU2NoZW1hKCdtYW1tYWxzJylcbiAgICAgKiAgIC5zZWxlY3RGcm9tKCdwZXQgYXMgcCcpXG4gICAgICogICAuc2VsZWN0KCdwLm5hbWUnKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IFwicFwiLlwibmFtZVwiIGZyb20gXCJtYW1tYWxzXCIuXCJwZXRcIiBhcyBcInBcIlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHdpdGhTY2hlbWEoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBuZXcgUXVlcnlDcmVhdG9yKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhQbHVnaW5BdEZyb250KG5ldyBXaXRoU2NoZW1hUGx1Z2luKHNjaGVtYSkpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3BhcnNlLXV0aWxzLmQudHNcIiAvPlxuaW1wb3J0IHsgSm9pbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9qb2luLW5vZGUuanMnO1xuaW1wb3J0IHsgT3Zlck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vdmVyLW5vZGUuanMnO1xuaW1wb3J0IHsgU2VsZWN0UXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvc2VsZWN0LXF1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgSm9pbkJ1aWxkZXIgfSBmcm9tICcuLi9xdWVyeS1idWlsZGVyL2pvaW4tYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBPdmVyQnVpbGRlciB9IGZyb20gJy4uL3F1ZXJ5LWJ1aWxkZXIvb3Zlci1idWlsZGVyLmpzJztcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdFF1ZXJ5QnVpbGRlciBhcyBuZXdTZWxlY3RRdWVyeUJ1aWxkZXIsIH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci9zZWxlY3QtcXVlcnktYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBRdWVyeUNyZWF0b3IgfSBmcm9tICcuLi9xdWVyeS1jcmVhdG9yLmpzJztcbmltcG9ydCB7IE5PT1BfUVVFUllfRVhFQ1VUT1IgfSBmcm9tICcuLi9xdWVyeS1leGVjdXRvci9ub29wLXF1ZXJ5LWV4ZWN1dG9yLmpzJztcbmltcG9ydCB7IGNyZWF0ZVF1ZXJ5SWQgfSBmcm9tICcuLi91dGlsL3F1ZXJ5LWlkLmpzJztcbmltcG9ydCB7IHBhcnNlVGFibGVFeHByZXNzaW9uLCBwYXJzZVRhYmxlRXhwcmVzc2lvbk9yTGlzdCwgfSBmcm9tICcuL3RhYmxlLXBhcnNlci5qcyc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VsZWN0UXVlcnlCdWlsZGVyKCkge1xuICAgIHJldHVybiBuZXdTZWxlY3RRdWVyeUJ1aWxkZXIoe1xuICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgIGV4ZWN1dG9yOiBOT09QX1FVRVJZX0VYRUNVVE9SLFxuICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jcmVhdGVGcm9tKHBhcnNlVGFibGVFeHByZXNzaW9uT3JMaXN0KFtdKSksXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUXVlcnlDcmVhdG9yKCkge1xuICAgIHJldHVybiBuZXcgUXVlcnlDcmVhdG9yKHtcbiAgICAgICAgZXhlY3V0b3I6IE5PT1BfUVVFUllfRVhFQ1VUT1IsXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSm9pbkJ1aWxkZXIoam9pblR5cGUsIHRhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBKb2luQnVpbGRlcih7XG4gICAgICAgIGpvaW5Ob2RlOiBKb2luTm9kZS5jcmVhdGUoam9pblR5cGUsIHBhcnNlVGFibGVFeHByZXNzaW9uKHRhYmxlKSksXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3ZlckJ1aWxkZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBPdmVyQnVpbGRlcih7XG4gICAgICAgIG92ZXJOb2RlOiBPdmVyTm9kZS5jcmVhdGUoKSxcbiAgICB9KTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vam9pbi1wYXJzZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBKb2luTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2pvaW4tbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uIH0gZnJvbSAnLi9iaW5hcnktb3BlcmF0aW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVKb2luQnVpbGRlciB9IGZyb20gJy4vcGFyc2UtdXRpbHMuanMnO1xuaW1wb3J0IHsgcGFyc2VUYWJsZUV4cHJlc3Npb24sIH0gZnJvbSAnLi90YWJsZS1wYXJzZXIuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSm9pbihqb2luVHlwZSwgYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICByZXR1cm4gcGFyc2VTaW5nbGVPbkpvaW4oam9pblR5cGUsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICByZXR1cm4gcGFyc2VDYWxsYmFja0pvaW4oam9pblR5cGUsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gcGFyc2VPbmxlc3NKb2luKGpvaW5UeXBlLCBhcmdzWzBdKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxufVxuZnVuY3Rpb24gcGFyc2VDYWxsYmFja0pvaW4oam9pblR5cGUsIGZyb20sIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGNyZWF0ZUpvaW5CdWlsZGVyKGpvaW5UeXBlLCBmcm9tKSkudG9PcGVyYXRpb25Ob2RlKCk7XG59XG5mdW5jdGlvbiBwYXJzZVNpbmdsZU9uSm9pbihqb2luVHlwZSwgZnJvbSwgbGhzQ29sdW1uLCByaHNDb2x1bW4pIHtcbiAgICByZXR1cm4gSm9pbk5vZGUuY3JlYXRlV2l0aE9uKGpvaW5UeXBlLCBwYXJzZVRhYmxlRXhwcmVzc2lvbihmcm9tKSwgcGFyc2VSZWZlcmVudGlhbEJpbmFyeU9wZXJhdGlvbihsaHNDb2x1bW4sICc9JywgcmhzQ29sdW1uKSk7XG59XG5mdW5jdGlvbiBwYXJzZU9ubGVzc0pvaW4oam9pblR5cGUsIGZyb20pIHtcbiAgICByZXR1cm4gSm9pbk5vZGUuY3JlYXRlKGpvaW5UeXBlLCBwYXJzZVRhYmxlRXhwcmVzc2lvbihmcm9tKSk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL29mZnNldC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9mZnNldE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ09mZnNldE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG9mZnNldCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdPZmZzZXROb2RlJyxcbiAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9ncm91cC1ieS1pdGVtLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgR3JvdXBCeUl0ZW1Ob2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdHcm91cEJ5SXRlbU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGdyb3VwQnkpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnR3JvdXBCeUl0ZW1Ob2RlJyxcbiAgICAgICAgICAgIGdyb3VwQnksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZ3JvdXAtYnktcGFyc2VyLmQudHNcIiAvPlxuaW1wb3J0IHsgR3JvdXBCeUl0ZW1Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvZ3JvdXAtYnktaXRlbS1ub2RlLmpzJztcbmltcG9ydCB7IGV4cHJlc3Npb25CdWlsZGVyLCB9IGZyb20gJy4uL2V4cHJlc3Npb24vZXhwcmVzc2lvbi1idWlsZGVyLmpzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb25Pckxpc3QsIH0gZnJvbSAnLi9yZWZlcmVuY2UtcGFyc2VyLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUdyb3VwQnkoZ3JvdXBCeSkge1xuICAgIGdyb3VwQnkgPSBpc0Z1bmN0aW9uKGdyb3VwQnkpID8gZ3JvdXBCeShleHByZXNzaW9uQnVpbGRlcigpKSA6IGdyb3VwQnk7XG4gICAgcmV0dXJuIHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbk9yTGlzdChncm91cEJ5KS5tYXAoR3JvdXBCeUl0ZW1Ob2RlLmNyZWF0ZSk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3NldC1vcGVyYXRpb24tbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBTZXRPcGVyYXRpb25Ob2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdTZXRPcGVyYXRpb25Ob2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShvcGVyYXRvciwgZXhwcmVzc2lvbiwgYWxsKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1NldE9wZXJhdGlvbk5vZGUnLFxuICAgICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgICBleHByZXNzaW9uLFxuICAgICAgICAgICAgYWxsLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3NldC1vcGVyYXRpb24tcGFyc2VyLmQudHNcIiAvPlxuaW1wb3J0IHsgY3JlYXRlRXhwcmVzc2lvbkJ1aWxkZXIsIH0gZnJvbSAnLi4vZXhwcmVzc2lvbi9leHByZXNzaW9uLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgU2V0T3BlcmF0aW9uTm9kZSwgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9zZXQtb3BlcmF0aW9uLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNSZWFkb25seUFycmF5IH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgcGFyc2VFeHByZXNzaW9uIH0gZnJvbSAnLi9leHByZXNzaW9uLXBhcnNlci5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTZXRPcGVyYXRpb25zKG9wZXJhdG9yLCBleHByZXNzaW9uLCBhbGwpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihleHByZXNzaW9uKSkge1xuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbihjcmVhdGVFeHByZXNzaW9uQnVpbGRlcigpKTtcbiAgICB9XG4gICAgaWYgKCFpc1JlYWRvbmx5QXJyYXkoZXhwcmVzc2lvbikpIHtcbiAgICAgICAgZXhwcmVzc2lvbiA9IFtleHByZXNzaW9uXTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cHJlc3Npb24ubWFwKChleHByKSA9PiBTZXRPcGVyYXRpb25Ob2RlLmNyZWF0ZShvcGVyYXRvciwgcGFyc2VFeHByZXNzaW9uKGV4cHIpLCBhbGwpKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZXhwcmVzc2lvbi13cmFwcGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgQWxpYXNOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWxpYXMtbm9kZS5qcyc7XG5pbXBvcnQgeyBBbmROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYW5kLW5vZGUuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9pZGVudGlmaWVyLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNPcGVyYXRpb25Ob2RlU291cmNlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmltcG9ydCB7IE9yTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29yLW5vZGUuanMnO1xuaW1wb3J0IHsgUGFyZW5zTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3BhcmVucy1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24sIH0gZnJvbSAnLi4vcGFyc2VyL2JpbmFyeS1vcGVyYXRpb24tcGFyc2VyLmpzJztcbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uV3JhcHBlciB7XG4gICAgI25vZGU7XG4gICAgY29uc3RydWN0b3Iobm9kZSkge1xuICAgICAgICB0aGlzLiNub2RlID0gbm9kZTtcbiAgICB9XG4gICAgLyoqIEBwcml2YXRlICovXG4gICAgZ2V0IGV4cHJlc3Npb25UeXBlKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBhcyhhbGlhcykge1xuICAgICAgICByZXR1cm4gbmV3IEFsaWFzZWRFeHByZXNzaW9uV3JhcHBlcih0aGlzLCBhbGlhcyk7XG4gICAgfVxuICAgIG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPcldyYXBwZXIoT3JOb2RlLmNyZWF0ZSh0aGlzLiNub2RlLCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uKGFyZ3MpKSk7XG4gICAgfVxuICAgIGFuZCguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5kV3JhcHBlcihBbmROb2RlLmNyZWF0ZSh0aGlzLiNub2RlLCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uKGFyZ3MpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgb3V0cHV0IHR5cGUgb2YgdGhlIGV4cHJlc3Npb24uXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBjYWxsIGRvZXNuJ3QgY2hhbmdlIHRoZSBTUUwgaW4gYW55IHdheS4gVGhpcyBtZXRob2RzIHNpbXBseVxuICAgICAqIHJldHVybnMgYSBjb3B5IG9mIHRoaXMgYEV4cHJlc3Npb25XcmFwcGVyYCB3aXRoIGEgbmV3IG91dHB1dCB0eXBlLlxuICAgICAqL1xuICAgICRjYXN0VG8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIodGhpcy4jbm9kZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9taXQgbnVsbCBmcm9tIHRoZSBleHByZXNzaW9uJ3MgdHlwZS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWZ1bCBpbiBjYXNlcyB3aGVyZSB5b3Uga25vdyBhbiBleHByZXNzaW9uIGNhbid0IGJlXG4gICAgICogbnVsbCwgYnV0IEt5c2VseSBpcyB1bmFibGUgdG8gaW5mZXIgaXQuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBjYWxsIGRvZXNuJ3QgY2hhbmdlIHRoZSBTUUwgaW4gYW55IHdheS4gVGhpcyBtZXRob2RzIHNpbXBseVxuICAgICAqIHJldHVybnMgYSBjb3B5IG9mIGB0aGlzYCB3aXRoIGEgbmV3IG91dHB1dCB0eXBlLlxuICAgICAqL1xuICAgICRub3ROdWxsKCkge1xuICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKHRoaXMuI25vZGUpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNub2RlO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBbGlhc2VkRXhwcmVzc2lvbldyYXBwZXIge1xuICAgICNleHByO1xuICAgICNhbGlhcztcbiAgICBjb25zdHJ1Y3RvcihleHByLCBhbGlhcykge1xuICAgICAgICB0aGlzLiNleHByID0gZXhwcjtcbiAgICAgICAgdGhpcy4jYWxpYXMgPSBhbGlhcztcbiAgICB9XG4gICAgLyoqIEBwcml2YXRlICovXG4gICAgZ2V0IGV4cHJlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNleHByO1xuICAgIH1cbiAgICAvKiogQHByaXZhdGUgKi9cbiAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhbGlhcztcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gQWxpYXNOb2RlLmNyZWF0ZSh0aGlzLiNleHByLnRvT3BlcmF0aW9uTm9kZSgpLCBpc09wZXJhdGlvbk5vZGVTb3VyY2UodGhpcy4jYWxpYXMpXG4gICAgICAgICAgICA/IHRoaXMuI2FsaWFzLnRvT3BlcmF0aW9uTm9kZSgpXG4gICAgICAgICAgICA6IElkZW50aWZpZXJOb2RlLmNyZWF0ZSh0aGlzLiNhbGlhcykpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBPcldyYXBwZXIge1xuICAgICNub2RlO1xuICAgIGNvbnN0cnVjdG9yKG5vZGUpIHtcbiAgICAgICAgdGhpcy4jbm9kZSA9IG5vZGU7XG4gICAgfVxuICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgIGdldCBleHByZXNzaW9uVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgYXMoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbGlhc2VkRXhwcmVzc2lvbldyYXBwZXIodGhpcywgYWxpYXMpO1xuICAgIH1cbiAgICBvciguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgT3JXcmFwcGVyKE9yTm9kZS5jcmVhdGUodGhpcy4jbm9kZSwgcGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbihhcmdzKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIG91dHB1dCB0eXBlIG9mIHRoZSBleHByZXNzaW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgY2FsbCBkb2Vzbid0IGNoYW5nZSB0aGUgU1FMIGluIGFueSB3YXkuIFRoaXMgbWV0aG9kcyBzaW1wbHlcbiAgICAgKiByZXR1cm5zIGEgY29weSBvZiB0aGlzIGBPcldyYXBwZXJgIHdpdGggYSBuZXcgb3V0cHV0IHR5cGUuXG4gICAgICovXG4gICAgJGNhc3RUbygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPcldyYXBwZXIodGhpcy4jbm9kZSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIFBhcmVuc05vZGUuY3JlYXRlKHRoaXMuI25vZGUpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBbmRXcmFwcGVyIHtcbiAgICAjbm9kZTtcbiAgICBjb25zdHJ1Y3Rvcihub2RlKSB7XG4gICAgICAgIHRoaXMuI25vZGUgPSBub2RlO1xuICAgIH1cbiAgICAvKiogQHByaXZhdGUgKi9cbiAgICBnZXQgZXhwcmVzc2lvblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxpYXNlZEV4cHJlc3Npb25XcmFwcGVyKHRoaXMsIGFsaWFzKTtcbiAgICB9XG4gICAgYW5kKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbmRXcmFwcGVyKEFuZE5vZGUuY3JlYXRlKHRoaXMuI25vZGUsIHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24oYXJncykpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbi5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGNhbGwgZG9lc24ndCBjaGFuZ2UgdGhlIFNRTCBpbiBhbnkgd2F5LiBUaGlzIG1ldGhvZHMgc2ltcGx5XG4gICAgICogcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBgQW5kV3JhcHBlcmAgd2l0aCBhIG5ldyBvdXRwdXQgdHlwZS5cbiAgICAgKi9cbiAgICAkY2FzdFRvKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFuZFdyYXBwZXIodGhpcy4jbm9kZSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIFBhcmVuc05vZGUuY3JlYXRlKHRoaXMuI25vZGUpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZmV0Y2gtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IFZhbHVlTm9kZSB9IGZyb20gJy4vdmFsdWUtbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgRmV0Y2hOb2RlID0ge1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0ZldGNoTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUocm93Q291bnQsIG1vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBraW5kOiAnRmV0Y2hOb2RlJyxcbiAgICAgICAgICAgIHJvd0NvdW50OiBWYWx1ZU5vZGUuY3JlYXRlKHJvd0NvdW50KSxcbiAgICAgICAgICAgIG1vZGlmaWVyLFxuICAgICAgICB9O1xuICAgIH0sXG59O1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9mZXRjaC1wYXJzZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBGZXRjaE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9mZXRjaC1ub2RlLmpzJztcbmltcG9ydCB7IGlzQmlnSW50LCBpc051bWJlciB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZldGNoKHJvd0NvdW50LCBtb2RpZmllcikge1xuICAgIGlmICghaXNOdW1iZXIocm93Q291bnQpICYmICFpc0JpZ0ludChyb3dDb3VudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZldGNoIHJvdyBjb3VudDogJHtyb3dDb3VudH1gKTtcbiAgICB9XG4gICAgaWYgKCFpc0ZldGNoTW9kaWZpZXIobW9kaWZpZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmZXRjaCBtb2RpZmllcjogJHttb2RpZmllcn1gKTtcbiAgICB9XG4gICAgcmV0dXJuIEZldGNoTm9kZS5jcmVhdGUocm93Q291bnQsIG1vZGlmaWVyKTtcbn1cbmZ1bmN0aW9uIGlzRmV0Y2hNb2RpZmllcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJ29ubHknIHx8IHZhbHVlID09PSAnd2l0aCB0aWVzJztcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vc2VsZWN0LXF1ZXJ5LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBBbGlhc05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hbGlhcy1ub2RlLmpzJztcbmltcG9ydCB7IFNlbGVjdE1vZGlmaWVyTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3NlbGVjdC1tb2RpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlSm9pbiwgfSBmcm9tICcuLi9wYXJzZXIvam9pbi1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VUYWJsZSB9IGZyb20gJy4uL3BhcnNlci90YWJsZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VTZWxlY3RBcmcsIHBhcnNlU2VsZWN0QWxsLCB9IGZyb20gJy4uL3BhcnNlci9zZWxlY3QtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbk9yTGlzdCwgfSBmcm9tICcuLi9wYXJzZXIvcmVmZXJlbmNlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBTZWxlY3RRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9zZWxlY3QtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlT3JkZXJCeSwgfSBmcm9tICcuLi9wYXJzZXIvb3JkZXItYnktcGFyc2VyLmpzJztcbmltcG9ydCB7IExpbWl0Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2xpbWl0LW5vZGUuanMnO1xuaW1wb3J0IHsgT2Zmc2V0Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29mZnNldC1ub2RlLmpzJztcbmltcG9ydCB7IGFzQXJyYXksIGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IHBhcnNlR3JvdXBCeSB9IGZyb20gJy4uL3BhcnNlci9ncm91cC1ieS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgaXNOb1Jlc3VsdEVycm9yQ29uc3RydWN0b3IsIE5vUmVzdWx0RXJyb3IsIH0gZnJvbSAnLi9uby1yZXN1bHQtZXJyb3IuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9pZGVudGlmaWVyLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VTZXRPcGVyYXRpb25zLCB9IGZyb20gJy4uL3BhcnNlci9zZXQtb3BlcmF0aW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uLCBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uLCB9IGZyb20gJy4uL3BhcnNlci9iaW5hcnktb3BlcmF0aW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBFeHByZXNzaW9uV3JhcHBlciB9IGZyb20gJy4uL2V4cHJlc3Npb24vZXhwcmVzc2lvbi13cmFwcGVyLmpzJztcbmltcG9ydCB7IHBhcnNlVmFsdWVFeHByZXNzaW9uLCB9IGZyb20gJy4uL3BhcnNlci92YWx1ZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VGZXRjaCB9IGZyb20gJy4uL3BhcnNlci9mZXRjaC1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VUb3AgfSBmcm9tICcuLi9wYXJzZXIvdG9wLXBhcnNlci5qcyc7XG5jbGFzcyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBnZXQgZXhwcmVzc2lvblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBpc1NlbGVjdFF1ZXJ5QnVpbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHdoZXJlKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoV2hlcmUodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uKGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdoZXJlUmVmKGxocywgb3AsIHJocykge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhXaGVyZSh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24obGhzLCBvcCwgcmhzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBoYXZpbmcoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jbG9uZVdpdGhIYXZpbmcodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uKGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhhdmluZ1JlZihsaHMsIG9wLCByaHMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoSGF2aW5nKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VSZWZlcmVudGlhbEJpbmFyeU9wZXJhdGlvbihsaHMsIG9wLCByaHMpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNlbGVjdChzZWxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoU2VsZWN0aW9ucyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QXJnKHNlbGVjdGlvbikpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGlzdGluY3RPbihzZWxlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoRGlzdGluY3RPbih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbk9yTGlzdChzZWxlY3Rpb24pKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1vZGlmeUZyb250KG1vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogU2VsZWN0UXVlcnlOb2RlLmNsb25lV2l0aEZyb250TW9kaWZpZXIodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBTZWxlY3RNb2RpZmllck5vZGUuY3JlYXRlV2l0aEV4cHJlc3Npb24obW9kaWZpZXIudG9PcGVyYXRpb25Ob2RlKCkpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1vZGlmeUVuZChtb2RpZmllcikge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhFbmRNb2RpZmllcih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIFNlbGVjdE1vZGlmaWVyTm9kZS5jcmVhdGVXaXRoRXhwcmVzc2lvbihtb2RpZmllci50b09wZXJhdGlvbk5vZGUoKSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGlzdGluY3QoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogU2VsZWN0UXVlcnlOb2RlLmNsb25lV2l0aEZyb250TW9kaWZpZXIodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBTZWxlY3RNb2RpZmllck5vZGUuY3JlYXRlKCdEaXN0aW5jdCcpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZvclVwZGF0ZShvZikge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhFbmRNb2RpZmllcih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIFNlbGVjdE1vZGlmaWVyTm9kZS5jcmVhdGUoJ0ZvclVwZGF0ZScsIG9mID8gYXNBcnJheShvZikubWFwKHBhcnNlVGFibGUpIDogdW5kZWZpbmVkKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmb3JTaGFyZShvZikge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhFbmRNb2RpZmllcih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIFNlbGVjdE1vZGlmaWVyTm9kZS5jcmVhdGUoJ0ZvclNoYXJlJywgb2YgPyBhc0FycmF5KG9mKS5tYXAocGFyc2VUYWJsZSkgOiB1bmRlZmluZWQpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZvcktleVNoYXJlKG9mKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEVuZE1vZGlmaWVyKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgU2VsZWN0TW9kaWZpZXJOb2RlLmNyZWF0ZSgnRm9yS2V5U2hhcmUnLCBvZiA/IGFzQXJyYXkob2YpLm1hcChwYXJzZVRhYmxlKSA6IHVuZGVmaW5lZCkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZm9yTm9LZXlVcGRhdGUob2YpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoRW5kTW9kaWZpZXIodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBTZWxlY3RNb2RpZmllck5vZGUuY3JlYXRlKCdGb3JOb0tleVVwZGF0ZScsIG9mID8gYXNBcnJheShvZikubWFwKHBhcnNlVGFibGUpIDogdW5kZWZpbmVkKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBza2lwTG9ja2VkKCkge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhFbmRNb2RpZmllcih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIFNlbGVjdE1vZGlmaWVyTm9kZS5jcmVhdGUoJ1NraXBMb2NrZWQnKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub1dhaXQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEVuZE1vZGlmaWVyKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgU2VsZWN0TW9kaWZpZXJOb2RlLmNyZWF0ZSgnTm9XYWl0JykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2VsZWN0QWxsKHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogU2VsZWN0UXVlcnlOb2RlLmNsb25lV2l0aFNlbGVjdGlvbnModGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVNlbGVjdEFsbCh0YWJsZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5uZXJKb2luKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2pvaW4oJ0lubmVySm9pbicsIGFyZ3MpO1xuICAgIH1cbiAgICBsZWZ0Sm9pbiguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNqb2luKCdMZWZ0Sm9pbicsIGFyZ3MpO1xuICAgIH1cbiAgICByaWdodEpvaW4oLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jam9pbignUmlnaHRKb2luJywgYXJncyk7XG4gICAgfVxuICAgIGZ1bGxKb2luKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2pvaW4oJ0Z1bGxKb2luJywgYXJncyk7XG4gICAgfVxuICAgIGNyb3NzSm9pbiguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNqb2luKCdDcm9zc0pvaW4nLCBhcmdzKTtcbiAgICB9XG4gICAgaW5uZXJKb2luTGF0ZXJhbCguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNqb2luKCdMYXRlcmFsSW5uZXJKb2luJywgYXJncyk7XG4gICAgfVxuICAgIGxlZnRKb2luTGF0ZXJhbCguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNqb2luKCdMYXRlcmFsTGVmdEpvaW4nLCBhcmdzKTtcbiAgICB9XG4gICAgY3Jvc3NKb2luTGF0ZXJhbCguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNqb2luKCdMYXRlcmFsQ3Jvc3NKb2luJywgYXJncyk7XG4gICAgfVxuICAgIGNyb3NzQXBwbHkoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jam9pbignQ3Jvc3NBcHBseScsIGFyZ3MpO1xuICAgIH1cbiAgICBvdXRlckFwcGx5KC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2pvaW4oJ091dGVyQXBwbHknLCBhcmdzKTtcbiAgICB9XG4gICAgI2pvaW4oam9pblR5cGUsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoSm9pbih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlSm9pbihqb2luVHlwZSwgYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3JkZXJCeSguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aE9yZGVyQnlJdGVtcyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlT3JkZXJCeShhcmdzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBncm91cEJ5KGdyb3VwQnkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoR3JvdXBCeUl0ZW1zKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VHcm91cEJ5KGdyb3VwQnkpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxpbWl0KGxpbWl0KSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogU2VsZWN0UXVlcnlOb2RlLmNsb25lV2l0aExpbWl0KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgTGltaXROb2RlLmNyZWF0ZShwYXJzZVZhbHVlRXhwcmVzc2lvbihsaW1pdCkpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9mZnNldChvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoT2Zmc2V0KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgT2Zmc2V0Tm9kZS5jcmVhdGUocGFyc2VWYWx1ZUV4cHJlc3Npb24ob2Zmc2V0KSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZmV0Y2gocm93Q291bnQsIG1vZGlmaWVyID0gJ29ubHknKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogU2VsZWN0UXVlcnlOb2RlLmNsb25lV2l0aEZldGNoKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VGZXRjaChyb3dDb3VudCwgbW9kaWZpZXIpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvcChleHByZXNzaW9uLCBtb2RpZmllcnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoVG9wKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VUb3AoZXhwcmVzc2lvbiwgbW9kaWZpZXJzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1bmlvbihleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogU2VsZWN0UXVlcnlOb2RlLmNsb25lV2l0aFNldE9wZXJhdGlvbnModGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVNldE9wZXJhdGlvbnMoJ3VuaW9uJywgZXhwcmVzc2lvbiwgZmFsc2UpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVuaW9uQWxsKGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoU2V0T3BlcmF0aW9ucyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2V0T3BlcmF0aW9ucygndW5pb24nLCBleHByZXNzaW9uLCB0cnVlKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpbnRlcnNlY3QoZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jbG9uZVdpdGhTZXRPcGVyYXRpb25zKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VTZXRPcGVyYXRpb25zKCdpbnRlcnNlY3QnLCBleHByZXNzaW9uLCBmYWxzZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW50ZXJzZWN0QWxsKGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoU2V0T3BlcmF0aW9ucyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2V0T3BlcmF0aW9ucygnaW50ZXJzZWN0JywgZXhwcmVzc2lvbiwgdHJ1ZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZXhjZXB0KGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoU2V0T3BlcmF0aW9ucyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2V0T3BlcmF0aW9ucygnZXhjZXB0JywgZXhwcmVzc2lvbiwgZmFsc2UpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGV4Y2VwdEFsbChleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogU2VsZWN0UXVlcnlOb2RlLmNsb25lV2l0aFNldE9wZXJhdGlvbnModGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVNldE9wZXJhdGlvbnMoJ2V4Y2VwdCcsIGV4cHJlc3Npb24sIHRydWUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxpYXNlZFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwodGhpcywgYWxpYXMpO1xuICAgIH1cbiAgICBjbGVhclNlbGVjdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRob3V0U2VsZWN0aW9ucyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xlYXJXaGVyZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRob3V0V2hlcmUodGhpcy4jcHJvcHMucXVlcnlOb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFyTGltaXQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogU2VsZWN0UXVlcnlOb2RlLmNsb25lV2l0aG91dExpbWl0KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjbGVhck9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRob3V0T2Zmc2V0KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjbGVhck9yZGVyQnkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aG91dE9yZGVyQnkodGhpcy4jcHJvcHMucXVlcnlOb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFyR3JvdXBCeSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRob3V0R3JvdXBCeSh0aGlzLiNwcm9wcy5xdWVyeU5vZGUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgJGlmKGNvbmRpdGlvbiwgZnVuYykge1xuICAgICAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAkY2FzdFRvKCkge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwodGhpcy4jcHJvcHMpO1xuICAgIH1cbiAgICAkbmFycm93VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHRoaXMuI3Byb3BzKTtcbiAgICB9XG4gICAgJGFzc2VydFR5cGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh0aGlzLiNwcm9wcyk7XG4gICAgfVxuICAgICRhc1R1cGxlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKHRoaXMudG9PcGVyYXRpb25Ob2RlKCkpO1xuICAgIH1cbiAgICAkYXNTY2FsYXIoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIodGhpcy50b09wZXJhdGlvbk5vZGUoKSk7XG4gICAgfVxuICAgIHdpdGhQbHVnaW4ocGx1Z2luKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNwcm9wcy5leGVjdXRvci53aXRoUGx1Z2luKHBsdWdpbiksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBjb21waWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IuY29tcGlsZVF1ZXJ5KHRoaXMudG9PcGVyYXRpb25Ob2RlKCksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKCkge1xuICAgICAgICBjb25zdCBjb21waWxlZFF1ZXJ5ID0gdGhpcy5jb21waWxlKCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmV4ZWN1dGVRdWVyeShjb21waWxlZFF1ZXJ5LCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5yb3dzO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlVGFrZUZpcnN0KCkge1xuICAgICAgICBjb25zdCBbcmVzdWx0XSA9IGF3YWl0IHRoaXMuZXhlY3V0ZSgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlVGFrZUZpcnN0T3JUaHJvdyhlcnJvckNvbnN0cnVjdG9yID0gTm9SZXN1bHRFcnJvcikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVUYWtlRmlyc3QoKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzTm9SZXN1bHRFcnJvckNvbnN0cnVjdG9yKGVycm9yQ29uc3RydWN0b3IpXG4gICAgICAgICAgICAgICAgPyBuZXcgZXJyb3JDb25zdHJ1Y3Rvcih0aGlzLnRvT3BlcmF0aW9uTm9kZSgpKVxuICAgICAgICAgICAgICAgIDogZXJyb3JDb25zdHJ1Y3Rvcih0aGlzLnRvT3BlcmF0aW9uTm9kZSgpKTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jICpzdHJlYW0oY2h1bmtTaXplID0gMTAwKSB7XG4gICAgICAgIGNvbnN0IGNvbXBpbGVkUXVlcnkgPSB0aGlzLmNvbXBpbGUoKTtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gdGhpcy4jcHJvcHMuZXhlY3V0b3Iuc3RyZWFtKGNvbXBpbGVkUXVlcnksIGNodW5rU2l6ZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgaXRlbSBvZiBzdHJlYW0pIHtcbiAgICAgICAgICAgIHlpZWxkKiBpdGVtLnJvd3M7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZXhwbGFpbihmb3JtYXQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoRXhwbGFpbih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIGZvcm1hdCwgb3B0aW9ucyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYXdhaXQgYnVpbGRlci5leGVjdXRlKCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlbGVjdFF1ZXJ5QnVpbGRlcihwcm9wcykge1xuICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbChwcm9wcyk7XG59XG4vKipcbiAqIHtAbGluayBTZWxlY3RRdWVyeUJ1aWxkZXJ9IHdpdGggYW4gYWxpYXMuIFRoZSByZXN1bHQgb2YgY2FsbGluZyB7QGxpbmsgU2VsZWN0UXVlcnlCdWlsZGVyLmFzfS5cbiAqL1xuY2xhc3MgQWxpYXNlZFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwge1xuICAgICNxdWVyeUJ1aWxkZXI7XG4gICAgI2FsaWFzO1xuICAgIGNvbnN0cnVjdG9yKHF1ZXJ5QnVpbGRlciwgYWxpYXMpIHtcbiAgICAgICAgdGhpcy4jcXVlcnlCdWlsZGVyID0gcXVlcnlCdWlsZGVyO1xuICAgICAgICB0aGlzLiNhbGlhcyA9IGFsaWFzO1xuICAgIH1cbiAgICBnZXQgZXhwcmVzc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3F1ZXJ5QnVpbGRlcjtcbiAgICB9XG4gICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYWxpYXM7XG4gICAgfVxuICAgIGdldCBpc0FsaWFzZWRTZWxlY3RRdWVyeUJ1aWxkZXIoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiBBbGlhc05vZGUuY3JlYXRlKHRoaXMuI3F1ZXJ5QnVpbGRlci50b09wZXJhdGlvbk5vZGUoKSwgSWRlbnRpZmllck5vZGUuY3JlYXRlKHRoaXMuI2FsaWFzKSk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9hZ2dyZWdhdGUtZnVuY3Rpb24tbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IFdoZXJlTm9kZSB9IGZyb20gJy4vd2hlcmUtbm9kZS5qcyc7XG5pbXBvcnQgeyBPcmRlckJ5Tm9kZSB9IGZyb20gJy4vb3JkZXItYnktbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQWdncmVnYXRlRnVuY3Rpb25Ob2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdBZ2dyZWdhdGVGdW5jdGlvbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGFnZ3JlZ2F0ZUZ1bmN0aW9uLCBhZ2dyZWdhdGVkID0gW10pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQWdncmVnYXRlRnVuY3Rpb25Ob2RlJyxcbiAgICAgICAgICAgIGZ1bmM6IGFnZ3JlZ2F0ZUZ1bmN0aW9uLFxuICAgICAgICAgICAgYWdncmVnYXRlZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhEaXN0aW5jdChhZ2dyZWdhdGVGdW5jdGlvbk5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5hZ2dyZWdhdGVGdW5jdGlvbk5vZGUsXG4gICAgICAgICAgICBkaXN0aW5jdDogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhPcmRlckJ5KGFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSwgb3JkZXJJdGVtcywgd2l0aGluR3JvdXAgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBwcm9wID0gd2l0aGluR3JvdXAgPyAnd2l0aGluR3JvdXAnIDogJ29yZGVyQnknO1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSxcbiAgICAgICAgICAgIFtwcm9wXTogYWdncmVnYXRlRnVuY3Rpb25Ob2RlW3Byb3BdXG4gICAgICAgICAgICAgICAgPyBPcmRlckJ5Tm9kZS5jbG9uZVdpdGhJdGVtcyhhZ2dyZWdhdGVGdW5jdGlvbk5vZGVbcHJvcF0sIG9yZGVySXRlbXMpXG4gICAgICAgICAgICAgICAgOiBPcmRlckJ5Tm9kZS5jcmVhdGUob3JkZXJJdGVtcyksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoRmlsdGVyKGFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSwgZmlsdGVyKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uYWdncmVnYXRlRnVuY3Rpb25Ob2RlLFxuICAgICAgICAgICAgZmlsdGVyOiBhZ2dyZWdhdGVGdW5jdGlvbk5vZGUuZmlsdGVyXG4gICAgICAgICAgICAgICAgPyBXaGVyZU5vZGUuY2xvbmVXaXRoT3BlcmF0aW9uKGFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZS5maWx0ZXIsICdBbmQnLCBmaWx0ZXIpXG4gICAgICAgICAgICAgICAgOiBXaGVyZU5vZGUuY3JlYXRlKGZpbHRlciksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoT3JGaWx0ZXIoYWdncmVnYXRlRnVuY3Rpb25Ob2RlLCBmaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5hZ2dyZWdhdGVGdW5jdGlvbk5vZGUsXG4gICAgICAgICAgICBmaWx0ZXI6IGFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZS5maWx0ZXJcbiAgICAgICAgICAgICAgICA/IFdoZXJlTm9kZS5jbG9uZVdpdGhPcGVyYXRpb24oYWdncmVnYXRlRnVuY3Rpb25Ob2RlLmZpbHRlciwgJ09yJywgZmlsdGVyKVxuICAgICAgICAgICAgICAgIDogV2hlcmVOb2RlLmNyZWF0ZShmaWx0ZXIpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aE92ZXIoYWdncmVnYXRlRnVuY3Rpb25Ob2RlLCBvdmVyKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uYWdncmVnYXRlRnVuY3Rpb25Ob2RlLFxuICAgICAgICAgICAgb3ZlcixcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9mdW5jdGlvbi1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEZ1bmN0aW9uTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnRnVuY3Rpb25Ob2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShmdW5jLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0Z1bmN0aW9uTm9kZScsXG4gICAgICAgICAgICBmdW5jLFxuICAgICAgICAgICAgYXJndW1lbnRzOiBhcmdzLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2FnZ3JlZ2F0ZS1mdW5jdGlvbi1idWlsZGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQWdncmVnYXRlRnVuY3Rpb25Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWdncmVnYXRlLWZ1bmN0aW9uLW5vZGUuanMnO1xuaW1wb3J0IHsgQWxpYXNOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWxpYXMtbm9kZS5qcyc7XG5pbXBvcnQgeyBJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2lkZW50aWZpZXItbm9kZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVPdmVyQnVpbGRlciB9IGZyb20gJy4uL3BhcnNlci9wYXJzZS11dGlscy5qcyc7XG5pbXBvcnQgeyBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uLCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uLCB9IGZyb20gJy4uL3BhcnNlci9iaW5hcnktb3BlcmF0aW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZU9yZGVyQnksIH0gZnJvbSAnLi4vcGFyc2VyL29yZGVyLWJ5LXBhcnNlci5qcyc7XG5pbXBvcnQgeyBRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9xdWVyeS1ub2RlLmpzJztcbmV4cG9ydCBjbGFzcyBBZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgIGdldCBleHByZXNzaW9uVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhbGlhc2VkIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogSW4gYWRkaXRpb24gdG8gc2xhcHBpbmcgYGFzIFwidGhlX2FsaWFzXCJgIHRvIHRoZSBlbmQgb2YgdGhlIFNRTCxcbiAgICAgKiB0aGlzIG1ldGhvZCBhbHNvIHByb3ZpZGVzIHN0cmljdCB0eXBpbmc6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gICAgICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAgICAgKiAgIC5zZWxlY3QoXG4gICAgICogICAgIChlYikgPT4gZWIuZm4uY291bnQ8bnVtYmVyPignaWQnKS5hcygncGVyc29uX2NvdW50JylcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICpcbiAgICAgKiAvLyBgcGVyc29uX2NvdW50OiBudW1iZXJgIGZpZWxkIGV4aXN0cyBpbiB0aGUgcmVzdWx0IHR5cGUuXG4gICAgICogY29uc29sZS5sb2cocmVzdWx0LnBlcnNvbl9jb3VudClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHNlbGVjdCBjb3VudChcImlkXCIpIGFzIFwicGVyc29uX2NvdW50XCJcbiAgICAgKiBmcm9tIFwicGVyc29uXCJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhcyhhbGlhcykge1xuICAgICAgICByZXR1cm4gbmV3IEFsaWFzZWRBZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXIodGhpcywgYWxpYXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgYGRpc3RpbmN0YCBjbGF1c2UgaW5zaWRlIHRoZSBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICAgICAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gICAgICogICAuc2VsZWN0KChlYikgPT5cbiAgICAgKiAgICAgZWIuZm4uY291bnQ8bnVtYmVyPignZmlyc3RfbmFtZScpLmRpc3RpbmN0KCkuYXMoJ2ZpcnN0X25hbWVfY291bnQnKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHNlbGVjdCBjb3VudChkaXN0aW5jdCBcImZpcnN0X25hbWVcIikgYXMgXCJmaXJzdF9uYW1lX2NvdW50XCJcbiAgICAgKiBmcm9tIFwicGVyc29uXCJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkaXN0aW5jdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBhZ2dyZWdhdGVGdW5jdGlvbk5vZGU6IEFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZS5jbG9uZVdpdGhEaXN0aW5jdCh0aGlzLiNwcm9wcy5hZ2dyZWdhdGVGdW5jdGlvbk5vZGUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3JkZXJCeSguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgYWdncmVnYXRlRnVuY3Rpb25Ob2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoT3JkZXJCeUl0ZW1zKHRoaXMuI3Byb3BzLmFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSwgcGFyc2VPcmRlckJ5KGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFyT3JkZXJCeSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBhZ2dyZWdhdGVGdW5jdGlvbk5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhvdXRPcmRlckJ5KHRoaXMuI3Byb3BzLmFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3aXRoaW5Hcm91cE9yZGVyQnkoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IEFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZTogQWdncmVnYXRlRnVuY3Rpb25Ob2RlLmNsb25lV2l0aE9yZGVyQnkodGhpcy4jcHJvcHMuYWdncmVnYXRlRnVuY3Rpb25Ob2RlLCBwYXJzZU9yZGVyQnkoYXJncyksIHRydWUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZmlsdGVyV2hlcmUoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IEFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZTogQWdncmVnYXRlRnVuY3Rpb25Ob2RlLmNsb25lV2l0aEZpbHRlcih0aGlzLiNwcm9wcy5hZ2dyZWdhdGVGdW5jdGlvbk5vZGUsIHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24oYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGBmaWx0ZXJgIGNsYXVzZSB3aXRoIGEgbmVzdGVkIGB3aGVyZWAgY2xhdXNlIGFmdGVyIHRoZSBmdW5jdGlvbiwgd2hlcmVcbiAgICAgKiBib3RoIHNpZGVzIG9mIHRoZSBvcGVyYXRvciBhcmUgcmVmZXJlbmNlcyB0byBjb2x1bW5zLlxuICAgICAqXG4gICAgICogU2ltaWxhciB0byB7QGxpbmsgV2hlcmVJbnRlcmZhY2V9J3MgYHdoZXJlUmVmYCBtZXRob2QuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIENvdW50IHBlb3BsZSB3aXRoIHNhbWUgZmlyc3QgYW5kIGxhc3QgbmFtZXMgdmVyc3VzIGdlbmVyYWwgcHVibGljOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICAgICAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gICAgICogICAuc2VsZWN0KChlYikgPT4gW1xuICAgICAqICAgICBlYi5mblxuICAgICAqICAgICAgIC5jb3VudDxudW1iZXI+KCdpZCcpXG4gICAgICogICAgICAgLmZpbHRlcldoZXJlUmVmKCdmaXJzdF9uYW1lJywgJz0nLCAnbGFzdF9uYW1lJylcbiAgICAgKiAgICAgICAuYXMoJ3JlcGVhdF9uYW1lX2NvdW50JyksXG4gICAgICogICAgIGViLmZuLmNvdW50PG51bWJlcj4oJ2lkJykuYXMoJ3RvdGFsX2NvdW50JyksXG4gICAgICogICBdKVxuICAgICAqICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHNlbGVjdFxuICAgICAqICAgY291bnQoXCJpZFwiKSBmaWx0ZXIod2hlcmUgXCJmaXJzdF9uYW1lXCIgPSBcImxhc3RfbmFtZVwiKSBhcyBcInJlcGVhdF9uYW1lX2NvdW50XCIsXG4gICAgICogICBjb3VudChcImlkXCIpIGFzIFwidG90YWxfY291bnRcIlxuICAgICAqIGZyb20gXCJwZXJzb25cIlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGZpbHRlcldoZXJlUmVmKGxocywgb3AsIHJocykge1xuICAgICAgICByZXR1cm4gbmV3IEFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZTogQWdncmVnYXRlRnVuY3Rpb25Ob2RlLmNsb25lV2l0aEZpbHRlcih0aGlzLiNwcm9wcy5hZ2dyZWdhdGVGdW5jdGlvbk5vZGUsIHBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24obGhzLCBvcCwgcmhzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIGBvdmVyYCBjbGF1c2UgKHdpbmRvdyBmdW5jdGlvbnMpIGFmdGVyIHRoZSBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICAgICAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gICAgICogICAuc2VsZWN0KFxuICAgICAqICAgICAoZWIpID0+IGViLmZuLmF2ZzxudW1iZXI+KCdhZ2UnKS5vdmVyKCkuYXMoJ2F2ZXJhZ2VfYWdlJylcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHNlbGVjdCBhdmcoXCJhZ2VcIikgb3ZlcigpIGFzIFwiYXZlcmFnZV9hZ2VcIlxuICAgICAqIGZyb20gXCJwZXJzb25cIlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQWxzbyBzdXBwb3J0cyBwYXNzaW5nIGEgY2FsbGJhY2sgdGhhdCByZXR1cm5zIGFuIG92ZXIgYnVpbGRlcixcbiAgICAgKiBhbGxvd2luZyB0byBhZGQgcGFydGl0aW9uIGJ5IGFuZCBzb3J0IGJ5IGNsYXVzZXMgaW5zaWRlIG92ZXIuXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gICAgICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAgICAgKiAgIC5zZWxlY3QoXG4gICAgICogICAgIChlYikgPT4gZWIuZm4uYXZnPG51bWJlcj4oJ2FnZScpLm92ZXIoXG4gICAgICogICAgICAgb2IgPT4gb2IucGFydGl0aW9uQnkoJ2xhc3RfbmFtZScpLm9yZGVyQnkoJ2ZpcnN0X25hbWUnLCAnYXNjJylcbiAgICAgKiAgICAgKS5hcygnYXZlcmFnZV9hZ2UnKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IGF2ZyhcImFnZVwiKSBvdmVyKHBhcnRpdGlvbiBieSBcImxhc3RfbmFtZVwiIG9yZGVyIGJ5IFwiZmlyc3RfbmFtZVwiIGFzYykgYXMgXCJhdmVyYWdlX2FnZVwiXG4gICAgICogZnJvbSBcInBlcnNvblwiXG4gICAgICogYGBgXG4gICAgICovXG4gICAgb3ZlcihvdmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBjcmVhdGVPdmVyQnVpbGRlcigpO1xuICAgICAgICByZXR1cm4gbmV3IEFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZTogQWdncmVnYXRlRnVuY3Rpb25Ob2RlLmNsb25lV2l0aE92ZXIodGhpcy4jcHJvcHMuYWdncmVnYXRlRnVuY3Rpb25Ob2RlLCAob3ZlciA/IG92ZXIoYnVpbGRlcikgOiBidWlsZGVyKS50b09wZXJhdGlvbk5vZGUoKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhc3RzIHRoZSBleHByZXNzaW9uIHRvIHRoZSBnaXZlbiB0eXBlLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgY2FsbCBkb2Vzbid0IGNoYW5nZSB0aGUgU1FMIGluIGFueSB3YXkuIFRoaXMgbWV0aG9kcyBzaW1wbHlcbiAgICAgKiByZXR1cm5zIGEgY29weSBvZiB0aGlzIGBBZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXJgIHdpdGggYSBuZXcgb3V0cHV0IHR5cGUuXG4gICAgICovXG4gICAgJGNhc3RUbygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXIodGhpcy4jcHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPbWl0IG51bGwgZnJvbSB0aGUgZXhwcmVzc2lvbidzIHR5cGUuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VmdWwgaW4gY2FzZXMgd2hlcmUgeW91IGtub3cgYW4gZXhwcmVzc2lvbiBjYW4ndCBiZVxuICAgICAqIG51bGwsIGJ1dCBLeXNlbHkgaXMgdW5hYmxlIHRvIGluZmVyIGl0LlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgY2FsbCBkb2Vzbid0IGNoYW5nZSB0aGUgU1FMIGluIGFueSB3YXkuIFRoaXMgbWV0aG9kcyBzaW1wbHlcbiAgICAgKiByZXR1cm5zIGEgY29weSBvZiBgdGhpc2Agd2l0aCBhIG5ldyBvdXRwdXQgdHlwZS5cbiAgICAgKi9cbiAgICAkbm90TnVsbCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXIodGhpcy4jcHJvcHMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5hZ2dyZWdhdGVGdW5jdGlvbk5vZGU7XG4gICAgfVxufVxuLyoqXG4gKiB7QGxpbmsgQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyfSB3aXRoIGFuIGFsaWFzLiBUaGUgcmVzdWx0IG9mIGNhbGxpbmcge0BsaW5rIEFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlci5hc30uXG4gKi9cbmV4cG9ydCBjbGFzcyBBbGlhc2VkQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyIHtcbiAgICAjYWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyO1xuICAgICNhbGlhcztcbiAgICBjb25zdHJ1Y3RvcihhZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXIsIGFsaWFzKSB7XG4gICAgICAgIHRoaXMuI2FnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlciA9IGFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlcjtcbiAgICAgICAgdGhpcy4jYWxpYXMgPSBhbGlhcztcbiAgICB9XG4gICAgLyoqIEBwcml2YXRlICovXG4gICAgZ2V0IGV4cHJlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXI7XG4gICAgfVxuICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2FsaWFzO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiBBbGlhc05vZGUuY3JlYXRlKHRoaXMuI2FnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlci50b09wZXJhdGlvbk5vZGUoKSwgSWRlbnRpZmllck5vZGUuY3JlYXRlKHRoaXMuI2FsaWFzKSk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9mdW5jdGlvbi1tb2R1bGUuZC50c1wiIC8+XG5pbXBvcnQgeyBFeHByZXNzaW9uV3JhcHBlciB9IGZyb20gJy4uL2V4cHJlc3Npb24vZXhwcmVzc2lvbi13cmFwcGVyLmpzJztcbmltcG9ydCB7IEFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2FnZ3JlZ2F0ZS1mdW5jdGlvbi1ub2RlLmpzJztcbmltcG9ydCB7IEZ1bmN0aW9uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2Z1bmN0aW9uLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uT3JMaXN0LCB9IGZyb20gJy4uL3BhcnNlci9yZWZlcmVuY2UtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlU2VsZWN0QWxsIH0gZnJvbSAnLi4vcGFyc2VyL3NlbGVjdC1wYXJzZXIuanMnO1xuaW1wb3J0IHsgQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9hZ2dyZWdhdGUtZnVuY3Rpb24tYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IHBhcnNlVGFibGUgfSBmcm9tICcuLi9wYXJzZXIvdGFibGUtcGFyc2VyLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGdW5jdGlvbk1vZHVsZSgpIHtcbiAgICBjb25zdCBmbiA9IChuYW1lLCBhcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIoRnVuY3Rpb25Ob2RlLmNyZWF0ZShuYW1lLCBwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb25Pckxpc3QoYXJncyA/PyBbXSkpKTtcbiAgICB9O1xuICAgIGNvbnN0IGFnZyA9IChuYW1lLCBhcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyKHtcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZTogQWdncmVnYXRlRnVuY3Rpb25Ob2RlLmNyZWF0ZShuYW1lLCBhcmdzID8gcGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uT3JMaXN0KGFyZ3MpIDogdW5kZWZpbmVkKSxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihmbiwge1xuICAgICAgICBhZ2csXG4gICAgICAgIGF2Zyhjb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiBhZ2coJ2F2ZycsIFtjb2x1bW5dKTtcbiAgICAgICAgfSxcbiAgICAgICAgY29hbGVzY2UoLi4udmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oJ2NvYWxlc2NlJywgdmFsdWVzKTtcbiAgICAgICAgfSxcbiAgICAgICAgY291bnQoY29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm4gYWdnKCdjb3VudCcsIFtjb2x1bW5dKTtcbiAgICAgICAgfSxcbiAgICAgICAgY291bnRBbGwodGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyKHtcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGVGdW5jdGlvbk5vZGU6IEFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZS5jcmVhdGUoJ2NvdW50JywgcGFyc2VTZWxlY3RBbGwodGFibGUpKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBtYXgoY29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm4gYWdnKCdtYXgnLCBbY29sdW1uXSk7XG4gICAgICAgIH0sXG4gICAgICAgIG1pbihjb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiBhZ2coJ21pbicsIFtjb2x1bW5dKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3VtKGNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuIGFnZygnc3VtJywgW2NvbHVtbl0pO1xuICAgICAgICB9LFxuICAgICAgICBhbnkoY29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm4gZm4oJ2FueScsIFtjb2x1bW5dKTtcbiAgICAgICAgfSxcbiAgICAgICAganNvbkFnZyh0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXIoe1xuICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZTogQWdncmVnYXRlRnVuY3Rpb25Ob2RlLmNyZWF0ZSgnanNvbl9hZ2cnLCBbXG4gICAgICAgICAgICAgICAgICAgIGlzU3RyaW5nKHRhYmxlKSA/IHBhcnNlVGFibGUodGFibGUpIDogdGFibGUudG9PcGVyYXRpb25Ob2RlKCksXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9Kc29uKHRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKEZ1bmN0aW9uTm9kZS5jcmVhdGUoJ3RvX2pzb24nLCBbXG4gICAgICAgICAgICAgICAgaXNTdHJpbmcodGFibGUpID8gcGFyc2VUYWJsZSh0YWJsZSkgOiB0YWJsZS50b09wZXJhdGlvbk5vZGUoKSxcbiAgICAgICAgICAgIF0pKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vdW5hcnktb3BlcmF0aW9uLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVW5hcnlPcGVyYXRpb25Ob2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdVbmFyeU9wZXJhdGlvbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG9wZXJhdG9yLCBvcGVyYW5kKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1VuYXJ5T3BlcmF0aW9uTm9kZScsXG4gICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgIG9wZXJhbmQsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vdW5hcnktb3BlcmF0aW9uLXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IE9wZXJhdG9yTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdG9yLW5vZGUuanMnO1xuaW1wb3J0IHsgVW5hcnlPcGVyYXRpb25Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvdW5hcnktb3BlcmF0aW9uLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uLCB9IGZyb20gJy4vcmVmZXJlbmNlLXBhcnNlci5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFeGlzdHMob3BlcmFuZCkge1xuICAgIHJldHVybiBwYXJzZVVuYXJ5T3BlcmF0aW9uKCdleGlzdHMnLCBvcGVyYW5kKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU5vdEV4aXN0cyhvcGVyYW5kKSB7XG4gICAgcmV0dXJuIHBhcnNlVW5hcnlPcGVyYXRpb24oJ25vdCBleGlzdHMnLCBvcGVyYW5kKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVVuYXJ5T3BlcmF0aW9uKG9wZXJhdG9yLCBvcGVyYW5kKSB7XG4gICAgcmV0dXJuIFVuYXJ5T3BlcmF0aW9uTm9kZS5jcmVhdGUoT3BlcmF0b3JOb2RlLmNyZWF0ZShvcGVyYXRvciksIHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbihvcGVyYW5kKSk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Nhc2Utbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IFdoZW5Ob2RlIH0gZnJvbSAnLi93aGVuLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENhc2VOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdDYXNlTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQ2FzZU5vZGUnLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoV2hlbihjYXNlTm9kZSwgd2hlbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmNhc2VOb2RlLFxuICAgICAgICAgICAgd2hlbjogZnJlZXplKGNhc2VOb2RlLndoZW4gPyBbLi4uY2FzZU5vZGUud2hlbiwgd2hlbl0gOiBbd2hlbl0pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFRoZW4oY2FzZU5vZGUsIHRoZW4pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5jYXNlTm9kZSxcbiAgICAgICAgICAgIHdoZW46IGNhc2VOb2RlLndoZW5cbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbXG4gICAgICAgICAgICAgICAgICAgIC4uLmNhc2VOb2RlLndoZW4uc2xpY2UoMCwgLTEpLFxuICAgICAgICAgICAgICAgICAgICBXaGVuTm9kZS5jbG9uZVdpdGhSZXN1bHQoY2FzZU5vZGUud2hlbltjYXNlTm9kZS53aGVuLmxlbmd0aCAtIDFdLCB0aGVuKSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aChjYXNlTm9kZSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5jYXNlTm9kZSxcbiAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Nhc2UtYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IEV4cHJlc3Npb25XcmFwcGVyIH0gZnJvbSAnLi4vZXhwcmVzc2lvbi9leHByZXNzaW9uLXdyYXBwZXIuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ2FzZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jYXNlLW5vZGUuanMnO1xuaW1wb3J0IHsgV2hlbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS93aGVuLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbiwgfSBmcm9tICcuLi9wYXJzZXIvYmluYXJ5LW9wZXJhdGlvbi1wYXJzZXIuanMnO1xuaW1wb3J0IHsgaXNTYWZlSW1tZWRpYXRlVmFsdWUsIHBhcnNlU2FmZUltbWVkaWF0ZVZhbHVlLCBwYXJzZVZhbHVlRXhwcmVzc2lvbiwgfSBmcm9tICcuLi9wYXJzZXIvdmFsdWUtcGFyc2VyLmpzJztcbmV4cG9ydCBjbGFzcyBDYXNlQnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgd2hlbiguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FzZVRoZW5CdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ2FzZU5vZGUuY2xvbmVXaXRoV2hlbih0aGlzLiNwcm9wcy5ub2RlLCBXaGVuTm9kZS5jcmVhdGUocGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbihhcmdzKSkpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQ2FzZVRoZW5CdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICB0aGVuKHZhbHVlRXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gbmV3IENhc2VXaGVuQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENhc2VOb2RlLmNsb25lV2l0aFRoZW4odGhpcy4jcHJvcHMubm9kZSwgaXNTYWZlSW1tZWRpYXRlVmFsdWUodmFsdWVFeHByZXNzaW9uKVxuICAgICAgICAgICAgICAgID8gcGFyc2VTYWZlSW1tZWRpYXRlVmFsdWUodmFsdWVFeHByZXNzaW9uKVxuICAgICAgICAgICAgICAgIDogcGFyc2VWYWx1ZUV4cHJlc3Npb24odmFsdWVFeHByZXNzaW9uKSksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBDYXNlV2hlbkJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIHdoZW4oLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IENhc2VUaGVuQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENhc2VOb2RlLmNsb25lV2l0aFdoZW4odGhpcy4jcHJvcHMubm9kZSwgV2hlbk5vZGUuY3JlYXRlKHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24oYXJncykpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UodmFsdWVFeHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FzZUVuZEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDYXNlTm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGVsc2U6IGlzU2FmZUltbWVkaWF0ZVZhbHVlKHZhbHVlRXhwcmVzc2lvbilcbiAgICAgICAgICAgICAgICAgICAgPyBwYXJzZVNhZmVJbW1lZGlhdGVWYWx1ZSh2YWx1ZUV4cHJlc3Npb24pXG4gICAgICAgICAgICAgICAgICAgIDogcGFyc2VWYWx1ZUV4cHJlc3Npb24odmFsdWVFeHByZXNzaW9uKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZW5kKCkge1xuICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKENhc2VOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7IGlzU3RhdGVtZW50OiBmYWxzZSB9KSk7XG4gICAgfVxuICAgIGVuZENhc2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIoQ2FzZU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHsgaXNTdGF0ZW1lbnQ6IHRydWUgfSkpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBDYXNlRW5kQnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgZW5kKCkge1xuICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKENhc2VOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7IGlzU3RhdGVtZW50OiBmYWxzZSB9KSk7XG4gICAgfVxuICAgIGVuZENhc2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIoQ2FzZU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHsgaXNTdGF0ZW1lbnQ6IHRydWUgfSkpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vanNvbi1wYXRoLWxlZy1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEpTT05QYXRoTGVnTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnSlNPTlBhdGhMZWdOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZSh0eXBlLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdKU09OUGF0aExlZ05vZGUnLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2pzb24tcGF0aC1idWlsZGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgQWxpYXNOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWxpYXMtbm9kZS5qcyc7XG5pbXBvcnQgeyBJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2lkZW50aWZpZXItbm9kZS5qcyc7XG5pbXBvcnQgeyBKU09OT3BlcmF0b3JDaGFpbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9qc29uLW9wZXJhdG9yLWNoYWluLW5vZGUuanMnO1xuaW1wb3J0IHsgSlNPTlBhdGhMZWdOb2RlLCB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2pzb24tcGF0aC1sZWctbm9kZS5qcyc7XG5pbXBvcnQgeyBKU09OUGF0aE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9qc29uLXBhdGgtbm9kZS5qcyc7XG5pbXBvcnQgeyBKU09OUmVmZXJlbmNlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2pzb24tcmVmZXJlbmNlLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNPcGVyYXRpb25Ob2RlU291cmNlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmltcG9ydCB7IFZhbHVlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3ZhbHVlLW5vZGUuanMnO1xuZXhwb3J0IGNsYXNzIEpTT05QYXRoQnVpbGRlciB7XG4gICAgI25vZGU7XG4gICAgY29uc3RydWN0b3Iobm9kZSkge1xuICAgICAgICB0aGlzLiNub2RlID0gbm9kZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWNjZXNzIGFuIGVsZW1lbnQgb2YgYSBKU09OIGFycmF5IGluIGEgc3BlY2lmaWMgbG9jYXRpb24uXG4gICAgICpcbiAgICAgKiBTaW5jZSB0aGVyZSdzIG5vIGd1YXJhbnRlZSBhbiBlbGVtZW50IGV4aXN0cyBpbiB0aGUgZ2l2ZW4gYXJyYXkgbG9jYXRpb24sIHRoZVxuICAgICAqIHJlc3VsdGluZyB0eXBlIGlzIGFsd2F5cyBudWxsYWJsZS4gSWYgeW91J3JlIHN1cmUgdGhlIGVsZW1lbnQgZXhpc3RzLCB5b3VcbiAgICAgKiBzaG91bGQgdXNlIHtAbGluayBTZWxlY3RRdWVyeUJ1aWxkZXIuJGFzc2VydFR5cGV9IHRvIG5hcnJvdyB0aGUgdHlwZSBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBTZWUgYWxzbyB7QGxpbmsga2V5fSB0byBhY2Nlc3MgcHJvcGVydGllcyBvZiBKU09OIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2VsZWN0RnJvbSgncGVyc29uJylcbiAgICAgKiAgIC5zZWxlY3QoZWIgPT5cbiAgICAgKiAgICAgZWIucmVmKCduaWNrbmFtZXMnLCAnLT4nKS5hdCgwKS5hcygncHJpbWFyeV9uaWNrbmFtZScpXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBzZWxlY3QgXCJuaWNrbmFtZXNcIi0+MCBhcyBcInByaW1hcnlfbmlja25hbWVcIiBmcm9tIFwicGVyc29uXCJcbiAgICAgKmBgYFxuICAgICAqXG4gICAgICogQ29tYmluZWQgd2l0aCB7QGxpbmsga2V5fTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZGIuc2VsZWN0RnJvbSgncGVyc29uJykuc2VsZWN0KGViID0+XG4gICAgICogICBlYi5yZWYoJ2V4cGVyaWVuY2UnLCAnLT4nKS5hdCgwKS5rZXkoJ3JvbGUnKS5hcygnZmlyc3Rfcm9sZScpXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IFwiZXhwZXJpZW5jZVwiLT4wLT4ncm9sZScgYXMgXCJmaXJzdF9yb2xlXCIgZnJvbSBcInBlcnNvblwiXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHVzZSBgJ2xhc3QnYCB0byBhY2Nlc3MgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgYXJyYXkgaW4gTXlTUUw6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGRiLnNlbGVjdEZyb20oJ3BlcnNvbicpLnNlbGVjdChlYiA9PlxuICAgICAqICAgZWIucmVmKCduaWNrbmFtZXMnLCAnLT4kJykuYXQoJ2xhc3QnKS5hcygnbGFzdF9uaWNrbmFtZScpXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHNlbGVjdCBgbmlja25hbWVzYC0+JyRbbGFzdF0nIGFzIGBsYXN0X25pY2tuYW1lYCBmcm9tIGBwZXJzb25gXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBPciBgJyMtMSdgIGluIFNRTGl0ZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZGIuc2VsZWN0RnJvbSgncGVyc29uJykuc2VsZWN0KGViID0+XG4gICAgICogICBlYi5yZWYoJ25pY2tuYW1lcycsICctPj4kJykuYXQoJyMtMScpLmFzKCdsYXN0X25pY2tuYW1lJylcbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoU1FMaXRlKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHNlbGVjdCBcIm5pY2tuYW1lc1wiLT4+JyRbIy0xXScgYXMgYGxhc3Rfbmlja25hbWVgIGZyb20gYHBlcnNvbmBcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhdChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY3JlYXRlQnVpbGRlcldpdGhQYXRoTGVnKCdBcnJheUxvY2F0aW9uJywgaW5kZXgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBY2Nlc3MgYSBwcm9wZXJ0eSBvZiBhIEpTT04gb2JqZWN0LlxuICAgICAqXG4gICAgICogSWYgYSBmaWVsZCBpcyBvcHRpb25hbCwgdGhlIHJlc3VsdGluZyB0eXBlIHdpbGwgYmUgbnVsbGFibGUuXG4gICAgICpcbiAgICAgKiBTZWUgYWxzbyB7QGxpbmsgYXR9IHRvIGFjY2VzcyBlbGVtZW50cyBvZiBKU09OIGFycmF5cy5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBkYi5zZWxlY3RGcm9tKCdwZXJzb24nKS5zZWxlY3QoZWIgPT5cbiAgICAgKiAgIGViLnJlZignYWRkcmVzcycsICctPicpLmtleSgnY2l0eScpLmFzKCdjaXR5JylcbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBzZWxlY3QgXCJhZGRyZXNzXCItPidjaXR5JyBhcyBcImNpdHlcIiBmcm9tIFwicGVyc29uXCJcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEdvaW5nIGRlZXBlcjpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZGIuc2VsZWN0RnJvbSgncGVyc29uJykuc2VsZWN0KGViID0+XG4gICAgICogICBlYi5yZWYoJ3Byb2ZpbGUnLCAnLT4kJykua2V5KCd3ZWJzaXRlJykua2V5KCd1cmwnKS5hcygnd2Vic2l0ZV91cmwnKVxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBzZWxlY3QgYHByb2ZpbGVgLT4nJC53ZWJzaXRlLnVybCcgYXMgYHdlYnNpdGVfdXJsYCBmcm9tIGBwZXJzb25gXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBDb21iaW5lZCB3aXRoIHtAbGluayBhdH06XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGRiLnNlbGVjdEZyb20oJ3BlcnNvbicpLnNlbGVjdChlYiA9PlxuICAgICAqICAgZWIucmVmKCdwcm9maWxlJywgJy0+Jykua2V5KCdhZGRyZXNzZXMnKS5hdCgwKS5rZXkoJ2NpdHknKS5hcygnY2l0eScpXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IFwicHJvZmlsZVwiLT4nYWRkcmVzc2VzJy0+MC0+J2NpdHknIGFzIFwiY2l0eVwiIGZyb20gXCJwZXJzb25cIlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGtleShrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NyZWF0ZUJ1aWxkZXJXaXRoUGF0aExlZygnTWVtYmVyJywga2V5KTtcbiAgICB9XG4gICAgI2NyZWF0ZUJ1aWxkZXJXaXRoUGF0aExlZyhsZWdUeXBlLCB2YWx1ZSkge1xuICAgICAgICBpZiAoSlNPTlJlZmVyZW5jZU5vZGUuaXModGhpcy4jbm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHJhdmVyc2VkSlNPTlBhdGhCdWlsZGVyKEpTT05SZWZlcmVuY2VOb2RlLmNsb25lV2l0aFRyYXZlcnNhbCh0aGlzLiNub2RlLCBKU09OUGF0aE5vZGUuaXModGhpcy4jbm9kZS50cmF2ZXJzYWwpXG4gICAgICAgICAgICAgICAgPyBKU09OUGF0aE5vZGUuY2xvbmVXaXRoTGVnKHRoaXMuI25vZGUudHJhdmVyc2FsLCBKU09OUGF0aExlZ05vZGUuY3JlYXRlKGxlZ1R5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgICAgICA6IEpTT05PcGVyYXRvckNoYWluTm9kZS5jbG9uZVdpdGhWYWx1ZSh0aGlzLiNub2RlLnRyYXZlcnNhbCwgVmFsdWVOb2RlLmNyZWF0ZUltbWVkaWF0ZSh2YWx1ZSkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBUcmF2ZXJzZWRKU09OUGF0aEJ1aWxkZXIoSlNPTlBhdGhOb2RlLmNsb25lV2l0aExlZyh0aGlzLiNub2RlLCBKU09OUGF0aExlZ05vZGUuY3JlYXRlKGxlZ1R5cGUsIHZhbHVlKSkpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBUcmF2ZXJzZWRKU09OUGF0aEJ1aWxkZXIgZXh0ZW5kcyBKU09OUGF0aEJ1aWxkZXIge1xuICAgICNub2RlO1xuICAgIGNvbnN0cnVjdG9yKG5vZGUpIHtcbiAgICAgICAgc3VwZXIobm9kZSk7XG4gICAgICAgIHRoaXMuI25vZGUgPSBub2RlO1xuICAgIH1cbiAgICAvKiogQHByaXZhdGUgKi9cbiAgICBnZXQgZXhwcmVzc2lvblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxpYXNlZEpTT05QYXRoQnVpbGRlcih0aGlzLCBhbGlhcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgb3V0cHV0IHR5cGUgb2YgdGhlIGpzb24gcGF0aC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGNhbGwgZG9lc24ndCBjaGFuZ2UgdGhlIFNRTCBpbiBhbnkgd2F5LiBUaGlzIG1ldGhvZHMgc2ltcGx5XG4gICAgICogcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBgSlNPTlBhdGhCdWlsZGVyYCB3aXRoIGEgbmV3IG91dHB1dCB0eXBlLlxuICAgICAqL1xuICAgICRjYXN0VG8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgVHJhdmVyc2VkSlNPTlBhdGhCdWlsZGVyKHRoaXMuI25vZGUpO1xuICAgIH1cbiAgICAkbm90TnVsbCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmF2ZXJzZWRKU09OUGF0aEJ1aWxkZXIodGhpcy4jbm9kZSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI25vZGU7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEFsaWFzZWRKU09OUGF0aEJ1aWxkZXIge1xuICAgICNqc29uUGF0aDtcbiAgICAjYWxpYXM7XG4gICAgY29uc3RydWN0b3IoanNvblBhdGgsIGFsaWFzKSB7XG4gICAgICAgIHRoaXMuI2pzb25QYXRoID0ganNvblBhdGg7XG4gICAgICAgIHRoaXMuI2FsaWFzID0gYWxpYXM7XG4gICAgfVxuICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgIGdldCBleHByZXNzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4janNvblBhdGg7XG4gICAgfVxuICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2FsaWFzO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiBBbGlhc05vZGUuY3JlYXRlKHRoaXMuI2pzb25QYXRoLnRvT3BlcmF0aW9uTm9kZSgpLCBpc09wZXJhdGlvbk5vZGVTb3VyY2UodGhpcy4jYWxpYXMpXG4gICAgICAgICAgICA/IHRoaXMuI2FsaWFzLnRvT3BlcmF0aW9uTm9kZSgpXG4gICAgICAgICAgICA6IElkZW50aWZpZXJOb2RlLmNyZWF0ZSh0aGlzLiNhbGlhcykpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vdHVwbGUtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBUdXBsZU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1R1cGxlTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUodmFsdWVzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1R1cGxlTm9kZScsXG4gICAgICAgICAgICB2YWx1ZXM6IGZyZWV6ZSh2YWx1ZXMpLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2RhdGEtdHlwZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuY29uc3QgU0lNUExFX0NPTFVNTl9EQVRBX1RZUEVTID0gW1xuICAgICd2YXJjaGFyJyxcbiAgICAnY2hhcicsXG4gICAgJ3RleHQnLFxuICAgICdpbnRlZ2VyJyxcbiAgICAnaW50MicsXG4gICAgJ2ludDQnLFxuICAgICdpbnQ4JyxcbiAgICAnc21hbGxpbnQnLFxuICAgICdiaWdpbnQnLFxuICAgICdib29sZWFuJyxcbiAgICAncmVhbCcsXG4gICAgJ2RvdWJsZSBwcmVjaXNpb24nLFxuICAgICdmbG9hdDQnLFxuICAgICdmbG9hdDgnLFxuICAgICdkZWNpbWFsJyxcbiAgICAnbnVtZXJpYycsXG4gICAgJ2JpbmFyeScsXG4gICAgJ2J5dGVhJyxcbiAgICAnZGF0ZScsXG4gICAgJ2RhdGV0aW1lJyxcbiAgICAndGltZScsXG4gICAgJ3RpbWV0eicsXG4gICAgJ3RpbWVzdGFtcCcsXG4gICAgJ3RpbWVzdGFtcHR6JyxcbiAgICAnc2VyaWFsJyxcbiAgICAnYmlnc2VyaWFsJyxcbiAgICAndXVpZCcsXG4gICAgJ2pzb24nLFxuICAgICdqc29uYicsXG4gICAgJ2Jsb2InLFxuICAgICd2YXJiaW5hcnknLFxuICAgICdpbnQ0cmFuZ2UnLFxuICAgICdpbnQ0bXVsdGlyYW5nZScsXG4gICAgJ2ludDhyYW5nZScsXG4gICAgJ2ludDhtdWx0aXJhbmdlJyxcbiAgICAnbnVtcmFuZ2UnLFxuICAgICdudW1tdWx0aXJhbmdlJyxcbiAgICAndHNyYW5nZScsXG4gICAgJ3RzbXVsdGlyYW5nZScsXG4gICAgJ3RzdHpyYW5nZScsXG4gICAgJ3RzdHptdWx0aXJhbmdlJyxcbiAgICAnZGF0ZXJhbmdlJyxcbiAgICAnZGF0ZW11bHRpcmFuZ2UnLFxuXTtcbmNvbnN0IENPTFVNTl9EQVRBX1RZUEVfUkVHRVggPSBbXG4gICAgL152YXJjaGFyXFwoXFxkK1xcKSQvLFxuICAgIC9eY2hhclxcKFxcZCtcXCkkLyxcbiAgICAvXmRlY2ltYWxcXChcXGQrLCBcXGQrXFwpJC8sXG4gICAgL15udW1lcmljXFwoXFxkKywgXFxkK1xcKSQvLFxuICAgIC9eYmluYXJ5XFwoXFxkK1xcKSQvLFxuICAgIC9eZGF0ZXRpbWVcXChcXGQrXFwpJC8sXG4gICAgL150aW1lXFwoXFxkK1xcKSQvLFxuICAgIC9edGltZXR6XFwoXFxkK1xcKSQvLFxuICAgIC9edGltZXN0YW1wXFwoXFxkK1xcKSQvLFxuICAgIC9edGltZXN0YW1wdHpcXChcXGQrXFwpJC8sXG4gICAgL152YXJiaW5hcnlcXChcXGQrXFwpJC8sXG5dO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IERhdGFUeXBlTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnRGF0YVR5cGVOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShkYXRhVHlwZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdEYXRhVHlwZU5vZGUnLFxuICAgICAgICAgICAgZGF0YVR5cGUsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbmV4cG9ydCBmdW5jdGlvbiBpc0NvbHVtbkRhdGFUeXBlKGRhdGFUeXBlKSB7XG4gICAgaWYgKFNJTVBMRV9DT0xVTU5fREFUQV9UWVBFUy5pbmNsdWRlcyhkYXRhVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChDT0xVTU5fREFUQV9UWVBFX1JFR0VYLnNvbWUoKHIpID0+IHIudGVzdChkYXRhVHlwZSkpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2RhdGEtdHlwZS1wYXJzZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBEYXRhVHlwZU5vZGUsIGlzQ29sdW1uRGF0YVR5cGUsIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvZGF0YS10eXBlLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNPcGVyYXRpb25Ob2RlU291cmNlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGFUeXBlRXhwcmVzc2lvbihkYXRhVHlwZSkge1xuICAgIGlmIChpc09wZXJhdGlvbk5vZGVTb3VyY2UoZGF0YVR5cGUpKSB7XG4gICAgICAgIHJldHVybiBkYXRhVHlwZS50b09wZXJhdGlvbk5vZGUoKTtcbiAgICB9XG4gICAgaWYgKGlzQ29sdW1uRGF0YVR5cGUoZGF0YVR5cGUpKSB7XG4gICAgICAgIHJldHVybiBEYXRhVHlwZU5vZGUuY3JlYXRlKGRhdGFUeXBlKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGNvbHVtbiBkYXRhIHR5cGUgJHtKU09OLnN0cmluZ2lmeShkYXRhVHlwZSl9YCk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Nhc3Qtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDYXN0Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnQ2FzdE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGV4cHJlc3Npb24sIGRhdGFUeXBlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0Nhc3ROb2RlJyxcbiAgICAgICAgICAgIGV4cHJlc3Npb24sXG4gICAgICAgICAgICBkYXRhVHlwZSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9leHByZXNzaW9uLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RRdWVyeUJ1aWxkZXIsIH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci9zZWxlY3QtcXVlcnktYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBTZWxlY3RRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9zZWxlY3QtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVRhYmxlRXhwcmVzc2lvbk9yTGlzdCwgcGFyc2VUYWJsZSwgfSBmcm9tICcuLi9wYXJzZXIvdGFibGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IFdpdGhTY2hlbWFQbHVnaW4gfSBmcm9tICcuLi9wbHVnaW4vd2l0aC1zY2hlbWEvd2l0aC1zY2hlbWEtcGx1Z2luLmpzJztcbmltcG9ydCB7IGNyZWF0ZVF1ZXJ5SWQgfSBmcm9tICcuLi91dGlsL3F1ZXJ5LWlkLmpzJztcbmltcG9ydCB7IGNyZWF0ZUZ1bmN0aW9uTW9kdWxlLCB9IGZyb20gJy4uL3F1ZXJ5LWJ1aWxkZXIvZnVuY3Rpb24tbW9kdWxlLmpzJztcbmltcG9ydCB7IHBhcnNlSlNPTlJlZmVyZW5jZSwgcGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uLCBwYXJzZVN0cmluZ1JlZmVyZW5jZSwgfSBmcm9tICcuLi9wYXJzZXIvcmVmZXJlbmNlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUZpbHRlckxpc3QsIHBhcnNlRmlsdGVyT2JqZWN0LCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uLCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uLCB9IGZyb20gJy4uL3BhcnNlci9iaW5hcnktb3BlcmF0aW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBQYXJlbnNOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcGFyZW5zLW5vZGUuanMnO1xuaW1wb3J0IHsgRXhwcmVzc2lvbldyYXBwZXIgfSBmcm9tICcuL2V4cHJlc3Npb24td3JhcHBlci5qcyc7XG5pbXBvcnQgeyBPcGVyYXRvck5vZGUsIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0b3Itbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVVuYXJ5T3BlcmF0aW9uIH0gZnJvbSAnLi4vcGFyc2VyL3VuYXJ5LW9wZXJhdGlvbi1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VTYWZlSW1tZWRpYXRlVmFsdWUsIHBhcnNlVmFsdWVFeHByZXNzaW9uLCB9IGZyb20gJy4uL3BhcnNlci92YWx1ZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgTk9PUF9RVUVSWV9FWEVDVVRPUiB9IGZyb20gJy4uL3F1ZXJ5LWV4ZWN1dG9yL25vb3AtcXVlcnktZXhlY3V0b3IuanMnO1xuaW1wb3J0IHsgQ2FzZUJ1aWxkZXIgfSBmcm9tICcuLi9xdWVyeS1idWlsZGVyL2Nhc2UtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBDYXNlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2Nhc2Utbm9kZS5qcyc7XG5pbXBvcnQgeyBpc1JlYWRvbmx5QXJyYXksIGlzVW5kZWZpbmVkIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgSlNPTlBhdGhCdWlsZGVyIH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci9qc29uLXBhdGgtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBCaW5hcnlPcGVyYXRpb25Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYmluYXJ5LW9wZXJhdGlvbi1ub2RlLmpzJztcbmltcG9ydCB7IEFuZE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hbmQtbm9kZS5qcyc7XG5pbXBvcnQgeyBUdXBsZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS90dXBsZS1ub2RlLmpzJztcbmltcG9ydCB7IEpTT05QYXRoTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2pzb24tcGF0aC1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlRGF0YVR5cGVFeHByZXNzaW9uLCB9IGZyb20gJy4uL3BhcnNlci9kYXRhLXR5cGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IENhc3ROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY2FzdC1ub2RlLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFeHByZXNzaW9uQnVpbGRlcihleGVjdXRvciA9IE5PT1BfUVVFUllfRVhFQ1VUT1IpIHtcbiAgICBmdW5jdGlvbiBiaW5hcnkobGhzLCBvcCwgcmhzKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIocGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbihsaHMsIG9wLCByaHMpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW5hcnkob3AsIGV4cHIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihwYXJzZVVuYXJ5T3BlcmF0aW9uKG9wLCBleHByKSk7XG4gICAgfVxuICAgIGNvbnN0IGViID0gT2JqZWN0LmFzc2lnbihiaW5hcnksIHtcbiAgICAgICAgZm46IHVuZGVmaW5lZCxcbiAgICAgICAgZWI6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VsZWN0RnJvbSh0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVNlbGVjdFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgICAgIGV4ZWN1dG9yLFxuICAgICAgICAgICAgICAgIHF1ZXJ5Tm9kZTogU2VsZWN0UXVlcnlOb2RlLmNyZWF0ZUZyb20ocGFyc2VUYWJsZUV4cHJlc3Npb25Pckxpc3QodGFibGUpKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBjYXNlKHJlZmVyZW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDYXNlQnVpbGRlcih7XG4gICAgICAgICAgICAgICAgbm9kZTogQ2FzZU5vZGUuY3JlYXRlKGlzVW5kZWZpbmVkKHJlZmVyZW5jZSlcbiAgICAgICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgOiBwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb24ocmVmZXJlbmNlKSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVmKHJlZmVyZW5jZSwgb3ApIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChvcCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKHBhcnNlU3RyaW5nUmVmZXJlbmNlKHJlZmVyZW5jZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBKU09OUGF0aEJ1aWxkZXIocGFyc2VKU09OUmVmZXJlbmNlKHJlZmVyZW5jZSwgb3ApKTtcbiAgICAgICAgfSxcbiAgICAgICAganNvblBhdGgoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEpTT05QYXRoQnVpbGRlcihKU09OUGF0aE5vZGUuY3JlYXRlKCkpO1xuICAgICAgICB9LFxuICAgICAgICB0YWJsZSh0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihwYXJzZVRhYmxlKHRhYmxlKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbCh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihwYXJzZVZhbHVlRXhwcmVzc2lvbih2YWx1ZSkpO1xuICAgICAgICB9LFxuICAgICAgICByZWZUdXBsZSguLi52YWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIoVHVwbGVOb2RlLmNyZWF0ZSh2YWx1ZXMubWFwKHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbikpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHVwbGUoLi4udmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKFR1cGxlTm9kZS5jcmVhdGUodmFsdWVzLm1hcChwYXJzZVZhbHVlRXhwcmVzc2lvbikpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbGl0KHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKHBhcnNlU2FmZUltbWVkaWF0ZVZhbHVlKHZhbHVlKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHVuYXJ5LFxuICAgICAgICBub3QoZXhwcikge1xuICAgICAgICAgICAgcmV0dXJuIHVuYXJ5KCdub3QnLCBleHByKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXhpc3RzKGV4cHIpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmFyeSgnZXhpc3RzJywgZXhwcik7XG4gICAgICAgIH0sXG4gICAgICAgIG5lZyhleHByKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5hcnkoJy0nLCBleHByKTtcbiAgICAgICAgfSxcbiAgICAgICAgYmV0d2VlbihleHByLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKEJpbmFyeU9wZXJhdGlvbk5vZGUuY3JlYXRlKHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbihleHByKSwgT3BlcmF0b3JOb2RlLmNyZWF0ZSgnYmV0d2VlbicpLCBBbmROb2RlLmNyZWF0ZShwYXJzZVZhbHVlRXhwcmVzc2lvbihzdGFydCksIHBhcnNlVmFsdWVFeHByZXNzaW9uKGVuZCkpKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGJldHdlZW5TeW1tZXRyaWMoZXhwciwgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihCaW5hcnlPcGVyYXRpb25Ob2RlLmNyZWF0ZShwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb24oZXhwciksIE9wZXJhdG9yTm9kZS5jcmVhdGUoJ2JldHdlZW4gc3ltbWV0cmljJyksIEFuZE5vZGUuY3JlYXRlKHBhcnNlVmFsdWVFeHByZXNzaW9uKHN0YXJ0KSwgcGFyc2VWYWx1ZUV4cHJlc3Npb24oZW5kKSkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgYW5kKGV4cHJzKSB7XG4gICAgICAgICAgICBpZiAoaXNSZWFkb25seUFycmF5KGV4cHJzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIocGFyc2VGaWx0ZXJMaXN0KGV4cHJzLCAnYW5kJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihwYXJzZUZpbHRlck9iamVjdChleHBycywgJ2FuZCcpKTtcbiAgICAgICAgfSxcbiAgICAgICAgb3IoZXhwcnMpIHtcbiAgICAgICAgICAgIGlmIChpc1JlYWRvbmx5QXJyYXkoZXhwcnMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihwYXJzZUZpbHRlckxpc3QoZXhwcnMsICdvcicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIocGFyc2VGaWx0ZXJPYmplY3QoZXhwcnMsICdvcicpKTtcbiAgICAgICAgfSxcbiAgICAgICAgcGFyZW5zKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uKGFyZ3MpO1xuICAgICAgICAgICAgaWYgKFBhcmVuc05vZGUuaXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBObyBkb3VibGUgd3JhcHBpbmcuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIoUGFyZW5zTm9kZS5jcmVhdGUobm9kZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYXN0KGV4cHIsIGRhdGFUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKENhc3ROb2RlLmNyZWF0ZShwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb24oZXhwciksIHBhcnNlRGF0YVR5cGVFeHByZXNzaW9uKGRhdGFUeXBlKSkpO1xuICAgICAgICB9LFxuICAgICAgICB3aXRoU2NoZW1hKHNjaGVtYSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUV4cHJlc3Npb25CdWlsZGVyKGV4ZWN1dG9yLndpdGhQbHVnaW5BdEZyb250KG5ldyBXaXRoU2NoZW1hUGx1Z2luKHNjaGVtYSkpKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICBlYi5mbiA9IGNyZWF0ZUZ1bmN0aW9uTW9kdWxlKCk7XG4gICAgZWIuZWIgPSBlYjtcbiAgICByZXR1cm4gZWI7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkJ1aWxkZXIoXykge1xuICAgIHJldHVybiBjcmVhdGVFeHByZXNzaW9uQnVpbGRlcigpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9leHByZXNzaW9uLXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IGlzQWxpYXNlZEV4cHJlc3Npb24sIGlzRXhwcmVzc2lvbiwgfSBmcm9tICcuLi9leHByZXNzaW9uL2V4cHJlc3Npb24uanMnO1xuaW1wb3J0IHsgaXNPcGVyYXRpb25Ob2RlU291cmNlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmltcG9ydCB7IGV4cHJlc3Npb25CdWlsZGVyLCB9IGZyb20gJy4uL2V4cHJlc3Npb24vZXhwcmVzc2lvbi1idWlsZGVyLmpzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKGV4cCkge1xuICAgIGlmIChpc09wZXJhdGlvbk5vZGVTb3VyY2UoZXhwKSkge1xuICAgICAgICByZXR1cm4gZXhwLnRvT3BlcmF0aW9uTm9kZSgpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKGV4cCkpIHtcbiAgICAgICAgcmV0dXJuIGV4cChleHByZXNzaW9uQnVpbGRlcigpKS50b09wZXJhdGlvbk5vZGUoKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGV4cHJlc3Npb246ICR7SlNPTi5zdHJpbmdpZnkoZXhwKX1gKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFsaWFzZWRFeHByZXNzaW9uKGV4cCkge1xuICAgIGlmIChpc09wZXJhdGlvbk5vZGVTb3VyY2UoZXhwKSkge1xuICAgICAgICByZXR1cm4gZXhwLnRvT3BlcmF0aW9uTm9kZSgpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0Z1bmN0aW9uKGV4cCkpIHtcbiAgICAgICAgcmV0dXJuIGV4cChleHByZXNzaW9uQnVpbGRlcigpKS50b09wZXJhdGlvbk5vZGUoKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFsaWFzZWQgZXhwcmVzc2lvbjogJHtKU09OLnN0cmluZ2lmeShleHApfWApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRXhwcmVzc2lvbk9yRmFjdG9yeShvYmopIHtcbiAgICByZXR1cm4gaXNFeHByZXNzaW9uKG9iaikgfHwgaXNBbGlhc2VkRXhwcmVzc2lvbihvYmopIHx8IGlzRnVuY3Rpb24ob2JqKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZHluYW1pYy10YWJsZS1idWlsZGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgQWxpYXNOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWxpYXMtbm9kZS5qcyc7XG5pbXBvcnQgeyBJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2lkZW50aWZpZXItbm9kZS5qcyc7XG5pbXBvcnQgeyBpc09wZXJhdGlvbk5vZGVTb3VyY2UsIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmltcG9ydCB7IHBhcnNlVGFibGUgfSBmcm9tICcuLi9wYXJzZXIvdGFibGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBEeW5hbWljVGFibGVCdWlsZGVyIHtcbiAgICAjdGFibGU7XG4gICAgZ2V0IHRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jdGFibGU7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHRhYmxlKSB7XG4gICAgICAgIHRoaXMuI3RhYmxlID0gdGFibGU7XG4gICAgfVxuICAgIGFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxpYXNlZER5bmFtaWNUYWJsZUJ1aWxkZXIodGhpcy4jdGFibGUsIGFsaWFzKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQWxpYXNlZER5bmFtaWNUYWJsZUJ1aWxkZXIge1xuICAgICN0YWJsZTtcbiAgICAjYWxpYXM7XG4gICAgZ2V0IHRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jdGFibGU7XG4gICAgfVxuICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2FsaWFzO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih0YWJsZSwgYWxpYXMpIHtcbiAgICAgICAgdGhpcy4jdGFibGUgPSB0YWJsZTtcbiAgICAgICAgdGhpcy4jYWxpYXMgPSBhbGlhcztcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gQWxpYXNOb2RlLmNyZWF0ZShwYXJzZVRhYmxlKHRoaXMuI3RhYmxlKSwgSWRlbnRpZmllck5vZGUuY3JlYXRlKHRoaXMuI2FsaWFzKSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQWxpYXNlZER5bmFtaWNUYWJsZUJ1aWxkZXIob2JqKSB7XG4gICAgcmV0dXJuIChpc09iamVjdChvYmopICYmXG4gICAgICAgIGlzT3BlcmF0aW9uTm9kZVNvdXJjZShvYmopICYmXG4gICAgICAgIGlzU3RyaW5nKG9iai50YWJsZSkgJiZcbiAgICAgICAgaXNTdHJpbmcob2JqLmFsaWFzKSk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3RhYmxlLXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IGlzUmVhZG9ubHlBcnJheSwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBBbGlhc05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hbGlhcy1ub2RlLmpzJztcbmltcG9ydCB7IFRhYmxlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3RhYmxlLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VBbGlhc2VkRXhwcmVzc2lvbiwgfSBmcm9tICcuL2V4cHJlc3Npb24tcGFyc2VyLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IGlzQWxpYXNlZER5bmFtaWNUYWJsZUJ1aWxkZXIsIH0gZnJvbSAnLi4vZHluYW1pYy9keW5hbWljLXRhYmxlLWJ1aWxkZXIuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGFibGVFeHByZXNzaW9uT3JMaXN0KHRhYmxlKSB7XG4gICAgaWYgKGlzUmVhZG9ubHlBcnJheSh0YWJsZSkpIHtcbiAgICAgICAgcmV0dXJuIHRhYmxlLm1hcCgoaXQpID0+IHBhcnNlVGFibGVFeHByZXNzaW9uKGl0KSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gW3BhcnNlVGFibGVFeHByZXNzaW9uKHRhYmxlKV07XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGFibGVFeHByZXNzaW9uKHRhYmxlKSB7XG4gICAgaWYgKGlzU3RyaW5nKHRhYmxlKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VBbGlhc2VkVGFibGUodGFibGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0FsaWFzZWREeW5hbWljVGFibGVCdWlsZGVyKHRhYmxlKSkge1xuICAgICAgICByZXR1cm4gdGFibGUudG9PcGVyYXRpb25Ob2RlKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VBbGlhc2VkRXhwcmVzc2lvbih0YWJsZSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQWxpYXNlZFRhYmxlKGZyb20pIHtcbiAgICBjb25zdCBBTElBU19TRVBBUkFUT1IgPSAnIGFzICc7XG4gICAgaWYgKGZyb20uaW5jbHVkZXMoQUxJQVNfU0VQQVJBVE9SKSkge1xuICAgICAgICBjb25zdCBbdGFibGUsIGFsaWFzXSA9IGZyb20uc3BsaXQoQUxJQVNfU0VQQVJBVE9SKS5tYXAodHJpbSk7XG4gICAgICAgIHJldHVybiBBbGlhc05vZGUuY3JlYXRlKHBhcnNlVGFibGUodGFibGUpLCBJZGVudGlmaWVyTm9kZS5jcmVhdGUoYWxpYXMpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBwYXJzZVRhYmxlKGZyb20pO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRhYmxlKGZyb20pIHtcbiAgICBjb25zdCBTQ0hFTUFfU0VQQVJBVE9SID0gJy4nO1xuICAgIGlmIChmcm9tLmluY2x1ZGVzKFNDSEVNQV9TRVBBUkFUT1IpKSB7XG4gICAgICAgIGNvbnN0IFtzY2hlbWEsIHRhYmxlXSA9IGZyb20uc3BsaXQoU0NIRU1BX1NFUEFSQVRPUikubWFwKHRyaW0pO1xuICAgICAgICByZXR1cm4gVGFibGVOb2RlLmNyZWF0ZVdpdGhTY2hlbWEoc2NoZW1hLCB0YWJsZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gVGFibGVOb2RlLmNyZWF0ZShmcm9tKTtcbiAgICB9XG59XG5mdW5jdGlvbiB0cmltKHN0cikge1xuICAgIHJldHVybiBzdHIudHJpbSgpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9hZGQtY29sdW1uLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQWRkQ29sdW1uTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnQWRkQ29sdW1uTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0FkZENvbHVtbk5vZGUnLFxuICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NvbHVtbi1kZWZpbml0aW9uLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBDb2x1bW5Ob2RlIH0gZnJvbSAnLi9jb2x1bW4tbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ29sdW1uRGVmaW5pdGlvbk5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0NvbHVtbkRlZmluaXRpb25Ob2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShjb2x1bW4sIGRhdGFUeXBlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0NvbHVtbkRlZmluaXRpb25Ob2RlJyxcbiAgICAgICAgICAgIGNvbHVtbjogQ29sdW1uTm9kZS5jcmVhdGUoY29sdW1uKSxcbiAgICAgICAgICAgIGRhdGFUeXBlLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aEZyb250TW9kaWZpZXIobm9kZSwgbW9kaWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgZnJvbnRNb2RpZmllcnM6IG5vZGUuZnJvbnRNb2RpZmllcnNcbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbLi4ubm9kZS5mcm9udE1vZGlmaWVycywgbW9kaWZpZXJdKVxuICAgICAgICAgICAgICAgIDogW21vZGlmaWVyXSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhFbmRNb2RpZmllcihub2RlLCBtb2RpZmllcikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICBlbmRNb2RpZmllcnM6IG5vZGUuZW5kTW9kaWZpZXJzXG4gICAgICAgICAgICAgICAgPyBmcmVlemUoWy4uLm5vZGUuZW5kTW9kaWZpZXJzLCBtb2RpZmllcl0pXG4gICAgICAgICAgICAgICAgOiBbbW9kaWZpZXJdLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aChub2RlLCBwcm9wcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kcm9wLWNvbHVtbi1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ29sdW1uTm9kZSB9IGZyb20gJy4vY29sdW1uLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IERyb3BDb2x1bW5Ob2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdEcm9wQ29sdW1uTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0Ryb3BDb2x1bW5Ob2RlJyxcbiAgICAgICAgICAgIGNvbHVtbjogQ29sdW1uTm9kZS5jcmVhdGUoY29sdW1uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9yZW5hbWUtY29sdW1uLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBDb2x1bW5Ob2RlIH0gZnJvbSAnLi9jb2x1bW4tbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUmVuYW1lQ29sdW1uTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnUmVuYW1lQ29sdW1uTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoY29sdW1uLCBuZXdDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnUmVuYW1lQ29sdW1uTm9kZScsXG4gICAgICAgICAgICBjb2x1bW46IENvbHVtbk5vZGUuY3JlYXRlKGNvbHVtbiksXG4gICAgICAgICAgICByZW5hbWVUbzogQ29sdW1uTm9kZS5jcmVhdGUobmV3Q29sdW1uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jaGVjay1jb25zdHJhaW50LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4vaWRlbnRpZmllci1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDaGVja0NvbnN0cmFpbnROb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdDaGVja0NvbnN0cmFpbnROb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShleHByZXNzaW9uLCBjb25zdHJhaW50TmFtZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDaGVja0NvbnN0cmFpbnROb2RlJyxcbiAgICAgICAgICAgIGV4cHJlc3Npb24sXG4gICAgICAgICAgICBuYW1lOiBjb25zdHJhaW50TmFtZSA/IElkZW50aWZpZXJOb2RlLmNyZWF0ZShjb25zdHJhaW50TmFtZSkgOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcmVmZXJlbmNlcy1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNvbnN0IE9OX01PRElGWV9GT1JFSUdOX0FDVElPTlMgPSBbXG4gICAgJ25vIGFjdGlvbicsXG4gICAgJ3Jlc3RyaWN0JyxcbiAgICAnY2FzY2FkZScsXG4gICAgJ3NldCBudWxsJyxcbiAgICAnc2V0IGRlZmF1bHQnLFxuXTtcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBSZWZlcmVuY2VzTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnUmVmZXJlbmNlc05vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHRhYmxlLCBjb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1JlZmVyZW5jZXNOb2RlJyxcbiAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgY29sdW1uczogZnJlZXplKFsuLi5jb2x1bW5zXSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoT25EZWxldGUocmVmZXJlbmNlcywgb25EZWxldGUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5yZWZlcmVuY2VzLFxuICAgICAgICAgICAgb25EZWxldGUsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoT25VcGRhdGUocmVmZXJlbmNlcywgb25VcGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5yZWZlcmVuY2VzLFxuICAgICAgICAgICAgb25VcGRhdGUsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZGVmYXVsdC12YWx1ZS1wYXJzZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBpc09wZXJhdGlvbk5vZGVTb3VyY2UgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vcGVyYXRpb24tbm9kZS1zb3VyY2UuanMnO1xuaW1wb3J0IHsgVmFsdWVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvdmFsdWUtbm9kZS5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEZWZhdWx0VmFsdWVFeHByZXNzaW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzT3BlcmF0aW9uTm9kZVNvdXJjZSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS50b09wZXJhdGlvbk5vZGUoKVxuICAgICAgICA6IFZhbHVlTm9kZS5jcmVhdGVJbW1lZGlhdGUodmFsdWUpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9nZW5lcmF0ZWQtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5lcmF0ZWROb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdHZW5lcmF0ZWROb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnR2VuZXJhdGVkTm9kZScsXG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY3JlYXRlV2l0aEV4cHJlc3Npb24oZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdHZW5lcmF0ZWROb2RlJyxcbiAgICAgICAgICAgIGFsd2F5czogdHJ1ZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb24sXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoKG5vZGUsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZGVmYXVsdC12YWx1ZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRWYWx1ZU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0RlZmF1bHRWYWx1ZU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdEZWZhdWx0VmFsdWVOb2RlJyxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vbi1tb2RpZnktYWN0aW9uLXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IE9OX01PRElGWV9GT1JFSUdOX0FDVElPTlMsIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcmVmZXJlbmNlcy1ub2RlLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9uTW9kaWZ5Rm9yZWlnbkFjdGlvbihhY3Rpb24pIHtcbiAgICBpZiAoT05fTU9ESUZZX0ZPUkVJR05fQUNUSU9OUy5pbmNsdWRlcyhhY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBhY3Rpb247XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBPbk1vZGlmeUZvcmVpZ25BY3Rpb24gJHthY3Rpb259YCk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NvbHVtbi1kZWZpbml0aW9uLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBDaGVja0NvbnN0cmFpbnROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY2hlY2stY29uc3RyYWludC1ub2RlLmpzJztcbmltcG9ydCB7IFJlZmVyZW5jZXNOb2RlLCB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3JlZmVyZW5jZXMtbm9kZS5qcyc7XG5pbXBvcnQgeyBTZWxlY3RBbGxOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvc2VsZWN0LWFsbC1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlU3RyaW5nUmVmZXJlbmNlIH0gZnJvbSAnLi4vcGFyc2VyL3JlZmVyZW5jZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgQ29sdW1uRGVmaW5pdGlvbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jb2x1bW4tZGVmaW5pdGlvbi1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlRGVmYXVsdFZhbHVlRXhwcmVzc2lvbiwgfSBmcm9tICcuLi9wYXJzZXIvZGVmYXVsdC12YWx1ZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgR2VuZXJhdGVkTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2dlbmVyYXRlZC1ub2RlLmpzJztcbmltcG9ydCB7IERlZmF1bHRWYWx1ZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9kZWZhdWx0LXZhbHVlLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VPbk1vZGlmeUZvcmVpZ25BY3Rpb24gfSBmcm9tICcuLi9wYXJzZXIvb24tbW9kaWZ5LWFjdGlvbi1wYXJzZXIuanMnO1xuZXhwb3J0IGNsYXNzIENvbHVtbkRlZmluaXRpb25CdWlsZGVyIHtcbiAgICAjbm9kZTtcbiAgICBjb25zdHJ1Y3Rvcihub2RlKSB7XG4gICAgICAgIHRoaXMuI25vZGUgPSBub2RlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGBhdXRvX2luY3JlbWVudGAgb3IgYGF1dG9pbmNyZW1lbnRgIHRvIHRoZSBjb2x1bW4gZGVmaW5pdGlvblxuICAgICAqIGRlcGVuZGluZyBvbiB0aGUgZGlhbGVjdC5cbiAgICAgKlxuICAgICAqIFNvbWUgZGlhbGVjdHMgbGlrZSBQb3N0Z3JlU1FMIGRvbid0IHN1cHBvcnQgdGhpcy4gT24gUG9zdGdyZVNRTFxuICAgICAqIHlvdSBjYW4gdXNlIHRoZSBgc2VyaWFsYCBvciBgYmlnc2VyaWFsYCBkYXRhIHR5cGUgaW5zdGVhZC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2lkJywgJ2ludGVnZXInLCBjb2wgPT4gY29sLmF1dG9JbmNyZW1lbnQoKS5wcmltYXJ5S2V5KCkpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogY3JlYXRlIHRhYmxlIGBwZXJzb25gIChcbiAgICAgKiAgIGBpZGAgaW50ZWdlciBwcmltYXJ5IGtleSBhdXRvX2luY3JlbWVudFxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhdXRvSW5jcmVtZW50KCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7IGF1dG9JbmNyZW1lbnQ6IHRydWUgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYWtlcyB0aGUgY29sdW1uIGFuIGlkZW50aXR5IGNvbHVtbi5cbiAgICAgKlxuICAgICAqIFRoaXMgb25seSB3b3JrcyBvbiBzb21lIGRpYWxlY3RzIGxpa2UgTVMgU1FMIFNlcnZlciAoTVNTUUwpLlxuICAgICAqXG4gICAgICogRm9yIFBvc3RncmVTUUwncyBgZ2VuZXJhdGVkIGFsd2F5cyBhcyBpZGVudGl0eWAgdXNlIHtAbGluayBnZW5lcmF0ZWRBbHdheXNBc0lkZW50aXR5fS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2lkJywgJ2ludGVnZXInLCBjb2wgPT4gY29sLmlkZW50aXR5KCkucHJpbWFyeUtleSgpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE1TU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSB0YWJsZSBcInBlcnNvblwiIChcbiAgICAgKiAgIFwiaWRcIiBpbnRlZ2VyIGlkZW50aXR5IHByaW1hcnkga2V5XG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGlkZW50aXR5KCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7IGlkZW50aXR5OiB0cnVlIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFrZXMgdGhlIGNvbHVtbiB0aGUgcHJpbWFyeSBrZXkuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBzcGVjaWZ5IGEgY29tcG9zaXRlIHByaW1hcnkga2V5IHVzZSB0aGVcbiAgICAgKiB7QGxpbmsgQ3JlYXRlVGFibGVCdWlsZGVyLmFkZFByaW1hcnlLZXlDb25zdHJhaW50fSBtZXRob2QuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkQ29sdW1uKCdpZCcsICdpbnRlZ2VyJywgY29sID0+IGNvbC5wcmltYXJ5S2V5KCkpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogY3JlYXRlIHRhYmxlIGBwZXJzb25gIChcbiAgICAgKiAgIGBpZGAgaW50ZWdlciBwcmltYXJ5IGtleVxuICAgICAqIClcbiAgICAgKi9cbiAgICBwcmltYXJ5S2V5KCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7IHByaW1hcnlLZXk6IHRydWUgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgZm9yZWlnbiBrZXkgY29uc3RyYWludCBmb3IgdGhlIGNvbHVtbi5cbiAgICAgKlxuICAgICAqIElmIHlvdXIgZGF0YWJhc2UgZW5naW5lIGRvZXNuJ3Qgc3VwcG9ydCBmb3JlaWduIGtleSBjb25zdHJhaW50cyBpbiB0aGVcbiAgICAgKiBjb2x1bW4gZGVmaW5pdGlvbiAobGlrZSBNeVNRTCA1KSB5b3UgbmVlZCB0byBjYWxsIHRoZSB0YWJsZSBsZXZlbFxuICAgICAqIHtAbGluayBDcmVhdGVUYWJsZUJ1aWxkZXIuYWRkRm9yZWlnbktleUNvbnN0cmFpbnR9IG1ldGhvZCBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXQnKVxuICAgICAqICAgLmFkZENvbHVtbignb3duZXJfaWQnLCAnaW50ZWdlcicsIChjb2wpID0+IGNvbC5yZWZlcmVuY2VzKCdwZXJzb24uaWQnKSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSB0YWJsZSBcInBldFwiIChcbiAgICAgKiAgIFwib3duZXJfaWRcIiBpbnRlZ2VyIHJlZmVyZW5jZXMgXCJwZXJzb25cIiAoXCJpZFwiKVxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZWZlcmVuY2VzKHJlZikge1xuICAgICAgICBjb25zdCByZWZlcmVuY2VzID0gcGFyc2VTdHJpbmdSZWZlcmVuY2UocmVmKTtcbiAgICAgICAgaWYgKCFyZWZlcmVuY2VzLnRhYmxlIHx8IFNlbGVjdEFsbE5vZGUuaXMocmVmZXJlbmNlcy5jb2x1bW4pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgY2FsbCByZWZlcmVuY2VzKCcke3JlZn0nKS4gVGhlIHJlZmVyZW5jZSBtdXN0IGhhdmUgZm9ybWF0IHRhYmxlLmNvbHVtbiBvciBzY2hlbWEudGFibGUuY29sdW1uYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwge1xuICAgICAgICAgICAgcmVmZXJlbmNlczogUmVmZXJlbmNlc05vZGUuY3JlYXRlKHJlZmVyZW5jZXMudGFibGUsIFtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VzLmNvbHVtbixcbiAgICAgICAgICAgIF0pLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gYG9uIGRlbGV0ZWAgY29uc3RyYWludCBmb3IgdGhlIGZvcmVpZ24ga2V5IGNvbHVtbi5cbiAgICAgKlxuICAgICAqIElmIHlvdXIgZGF0YWJhc2UgZW5naW5lIGRvZXNuJ3Qgc3VwcG9ydCBmb3JlaWduIGtleSBjb25zdHJhaW50cyBpbiB0aGVcbiAgICAgKiBjb2x1bW4gZGVmaW5pdGlvbiAobGlrZSBNeVNRTCA1KSB5b3UgbmVlZCB0byBjYWxsIHRoZSB0YWJsZSBsZXZlbFxuICAgICAqIHtAbGluayBDcmVhdGVUYWJsZUJ1aWxkZXIuYWRkRm9yZWlnbktleUNvbnN0cmFpbnR9IG1ldGhvZCBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXQnKVxuICAgICAqICAgLmFkZENvbHVtbihcbiAgICAgKiAgICAgJ293bmVyX2lkJyxcbiAgICAgKiAgICAgJ2ludGVnZXInLFxuICAgICAqICAgICAoY29sKSA9PiBjb2wucmVmZXJlbmNlcygncGVyc29uLmlkJykub25EZWxldGUoJ2Nhc2NhZGUnKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogY3JlYXRlIHRhYmxlIFwicGV0XCIgKFxuICAgICAqICAgXCJvd25lcl9pZFwiIGludGVnZXIgcmVmZXJlbmNlcyBcInBlcnNvblwiIChcImlkXCIpIG9uIGRlbGV0ZSBjYXNjYWRlXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG9uRGVsZXRlKG9uRGVsZXRlKSB7XG4gICAgICAgIGlmICghdGhpcy4jbm9kZS5yZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29uIGRlbGV0ZSBjb25zdHJhaW50IGNhbiBvbmx5IGJlIGFkZGVkIGZvciBmb3JlaWduIGtleXMnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7XG4gICAgICAgICAgICByZWZlcmVuY2VzOiBSZWZlcmVuY2VzTm9kZS5jbG9uZVdpdGhPbkRlbGV0ZSh0aGlzLiNub2RlLnJlZmVyZW5jZXMsIHBhcnNlT25Nb2RpZnlGb3JlaWduQWN0aW9uKG9uRGVsZXRlKSksXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhbiBgb24gdXBkYXRlYCBjb25zdHJhaW50IGZvciB0aGUgZm9yZWlnbiBrZXkgY29sdW1uLlxuICAgICAqXG4gICAgICogSWYgeW91ciBkYXRhYmFzZSBlbmdpbmUgZG9lc24ndCBzdXBwb3J0IGZvcmVpZ24ga2V5IGNvbnN0cmFpbnRzIGluIHRoZVxuICAgICAqIGNvbHVtbiBkZWZpbml0aW9uIChsaWtlIE15U1FMIDUpIHlvdSBuZWVkIHRvIGNhbGwgdGhlIHRhYmxlIGxldmVsXG4gICAgICoge0BsaW5rIENyZWF0ZVRhYmxlQnVpbGRlci5hZGRGb3JlaWduS2V5Q29uc3RyYWludH0gbWV0aG9kIGluc3RlYWQuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BldCcpXG4gICAgICogICAuYWRkQ29sdW1uKFxuICAgICAqICAgICAnb3duZXJfaWQnLFxuICAgICAqICAgICAnaW50ZWdlcicsXG4gICAgICogICAgIChjb2wpID0+IGNvbC5yZWZlcmVuY2VzKCdwZXJzb24uaWQnKS5vblVwZGF0ZSgnY2FzY2FkZScpXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGFibGUgXCJwZXRcIiAoXG4gICAgICogICBcIm93bmVyX2lkXCIgaW50ZWdlciByZWZlcmVuY2VzIFwicGVyc29uXCIgKFwiaWRcIikgb24gdXBkYXRlIGNhc2NhZGVcbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICovXG4gICAgb25VcGRhdGUob25VcGRhdGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLiNub2RlLnJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignb24gdXBkYXRlIGNvbnN0cmFpbnQgY2FuIG9ubHkgYmUgYWRkZWQgZm9yIGZvcmVpZ24ga2V5cycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIoQ29sdW1uRGVmaW5pdGlvbk5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHtcbiAgICAgICAgICAgIHJlZmVyZW5jZXM6IFJlZmVyZW5jZXNOb2RlLmNsb25lV2l0aE9uVXBkYXRlKHRoaXMuI25vZGUucmVmZXJlbmNlcywgcGFyc2VPbk1vZGlmeUZvcmVpZ25BY3Rpb24ob25VcGRhdGUpKSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgdW5pcXVlIGNvbnN0cmFpbnQgZm9yIHRoZSBjb2x1bW4uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkQ29sdW1uKCdlbWFpbCcsICd2YXJjaGFyKDI1NSknLCBjb2wgPT4gY29sLnVuaXF1ZSgpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSB0YWJsZSBgcGVyc29uYCAoXG4gICAgICogICBgZW1haWxgIHZhcmNoYXIoMjU1KSB1bmlxdWVcbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdW5pcXVlKCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7IHVuaXF1ZTogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBgbm90IG51bGxgIGNvbnN0cmFpbnQgZm9yIHRoZSBjb2x1bW4uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkQ29sdW1uKCdmaXJzdF9uYW1lJywgJ3ZhcmNoYXIoMjU1KScsIGNvbCA9PiBjb2wubm90TnVsbCgpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSB0YWJsZSBgcGVyc29uYCAoXG4gICAgICogICBgZmlyc3RfbmFtZWAgdmFyY2hhcigyNTUpIG5vdCBudWxsXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG5vdE51bGwoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIoQ29sdW1uRGVmaW5pdGlvbk5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHsgbm90TnVsbDogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBgdW5zaWduZWRgIG1vZGlmaWVyIGZvciB0aGUgY29sdW1uLlxuICAgICAqXG4gICAgICogVGhpcyBvbmx5IHdvcmtzIG9uIHNvbWUgZGlhbGVjdHMgbGlrZSBNeVNRTC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2FnZScsICdpbnRlZ2VyJywgY29sID0+IGNvbC51bnNpZ25lZCgpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSB0YWJsZSBgcGVyc29uYCAoXG4gICAgICogICBgYWdlYCBpbnRlZ2VyIHVuc2lnbmVkXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHVuc2lnbmVkKCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7IHVuc2lnbmVkOiB0cnVlIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGRlZmF1bHQgdmFsdWUgY29uc3RyYWludCBmb3IgdGhlIGNvbHVtbi5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGV0JylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ251bWJlcl9vZl9sZWdzJywgJ2ludGVnZXInLCAoY29sKSA9PiBjb2wuZGVmYXVsdFRvKDQpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSB0YWJsZSBgcGV0YCAoXG4gICAgICogICBgbnVtYmVyX29mX2xlZ3NgIGludGVnZXIgZGVmYXVsdCA0XG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVmFsdWVzIHBhc3NlZCB0byBgZGVmYXVsdFRvYCBhcmUgaW50ZXJwcmV0ZWQgYXMgdmFsdWUgbGl0ZXJhbHMgYnkgZGVmYXVsdC4gWW91IGNhbiBkZWZpbmVcbiAgICAgKiBhbiBhcmJpdHJhcnkgU1FMIGV4cHJlc3Npb24gdXNpbmcgdGhlIHtAbGluayBzcWx9IHRlbXBsYXRlIHRhZzpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHtcdTAwQTBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGV0JylcbiAgICAgKiAgIC5hZGRDb2x1bW4oXG4gICAgICogICAgICdjcmVhdGVkX2F0JyxcbiAgICAgKiAgICAgJ3RpbWVzdGFtcCcsXG4gICAgICogICAgIChjb2wpID0+IGNvbC5kZWZhdWx0VG8oc3FsYENVUlJFTlRfVElNRVNUQU1QYClcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGFibGUgYHBldGAgKFxuICAgICAqICAgYGNyZWF0ZWRfYXRgIHRpbWVzdGFtcCBkZWZhdWx0IENVUlJFTlRfVElNRVNUQU1QXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGRlZmF1bHRUbyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7XG4gICAgICAgICAgICBkZWZhdWx0VG86IERlZmF1bHRWYWx1ZU5vZGUuY3JlYXRlKHBhcnNlRGVmYXVsdFZhbHVlRXhwcmVzc2lvbih2YWx1ZSkpLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjaGVjayBjb25zdHJhaW50IGZvciB0aGUgY29sdW1uLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7XHUwMEEwc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BldCcpXG4gICAgICogICAuYWRkQ29sdW1uKCdudW1iZXJfb2ZfbGVncycsICdpbnRlZ2VyJywgKGNvbCkgPT5cbiAgICAgKiAgICAgY29sLmNoZWNrKHNxbGBudW1iZXJfb2ZfbGVncyA8IDVgKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSB0YWJsZSBgcGV0YCAoXG4gICAgICogICBgbnVtYmVyX29mX2xlZ3NgIGludGVnZXIgY2hlY2sgKG51bWJlcl9vZl9sZWdzIDwgNSlcbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICovXG4gICAgY2hlY2soZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7XG4gICAgICAgICAgICBjaGVjazogQ2hlY2tDb25zdHJhaW50Tm9kZS5jcmVhdGUoZXhwcmVzc2lvbi50b09wZXJhdGlvbk5vZGUoKSksXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFrZXMgdGhlIGNvbHVtbiBhIGdlbmVyYXRlZCBjb2x1bW4gdXNpbmcgYSBgZ2VuZXJhdGVkIGFsd2F5cyBhc2Agc3RhdGVtZW50LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7XHUwMEEwc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkQ29sdW1uKCdmdWxsX25hbWUnLCAndmFyY2hhcigyNTUpJyxcbiAgICAgKiAgICAgKGNvbCkgPT4gY29sLmdlbmVyYXRlZEFsd2F5c0FzKHNxbGBjb25jYXQoZmlyc3RfbmFtZSwgJyAnLCBsYXN0X25hbWUpYClcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGFibGUgYHBlcnNvbmAgKFxuICAgICAqICAgYGZ1bGxfbmFtZWAgdmFyY2hhcigyNTUpIGdlbmVyYXRlZCBhbHdheXMgYXMgKGNvbmNhdChmaXJzdF9uYW1lLCAnICcsIGxhc3RfbmFtZSkpXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdlbmVyYXRlZEFsd2F5c0FzKGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwge1xuICAgICAgICAgICAgZ2VuZXJhdGVkOiBHZW5lcmF0ZWROb2RlLmNyZWF0ZVdpdGhFeHByZXNzaW9uKGV4cHJlc3Npb24udG9PcGVyYXRpb25Ob2RlKCkpLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIGBnZW5lcmF0ZWQgYWx3YXlzIGFzIGlkZW50aXR5YCBzcGVjaWZpZXIuXG4gICAgICpcbiAgICAgKiBUaGlzIG9ubHkgd29ya3Mgb24gc29tZSBkaWFsZWN0cyBsaWtlIFBvc3RncmVTUUwuXG4gICAgICpcbiAgICAgKiBGb3IgTVMgU1FMIFNlcnZlciAoTVNTUUwpJ3MgaWRlbnRpdHkgY29sdW1uIHVzZSB7QGxpbmsgaWRlbnRpdHl9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignaWQnLCAnaW50ZWdlcicsIGNvbCA9PiBjb2wuZ2VuZXJhdGVkQWx3YXlzQXNJZGVudGl0eSgpLnByaW1hcnlLZXkoKSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSB0YWJsZSBcInBlcnNvblwiIChcbiAgICAgKiAgIFwiaWRcIiBpbnRlZ2VyIGdlbmVyYXRlZCBhbHdheXMgYXMgaWRlbnRpdHkgcHJpbWFyeSBrZXlcbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2VuZXJhdGVkQWx3YXlzQXNJZGVudGl0eSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwge1xuICAgICAgICAgICAgZ2VuZXJhdGVkOiBHZW5lcmF0ZWROb2RlLmNyZWF0ZSh7IGlkZW50aXR5OiB0cnVlLCBhbHdheXM6IHRydWUgfSksXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgYGdlbmVyYXRlZCBieSBkZWZhdWx0IGFzIGlkZW50aXR5YCBzcGVjaWZpZXIgb24gc3VwcG9ydGVkIGRpYWxlY3RzLlxuICAgICAqXG4gICAgICogVGhpcyBvbmx5IHdvcmtzIG9uIHNvbWUgZGlhbGVjdHMgbGlrZSBQb3N0Z3JlU1FMLlxuICAgICAqXG4gICAgICogRm9yIE1TIFNRTCBTZXJ2ZXIgKE1TU1FMKSdzIGlkZW50aXR5IGNvbHVtbiB1c2Uge0BsaW5rIGlkZW50aXR5fS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2lkJywgJ2ludGVnZXInLCBjb2wgPT4gY29sLmdlbmVyYXRlZEJ5RGVmYXVsdEFzSWRlbnRpdHkoKS5wcmltYXJ5S2V5KCkpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGFibGUgXCJwZXJzb25cIiAoXG4gICAgICogICBcImlkXCIgaW50ZWdlciBnZW5lcmF0ZWQgYnkgZGVmYXVsdCBhcyBpZGVudGl0eSBwcmltYXJ5IGtleVxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBnZW5lcmF0ZWRCeURlZmF1bHRBc0lkZW50aXR5KCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7XG4gICAgICAgICAgICBnZW5lcmF0ZWQ6IEdlbmVyYXRlZE5vZGUuY3JlYXRlKHsgaWRlbnRpdHk6IHRydWUsIGJ5RGVmYXVsdDogdHJ1ZSB9KSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYWtlcyBhIGdlbmVyYXRlZCBjb2x1bW4gc3RvcmVkIGluc3RlYWQgb2YgdmlydHVhbC4gVGhpcyBtZXRob2QgY2FuIG9ubHlcbiAgICAgKiBiZSB1c2VkIHdpdGgge0BsaW5rIGdlbmVyYXRlZEFsd2F5c0FzfVxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignZnVsbF9uYW1lJywgJ3ZhcmNoYXIoMjU1KScsIChjb2wpID0+IGNvbFxuICAgICAqICAgICAuZ2VuZXJhdGVkQWx3YXlzQXMoc3FsYGNvbmNhdChmaXJzdF9uYW1lLCAnICcsIGxhc3RfbmFtZSlgKVxuICAgICAqICAgICAuc3RvcmVkKClcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGFibGUgYHBlcnNvbmAgKFxuICAgICAqICAgYGZ1bGxfbmFtZWAgdmFyY2hhcigyNTUpIGdlbmVyYXRlZCBhbHdheXMgYXMgKGNvbmNhdChmaXJzdF9uYW1lLCAnICcsIGxhc3RfbmFtZSkpIHN0b3JlZFxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzdG9yZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy4jbm9kZS5nZW5lcmF0ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RvcmVkKCkgY2FuIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGdlbmVyYXRlZEFsd2F5c0FzJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwge1xuICAgICAgICAgICAgZ2VuZXJhdGVkOiBHZW5lcmF0ZWROb2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLmdlbmVyYXRlZCwge1xuICAgICAgICAgICAgICAgIHN0b3JlZDogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWRkIGFueSBhZGRpdGlvbmFsIFNRTCByaWdodCBhZnRlciB0aGUgY29sdW1uJ3MgZGF0YSB0eXBlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignaWQnLCAnaW50ZWdlcicsIGNvbCA9PiBjb2wucHJpbWFyeUtleSgpKVxuICAgICAqICAgLmFkZENvbHVtbihcbiAgICAgKiAgICAgJ2ZpcnN0X25hbWUnLFxuICAgICAqICAgICAndmFyY2hhcigzNiknLFxuICAgICAqICAgICAoY29sKSA9PiBjb2wubW9kaWZ5RnJvbnQoc3FsYGNvbGxhdGUgdXRmOG1iNF9nZW5lcmFsX2NpYCkubm90TnVsbCgpXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogY3JlYXRlIHRhYmxlIGBwZXJzb25gIChcbiAgICAgKiAgIGBpZGAgaW50ZWdlciBwcmltYXJ5IGtleSxcbiAgICAgKiAgIGBmaXJzdF9uYW1lYCB2YXJjaGFyKDM2KSBjb2xsYXRlIHV0ZjhtYjRfZ2VuZXJhbF9jaSBub3QgbnVsbFxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBtb2RpZnlGcm9udChtb2RpZmllcikge1xuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNsb25lV2l0aEZyb250TW9kaWZpZXIodGhpcy4jbm9kZSwgbW9kaWZpZXIudG9PcGVyYXRpb25Ob2RlKCkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBgbnVsbHMgbm90IGRpc3RpbmN0YCBzcGVjaWZpZXIuXG4gICAgICogU2hvdWxkIGJlIHVzZWQgd2l0aCBgdW5pcXVlYCBjb25zdHJhaW50LlxuICAgICAqXG4gICAgICogVGhpcyBvbmx5IHdvcmtzIG9uIHNvbWUgZGlhbGVjdHMgbGlrZSBQb3N0Z3JlU1FMLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignaWQnLCAnaW50ZWdlcicsIGNvbCA9PiBjb2wucHJpbWFyeUtleSgpKVxuICAgICAqICAgLmFkZENvbHVtbignZmlyc3RfbmFtZScsICd2YXJjaGFyKDMwKScsIGNvbCA9PiBjb2wudW5pcXVlKCkubnVsbHNOb3REaXN0aW5jdCgpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogY3JlYXRlIHRhYmxlIFwicGVyc29uXCIgKFxuICAgICAqICAgXCJpZFwiIGludGVnZXIgcHJpbWFyeSBrZXksXG4gICAgICogICBcImZpcnN0X25hbWVcIiB2YXJjaGFyKDMwKSB1bmlxdWUgbnVsbHMgbm90IGRpc3RpbmN0XG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG51bGxzTm90RGlzdGluY3QoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIoQ29sdW1uRGVmaW5pdGlvbk5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHsgbnVsbHNOb3REaXN0aW5jdDogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYGlmIG5vdCBleGlzdHNgIHNwZWNpZmllci4gVGhpcyBvbmx5IHdvcmtzIGZvciBQb3N0Z3JlU1FMLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmFsdGVyVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkQ29sdW1uKCdlbWFpbCcsICd2YXJjaGFyKDI1NSknLCBjb2wgPT4gY29sLnVuaXF1ZSgpLmlmTm90RXhpc3RzKCkpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBhbHRlciB0YWJsZSBcInBlcnNvblwiIGFkZCBjb2x1bW4gaWYgbm90IGV4aXN0cyBcImVtYWlsXCIgdmFyY2hhcigyNTUpIHVuaXF1ZVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGlmTm90RXhpc3RzKCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7IGlmTm90RXhpc3RzOiB0cnVlIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBhZGQgYW55IGFkZGl0aW9uYWwgU1FMIHRvIHRoZSBlbmQgb2YgdGhlIGNvbHVtbiBkZWZpbml0aW9uLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignaWQnLCAnaW50ZWdlcicsIGNvbCA9PiBjb2wucHJpbWFyeUtleSgpKVxuICAgICAqICAgLmFkZENvbHVtbihcbiAgICAgKiAgICAgJ2FnZScsXG4gICAgICogICAgICdpbnRlZ2VyJyxcbiAgICAgKiAgICAgY29sID0+IGNvbC51bnNpZ25lZCgpXG4gICAgICogICAgICAgLm5vdE51bGwoKVxuICAgICAqICAgICAgIC5tb2RpZnlFbmQoc3FsYGNvbW1lbnQgJHtzcWwubGl0KCdpdCBpcyBub3QgcG9saXRlIHRvIGFzayBhIHdvbWFuIGhlciBhZ2UnKX1gKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSB0YWJsZSBgcGVyc29uYCAoXG4gICAgICogICBgaWRgIGludGVnZXIgcHJpbWFyeSBrZXksXG4gICAgICogICBgYWdlYCBpbnRlZ2VyIHVuc2lnbmVkIG5vdCBudWxsIGNvbW1lbnQgJ2l0IGlzIG5vdCBwb2xpdGUgdG8gYXNrIGEgd29tYW4gaGVyIGFnZSdcbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbW9kaWZ5RW5kKG1vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIoQ29sdW1uRGVmaW5pdGlvbk5vZGUuY2xvbmVXaXRoRW5kTW9kaWZpZXIodGhpcy4jbm9kZSwgbW9kaWZpZXIudG9PcGVyYXRpb25Ob2RlKCkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNub2RlO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vbW9kaWZ5LWNvbHVtbi1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE1vZGlmeUNvbHVtbk5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ01vZGlmeUNvbHVtbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdNb2RpZnlDb2x1bW5Ob2RlJyxcbiAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9mb3JlaWduLWtleS1jb25zdHJhaW50LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4vaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IFJlZmVyZW5jZXNOb2RlIH0gZnJvbSAnLi9yZWZlcmVuY2VzLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnRm9yZWlnbktleUNvbnN0cmFpbnROb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShzb3VyY2VDb2x1bW5zLCB0YXJnZXRUYWJsZSwgdGFyZ2V0Q29sdW1ucywgY29uc3RyYWludE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnRm9yZWlnbktleUNvbnN0cmFpbnROb2RlJyxcbiAgICAgICAgICAgIGNvbHVtbnM6IHNvdXJjZUNvbHVtbnMsXG4gICAgICAgICAgICByZWZlcmVuY2VzOiBSZWZlcmVuY2VzTm9kZS5jcmVhdGUodGFyZ2V0VGFibGUsIHRhcmdldENvbHVtbnMpLFxuICAgICAgICAgICAgbmFtZTogY29uc3RyYWludE5hbWUgPyBJZGVudGlmaWVyTm9kZS5jcmVhdGUoY29uc3RyYWludE5hbWUpIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aChub2RlLCBwcm9wcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9mb3JlaWduLWtleS1jb25zdHJhaW50LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBGb3JlaWduS2V5Q29uc3RyYWludE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9mb3JlaWduLWtleS1jb25zdHJhaW50LW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VPbk1vZGlmeUZvcmVpZ25BY3Rpb24gfSBmcm9tICcuLi9wYXJzZXIvb24tbW9kaWZ5LWFjdGlvbi1wYXJzZXIuanMnO1xuZXhwb3J0IGNsYXNzIEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlciB7XG4gICAgI25vZGU7XG4gICAgY29uc3RydWN0b3Iobm9kZSkge1xuICAgICAgICB0aGlzLiNub2RlID0gbm9kZTtcbiAgICB9XG4gICAgb25EZWxldGUob25EZWxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIoRm9yZWlnbktleUNvbnN0cmFpbnROb2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7XG4gICAgICAgICAgICBvbkRlbGV0ZTogcGFyc2VPbk1vZGlmeUZvcmVpZ25BY3Rpb24ob25EZWxldGUpLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIG9uVXBkYXRlKG9uVXBkYXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyKEZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwge1xuICAgICAgICAgICAgb25VcGRhdGU6IHBhcnNlT25Nb2RpZnlGb3JlaWduQWN0aW9uKG9uVXBkYXRlKSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBkZWZlcnJhYmxlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlcihGb3JlaWduS2V5Q29uc3RyYWludE5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHsgZGVmZXJyYWJsZTogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIG5vdERlZmVycmFibGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyKEZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwgeyBkZWZlcnJhYmxlOiBmYWxzZSB9KSk7XG4gICAgfVxuICAgIGluaXRpYWxseURlZmVycmVkKCkge1xuICAgICAgICByZXR1cm4gbmV3IEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlcihGb3JlaWduS2V5Q29uc3RyYWludE5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHtcbiAgICAgICAgICAgIGluaXRpYWxseURlZmVycmVkOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGluaXRpYWxseUltbWVkaWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIoRm9yZWlnbktleUNvbnN0cmFpbnROb2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7XG4gICAgICAgICAgICBpbml0aWFsbHlEZWZlcnJlZDogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNub2RlO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vYWRkLWNvbnN0cmFpbnQtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBZGRDb25zdHJhaW50Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnQWRkQ29uc3RyYWludE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQWRkQ29uc3RyYWludE5vZGUnLFxuICAgICAgICAgICAgY29uc3RyYWludCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi91bmlxdWUtY29uc3RyYWludC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ29sdW1uTm9kZSB9IGZyb20gJy4vY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL2lkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVW5pcXVlQ29uc3RyYWludE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1VuaXF1ZUNvbnN0cmFpbnROb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShjb2x1bW5zLCBjb25zdHJhaW50TmFtZSwgbnVsbHNOb3REaXN0aW5jdCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdVbmlxdWVDb25zdHJhaW50Tm9kZScsXG4gICAgICAgICAgICBjb2x1bW5zOiBmcmVlemUoY29sdW1ucy5tYXAoQ29sdW1uTm9kZS5jcmVhdGUpKSxcbiAgICAgICAgICAgIG5hbWU6IGNvbnN0cmFpbnROYW1lID8gSWRlbnRpZmllck5vZGUuY3JlYXRlKGNvbnN0cmFpbnROYW1lKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG51bGxzTm90RGlzdGluY3QsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoKG5vZGUsIHByb3BzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Ryb3AtY29uc3RyYWludC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL2lkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgRHJvcENvbnN0cmFpbnROb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdEcm9wQ29uc3RyYWludE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGNvbnN0cmFpbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0Ryb3BDb25zdHJhaW50Tm9kZScsXG4gICAgICAgICAgICBjb25zdHJhaW50TmFtZTogSWRlbnRpZmllck5vZGUuY3JlYXRlKGNvbnN0cmFpbnROYW1lKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGgoZHJvcENvbnN0cmFpbnQsIHByb3BzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uZHJvcENvbnN0cmFpbnQsXG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9hbHRlci1jb2x1bW4tbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IENvbHVtbk5vZGUgfSBmcm9tICcuL2NvbHVtbi1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBbHRlckNvbHVtbk5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0FsdGVyQ29sdW1uTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoY29sdW1uLCBwcm9wLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdBbHRlckNvbHVtbk5vZGUnLFxuICAgICAgICAgICAgY29sdW1uOiBDb2x1bW5Ob2RlLmNyZWF0ZShjb2x1bW4pLFxuICAgICAgICAgICAgW3Byb3BdOiB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9hbHRlci1jb2x1bW4tYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IEFsdGVyQ29sdW1uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2FsdGVyLWNvbHVtbi1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlRGF0YVR5cGVFeHByZXNzaW9uLCB9IGZyb20gJy4uL3BhcnNlci9kYXRhLXR5cGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlRGVmYXVsdFZhbHVlRXhwcmVzc2lvbiwgfSBmcm9tICcuLi9wYXJzZXIvZGVmYXVsdC12YWx1ZS1wYXJzZXIuanMnO1xuZXhwb3J0IGNsYXNzIEFsdGVyQ29sdW1uQnVpbGRlciB7XG4gICAgI2NvbHVtbjtcbiAgICBjb25zdHJ1Y3Rvcihjb2x1bW4pIHtcbiAgICAgICAgdGhpcy4jY29sdW1uID0gY29sdW1uO1xuICAgIH1cbiAgICBzZXREYXRhVHlwZShkYXRhVHlwZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyZWRDb2x1bW5CdWlsZGVyKEFsdGVyQ29sdW1uTm9kZS5jcmVhdGUodGhpcy4jY29sdW1uLCAnZGF0YVR5cGUnLCBwYXJzZURhdGFUeXBlRXhwcmVzc2lvbihkYXRhVHlwZSkpKTtcbiAgICB9XG4gICAgc2V0RGVmYXVsdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyZWRDb2x1bW5CdWlsZGVyKEFsdGVyQ29sdW1uTm9kZS5jcmVhdGUodGhpcy4jY29sdW1uLCAnc2V0RGVmYXVsdCcsIHBhcnNlRGVmYXVsdFZhbHVlRXhwcmVzc2lvbih2YWx1ZSkpKTtcbiAgICB9XG4gICAgZHJvcERlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJlZENvbHVtbkJ1aWxkZXIoQWx0ZXJDb2x1bW5Ob2RlLmNyZWF0ZSh0aGlzLiNjb2x1bW4sICdkcm9wRGVmYXVsdCcsIHRydWUpKTtcbiAgICB9XG4gICAgc2V0Tm90TnVsbCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlcmVkQ29sdW1uQnVpbGRlcihBbHRlckNvbHVtbk5vZGUuY3JlYXRlKHRoaXMuI2NvbHVtbiwgJ3NldE5vdE51bGwnLCB0cnVlKSk7XG4gICAgfVxuICAgIGRyb3BOb3ROdWxsKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyZWRDb2x1bW5CdWlsZGVyKEFsdGVyQ29sdW1uTm9kZS5jcmVhdGUodGhpcy4jY29sdW1uLCAnZHJvcE5vdE51bGwnLCB0cnVlKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG59XG4vKipcbiAqIEFsbG93cyB1cyB0byBmb3JjZSBjb25zdW1lcnMgdG8gZG8gZXhhY3RseSBvbmUgYWx0ZXJhdGlvbiB0byBhIGNvbHVtbi5cbiAqXG4gKiBPbmUgY2Fubm90IGRvIG5vIGFsdGVyYXRpb25zOlxuICpcbiAqIGBgYHRzXG4gKiBhd2FpdCBkYi5zY2hlbWFcbiAqICAgLmFsdGVyVGFibGUoJ3BlcnNvbicpXG4gKiAvLyAgLmV4ZWN1dGUoKSAvLyBQcm9wZXJ0eSAnZXhlY3V0ZScgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAnQWx0ZXJlZENvbHVtbkJ1aWxkZXInLlxuICogYGBgXG4gKlxuICogYGBgdHNcbiAqIGF3YWl0IGRiLnNjaGVtYVxuICogICAuYWx0ZXJUYWJsZSgncGVyc29uJylcbiAqIC8vICAuYWx0ZXJDb2x1bW4oJ2FnZScsIChhYykgPT4gYWMpIC8vIFR5cGUgJ0FsdGVyQ29sdW1uQnVpbGRlcicgaXMgbm90IGFzc2lnbmFibGUgdG8gdHlwZSAnQWx0ZXJlZENvbHVtbkJ1aWxkZXInLlxuICogLy8gIC5leGVjdXRlKClcbiAqIGBgYFxuICpcbiAqIE9uZSBjYW5ub3QgZG8gbXVsdGlwbGUgYWx0ZXJhdGlvbnM6XG4gKlxuICogYGBgdHNcbiAqIGF3YWl0IGRiLnNjaGVtYVxuICogICAuYWx0ZXJUYWJsZSgncGVyc29uJylcbiAqIC8vICAuYWx0ZXJDb2x1bW4oJ2FnZScsIChhYykgPT4gYWMuZHJvcE5vdE51bGwoKS5zZXROb3ROdWxsKCkpIC8vIFByb3BlcnR5ICdzZXROb3ROdWxsJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdBbHRlcmVkQ29sdW1uQnVpbGRlcicuXG4gKiAvLyAgLmV4ZWN1dGUoKVxuICogYGBgXG4gKlxuICogV2hpY2ggd291bGQgbm93IHRocm93IGEgY29tcGlsYXRpb24gZXJyb3IsIGluc3RlYWQgb2YgYSBydW50aW1lIGVycm9yLlxuICovXG5leHBvcnQgY2xhc3MgQWx0ZXJlZENvbHVtbkJ1aWxkZXIge1xuICAgICNhbHRlckNvbHVtbk5vZGU7XG4gICAgY29uc3RydWN0b3IoYWx0ZXJDb2x1bW5Ob2RlKSB7XG4gICAgICAgIHRoaXMuI2FsdGVyQ29sdW1uTm9kZSA9IGFsdGVyQ29sdW1uTm9kZTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYWx0ZXJDb2x1bW5Ob2RlO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vYWx0ZXItdGFibGUtZXhlY3V0b3IuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgY2xhc3MgQWx0ZXJUYWJsZUV4ZWN1dG9yIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5ub2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLnRvT3BlcmF0aW9uTm9kZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KHRoaXMuY29tcGlsZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2FsdGVyLXRhYmxlLWFkZC1mb3JlaWduLWtleS1jb25zdHJhaW50LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBBZGRDb25zdHJhaW50Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2FkZC1jb25zdHJhaW50LW5vZGUuanMnO1xuaW1wb3J0IHsgQWx0ZXJUYWJsZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hbHRlci10YWJsZS1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBBbHRlclRhYmxlQWRkRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBvbkRlbGV0ZShvbkRlbGV0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVBZGRGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBjb25zdHJhaW50QnVpbGRlcjogdGhpcy4jcHJvcHMuY29uc3RyYWludEJ1aWxkZXIub25EZWxldGUob25EZWxldGUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25VcGRhdGUob25VcGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQWRkRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgY29uc3RyYWludEJ1aWxkZXI6IHRoaXMuI3Byb3BzLmNvbnN0cmFpbnRCdWlsZGVyLm9uVXBkYXRlKG9uVXBkYXRlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlZmVycmFibGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUFkZEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRCdWlsZGVyOiB0aGlzLiNwcm9wcy5jb25zdHJhaW50QnVpbGRlci5kZWZlcnJhYmxlKCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub3REZWZlcnJhYmxlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVBZGRGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBjb25zdHJhaW50QnVpbGRlcjogdGhpcy4jcHJvcHMuY29uc3RyYWludEJ1aWxkZXIubm90RGVmZXJyYWJsZSgpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5pdGlhbGx5RGVmZXJyZWQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUFkZEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRCdWlsZGVyOiB0aGlzLiNwcm9wcy5jb25zdHJhaW50QnVpbGRlci5pbml0aWFsbHlEZWZlcnJlZCgpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5pdGlhbGx5SW1tZWRpYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVBZGRGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBjb25zdHJhaW50QnVpbGRlcjogdGhpcy4jcHJvcHMuY29uc3RyYWludEJ1aWxkZXIuaW5pdGlhbGx5SW1tZWRpYXRlKCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aFRhYmxlUHJvcHModGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgYWRkQ29uc3RyYWludDogQWRkQ29uc3RyYWludE5vZGUuY3JlYXRlKHRoaXMuI3Byb3BzLmNvbnN0cmFpbnRCdWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBjb21waWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IuY29tcGlsZVF1ZXJ5KHRoaXMudG9PcGVyYXRpb25Ob2RlKCksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLiNwcm9wcy5leGVjdXRvci5leGVjdXRlUXVlcnkodGhpcy5jb21waWxlKCksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vYWx0ZXItdGFibGUtZHJvcC1jb25zdHJhaW50LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBBbHRlclRhYmxlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2FsdGVyLXRhYmxlLW5vZGUuanMnO1xuaW1wb3J0IHsgRHJvcENvbnN0cmFpbnROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvZHJvcC1jb25zdHJhaW50LW5vZGUuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIEFsdGVyVGFibGVEcm9wQ29uc3RyYWludEJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIGlmRXhpc3RzKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVEcm9wQ29uc3RyYWludEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBBbHRlclRhYmxlTm9kZS5jbG9uZVdpdGhUYWJsZVByb3BzKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBkcm9wQ29uc3RyYWludDogRHJvcENvbnN0cmFpbnROb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLmRyb3BDb25zdHJhaW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGlmRXhpc3RzOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXNjYWRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVEcm9wQ29uc3RyYWludEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBBbHRlclRhYmxlTm9kZS5jbG9uZVdpdGhUYWJsZVByb3BzKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBkcm9wQ29uc3RyYWludDogRHJvcENvbnN0cmFpbnROb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLmRyb3BDb25zdHJhaW50LCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyOiAnY2FzY2FkZScsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlc3RyaWN0KCkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVEcm9wQ29uc3RyYWludEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBBbHRlclRhYmxlTm9kZS5jbG9uZVdpdGhUYWJsZVByb3BzKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBkcm9wQ29uc3RyYWludDogRHJvcENvbnN0cmFpbnROb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLmRyb3BDb25zdHJhaW50LCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyOiAncmVzdHJpY3QnLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KHRoaXMuI3Byb3BzLm5vZGUsIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBjb21waWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IuY29tcGlsZVF1ZXJ5KHRoaXMudG9PcGVyYXRpb25Ob2RlKCksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLiNwcm9wcy5leGVjdXRvci5leGVjdXRlUXVlcnkodGhpcy5jb21waWxlKCksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcHJpbWFyeS1rZXktY29uc3RyYWludC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ29sdW1uTm9kZSB9IGZyb20gJy4vY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL2lkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUHJpbWFyeUtleUNvbnN0cmFpbnROb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdQcmltYXJ5S2V5Q29uc3RyYWludE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGNvbHVtbnMsIGNvbnN0cmFpbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1ByaW1hcnlLZXlDb25zdHJhaW50Tm9kZScsXG4gICAgICAgICAgICBjb2x1bW5zOiBmcmVlemUoY29sdW1ucy5tYXAoQ29sdW1uTm9kZS5jcmVhdGUpKSxcbiAgICAgICAgICAgIG5hbWU6IGNvbnN0cmFpbnROYW1lID8gSWRlbnRpZmllck5vZGUuY3JlYXRlKGNvbnN0cmFpbnROYW1lKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGgobm9kZSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7IC4uLm5vZGUsIC4uLnByb3BzIH0pO1xuICAgIH0sXG59KTtcbi8qKlxuICogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIGEgdHlwbyBpbiB0aGUgY29kZWJhc2UuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBQcmltYXJ5S2V5Q29uc3RyYWludE5vZGV9IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBQcmltYXJ5Q29uc3RyYWludE5vZGUgPSBQcmltYXJ5S2V5Q29uc3RyYWludE5vZGU7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2FkZC1pbmRleC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL2lkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQWRkSW5kZXhOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdBZGRJbmRleE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQWRkSW5kZXhOb2RlJyxcbiAgICAgICAgICAgIG5hbWU6IElkZW50aWZpZXJOb2RlLmNyZWF0ZShuYW1lKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGgobm9kZSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoQ29sdW1ucyhub2RlLCBjb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIGNvbHVtbnM6IFsuLi4obm9kZS5jb2x1bW5zIHx8IFtdKSwgLi4uY29sdW1uc10sXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vYWx0ZXItdGFibGUtYWRkLWluZGV4LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBBZGRJbmRleE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hZGQtaW5kZXgtbm9kZS5qcyc7XG5pbXBvcnQgeyBBbHRlclRhYmxlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2FsdGVyLXRhYmxlLW5vZGUuanMnO1xuaW1wb3J0IHsgUmF3Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3Jhdy1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlT3JkZXJlZENvbHVtbk5hbWUsIH0gZnJvbSAnLi4vcGFyc2VyL3JlZmVyZW5jZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIEFsdGVyVGFibGVBZGRJbmRleEJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBpbmRleCB1bmlxdWUuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuYWx0ZXJUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRJbmRleCgncGVyc29uX2ZpcnN0X25hbWVfaW5kZXgnKVxuICAgICAqICAgLnVuaXF1ZSgpXG4gICAgICogICAuY29sdW1uKCdlbWFpbCcpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogYWx0ZXIgdGFibGUgYHBlcnNvbmAgYWRkIHVuaXF1ZSBpbmRleCBgcGVyc29uX2ZpcnN0X25hbWVfaW5kZXhgIChgZW1haWxgKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHVuaXF1ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQWRkSW5kZXhCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoVGFibGVQcm9wcyh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgYWRkSW5kZXg6IEFkZEluZGV4Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZS5hZGRJbmRleCwge1xuICAgICAgICAgICAgICAgICAgICB1bmlxdWU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjb2x1bW4gdG8gdGhlIGluZGV4LlxuICAgICAqXG4gICAgICogQWxzbyBzZWUge0BsaW5rIGNvbHVtbnN9IGZvciBhZGRpbmcgbXVsdGlwbGUgY29sdW1ucyBhdCBvbmNlIG9yIHtAbGluayBleHByZXNzaW9ufVxuICAgICAqIGZvciBzcGVjaWZ5aW5nIGFuIGFyYml0cmFyeSBleHByZXNzaW9uLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmFsdGVyVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkSW5kZXgoJ3BlcnNvbl9maXJzdF9uYW1lX2FuZF9hZ2VfaW5kZXgnKVxuICAgICAqICAgLmNvbHVtbignZmlyc3RfbmFtZScpXG4gICAgICogICAuY29sdW1uKCdhZ2UgZGVzYycpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogYWx0ZXIgdGFibGUgYHBlcnNvbmAgYWRkIGluZGV4IGBwZXJzb25fZmlyc3RfbmFtZV9hbmRfYWdlX2luZGV4YCAoYGZpcnN0X25hbWVgLCBgYWdlYCBkZXNjKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbHVtbihjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQWRkSW5kZXhCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoVGFibGVQcm9wcyh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgYWRkSW5kZXg6IEFkZEluZGV4Tm9kZS5jbG9uZVdpdGhDb2x1bW5zKHRoaXMuI3Byb3BzLm5vZGUuYWRkSW5kZXgsIFtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VPcmRlcmVkQ29sdW1uTmFtZShjb2x1bW4pLFxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgYSBsaXN0IG9mIGNvbHVtbnMgZm9yIHRoZSBpbmRleC5cbiAgICAgKlxuICAgICAqIEFsc28gc2VlIHtAbGluayBjb2x1bW59IGZvciBhZGRpbmcgYSBzaW5nbGUgY29sdW1uIG9yIHtAbGluayBleHByZXNzaW9ufSBmb3JcbiAgICAgKiBzcGVjaWZ5aW5nIGFuIGFyYml0cmFyeSBleHByZXNzaW9uLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmFsdGVyVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkSW5kZXgoJ3BlcnNvbl9maXJzdF9uYW1lX2FuZF9hZ2VfaW5kZXgnKVxuICAgICAqICAgLmNvbHVtbnMoWydmaXJzdF9uYW1lJywgJ2FnZSBkZXNjJ10pXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogYWx0ZXIgdGFibGUgYHBlcnNvbmAgYWRkIGluZGV4IGBwZXJzb25fZmlyc3RfbmFtZV9hbmRfYWdlX2luZGV4YCAoYGZpcnN0X25hbWVgLCBgYWdlYCBkZXNjKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbHVtbnMoY29sdW1ucykge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVBZGRJbmRleEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBBbHRlclRhYmxlTm9kZS5jbG9uZVdpdGhUYWJsZVByb3BzKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBhZGRJbmRleDogQWRkSW5kZXhOb2RlLmNsb25lV2l0aENvbHVtbnModGhpcy4jcHJvcHMubm9kZS5hZGRJbmRleCwgY29sdW1ucy5tYXAocGFyc2VPcmRlcmVkQ29sdW1uTmFtZSkpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgYW4gYXJiaXRyYXJ5IGV4cHJlc3Npb24gZm9yIHRoZSBpbmRleC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQge1x1MDBBMHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmFsdGVyVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkSW5kZXgoJ3BlcnNvbl9maXJzdF9uYW1lX2luZGV4JylcbiAgICAgKiAgIC5leHByZXNzaW9uKHNxbDxib29sZWFuPmAoZmlyc3RfbmFtZSA8ICdTYW1pJylgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGFsdGVyIHRhYmxlIGBwZXJzb25gIGFkZCBpbmRleCBgcGVyc29uX2ZpcnN0X25hbWVfaW5kZXhgICgoZmlyc3RfbmFtZSA8ICdTYW1pJykpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgZXhwcmVzc2lvbihleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUFkZEluZGV4QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aFRhYmxlUHJvcHModGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGFkZEluZGV4OiBBZGRJbmRleE5vZGUuY2xvbmVXaXRoQ29sdW1ucyh0aGlzLiNwcm9wcy5ub2RlLmFkZEluZGV4LCBbXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24udG9PcGVyYXRpb25Ob2RlKCksXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVzaW5nKGluZGV4VHlwZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVBZGRJbmRleEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBBbHRlclRhYmxlTm9kZS5jbG9uZVdpdGhUYWJsZVByb3BzKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBhZGRJbmRleDogQWRkSW5kZXhOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLmFkZEluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgIHVzaW5nOiBSYXdOb2RlLmNyZWF0ZVdpdGhTcWwoaW5kZXhUeXBlKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5ub2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLnRvT3BlcmF0aW9uTm9kZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KHRoaXMuY29tcGlsZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3VuaXF1ZS1jb25zdHJhaW50LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBVbmlxdWVDb25zdHJhaW50Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3VuaXF1ZS1jb25zdHJhaW50LW5vZGUuanMnO1xuZXhwb3J0IGNsYXNzIFVuaXF1ZUNvbnN0cmFpbnROb2RlQnVpbGRlciB7XG4gICAgI25vZGU7XG4gICAgY29uc3RydWN0b3Iobm9kZSkge1xuICAgICAgICB0aGlzLiNub2RlID0gbm9kZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBgbnVsbHMgbm90IGRpc3RpbmN0YCB0byB0aGUgdW5pcXVlIGNvbnN0cmFpbnQgZGVmaW5pdGlvblxuICAgICAqXG4gICAgICogU3VwcG9ydGVkIGJ5IFBvc3RncmVTUUwgZGlhbGVjdCBvbmx5XG4gICAgICovXG4gICAgbnVsbHNOb3REaXN0aW5jdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVbmlxdWVDb25zdHJhaW50Tm9kZUJ1aWxkZXIoVW5pcXVlQ29uc3RyYWludE5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHsgbnVsbHNOb3REaXN0aW5jdDogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIGRlZmVycmFibGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgVW5pcXVlQ29uc3RyYWludE5vZGVCdWlsZGVyKFVuaXF1ZUNvbnN0cmFpbnROb2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7IGRlZmVycmFibGU6IHRydWUgfSkpO1xuICAgIH1cbiAgICBub3REZWZlcnJhYmxlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFVuaXF1ZUNvbnN0cmFpbnROb2RlQnVpbGRlcihVbmlxdWVDb25zdHJhaW50Tm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwgeyBkZWZlcnJhYmxlOiBmYWxzZSB9KSk7XG4gICAgfVxuICAgIGluaXRpYWxseURlZmVycmVkKCkge1xuICAgICAgICByZXR1cm4gbmV3IFVuaXF1ZUNvbnN0cmFpbnROb2RlQnVpbGRlcihVbmlxdWVDb25zdHJhaW50Tm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwge1xuICAgICAgICAgICAgaW5pdGlhbGx5RGVmZXJyZWQ6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgaW5pdGlhbGx5SW1tZWRpYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFVuaXF1ZUNvbnN0cmFpbnROb2RlQnVpbGRlcihVbmlxdWVDb25zdHJhaW50Tm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwge1xuICAgICAgICAgICAgaW5pdGlhbGx5RGVmZXJyZWQ6IGZhbHNlLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbm9kZTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3ByaW1hcnkta2V5LWNvbnN0cmFpbnQtYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IFByaW1hcnlLZXlDb25zdHJhaW50Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3ByaW1hcnkta2V5LWNvbnN0cmFpbnQtbm9kZS5qcyc7XG5leHBvcnQgY2xhc3MgUHJpbWFyeUtleUNvbnN0cmFpbnRCdWlsZGVyIHtcbiAgICAjbm9kZTtcbiAgICBjb25zdHJ1Y3Rvcihub2RlKSB7XG4gICAgICAgIHRoaXMuI25vZGUgPSBub2RlO1xuICAgIH1cbiAgICBkZWZlcnJhYmxlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByaW1hcnlLZXlDb25zdHJhaW50QnVpbGRlcihQcmltYXJ5S2V5Q29uc3RyYWludE5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHsgZGVmZXJyYWJsZTogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIG5vdERlZmVycmFibGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJpbWFyeUtleUNvbnN0cmFpbnRCdWlsZGVyKFByaW1hcnlLZXlDb25zdHJhaW50Tm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwgeyBkZWZlcnJhYmxlOiBmYWxzZSB9KSk7XG4gICAgfVxuICAgIGluaXRpYWxseURlZmVycmVkKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByaW1hcnlLZXlDb25zdHJhaW50QnVpbGRlcihQcmltYXJ5S2V5Q29uc3RyYWludE5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHtcbiAgICAgICAgICAgIGluaXRpYWxseURlZmVycmVkOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGluaXRpYWxseUltbWVkaWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcmltYXJ5S2V5Q29uc3RyYWludEJ1aWxkZXIoUHJpbWFyeUtleUNvbnN0cmFpbnROb2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7XG4gICAgICAgICAgICBpbml0aWFsbHlEZWZlcnJlZDogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNub2RlO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vY2hlY2stY29uc3RyYWludC1idWlsZGVyLmQudHNcIiAvPlxuZXhwb3J0IGNsYXNzIENoZWNrQ29uc3RyYWludEJ1aWxkZXIge1xuICAgICNub2RlO1xuICAgIGNvbnN0cnVjdG9yKG5vZGUpIHtcbiAgICAgICAgdGhpcy4jbm9kZSA9IG5vZGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbm9kZTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3JlbmFtZS1jb25zdHJhaW50LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4vaWRlbnRpZmllci1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBSZW5hbWVDb25zdHJhaW50Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnUmVuYW1lQ29uc3RyYWludE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG9sZE5hbWUsIG5ld05hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnUmVuYW1lQ29uc3RyYWludE5vZGUnLFxuICAgICAgICAgICAgb2xkTmFtZTogSWRlbnRpZmllck5vZGUuY3JlYXRlKG9sZE5hbWUpLFxuICAgICAgICAgICAgbmV3TmFtZTogSWRlbnRpZmllck5vZGUuY3JlYXRlKG5ld05hbWUpLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2FsdGVyLXRhYmxlLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBBZGRDb2x1bW5Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWRkLWNvbHVtbi1ub2RlLmpzJztcbmltcG9ydCB7IEFsdGVyVGFibGVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWx0ZXItdGFibGUtbm9kZS5qcyc7XG5pbXBvcnQgeyBDb2x1bW5EZWZpbml0aW9uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NvbHVtbi1kZWZpbml0aW9uLW5vZGUuanMnO1xuaW1wb3J0IHsgRHJvcENvbHVtbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9kcm9wLWNvbHVtbi1ub2RlLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IFJlbmFtZUNvbHVtbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9yZW5hbWUtY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgZnJlZXplLCBub29wIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIsIH0gZnJvbSAnLi9jb2x1bW4tZGVmaW5pdGlvbi1idWlsZGVyLmpzJztcbmltcG9ydCB7IE1vZGlmeUNvbHVtbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9tb2RpZnktY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VEYXRhVHlwZUV4cHJlc3Npb24sIH0gZnJvbSAnLi4vcGFyc2VyL2RhdGEtdHlwZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyLCB9IGZyb20gJy4vZm9yZWlnbi1rZXktY29uc3RyYWludC1idWlsZGVyLmpzJztcbmltcG9ydCB7IEFkZENvbnN0cmFpbnROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWRkLWNvbnN0cmFpbnQtbm9kZS5qcyc7XG5pbXBvcnQgeyBVbmlxdWVDb25zdHJhaW50Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3VuaXF1ZS1jb25zdHJhaW50LW5vZGUuanMnO1xuaW1wb3J0IHsgQ2hlY2tDb25zdHJhaW50Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NoZWNrLWNvbnN0cmFpbnQtbm9kZS5qcyc7XG5pbXBvcnQgeyBGb3JlaWduS2V5Q29uc3RyYWludE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9mb3JlaWduLWtleS1jb25zdHJhaW50LW5vZGUuanMnO1xuaW1wb3J0IHsgQ29sdW1uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NvbHVtbi1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlVGFibGUgfSBmcm9tICcuLi9wYXJzZXIvdGFibGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IERyb3BDb25zdHJhaW50Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2Ryb3AtY29uc3RyYWludC1ub2RlLmpzJztcbmltcG9ydCB7IEFsdGVyQ29sdW1uQnVpbGRlciwgfSBmcm9tICcuL2FsdGVyLWNvbHVtbi1idWlsZGVyLmpzJztcbmltcG9ydCB7IEFsdGVyVGFibGVFeGVjdXRvciB9IGZyb20gJy4vYWx0ZXItdGFibGUtZXhlY3V0b3IuanMnO1xuaW1wb3J0IHsgQWx0ZXJUYWJsZUFkZEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlciB9IGZyb20gJy4vYWx0ZXItdGFibGUtYWRkLWZvcmVpZ24ta2V5LWNvbnN0cmFpbnQtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBBbHRlclRhYmxlRHJvcENvbnN0cmFpbnRCdWlsZGVyIH0gZnJvbSAnLi9hbHRlci10YWJsZS1kcm9wLWNvbnN0cmFpbnQtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBQcmltYXJ5S2V5Q29uc3RyYWludE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9wcmltYXJ5LWtleS1jb25zdHJhaW50LW5vZGUuanMnO1xuaW1wb3J0IHsgRHJvcEluZGV4Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2Ryb3AtaW5kZXgtbm9kZS5qcyc7XG5pbXBvcnQgeyBBZGRJbmRleE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hZGQtaW5kZXgtbm9kZS5qcyc7XG5pbXBvcnQgeyBBbHRlclRhYmxlQWRkSW5kZXhCdWlsZGVyIH0gZnJvbSAnLi9hbHRlci10YWJsZS1hZGQtaW5kZXgtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBVbmlxdWVDb25zdHJhaW50Tm9kZUJ1aWxkZXIsIH0gZnJvbSAnLi91bmlxdWUtY29uc3RyYWludC1idWlsZGVyLmpzJztcbmltcG9ydCB7IFByaW1hcnlLZXlDb25zdHJhaW50QnVpbGRlciwgfSBmcm9tICcuL3ByaW1hcnkta2V5LWNvbnN0cmFpbnQtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBDaGVja0NvbnN0cmFpbnRCdWlsZGVyLCB9IGZyb20gJy4vY2hlY2stY29uc3RyYWludC1idWlsZGVyLmpzJztcbmltcG9ydCB7IFJlbmFtZUNvbnN0cmFpbnROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcmVuYW1lLWNvbnN0cmFpbnQtbm9kZS5qcyc7XG4vKipcbiAqIFRoaXMgYnVpbGRlciBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBgYWx0ZXIgdGFibGVgIHF1ZXJ5LlxuICovXG5leHBvcnQgY2xhc3MgQWx0ZXJUYWJsZUJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIHJlbmFtZVRvKG5ld1RhYmxlTmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVFeGVjdXRvcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aFRhYmxlUHJvcHModGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIHJlbmFtZVRvOiBwYXJzZVRhYmxlKG5ld1RhYmxlTmFtZSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNldFNjaGVtYShuZXdTY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlRXhlY3V0b3Ioe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBBbHRlclRhYmxlTm9kZS5jbG9uZVdpdGhUYWJsZVByb3BzKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBzZXRTY2hlbWE6IElkZW50aWZpZXJOb2RlLmNyZWF0ZShuZXdTY2hlbWEpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhbHRlckNvbHVtbihjb2x1bW4sIGFsdGVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGFsdGVyYXRpb24obmV3IEFsdGVyQ29sdW1uQnVpbGRlcihjb2x1bW4pKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQ29sdW1uQWx0ZXJpbmdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoQ29sdW1uQWx0ZXJhdGlvbih0aGlzLiNwcm9wcy5ub2RlLCBidWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRyb3BDb2x1bW4oY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUNvbHVtbkFsdGVyaW5nQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aENvbHVtbkFsdGVyYXRpb24odGhpcy4jcHJvcHMubm9kZSwgRHJvcENvbHVtbk5vZGUuY3JlYXRlKGNvbHVtbikpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVuYW1lQ29sdW1uKGNvbHVtbiwgbmV3Q29sdW1uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUNvbHVtbkFsdGVyaW5nQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aENvbHVtbkFsdGVyYXRpb24odGhpcy4jcHJvcHMubm9kZSwgUmVuYW1lQ29sdW1uTm9kZS5jcmVhdGUoY29sdW1uLCBuZXdDb2x1bW4pKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFkZENvbHVtbihjb2x1bW5OYW1lLCBkYXRhVHlwZSwgYnVpbGQgPSBub29wKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBidWlsZChuZXcgQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIoQ29sdW1uRGVmaW5pdGlvbk5vZGUuY3JlYXRlKGNvbHVtbk5hbWUsIHBhcnNlRGF0YVR5cGVFeHByZXNzaW9uKGRhdGFUeXBlKSkpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQ29sdW1uQWx0ZXJpbmdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoQ29sdW1uQWx0ZXJhdGlvbih0aGlzLiNwcm9wcy5ub2RlLCBBZGRDb2x1bW5Ob2RlLmNyZWF0ZShidWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtb2RpZnlDb2x1bW4oY29sdW1uTmFtZSwgZGF0YVR5cGUsIGJ1aWxkID0gbm9vcCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gYnVpbGQobmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNyZWF0ZShjb2x1bW5OYW1lLCBwYXJzZURhdGFUeXBlRXhwcmVzc2lvbihkYXRhVHlwZSkpKSk7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUNvbHVtbkFsdGVyaW5nQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aENvbHVtbkFsdGVyYXRpb24odGhpcy4jcHJvcHMubm9kZSwgTW9kaWZ5Q29sdW1uTm9kZS5jcmVhdGUoYnVpbGRlci50b09wZXJhdGlvbk5vZGUoKSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VlIHtAbGluayBDcmVhdGVUYWJsZUJ1aWxkZXIuYWRkVW5pcXVlQ29uc3RyYWludH1cbiAgICAgKi9cbiAgICBhZGRVbmlxdWVDb25zdHJhaW50KGNvbnN0cmFpbnROYW1lLCBjb2x1bW5zLCBidWlsZCA9IG5vb3ApIHtcbiAgICAgICAgY29uc3QgdW5pcXVlQ29uc3RyYWludEJ1aWxkZXIgPSBidWlsZChuZXcgVW5pcXVlQ29uc3RyYWludE5vZGVCdWlsZGVyKFVuaXF1ZUNvbnN0cmFpbnROb2RlLmNyZWF0ZShjb2x1bW5zLCBjb25zdHJhaW50TmFtZSkpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlRXhlY3V0b3Ioe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBBbHRlclRhYmxlTm9kZS5jbG9uZVdpdGhUYWJsZVByb3BzKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBhZGRDb25zdHJhaW50OiBBZGRDb25zdHJhaW50Tm9kZS5jcmVhdGUodW5pcXVlQ29uc3RyYWludEJ1aWxkZXIudG9PcGVyYXRpb25Ob2RlKCkpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZWUge0BsaW5rIENyZWF0ZVRhYmxlQnVpbGRlci5hZGRDaGVja0NvbnN0cmFpbnR9XG4gICAgICovXG4gICAgYWRkQ2hlY2tDb25zdHJhaW50KGNvbnN0cmFpbnROYW1lLCBjaGVja0V4cHJlc3Npb24sIGJ1aWxkID0gbm9vcCkge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50QnVpbGRlciA9IGJ1aWxkKG5ldyBDaGVja0NvbnN0cmFpbnRCdWlsZGVyKENoZWNrQ29uc3RyYWludE5vZGUuY3JlYXRlKGNoZWNrRXhwcmVzc2lvbi50b09wZXJhdGlvbk5vZGUoKSwgY29uc3RyYWludE5hbWUpKSk7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUV4ZWN1dG9yKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoVGFibGVQcm9wcyh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgYWRkQ29uc3RyYWludDogQWRkQ29uc3RyYWludE5vZGUuY3JlYXRlKGNvbnN0cmFpbnRCdWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VlIHtAbGluayBDcmVhdGVUYWJsZUJ1aWxkZXIuYWRkRm9yZWlnbktleUNvbnN0cmFpbnR9XG4gICAgICpcbiAgICAgKiBVbmxpa2Uge0BsaW5rIENyZWF0ZVRhYmxlQnVpbGRlci5hZGRGb3JlaWduS2V5Q29uc3RyYWludH0gdGhpcyBtZXRob2QgcmV0dXJuc1xuICAgICAqIHRoZSBjb25zdHJhaW50IGJ1aWxkZXIgYW5kIGRvZXNuJ3QgdGFrZSBhIGNhbGxiYWNrIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiBUaGlzXG4gICAgICogaXMgYmVjYXVzZSB5b3UgY2FuIG9ubHkgYWRkIG9uZSBjb2x1bW4gcGVyIGBBTFRFUiBUQUJMRWAgcXVlcnkuXG4gICAgICovXG4gICAgYWRkRm9yZWlnbktleUNvbnN0cmFpbnQoY29uc3RyYWludE5hbWUsIGNvbHVtbnMsIHRhcmdldFRhYmxlLCB0YXJnZXRDb2x1bW5zLCBidWlsZCA9IG5vb3ApIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludEJ1aWxkZXIgPSBidWlsZChuZXcgRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyKEZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZS5jcmVhdGUoY29sdW1ucy5tYXAoQ29sdW1uTm9kZS5jcmVhdGUpLCBwYXJzZVRhYmxlKHRhcmdldFRhYmxlKSwgdGFyZ2V0Q29sdW1ucy5tYXAoQ29sdW1uTm9kZS5jcmVhdGUpLCBjb25zdHJhaW50TmFtZSkpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQWRkRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgY29uc3RyYWludEJ1aWxkZXIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZWUge0BsaW5rIENyZWF0ZVRhYmxlQnVpbGRlci5hZGRQcmltYXJ5S2V5Q29uc3RyYWludH1cbiAgICAgKi9cbiAgICBhZGRQcmltYXJ5S2V5Q29uc3RyYWludChjb25zdHJhaW50TmFtZSwgY29sdW1ucywgYnVpbGQgPSBub29wKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRCdWlsZGVyID0gYnVpbGQobmV3IFByaW1hcnlLZXlDb25zdHJhaW50QnVpbGRlcihQcmltYXJ5S2V5Q29uc3RyYWludE5vZGUuY3JlYXRlKGNvbHVtbnMsIGNvbnN0cmFpbnROYW1lKSkpO1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVFeGVjdXRvcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aFRhYmxlUHJvcHModGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGFkZENvbnN0cmFpbnQ6IEFkZENvbnN0cmFpbnROb2RlLmNyZWF0ZShjb25zdHJhaW50QnVpbGRlci50b09wZXJhdGlvbk5vZGUoKSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRyb3BDb25zdHJhaW50KGNvbnN0cmFpbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZURyb3BDb25zdHJhaW50QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aFRhYmxlUHJvcHModGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGRyb3BDb25zdHJhaW50OiBEcm9wQ29uc3RyYWludE5vZGUuY3JlYXRlKGNvbnN0cmFpbnROYW1lKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVuYW1lQ29uc3RyYWludChvbGROYW1lLCBuZXdOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZURyb3BDb25zdHJhaW50QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aFRhYmxlUHJvcHModGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIHJlbmFtZUNvbnN0cmFpbnQ6IFJlbmFtZUNvbnN0cmFpbnROb2RlLmNyZWF0ZShvbGROYW1lLCBuZXdOYW1lKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBhZGQgaW5kZXggdG8gdGFibGUuXG4gICAgICpcbiAgICAgKiAgIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGRiLnNjaGVtYS5hbHRlclRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZEluZGV4KCdwZXJzb25fZW1haWxfaW5kZXgnKVxuICAgICAqICAgLmNvbHVtbignZW1haWwnKVxuICAgICAqICAgLnVuaXF1ZSgpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogYWx0ZXIgdGFibGUgYHBlcnNvbmAgYWRkIHVuaXF1ZSBpbmRleCBgcGVyc29uX2VtYWlsX2luZGV4YCAoYGVtYWlsYClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhZGRJbmRleChpbmRleE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQWRkSW5kZXhCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoVGFibGVQcm9wcyh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgYWRkSW5kZXg6IEFkZEluZGV4Tm9kZS5jcmVhdGUoaW5kZXhOYW1lKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBkcm9wIGluZGV4IGZyb20gdGFibGUuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZGIuc2NoZW1hLmFsdGVyVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuZHJvcEluZGV4KCdwZXJzb25fZW1haWxfaW5kZXgnKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGFsdGVyIHRhYmxlIGBwZXJzb25gIGRyb3AgaW5kZXggYHRlc3RfZmlyc3RfbmFtZV9pbmRleGBcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkcm9wSW5kZXgoaW5kZXhOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUV4ZWN1dG9yKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoVGFibGVQcm9wcyh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgZHJvcEluZGV4OiBEcm9wSW5kZXhOb2RlLmNyZWF0ZShpbmRleE5hbWUpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxscyB0aGUgZ2l2ZW4gZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIENyZWF0ZVRhYmxlQnVpbGRlci4kY2FsbH1cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBbHRlclRhYmxlQ29sdW1uQWx0ZXJpbmdCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBhbHRlckNvbHVtbihjb2x1bW4sIGFsdGVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGFsdGVyYXRpb24obmV3IEFsdGVyQ29sdW1uQnVpbGRlcihjb2x1bW4pKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQ29sdW1uQWx0ZXJpbmdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoQ29sdW1uQWx0ZXJhdGlvbih0aGlzLiNwcm9wcy5ub2RlLCBidWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRyb3BDb2x1bW4oY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUNvbHVtbkFsdGVyaW5nQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aENvbHVtbkFsdGVyYXRpb24odGhpcy4jcHJvcHMubm9kZSwgRHJvcENvbHVtbk5vZGUuY3JlYXRlKGNvbHVtbikpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVuYW1lQ29sdW1uKGNvbHVtbiwgbmV3Q29sdW1uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUNvbHVtbkFsdGVyaW5nQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aENvbHVtbkFsdGVyYXRpb24odGhpcy4jcHJvcHMubm9kZSwgUmVuYW1lQ29sdW1uTm9kZS5jcmVhdGUoY29sdW1uLCBuZXdDb2x1bW4pKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFkZENvbHVtbihjb2x1bW5OYW1lLCBkYXRhVHlwZSwgYnVpbGQgPSBub29wKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBidWlsZChuZXcgQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIoQ29sdW1uRGVmaW5pdGlvbk5vZGUuY3JlYXRlKGNvbHVtbk5hbWUsIHBhcnNlRGF0YVR5cGVFeHByZXNzaW9uKGRhdGFUeXBlKSkpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQ29sdW1uQWx0ZXJpbmdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoQ29sdW1uQWx0ZXJhdGlvbih0aGlzLiNwcm9wcy5ub2RlLCBBZGRDb2x1bW5Ob2RlLmNyZWF0ZShidWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtb2RpZnlDb2x1bW4oY29sdW1uTmFtZSwgZGF0YVR5cGUsIGJ1aWxkID0gbm9vcCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gYnVpbGQobmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNyZWF0ZShjb2x1bW5OYW1lLCBwYXJzZURhdGFUeXBlRXhwcmVzc2lvbihkYXRhVHlwZSkpKSk7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUNvbHVtbkFsdGVyaW5nQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aENvbHVtbkFsdGVyYXRpb24odGhpcy4jcHJvcHMubm9kZSwgTW9kaWZ5Q29sdW1uTm9kZS5jcmVhdGUoYnVpbGRlci50b09wZXJhdGlvbk5vZGUoKSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IudHJhbnNmb3JtUXVlcnkodGhpcy4jcHJvcHMubm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmV4ZWN1dGVRdWVyeSh0aGlzLmNvbXBpbGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9pbW1lZGlhdGUtdmFsdWUtdHJhbnNmb3JtZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBPcGVyYXRpb25Ob2RlVHJhbnNmb3JtZXIgfSBmcm9tICcuLi8uLi9vcGVyYXRpb24tbm9kZS9vcGVyYXRpb24tbm9kZS10cmFuc2Zvcm1lci5qcyc7XG5pbXBvcnQgeyBWYWx1ZUxpc3ROb2RlIH0gZnJvbSAnLi4vLi4vb3BlcmF0aW9uLW5vZGUvdmFsdWUtbGlzdC1ub2RlLmpzJztcbmltcG9ydCB7IFZhbHVlTm9kZSB9IGZyb20gJy4uLy4uL29wZXJhdGlvbi1ub2RlL3ZhbHVlLW5vZGUuanMnO1xuLyoqXG4gKiBUcmFuc2Zvcm1zIGFsbCBWYWx1ZU5vZGVzIHRvIGltbWVkaWF0ZS5cbiAqXG4gKiBXQVJOSU5HISBUaGlzIHNob3VsZCBuZXZlciBiZSBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLiBVc2VycyBzaG91bGQgbmV2ZXIgdXNlIHRoaXMuXG4gKiBUaGlzIGlzIGFuIGludGVybmFsIGhlbHBlci5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIEltbWVkaWF0ZVZhbHVlVHJhbnNmb3JtZXIgZXh0ZW5kcyBPcGVyYXRpb25Ob2RlVHJhbnNmb3JtZXIge1xuICAgIHRyYW5zZm9ybVByaW1pdGl2ZVZhbHVlTGlzdChub2RlKSB7XG4gICAgICAgIHJldHVybiBWYWx1ZUxpc3ROb2RlLmNyZWF0ZShub2RlLnZhbHVlcy5tYXAoVmFsdWVOb2RlLmNyZWF0ZUltbWVkaWF0ZSkpO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1WYWx1ZShub2RlKSB7XG4gICAgICAgIHJldHVybiBWYWx1ZU5vZGUuY3JlYXRlSW1tZWRpYXRlKG5vZGUudmFsdWUpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vY3JlYXRlLWluZGV4LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBDcmVhdGVJbmRleE5vZGUsIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLWluZGV4LW5vZGUuanMnO1xuaW1wb3J0IHsgUmF3Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3Jhdy1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlT3JkZXJlZENvbHVtbk5hbWUsIH0gZnJvbSAnLi4vcGFyc2VyL3JlZmVyZW5jZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VUYWJsZSB9IGZyb20gJy4uL3BhcnNlci90YWJsZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgcGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbiwgfSBmcm9tICcuLi9wYXJzZXIvYmluYXJ5LW9wZXJhdGlvbi1wYXJzZXIuanMnO1xuaW1wb3J0IHsgUXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBJbW1lZGlhdGVWYWx1ZVRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vcGx1Z2luL2ltbWVkaWF0ZS12YWx1ZS9pbW1lZGlhdGUtdmFsdWUtdHJhbnNmb3JtZXIuanMnO1xuZXhwb3J0IGNsYXNzIENyZWF0ZUluZGV4QnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgXCJpZiBub3QgZXhpc3RzXCIgbW9kaWZpZXIuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgaW5kZXggYWxyZWFkeSBleGlzdHMsIG5vIGVycm9yIGlzIHRocm93biBpZiB0aGlzIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICovXG4gICAgaWZOb3RFeGlzdHMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlSW5kZXhCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlSW5kZXhOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgaWZOb3RFeGlzdHM6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBpbmRleCB1bmlxdWUuXG4gICAgICovXG4gICAgdW5pcXVlKCkge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZUluZGV4QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZUluZGV4Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIHVuaXF1ZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBgbnVsbHMgbm90IGRpc3RpbmN0YCBzcGVjaWZpZXIgdG8gaW5kZXguXG4gICAgICogVGhpcyBvbmx5IHdvcmtzIG9uIHNvbWUgZGlhbGVjdHMgbGlrZSBQb3N0Z3JlU1FMLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGRiLnNjaGVtYS5jcmVhdGVJbmRleCgncGVyc29uX2ZpcnN0X25hbWVfaW5kZXgnKVxuICAgICAqICAub24oJ3BlcnNvbicpXG4gICAgICogIC5jb2x1bW4oJ2ZpcnN0X25hbWUnKVxuICAgICAqICAubnVsbHNOb3REaXN0aW5jdCgpXG4gICAgICogIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSBpbmRleCBcInBlcnNvbl9maXJzdF9uYW1lX2luZGV4XCJcbiAgICAgKiBvbiBcInRlc3RcIiAoXCJmaXJzdF9uYW1lXCIpXG4gICAgICogbnVsbHMgbm90IGRpc3RpbmN0O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG51bGxzTm90RGlzdGluY3QoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlSW5kZXhCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlSW5kZXhOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgbnVsbHNOb3REaXN0aW5jdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSB0YWJsZSBmb3IgdGhlIGluZGV4LlxuICAgICAqL1xuICAgIG9uKHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlSW5kZXhCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlSW5kZXhOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgdGFibGU6IHBhcnNlVGFibGUodGFibGUpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY29sdW1uIHRvIHRoZSBpbmRleC5cbiAgICAgKlxuICAgICAqIEFsc28gc2VlIHtAbGluayBjb2x1bW5zfSBmb3IgYWRkaW5nIG11bHRpcGxlIGNvbHVtbnMgYXQgb25jZSBvciB7QGxpbmsgZXhwcmVzc2lvbn1cbiAgICAgKiBmb3Igc3BlY2lmeWluZyBhbiBhcmJpdHJhcnkgZXhwcmVzc2lvbi5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgICAgICAgIC5jcmVhdGVJbmRleCgncGVyc29uX2ZpcnN0X25hbWVfYW5kX2FnZV9pbmRleCcpXG4gICAgICogICAgICAgICAub24oJ3BlcnNvbicpXG4gICAgICogICAgICAgICAuY29sdW1uKCdmaXJzdF9uYW1lJylcbiAgICAgKiAgICAgICAgIC5jb2x1bW4oJ2FnZSBkZXNjJylcbiAgICAgKiAgICAgICAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSBpbmRleCBcInBlcnNvbl9maXJzdF9uYW1lX2FuZF9hZ2VfaW5kZXhcIiBvbiBcInBlcnNvblwiIChcImZpcnN0X25hbWVcIiwgXCJhZ2VcIiBkZXNjKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbHVtbihjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVJbmRleEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVJbmRleE5vZGUuY2xvbmVXaXRoQ29sdW1ucyh0aGlzLiNwcm9wcy5ub2RlLCBbXG4gICAgICAgICAgICAgICAgcGFyc2VPcmRlcmVkQ29sdW1uTmFtZShjb2x1bW4pLFxuICAgICAgICAgICAgXSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgYSBsaXN0IG9mIGNvbHVtbnMgZm9yIHRoZSBpbmRleC5cbiAgICAgKlxuICAgICAqIEFsc28gc2VlIHtAbGluayBjb2x1bW59IGZvciBhZGRpbmcgYSBzaW5nbGUgY29sdW1uIG9yIHtAbGluayBleHByZXNzaW9ufSBmb3JcbiAgICAgKiBzcGVjaWZ5aW5nIGFuIGFyYml0cmFyeSBleHByZXNzaW9uLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgICAgICAgLmNyZWF0ZUluZGV4KCdwZXJzb25fZmlyc3RfbmFtZV9hbmRfYWdlX2luZGV4JylcbiAgICAgKiAgICAgICAgIC5vbigncGVyc29uJylcbiAgICAgKiAgICAgICAgIC5jb2x1bW5zKFsnZmlyc3RfbmFtZScsICdhZ2UgZGVzYyddKVxuICAgICAqICAgICAgICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogY3JlYXRlIGluZGV4IFwicGVyc29uX2ZpcnN0X25hbWVfYW5kX2FnZV9pbmRleFwiIG9uIFwicGVyc29uXCIgKFwiZmlyc3RfbmFtZVwiLCBcImFnZVwiIGRlc2MpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgY29sdW1ucyhjb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlSW5kZXhCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlSW5kZXhOb2RlLmNsb25lV2l0aENvbHVtbnModGhpcy4jcHJvcHMubm9kZSwgY29sdW1ucy5tYXAocGFyc2VPcmRlcmVkQ29sdW1uTmFtZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGFuIGFyYml0cmFyeSBleHByZXNzaW9uIGZvciB0aGUgaW5kZXguXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHtcdTAwQTBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVJbmRleCgncGVyc29uX2ZpcnN0X25hbWVfaW5kZXgnKVxuICAgICAqICAgLm9uKCdwZXJzb24nKVxuICAgICAqICAgLmV4cHJlc3Npb24oc3FsYGZpcnN0X25hbWUgQ09MTEFURSBcImZpX0ZJXCJgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogY3JlYXRlIGluZGV4IFwicGVyc29uX2ZpcnN0X25hbWVfaW5kZXhcIiBvbiBcInBlcnNvblwiIChmaXJzdF9uYW1lIENPTExBVEUgXCJmaV9GSVwiKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGV4cHJlc3Npb24oZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZUluZGV4QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZUluZGV4Tm9kZS5jbG9uZVdpdGhDb2x1bW5zKHRoaXMuI3Byb3BzLm5vZGUsIFtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uLnRvT3BlcmF0aW9uTm9kZSgpLFxuICAgICAgICAgICAgXSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1c2luZyhpbmRleFR5cGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVJbmRleEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVJbmRleE5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICB1c2luZzogUmF3Tm9kZS5jcmVhdGVXaXRoU3FsKGluZGV4VHlwZSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdoZXJlKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZXIgPSBuZXcgSW1tZWRpYXRlVmFsdWVUcmFuc2Zvcm1lcigpO1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZUluZGV4QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhXaGVyZSh0aGlzLiNwcm9wcy5ub2RlLCB0cmFuc2Zvcm1lci50cmFuc2Zvcm1Ob2RlKHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24oYXJncyksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IudHJhbnNmb3JtUXVlcnkodGhpcy4jcHJvcHMubm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmV4ZWN1dGVRdWVyeSh0aGlzLmNvbXBpbGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jcmVhdGUtc2NoZW1hLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBDcmVhdGVTY2hlbWFOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXNjaGVtYS1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBDcmVhdGVTY2hlbWFCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBpZk5vdEV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVTY2hlbWFCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlU2NoZW1hTm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwgeyBpZk5vdEV4aXN0czogdHJ1ZSB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IudHJhbnNmb3JtUXVlcnkodGhpcy4jcHJvcHMubm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmV4ZWN1dGVRdWVyeSh0aGlzLmNvbXBpbGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vbi1jb21taXQtYWN0aW9uLXBhcnNlLmQudHNcIiAvPlxuaW1wb3J0IHsgT05fQ09NTUlUX0FDVElPTlMsIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXRhYmxlLW5vZGUuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT25Db21taXRBY3Rpb24oYWN0aW9uKSB7XG4gICAgaWYgKE9OX0NPTU1JVF9BQ1RJT05TLmluY2x1ZGVzKGFjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIE9uQ29tbWl0QWN0aW9uICR7YWN0aW9ufWApO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jcmVhdGUtdGFibGUtYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IENvbHVtbkRlZmluaXRpb25Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY29sdW1uLWRlZmluaXRpb24tbm9kZS5qcyc7XG5pbXBvcnQgeyBDcmVhdGVUYWJsZU5vZGUsIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXRhYmxlLW5vZGUuanMnO1xuaW1wb3J0IHsgQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2NvbHVtbi1kZWZpbml0aW9uLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgZnJlZXplLCBub29wIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgRm9yZWlnbktleUNvbnN0cmFpbnROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvZm9yZWlnbi1rZXktY29uc3RyYWludC1ub2RlLmpzJztcbmltcG9ydCB7IENvbHVtbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jb2x1bW4tbm9kZS5qcyc7XG5pbXBvcnQgeyBGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIsIH0gZnJvbSAnLi9mb3JlaWduLWtleS1jb25zdHJhaW50LWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VEYXRhVHlwZUV4cHJlc3Npb24sIH0gZnJvbSAnLi4vcGFyc2VyL2RhdGEtdHlwZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgUHJpbWFyeUtleUNvbnN0cmFpbnROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcHJpbWFyeS1rZXktY29uc3RyYWludC1ub2RlLmpzJztcbmltcG9ydCB7IFVuaXF1ZUNvbnN0cmFpbnROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvdW5pcXVlLWNvbnN0cmFpbnQtbm9kZS5qcyc7XG5pbXBvcnQgeyBDaGVja0NvbnN0cmFpbnROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY2hlY2stY29uc3RyYWludC1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlVGFibGUgfSBmcm9tICcuLi9wYXJzZXIvdGFibGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlT25Db21taXRBY3Rpb24gfSBmcm9tICcuLi9wYXJzZXIvb24tY29tbWl0LWFjdGlvbi1wYXJzZS5qcyc7XG5pbXBvcnQgeyBVbmlxdWVDb25zdHJhaW50Tm9kZUJ1aWxkZXIsIH0gZnJvbSAnLi91bmlxdWUtY29uc3RyYWludC1idWlsZGVyLmpzJztcbmltcG9ydCB7IHBhcnNlRXhwcmVzc2lvbiB9IGZyb20gJy4uL3BhcnNlci9leHByZXNzaW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBQcmltYXJ5S2V5Q29uc3RyYWludEJ1aWxkZXIsIH0gZnJvbSAnLi9wcmltYXJ5LWtleS1jb25zdHJhaW50LWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgQ2hlY2tDb25zdHJhaW50QnVpbGRlciwgfSBmcm9tICcuL2NoZWNrLWNvbnN0cmFpbnQtYnVpbGRlci5qcyc7XG4vKipcbiAqIFRoaXMgYnVpbGRlciBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBgY3JlYXRlIHRhYmxlYCBxdWVyeS5cbiAqL1xuZXhwb3J0IGNsYXNzIENyZWF0ZVRhYmxlQnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgXCJ0ZW1wb3JhcnlcIiBtb2RpZmllci5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSB0YWJsZS5cbiAgICAgKi9cbiAgICB0ZW1wb3JhcnkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlVGFibGVCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlVGFibGVOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgdGVtcG9yYXJ5OiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIFwib24gY29tbWl0XCIgc3RhdGVtZW50LlxuICAgICAqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRlbXBvcmFyeSB0YWJsZXMgb24gc3VwcG9ydGVkIGRhdGFiYXNlc1xuICAgICAqIGxpa2UgUG9zdGdyZVNRTC5cbiAgICAgKi9cbiAgICBvbkNvbW1pdChvbkNvbW1pdCkge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVRhYmxlQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZVRhYmxlTm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIG9uQ29tbWl0OiBwYXJzZU9uQ29tbWl0QWN0aW9uKG9uQ29tbWl0KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgXCJpZiBub3QgZXhpc3RzXCIgbW9kaWZpZXIuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgdGFibGUgYWxyZWFkeSBleGlzdHMsIG5vIGVycm9yIGlzIHRocm93biBpZiB0aGlzIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQuXG4gICAgICovXG4gICAgaWZOb3RFeGlzdHMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlVGFibGVCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlVGFibGVOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgaWZOb3RFeGlzdHM6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjb2x1bW4gdG8gdGhlIHRhYmxlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7XHUwMEEwc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkQ29sdW1uKCdpZCcsICdpbnRlZ2VyJywgKGNvbCkgPT4gY29sLmF1dG9JbmNyZW1lbnQoKS5wcmltYXJ5S2V5KCkpXG4gICAgICogICAuYWRkQ29sdW1uKCdmaXJzdF9uYW1lJywgJ3ZhcmNoYXIoNTApJywgKGNvbCkgPT4gY29sLm5vdE51bGwoKSlcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2xhc3RfbmFtZScsICd2YXJjaGFyKDI1NSknKVxuICAgICAqICAgLmFkZENvbHVtbignYmFua19iYWxhbmNlJywgJ251bWVyaWMoOCwgMiknKVxuICAgICAqICAgLy8gWW91IGNhbiBzcGVjaWZ5IGFueSBkYXRhIHR5cGUgdXNpbmcgdGhlIGBzcWxgIHRhZyBpZiB0aGUgdHlwZXNcbiAgICAgKiAgIC8vIGRvbid0IGluY2x1ZGUgaXQuXG4gICAgICogICAuYWRkQ29sdW1uKCdkYXRhJywgc3FsYGFueV90eXBlX2hlcmVgKVxuICAgICAqICAgLmFkZENvbHVtbigncGFyZW50X2lkJywgJ2ludGVnZXInLCAoY29sKSA9PlxuICAgICAqICAgICBjb2wucmVmZXJlbmNlcygncGVyc29uLmlkJykub25EZWxldGUoJ2Nhc2NhZGUnKVxuICAgICAqICAgKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogV2l0aCB0aGlzIG1ldGhvZCwgaXQncyBvbmNlIGFnYWluIGdvb2QgdG8gcmVtZW1iZXIgdGhhdCBLeXNlbHkganVzdCBidWlsZHMgdGhlXG4gICAgICogcXVlcnkgYW5kIGRvZXNuJ3QgcHJvdmlkZSB0aGUgc2FtZSBBUEkgZm9yIGFsbCBkYXRhYmFzZXMuIEZvciBleGFtcGxlLCBzb21lXG4gICAgICogZGF0YWJhc2VzIGxpa2Ugb2xkZXIgTXlTUUwgZG9uJ3Qgc3VwcG9ydCB0aGUgYHJlZmVyZW5jZXNgIHN0YXRlbWVudCBpbiB0aGVcbiAgICAgKiBjb2x1bW4gZGVmaW5pdGlvbi4gSW5zdGVhZCBmb3JlaWduIGtleSBjb25zdHJhaW50cyBuZWVkIHRvIGJlIGRlZmluZWQgaW4gdGhlXG4gICAgICogYGNyZWF0ZSB0YWJsZWAgcXVlcnkuIFNlZSB0aGUgbmV4dCBleGFtcGxlOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2lkJywgJ2ludGVnZXInLCAoY29sKSA9PiBjb2wucHJpbWFyeUtleSgpKVxuICAgICAqICAgLmFkZENvbHVtbigncGFyZW50X2lkJywgJ2ludGVnZXInKVxuICAgICAqICAgLmFkZEZvcmVpZ25LZXlDb25zdHJhaW50KFxuICAgICAqICAgICAncGVyc29uX3BhcmVudF9pZF9maycsXG4gICAgICogICAgIFsncGFyZW50X2lkJ10sXG4gICAgICogICAgICdwZXJzb24nLFxuICAgICAqICAgICBbJ2lkJ10sXG4gICAgICogICAgIChjYikgPT4gY2Iub25EZWxldGUoJ2Nhc2NhZGUnKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQW5vdGhlciBnb29kIGV4YW1wbGUgaXMgdGhhdCBQb3N0Z3JlU1FMIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYGF1dG9faW5jcmVtZW50YFxuICAgICAqIGtleXdvcmQgYW5kIHlvdSBuZWVkIHRvIGRlZmluZSBhbiBhdXRvaW5jcmVtZW50aW5nIGNvbHVtbiBmb3IgZXhhbXBsZSB1c2luZ1xuICAgICAqIGBzZXJpYWxgOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2lkJywgJ3NlcmlhbCcsIChjb2wpID0+IGNvbC5wcmltYXJ5S2V5KCkpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgYWRkQ29sdW1uKGNvbHVtbk5hbWUsIGRhdGFUeXBlLCBidWlsZCA9IG5vb3ApIHtcbiAgICAgICAgY29uc3QgY29sdW1uQnVpbGRlciA9IGJ1aWxkKG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jcmVhdGUoY29sdW1uTmFtZSwgcGFyc2VEYXRhVHlwZUV4cHJlc3Npb24oZGF0YVR5cGUpKSkpO1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVRhYmxlQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZVRhYmxlTm9kZS5jbG9uZVdpdGhDb2x1bW4odGhpcy4jcHJvcHMubm9kZSwgY29sdW1uQnVpbGRlci50b09wZXJhdGlvbk5vZGUoKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgcHJpbWFyeSBrZXkgY29uc3RyYWludCBmb3Igb25lIG9yIG1vcmUgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIFRoZSBjb25zdHJhaW50IG5hbWUgY2FuIGJlIGFueXRoaW5nIHlvdSB3YW50LCBidXQgaXQgbXVzdCBiZSB1bmlxdWVcbiAgICAgKiBhY3Jvc3MgdGhlIHdob2xlIGRhdGFiYXNlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignZmlyc3RfbmFtZScsICd2YXJjaGFyKDY0KScpXG4gICAgICogICAuYWRkQ29sdW1uKCdsYXN0X25hbWUnLCAndmFyY2hhcig2NCknKVxuICAgICAqICAgLmFkZFByaW1hcnlLZXlDb25zdHJhaW50KCdwcmltYXJ5X2tleScsIFsnZmlyc3RfbmFtZScsICdsYXN0X25hbWUnXSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhZGRQcmltYXJ5S2V5Q29uc3RyYWludChjb25zdHJhaW50TmFtZSwgY29sdW1ucywgYnVpbGQgPSBub29wKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRCdWlsZGVyID0gYnVpbGQobmV3IFByaW1hcnlLZXlDb25zdHJhaW50QnVpbGRlcihQcmltYXJ5S2V5Q29uc3RyYWludE5vZGUuY3JlYXRlKGNvbHVtbnMsIGNvbnN0cmFpbnROYW1lKSkpO1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVRhYmxlQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZVRhYmxlTm9kZS5jbG9uZVdpdGhDb25zdHJhaW50KHRoaXMuI3Byb3BzLm5vZGUsIGNvbnN0cmFpbnRCdWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSB1bmlxdWUgY29uc3RyYWludCBmb3Igb25lIG9yIG1vcmUgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIFRoZSBjb25zdHJhaW50IG5hbWUgY2FuIGJlIGFueXRoaW5nIHlvdSB3YW50LCBidXQgaXQgbXVzdCBiZSB1bmlxdWVcbiAgICAgKiBhY3Jvc3MgdGhlIHdob2xlIGRhdGFiYXNlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignZmlyc3RfbmFtZScsICd2YXJjaGFyKDY0KScpXG4gICAgICogICAuYWRkQ29sdW1uKCdsYXN0X25hbWUnLCAndmFyY2hhcig2NCknKVxuICAgICAqICAgLmFkZFVuaXF1ZUNvbnN0cmFpbnQoXG4gICAgICogICAgICdmaXJzdF9uYW1lX2xhc3RfbmFtZV91bmlxdWUnLFxuICAgICAqICAgICBbJ2ZpcnN0X25hbWUnLCAnbGFzdF9uYW1lJ11cbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEluIGRpYWxlY3RzIHN1Y2ggYXMgUG9zdGdyZVNRTCB5b3UgY2FuIHNwZWNpZnkgYG51bGxzIG5vdCBkaXN0aW5jdGAgYXMgZm9sbG93czpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkQ29sdW1uKCdmaXJzdF9uYW1lJywgJ3ZhcmNoYXIoNjQpJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2xhc3RfbmFtZScsICd2YXJjaGFyKDY0KScpXG4gICAgICogICAuYWRkVW5pcXVlQ29uc3RyYWludChcbiAgICAgKiAgICAgJ2ZpcnN0X25hbWVfbGFzdF9uYW1lX3VuaXF1ZScsXG4gICAgICogICAgIFsnZmlyc3RfbmFtZScsICdsYXN0X25hbWUnXSxcbiAgICAgKiAgICAgKGNiKSA9PiBjYi5udWxsc05vdERpc3RpbmN0KClcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhZGRVbmlxdWVDb25zdHJhaW50KGNvbnN0cmFpbnROYW1lLCBjb2x1bW5zLCBidWlsZCA9IG5vb3ApIHtcbiAgICAgICAgY29uc3QgdW5pcXVlQ29uc3RyYWludEJ1aWxkZXIgPSBidWlsZChuZXcgVW5pcXVlQ29uc3RyYWludE5vZGVCdWlsZGVyKFVuaXF1ZUNvbnN0cmFpbnROb2RlLmNyZWF0ZShjb2x1bW5zLCBjb25zdHJhaW50TmFtZSkpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVUYWJsZUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVUYWJsZU5vZGUuY2xvbmVXaXRoQ29uc3RyYWludCh0aGlzLiNwcm9wcy5ub2RlLCB1bmlxdWVDb25zdHJhaW50QnVpbGRlci50b09wZXJhdGlvbk5vZGUoKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY2hlY2sgY29uc3RyYWludC5cbiAgICAgKlxuICAgICAqIFRoZSBjb25zdHJhaW50IG5hbWUgY2FuIGJlIGFueXRoaW5nIHlvdSB3YW50LCBidXQgaXQgbXVzdCBiZSB1bmlxdWVcbiAgICAgKiBhY3Jvc3MgdGhlIHdob2xlIGRhdGFiYXNlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7XHUwMEEwc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ2FuaW1hbCcpXG4gICAgICogICAuYWRkQ29sdW1uKCdudW1iZXJfb2ZfbGVncycsICdpbnRlZ2VyJylcbiAgICAgKiAgIC5hZGRDaGVja0NvbnN0cmFpbnQoJ2NoZWNrX2xlZ3MnLCBzcWxgbnVtYmVyX29mX2xlZ3MgPCA1YClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhZGRDaGVja0NvbnN0cmFpbnQoY29uc3RyYWludE5hbWUsIGNoZWNrRXhwcmVzc2lvbiwgYnVpbGQgPSBub29wKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRCdWlsZGVyID0gYnVpbGQobmV3IENoZWNrQ29uc3RyYWludEJ1aWxkZXIoQ2hlY2tDb25zdHJhaW50Tm9kZS5jcmVhdGUoY2hlY2tFeHByZXNzaW9uLnRvT3BlcmF0aW9uTm9kZSgpLCBjb25zdHJhaW50TmFtZSkpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVUYWJsZUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVUYWJsZU5vZGUuY2xvbmVXaXRoQ29uc3RyYWludCh0aGlzLiNwcm9wcy5ub2RlLCBjb25zdHJhaW50QnVpbGRlci50b09wZXJhdGlvbk5vZGUoKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgZm9yZWlnbiBrZXkgY29uc3RyYWludC5cbiAgICAgKlxuICAgICAqIFRoZSBjb25zdHJhaW50IG5hbWUgY2FuIGJlIGFueXRoaW5nIHlvdSB3YW50LCBidXQgaXQgbXVzdCBiZSB1bmlxdWVcbiAgICAgKiBhY3Jvc3MgdGhlIHdob2xlIGRhdGFiYXNlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXQnKVxuICAgICAqICAgLmFkZENvbHVtbignb3duZXJfaWQnLCAnaW50ZWdlcicpXG4gICAgICogICAuYWRkRm9yZWlnbktleUNvbnN0cmFpbnQoXG4gICAgICogICAgICdvd25lcl9pZF9mb3JlaWduJyxcbiAgICAgKiAgICAgWydvd25lcl9pZCddLFxuICAgICAqICAgICAncGVyc29uJyxcbiAgICAgKiAgICAgWydpZCddLFxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQWRkIGNvbnN0cmFpbnQgZm9yIG11bHRpcGxlIGNvbHVtbnM6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXQnKVxuICAgICAqICAgLmFkZENvbHVtbignb3duZXJfaWQxJywgJ2ludGVnZXInKVxuICAgICAqICAgLmFkZENvbHVtbignb3duZXJfaWQyJywgJ2ludGVnZXInKVxuICAgICAqICAgLmFkZEZvcmVpZ25LZXlDb25zdHJhaW50KFxuICAgICAqICAgICAnb3duZXJfaWRfZm9yZWlnbicsXG4gICAgICogICAgIFsnb3duZXJfaWQxJywgJ293bmVyX2lkMiddLFxuICAgICAqICAgICAncGVyc29uJyxcbiAgICAgKiAgICAgWydpZDEnLCAnaWQyJ10sXG4gICAgICogICAgIChjYikgPT4gY2Iub25EZWxldGUoJ2Nhc2NhZGUnKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFkZEZvcmVpZ25LZXlDb25zdHJhaW50KGNvbnN0cmFpbnROYW1lLCBjb2x1bW5zLCB0YXJnZXRUYWJsZSwgdGFyZ2V0Q29sdW1ucywgYnVpbGQgPSBub29wKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBidWlsZChuZXcgRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyKEZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZS5jcmVhdGUoY29sdW1ucy5tYXAoQ29sdW1uTm9kZS5jcmVhdGUpLCBwYXJzZVRhYmxlKHRhcmdldFRhYmxlKSwgdGFyZ2V0Q29sdW1ucy5tYXAoQ29sdW1uTm9kZS5jcmVhdGUpLCBjb25zdHJhaW50TmFtZSkpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVUYWJsZUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVUYWJsZU5vZGUuY2xvbmVXaXRoQ29uc3RyYWludCh0aGlzLiNwcm9wcy5ub2RlLCBidWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWRkIGFueSBhZGRpdGlvbmFsIFNRTCB0byB0aGUgZnJvbnQgb2YgdGhlIHF1ZXJ5IF9fYWZ0ZXJfXyB0aGUgYGNyZWF0ZWAga2V5d29yZC5cbiAgICAgKlxuICAgICAqIEFsc28gc2VlIHtAbGluayB0ZW1wb3Jhcnl9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLm1vZGlmeUZyb250KHNxbGBnbG9iYWwgdGVtcG9yYXJ5YClcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2lkJywgJ2ludGVnZXInLCBjb2wgPT4gY29sLnByaW1hcnlLZXkoKSlcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2ZpcnN0X25hbWUnLCAndmFyY2hhcig2NCknLCBjb2wgPT4gY29sLm5vdE51bGwoKSlcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2xhc3RfbmFtZScsICd2YXJjaGFyKDY0KScsIGNvbCA9PiBjb2wubm90TnVsbCgpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVzKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSBnbG9iYWwgdGVtcG9yYXJ5IHRhYmxlIFwicGVyc29uXCIgKFxuICAgICAqICAgXCJpZFwiIGludGVnZXIgcHJpbWFyeSBrZXksXG4gICAgICogICBcImZpcnN0X25hbWVcIiB2YXJjaGFyKDY0KSBub3QgbnVsbCxcbiAgICAgKiAgIFwibGFzdF9uYW1lXCIgdmFyY2hhcig2NCkgbm90IG51bGxcbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbW9kaWZ5RnJvbnQobW9kaWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVUYWJsZUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVUYWJsZU5vZGUuY2xvbmVXaXRoRnJvbnRNb2RpZmllcih0aGlzLiNwcm9wcy5ub2RlLCBtb2RpZmllci50b09wZXJhdGlvbk5vZGUoKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZCBhbnkgYWRkaXRpb25hbCBTUUwgdG8gdGhlIGVuZCBvZiB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiBBbHNvIHNlZSB7QGxpbmsgb25Db21taXR9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignaWQnLCAnaW50ZWdlcicsIGNvbCA9PiBjb2wucHJpbWFyeUtleSgpKVxuICAgICAqICAgLmFkZENvbHVtbignZmlyc3RfbmFtZScsICd2YXJjaGFyKDY0KScsIGNvbCA9PiBjb2wubm90TnVsbCgpKVxuICAgICAqICAgLmFkZENvbHVtbignbGFzdF9uYW1lJywgJ3ZhcmNoYXIoNjQpJywgY29sID0+IGNvbC5ub3ROdWxsKCkpXG4gICAgICogICAubW9kaWZ5RW5kKHNxbGBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaWApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogY3JlYXRlIHRhYmxlIGBwZXJzb25gIChcbiAgICAgKiAgIGBpZGAgaW50ZWdlciBwcmltYXJ5IGtleSxcbiAgICAgKiAgIGBmaXJzdF9uYW1lYCB2YXJjaGFyKDY0KSBub3QgbnVsbCxcbiAgICAgKiAgIGBsYXN0X25hbWVgIHZhcmNoYXIoNjQpIG5vdCBudWxsXG4gICAgICogKSBjb2xsYXRlIHV0ZjhfdW5pY29kZV9jaVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG1vZGlmeUVuZChtb2RpZmllcikge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVRhYmxlQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZVRhYmxlTm9kZS5jbG9uZVdpdGhFbmRNb2RpZmllcih0aGlzLiNwcm9wcy5ub2RlLCBtb2RpZmllci50b09wZXJhdGlvbk5vZGUoKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgdG8gY3JlYXRlIHRhYmxlIGZyb20gYHNlbGVjdGAgcXVlcnkuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ2NvcHknKVxuICAgICAqICAgLnRlbXBvcmFyeSgpXG4gICAgICogICAuYXMoZGIuc2VsZWN0RnJvbSgncGVyc29uJykuc2VsZWN0KFsnZmlyc3RfbmFtZScsICdsYXN0X25hbWUnXSkpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGVtcG9yYXJ5IHRhYmxlIFwiY29weVwiIGFzXG4gICAgICogc2VsZWN0IFwiZmlyc3RfbmFtZVwiLCBcImxhc3RfbmFtZVwiIGZyb20gXCJwZXJzb25cIlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzKGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVUYWJsZUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVUYWJsZU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RRdWVyeTogcGFyc2VFeHByZXNzaW9uKGV4cHJlc3Npb24pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxscyB0aGUgZ2l2ZW4gZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3Rlc3QnKVxuICAgICAqICAgLiRjYWxsKChidWlsZGVyKSA9PiBidWlsZGVyLmFkZENvbHVtbignaWQnLCAnaW50ZWdlcicpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhpcyBpcyB1c2VmdWwgZm9yIGNyZWF0aW5nIHJldXNhYmxlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBjYWxsZWQgd2l0aCBhIGJ1aWxkZXIuXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7IHR5cGUgQ3JlYXRlVGFibGVCdWlsZGVyLCBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBjb25zdCBhZGREZWZhdWx0Q29sdW1ucyA9IChjdGI6IENyZWF0ZVRhYmxlQnVpbGRlcjxhbnksIGFueT4pID0+IHtcbiAgICAgKiAgIHJldHVybiBjdGJcbiAgICAgKiAgICAgLmFkZENvbHVtbignaWQnLCAnaW50ZWdlcicsIChjb2wpID0+IGNvbC5ub3ROdWxsKCkpXG4gICAgICogICAgIC5hZGRDb2x1bW4oJ2NyZWF0ZWRfYXQnLCAnZGF0ZScsIChjb2wpID0+XG4gICAgICogICAgICAgY29sLm5vdE51bGwoKS5kZWZhdWx0VG8oc3FsYG5vdygpYClcbiAgICAgKiAgICAgKVxuICAgICAqICAgICAuYWRkQ29sdW1uKCd1cGRhdGVkX2F0JywgJ2RhdGUnLCAoY29sKSA9PlxuICAgICAqICAgICAgIGNvbC5ub3ROdWxsKCkuZGVmYXVsdFRvKHNxbGBub3coKWApXG4gICAgICogICAgIClcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgndGVzdCcpXG4gICAgICogICAuJGNhbGwoYWRkRGVmYXVsdENvbHVtbnMpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IudHJhbnNmb3JtUXVlcnkodGhpcy4jcHJvcHMubm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmV4ZWN1dGVRdWVyeSh0aGlzLmNvbXBpbGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kcm9wLWluZGV4LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBEcm9wSW5kZXhOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvZHJvcC1pbmRleC1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlVGFibGUgfSBmcm9tICcuLi9wYXJzZXIvdGFibGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBEcm9wSW5kZXhCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHRhYmxlIHRoZSBpbmRleCB3YXMgY3JlYXRlZCBmb3IuIFRoaXMgaXMgbm90IG5lZWRlZFxuICAgICAqIGluIGFsbCBkaWFsZWN0cy5cbiAgICAgKi9cbiAgICBvbih0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IERyb3BJbmRleEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBEcm9wSW5kZXhOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgdGFibGU6IHBhcnNlVGFibGUodGFibGUpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZkV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wSW5kZXhCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogRHJvcEluZGV4Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGlmRXhpc3RzOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXNjYWRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERyb3BJbmRleEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBEcm9wSW5kZXhOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgY2FzY2FkZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5ub2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLnRvT3BlcmF0aW9uTm9kZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KHRoaXMuY29tcGlsZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Ryb3Atc2NoZW1hLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBEcm9wU2NoZW1hTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2Ryb3Atc2NoZW1hLW5vZGUuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIERyb3BTY2hlbWFCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBpZkV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wU2NoZW1hQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IERyb3BTY2hlbWFOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgaWZFeGlzdHM6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhc2NhZGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRHJvcFNjaGVtYUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBEcm9wU2NoZW1hTm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGNhc2NhZGU6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IudHJhbnNmb3JtUXVlcnkodGhpcy4jcHJvcHMubm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmV4ZWN1dGVRdWVyeSh0aGlzLmNvbXBpbGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kcm9wLXRhYmxlLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBEcm9wVGFibGVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvZHJvcC10YWJsZS1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBEcm9wVGFibGVCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBpZkV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wVGFibGVCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogRHJvcFRhYmxlTm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGlmRXhpc3RzOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXNjYWRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERyb3BUYWJsZUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBEcm9wVGFibGVOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgY2FzY2FkZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5ub2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLnRvT3BlcmF0aW9uTm9kZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KHRoaXMuY29tcGlsZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NyZWF0ZS12aWV3LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBTY2hlbWFibGVJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4vc2NoZW1hYmxlLWlkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ3JlYXRlVmlld05vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0NyZWF0ZVZpZXdOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShuYW1lKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0NyZWF0ZVZpZXdOb2RlJyxcbiAgICAgICAgICAgIG5hbWU6IFNjaGVtYWJsZUlkZW50aWZpZXJOb2RlLmNyZWF0ZShuYW1lKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGgoY3JlYXRlVmlldywgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uY3JlYXRlVmlldyxcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9pbW1lZGlhdGUtdmFsdWUtcGx1Z2luLmQudHNcIiAvPlxuaW1wb3J0IHsgSW1tZWRpYXRlVmFsdWVUcmFuc2Zvcm1lciB9IGZyb20gJy4vaW1tZWRpYXRlLXZhbHVlLXRyYW5zZm9ybWVyLmpzJztcbi8qKlxuICogVHJhbnNmb3JtcyBhbGwgVmFsdWVOb2RlcyB0byBpbW1lZGlhdGUuXG4gKlxuICogV0FSTklORyEgVGhpcyBzaG91bGQgbmV2ZXIgYmUgcGFydCBvZiB0aGUgcHVibGljIEFQSS4gVXNlcnMgc2hvdWxkIG5ldmVyIHVzZSB0aGlzLlxuICogVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWxwZXIuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBJbW1lZGlhdGVWYWx1ZVBsdWdpbiB7XG4gICAgI3RyYW5zZm9ybWVyID0gbmV3IEltbWVkaWF0ZVZhbHVlVHJhbnNmb3JtZXIoKTtcbiAgICB0cmFuc2Zvcm1RdWVyeShhcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiN0cmFuc2Zvcm1lci50cmFuc2Zvcm1Ob2RlKGFyZ3Mubm9kZSwgYXJncy5xdWVyeUlkKTtcbiAgICB9XG4gICAgdHJhbnNmb3JtUmVzdWx0KGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhcmdzLnJlc3VsdCk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jcmVhdGUtdmlldy1idWlsZGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ3JlYXRlVmlld05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jcmVhdGUtdmlldy1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlQ29sdW1uTmFtZSB9IGZyb20gJy4uL3BhcnNlci9yZWZlcmVuY2UtcGFyc2VyLmpzJztcbmltcG9ydCB7IEltbWVkaWF0ZVZhbHVlUGx1Z2luIH0gZnJvbSAnLi4vcGx1Z2luL2ltbWVkaWF0ZS12YWx1ZS9pbW1lZGlhdGUtdmFsdWUtcGx1Z2luLmpzJztcbmV4cG9ydCBjbGFzcyBDcmVhdGVWaWV3QnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgXCJ0ZW1wb3JhcnlcIiBtb2RpZmllci5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIHRvIGNyZWF0ZSBhIHRlbXBvcmFyeSB2aWV3LlxuICAgICAqL1xuICAgIHRlbXBvcmFyeSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVWaWV3QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZVZpZXdOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgdGVtcG9yYXJ5OiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXRlcmlhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlVmlld0J1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVWaWV3Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplZDogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT25seSBpbXBsZW1lbnRlZCBvbiBzb21lIGRpYWxlY3RzIGxpa2UgU1FMaXRlLiBPbiBtb3N0IGRpYWxlY3RzLCB1c2Uge0BsaW5rIG9yUmVwbGFjZX0uXG4gICAgICovXG4gICAgaWZOb3RFeGlzdHMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlVmlld0J1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVWaWV3Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGlmTm90RXhpc3RzOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvclJlcGxhY2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlVmlld0J1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVWaWV3Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIG9yUmVwbGFjZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29sdW1ucyhjb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlVmlld0J1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVWaWV3Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMubWFwKHBhcnNlQ29sdW1uTmFtZSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHNlbGVjdCBxdWVyeSBvciBhIGB2YWx1ZXNgIHN0YXRlbWVudCB0aGF0IGNyZWF0ZXMgdGhlIHZpZXcuXG4gICAgICpcbiAgICAgKiBXQVJOSU5HIVxuICAgICAqIFNvbWUgZGlhbGVjdHMgZG9uJ3Qgc3VwcG9ydCBwYXJhbWV0ZXJpemVkIHF1ZXJpZXMgaW4gRERMIHN0YXRlbWVudHMgYW5kIHRoZXJlZm9yZVxuICAgICAqIHRoZSBxdWVyeSBvciByYXcge0BsaW5rIHNxbCB9IGV4cHJlc3Npb24gcGFzc2VkIGhlcmUgaXMgaW50ZXJwb2xhdGVkIGludG8gYSBzaW5nbGVcbiAgICAgKiBzdHJpbmcgb3BlbmluZyBhbiBTUUwgaW5qZWN0aW9uIHZ1bG5lcmFiaWxpdHkuIERPIE5PVCBwYXNzIHVuY2hlY2tlZCB1c2VyIGlucHV0XG4gICAgICogaW50byB0aGUgcXVlcnkgb3IgcmF3IGV4cHJlc3Npb24gcGFzc2VkIHRvIHRoaXMgbWV0aG9kIVxuICAgICAqL1xuICAgIGFzKHF1ZXJ5KSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5Tm9kZSA9IHF1ZXJ5XG4gICAgICAgICAgICAud2l0aFBsdWdpbihuZXcgSW1tZWRpYXRlVmFsdWVQbHVnaW4oKSlcbiAgICAgICAgICAgIC50b09wZXJhdGlvbk5vZGUoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVWaWV3QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZVZpZXdOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgYXM6IHF1ZXJ5Tm9kZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5ub2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLnRvT3BlcmF0aW9uTm9kZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KHRoaXMuY29tcGlsZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Ryb3Atdmlldy1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgU2NoZW1hYmxlSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL3NjaGVtYWJsZS1pZGVudGlmaWVyLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IERyb3BWaWV3Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnRHJvcFZpZXdOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShuYW1lKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0Ryb3BWaWV3Tm9kZScsXG4gICAgICAgICAgICBuYW1lOiBTY2hlbWFibGVJZGVudGlmaWVyTm9kZS5jcmVhdGUobmFtZSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoKGRyb3BWaWV3LCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5kcm9wVmlldyxcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kcm9wLXZpZXctYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IERyb3BWaWV3Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2Ryb3Atdmlldy1ub2RlLmpzJztcbmV4cG9ydCBjbGFzcyBEcm9wVmlld0J1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIG1hdGVyaWFsaXplZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wVmlld0J1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBEcm9wVmlld05vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWQ6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmRXhpc3RzKCkge1xuICAgICAgICByZXR1cm4gbmV3IERyb3BWaWV3QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IERyb3BWaWV3Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGlmRXhpc3RzOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXNjYWRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERyb3BWaWV3QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IERyb3BWaWV3Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGNhc2NhZGU6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IudHJhbnNmb3JtUXVlcnkodGhpcy4jcHJvcHMubm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmV4ZWN1dGVRdWVyeSh0aGlzLmNvbXBpbGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jcmVhdGUtdHlwZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgVmFsdWVMaXN0Tm9kZSB9IGZyb20gJy4vdmFsdWUtbGlzdC1ub2RlLmpzJztcbmltcG9ydCB7IFZhbHVlTm9kZSB9IGZyb20gJy4vdmFsdWUtbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ3JlYXRlVHlwZU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0NyZWF0ZVR5cGVOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShuYW1lKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0NyZWF0ZVR5cGVOb2RlJyxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoRW51bShjcmVhdGVUeXBlLCB2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5jcmVhdGVUeXBlLFxuICAgICAgICAgICAgZW51bTogVmFsdWVMaXN0Tm9kZS5jcmVhdGUodmFsdWVzLm1hcChWYWx1ZU5vZGUuY3JlYXRlSW1tZWRpYXRlKSksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vY3JlYXRlLXR5cGUtYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IENyZWF0ZVR5cGVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXR5cGUtbm9kZS5qcyc7XG5leHBvcnQgY2xhc3MgQ3JlYXRlVHlwZUJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KHRoaXMuI3Byb3BzLm5vZGUsIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFudW0gdHlwZS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBkYi5zY2hlbWEuY3JlYXRlVHlwZSgnc3BlY2llcycpLmFzRW51bShbJ2NhdCcsICdkb2cnLCAnZnJvZyddKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzRW51bSh2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVUeXBlQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZVR5cGVOb2RlLmNsb25lV2l0aEVudW0odGhpcy4jcHJvcHMubm9kZSwgdmFsdWVzKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLnRvT3BlcmF0aW9uTm9kZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KHRoaXMuY29tcGlsZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Ryb3AtdHlwZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IERyb3BUeXBlTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnRHJvcFR5cGVOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShuYW1lKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0Ryb3BUeXBlTm9kZScsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aChkcm9wVHlwZSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uZHJvcFR5cGUsXG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZHJvcC10eXBlLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBEcm9wVHlwZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9kcm9wLXR5cGUtbm9kZS5qcyc7XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgY2xhc3MgRHJvcFR5cGVCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBpZkV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wVHlwZUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBEcm9wVHlwZU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBpZkV4aXN0czogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5ub2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLnRvT3BlcmF0aW9uTm9kZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KHRoaXMuY29tcGlsZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2lkZW50aWZpZXItcGFyc2VyLmQudHNcIiAvPlxuaW1wb3J0IHsgU2NoZW1hYmxlSWRlbnRpZmllck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9zY2hlbWFibGUtaWRlbnRpZmllci1ub2RlLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNjaGVtYWJsZUlkZW50aWZpZXIoaWQpIHtcbiAgICBjb25zdCBTQ0hFTUFfU0VQQVJBVE9SID0gJy4nO1xuICAgIGlmIChpZC5pbmNsdWRlcyhTQ0hFTUFfU0VQQVJBVE9SKSkge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGlkLnNwbGl0KFNDSEVNQV9TRVBBUkFUT1IpLm1hcCh0cmltKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIFNjaGVtYWJsZUlkZW50aWZpZXJOb2RlLmNyZWF0ZVdpdGhTY2hlbWEocGFydHNbMF0sIHBhcnRzWzFdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBzY2hlbWFibGUgaWRlbnRpZmllciAke2lkfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gU2NoZW1hYmxlSWRlbnRpZmllck5vZGUuY3JlYXRlKGlkKTtcbiAgICB9XG59XG5mdW5jdGlvbiB0cmltKHN0cikge1xuICAgIHJldHVybiBzdHIudHJpbSgpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9yZWZyZXNoLW1hdGVyaWFsaXplZC12aWV3LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBTY2hlbWFibGVJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4vc2NoZW1hYmxlLWlkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdSZWZyZXNoTWF0ZXJpYWxpemVkVmlld05vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdOb2RlJyxcbiAgICAgICAgICAgIG5hbWU6IFNjaGVtYWJsZUlkZW50aWZpZXJOb2RlLmNyZWF0ZShuYW1lKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGgoY3JlYXRlVmlldywgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uY3JlYXRlVmlldyxcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9yZWZyZXNoLW1hdGVyaWFsaXplZC12aWV3LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBSZWZyZXNoTWF0ZXJpYWxpemVkVmlld05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9yZWZyZXNoLW1hdGVyaWFsaXplZC12aWV3LW5vZGUuanMnO1xuZXhwb3J0IGNsYXNzIFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3QnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgXCJjb25jdXJyZW50bHlcIiBtb2RpZmllci5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIHRvIHJlZnJlc2ggdGhlIHZpZXcgd2l0aG91dCBsb2NraW5nIG91dCBjb25jdXJyZW50IHNlbGVjdHMgb24gdGhlIG1hdGVyaWFsaXplZCB2aWV3LlxuICAgICAqXG4gICAgICogV0FSTklORyFcbiAgICAgKiBUaGlzIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIFwid2l0aCBubyBkYXRhXCIgbW9kaWZpZXIuXG4gICAgICovXG4gICAgY29uY3VycmVudGx5KCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGNvbmN1cnJlbnRseTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3aXRoTm9EYXRhOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgXCJ3aXRoIGRhdGFcIiBtb2RpZmllci5cbiAgICAgKlxuICAgICAqIElmIHNwZWNpZmllZCAob3IgZGVmYXVsdHMpIHRoZSBiYWNraW5nIHF1ZXJ5IGlzIGV4ZWN1dGVkIHRvIHByb3ZpZGUgdGhlIG5ldyBkYXRhLCBhbmQgdGhlIG1hdGVyaWFsaXplZCB2aWV3IGlzIGxlZnQgaW4gYSBzY2FubmFibGUgc3RhdGVcbiAgICAgKi9cbiAgICB3aXRoRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWZyZXNoTWF0ZXJpYWxpemVkVmlld0J1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBSZWZyZXNoTWF0ZXJpYWxpemVkVmlld05vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICB3aXRoTm9EYXRhOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgXCJ3aXRoIG5vIGRhdGFcIiBtb2RpZmllci5cbiAgICAgKlxuICAgICAqIElmIHNwZWNpZmllZCwgbm8gbmV3IGRhdGEgaXMgZ2VuZXJhdGVkIGFuZCB0aGUgbWF0ZXJpYWxpemVkIHZpZXcgaXMgbGVmdCBpbiBhbiB1bnNjYW5uYWJsZSBzdGF0ZS5cbiAgICAgKlxuICAgICAqIFdBUk5JTkchXG4gICAgICogVGhpcyBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSBcImNvbmN1cnJlbnRseVwiIG1vZGlmaWVyLlxuICAgICAqL1xuICAgIHdpdGhOb0RhdGEoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgd2l0aE5vRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb25jdXJyZW50bHk6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KHRoaXMuI3Byb3BzLm5vZGUsIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBjb21waWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IuY29tcGlsZVF1ZXJ5KHRoaXMudG9PcGVyYXRpb25Ob2RlKCksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLiNwcm9wcy5leGVjdXRvci5leGVjdXRlUXVlcnkodGhpcy5jb21waWxlKCksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vc2NoZW1hLmQudHNcIiAvPlxuaW1wb3J0IHsgQWx0ZXJUYWJsZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hbHRlci10YWJsZS1ub2RlLmpzJztcbmltcG9ydCB7IENyZWF0ZUluZGV4Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NyZWF0ZS1pbmRleC1ub2RlLmpzJztcbmltcG9ydCB7IENyZWF0ZVNjaGVtYU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jcmVhdGUtc2NoZW1hLW5vZGUuanMnO1xuaW1wb3J0IHsgQ3JlYXRlVGFibGVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXRhYmxlLW5vZGUuanMnO1xuaW1wb3J0IHsgRHJvcEluZGV4Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2Ryb3AtaW5kZXgtbm9kZS5qcyc7XG5pbXBvcnQgeyBEcm9wU2NoZW1hTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2Ryb3Atc2NoZW1hLW5vZGUuanMnO1xuaW1wb3J0IHsgRHJvcFRhYmxlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2Ryb3AtdGFibGUtbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVRhYmxlIH0gZnJvbSAnLi4vcGFyc2VyL3RhYmxlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBBbHRlclRhYmxlQnVpbGRlciB9IGZyb20gJy4vYWx0ZXItdGFibGUtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBDcmVhdGVJbmRleEJ1aWxkZXIgfSBmcm9tICcuL2NyZWF0ZS1pbmRleC1idWlsZGVyLmpzJztcbmltcG9ydCB7IENyZWF0ZVNjaGVtYUJ1aWxkZXIgfSBmcm9tICcuL2NyZWF0ZS1zY2hlbWEtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBDcmVhdGVUYWJsZUJ1aWxkZXIgfSBmcm9tICcuL2NyZWF0ZS10YWJsZS1idWlsZGVyLmpzJztcbmltcG9ydCB7IERyb3BJbmRleEJ1aWxkZXIgfSBmcm9tICcuL2Ryb3AtaW5kZXgtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBEcm9wU2NoZW1hQnVpbGRlciB9IGZyb20gJy4vZHJvcC1zY2hlbWEtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBEcm9wVGFibGVCdWlsZGVyIH0gZnJvbSAnLi9kcm9wLXRhYmxlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgY3JlYXRlUXVlcnlJZCB9IGZyb20gJy4uL3V0aWwvcXVlcnktaWQuanMnO1xuaW1wb3J0IHsgV2l0aFNjaGVtYVBsdWdpbiB9IGZyb20gJy4uL3BsdWdpbi93aXRoLXNjaGVtYS93aXRoLXNjaGVtYS1wbHVnaW4uanMnO1xuaW1wb3J0IHsgQ3JlYXRlVmlld0J1aWxkZXIgfSBmcm9tICcuL2NyZWF0ZS12aWV3LWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgQ3JlYXRlVmlld05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jcmVhdGUtdmlldy1ub2RlLmpzJztcbmltcG9ydCB7IERyb3BWaWV3QnVpbGRlciB9IGZyb20gJy4vZHJvcC12aWV3LWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgRHJvcFZpZXdOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvZHJvcC12aWV3LW5vZGUuanMnO1xuaW1wb3J0IHsgQ3JlYXRlVHlwZUJ1aWxkZXIgfSBmcm9tICcuL2NyZWF0ZS10eXBlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgRHJvcFR5cGVCdWlsZGVyIH0gZnJvbSAnLi9kcm9wLXR5cGUtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBDcmVhdGVUeXBlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NyZWF0ZS10eXBlLW5vZGUuanMnO1xuaW1wb3J0IHsgRHJvcFR5cGVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvZHJvcC10eXBlLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VTY2hlbWFibGVJZGVudGlmaWVyIH0gZnJvbSAnLi4vcGFyc2VyL2lkZW50aWZpZXItcGFyc2VyLmpzJztcbmltcG9ydCB7IFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3QnVpbGRlciB9IGZyb20gJy4vcmVmcmVzaC1tYXRlcmlhbGl6ZWQtdmlldy1idWlsZGVyLmpzJztcbmltcG9ydCB7IFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3JlZnJlc2gtbWF0ZXJpYWxpemVkLXZpZXctbm9kZS5qcyc7XG4vKipcbiAqIFByb3ZpZGVzIG1ldGhvZHMgZm9yIGJ1aWxkaW5nIGRhdGFiYXNlIHNjaGVtYS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNjaGVtYU1vZHVsZSB7XG4gICAgI2V4ZWN1dG9yO1xuICAgIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgICAgIHRoaXMuI2V4ZWN1dG9yID0gZXhlY3V0b3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyB0YWJsZS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogVGhpcyBleGFtcGxlIGNyZWF0ZXMgYSBuZXcgdGFibGUgd2l0aCBjb2x1bW5zIGBpZGAsIGBmaXJzdF9uYW1lYCxcbiAgICAgKiBgbGFzdF9uYW1lYCBhbmQgYGdlbmRlcmA6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignaWQnLCAnaW50ZWdlcicsIGNvbCA9PiBjb2wucHJpbWFyeUtleSgpLmF1dG9JbmNyZW1lbnQoKSlcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2ZpcnN0X25hbWUnLCAndmFyY2hhcicsIGNvbCA9PiBjb2wubm90TnVsbCgpKVxuICAgICAqICAgLmFkZENvbHVtbignbGFzdF9uYW1lJywgJ3ZhcmNoYXInLCBjb2wgPT4gY29sLm5vdE51bGwoKSlcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2dlbmRlcicsICd2YXJjaGFyJylcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoaXMgZXhhbXBsZSBjcmVhdGVzIGEgdGFibGUgd2l0aCBhIGZvcmVpZ24ga2V5LiBOb3QgYWxsIGRhdGFiYXNlXG4gICAgICogZW5naW5lcyBzdXBwb3J0IGNvbHVtbi1sZXZlbCBmb3JlaWduIGtleSBjb25zdHJhaW50IGRlZmluaXRpb25zLlxuICAgICAqIEZvciBleGFtcGxlIGlmIHlvdSBhcmUgdXNpbmcgTXlTUUwgNS5YIHNlZSB0aGUgbmV4dCBleGFtcGxlIGFmdGVyXG4gICAgICogdGhpcyBvbmUuXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXQnKVxuICAgICAqICAgLmFkZENvbHVtbignaWQnLCAnaW50ZWdlcicsIGNvbCA9PiBjb2wucHJpbWFyeUtleSgpLmF1dG9JbmNyZW1lbnQoKSlcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ293bmVyX2lkJywgJ2ludGVnZXInLCBjb2wgPT4gY29sXG4gICAgICogICAgIC5yZWZlcmVuY2VzKCdwZXJzb24uaWQnKVxuICAgICAqICAgICAub25EZWxldGUoJ2Nhc2NhZGUnKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhpcyBleGFtcGxlIGFkZHMgYSBmb3JlaWduIGtleSBjb25zdHJhaW50IGZvciBhIGNvbHVtbnMganVzdFxuICAgICAqIGxpa2UgdGhlIHByZXZpb3VzIGV4YW1wbGUsIGJ1dCB1c2luZyBhIHRhYmxlLWxldmVsIHN0YXRlbWVudC5cbiAgICAgKiBPbiBNeVNRTCA1LlggeW91IG5lZWQgdG8gZGVmaW5lIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnRzIGxpa2VcbiAgICAgKiB0aGlzOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGV0JylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2lkJywgJ2ludGVnZXInLCBjb2wgPT4gY29sLnByaW1hcnlLZXkoKS5hdXRvSW5jcmVtZW50KCkpXG4gICAgICogICAuYWRkQ29sdW1uKCdvd25lcl9pZCcsICdpbnRlZ2VyJylcbiAgICAgKiAgIC5hZGRGb3JlaWduS2V5Q29uc3RyYWludChcbiAgICAgKiAgICAgJ3BldF9vd25lcl9pZF9mb3JlaWduJywgWydvd25lcl9pZCddLCAncGVyc29uJywgWydpZCddLFxuICAgICAqICAgICAoY29uc3RyYWludCkgPT4gY29uc3RyYWludC5vbkRlbGV0ZSgnY2FzY2FkZScpXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgY3JlYXRlVGFibGUodGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVUYWJsZUJ1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI2V4ZWN1dG9yLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlVGFibGVOb2RlLmNyZWF0ZShwYXJzZVRhYmxlKHRhYmxlKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEcm9wIGEgdGFibGUuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuZHJvcFRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGRyb3BUYWJsZSh0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IERyb3BUYWJsZUJ1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI2V4ZWN1dG9yLFxuICAgICAgICAgICAgbm9kZTogRHJvcFRhYmxlTm9kZS5jcmVhdGUocGFyc2VUYWJsZSh0YWJsZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IGluZGV4LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZUluZGV4KCdwZXJzb25fZnVsbF9uYW1lX3VuaXF1ZV9pbmRleCcpXG4gICAgICogICAub24oJ3BlcnNvbicpXG4gICAgICogICAuY29sdW1ucyhbJ2ZpcnN0X25hbWUnLCAnbGFzdF9uYW1lJ10pXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgY3JlYXRlSW5kZXgoaW5kZXhOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlSW5kZXhCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNleGVjdXRvcixcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZUluZGV4Tm9kZS5jcmVhdGUoaW5kZXhOYW1lKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERyb3AgYW4gaW5kZXguXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuZHJvcEluZGV4KCdwZXJzb25fZnVsbF9uYW1lX3VuaXF1ZV9pbmRleCcpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgZHJvcEluZGV4KGluZGV4TmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IERyb3BJbmRleEJ1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI2V4ZWN1dG9yLFxuICAgICAgICAgICAgbm9kZTogRHJvcEluZGV4Tm9kZS5jcmVhdGUoaW5kZXhOYW1lKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBzY2hlbWEuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlU2NoZW1hKCdzb21lX3NjaGVtYScpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgY3JlYXRlU2NoZW1hKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVNjaGVtYUJ1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI2V4ZWN1dG9yLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlU2NoZW1hTm9kZS5jcmVhdGUoc2NoZW1hKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERyb3AgYSBzY2hlbWEuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuZHJvcFNjaGVtYSgnc29tZV9zY2hlbWEnKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGRyb3BTY2hlbWEoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBuZXcgRHJvcFNjaGVtYUJ1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI2V4ZWN1dG9yLFxuICAgICAgICAgICAgbm9kZTogRHJvcFNjaGVtYU5vZGUuY3JlYXRlKHNjaGVtYSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbHRlciBhIHRhYmxlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmFsdGVyVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWx0ZXJDb2x1bW4oJ2ZpcnN0X25hbWUnLCAoYWMpID0+IGFjLnNldERhdGFUeXBlKCd0ZXh0JykpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgYWx0ZXJUYWJsZSh0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNleGVjdXRvcixcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNyZWF0ZShwYXJzZVRhYmxlKHRhYmxlKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgdmlldy5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVWaWV3KCdkb2dzJylcbiAgICAgKiAgIC5vclJlcGxhY2UoKVxuICAgICAqICAgLmFzKGRiLnNlbGVjdEZyb20oJ3BldCcpLnNlbGVjdEFsbCgpLndoZXJlKCdzcGVjaWVzJywgJz0nLCAnZG9nJykpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgY3JlYXRlVmlldyh2aWV3TmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVZpZXdCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNleGVjdXRvcixcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZVZpZXdOb2RlLmNyZWF0ZSh2aWV3TmFtZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWZyZXNoIGEgbWF0ZXJpYWxpemVkIHZpZXcuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAucmVmcmVzaE1hdGVyaWFsaXplZFZpZXcoJ215X3ZpZXcnKVxuICAgICAqICAgLmNvbmN1cnJlbnRseSgpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcmVmcmVzaE1hdGVyaWFsaXplZFZpZXcodmlld05hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWZyZXNoTWF0ZXJpYWxpemVkVmlld0J1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI2V4ZWN1dG9yLFxuICAgICAgICAgICAgbm9kZTogUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdOb2RlLmNyZWF0ZSh2aWV3TmFtZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEcm9wIGEgdmlldy5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5kcm9wVmlldygnZG9ncycpXG4gICAgICogICAuaWZFeGlzdHMoKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGRyb3BWaWV3KHZpZXdOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgRHJvcFZpZXdCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNleGVjdXRvcixcbiAgICAgICAgICAgIG5vZGU6IERyb3BWaWV3Tm9kZS5jcmVhdGUodmlld05hbWUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IHR5cGUuXG4gICAgICpcbiAgICAgKiBPbmx5IHNvbWUgZGlhbGVjdHMgbGlrZSBQb3N0Z3JlU1FMIGhhdmUgdXNlci1kZWZpbmVkIHR5cGVzLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVR5cGUoJ3NwZWNpZXMnKVxuICAgICAqICAgLmFzRW51bShbJ2RvZycsICdjYXQnLCAnZnJvZyddKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNyZWF0ZVR5cGUodHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVUeXBlQnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jZXhlY3V0b3IsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVUeXBlTm9kZS5jcmVhdGUocGFyc2VTY2hlbWFibGVJZGVudGlmaWVyKHR5cGVOYW1lKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEcm9wIGEgdHlwZS5cbiAgICAgKlxuICAgICAqIE9ubHkgc29tZSBkaWFsZWN0cyBsaWtlIFBvc3RncmVTUUwgaGF2ZSB1c2VyLWRlZmluZWQgdHlwZXMuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuZHJvcFR5cGUoJ3NwZWNpZXMnKVxuICAgICAqICAgLmlmRXhpc3RzKClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkcm9wVHlwZSh0eXBlTmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IERyb3BUeXBlQnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jZXhlY3V0b3IsXG4gICAgICAgICAgICBub2RlOiBEcm9wVHlwZU5vZGUuY3JlYXRlKHBhcnNlU2NoZW1hYmxlSWRlbnRpZmllcih0eXBlTmFtZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBzY2hlbWEgbW9kdWxlIHdpdGggdGhlIGdpdmVuIHBsdWdpbiBpbnN0YWxsZWQuXG4gICAgICovXG4gICAgd2l0aFBsdWdpbihwbHVnaW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTY2hlbWFNb2R1bGUodGhpcy4jZXhlY3V0b3Iud2l0aFBsdWdpbihwbHVnaW4pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBzY2hlbWEgbW9kdWxlICB3aXRob3V0IGFueSBwbHVnaW5zLlxuICAgICAqL1xuICAgIHdpdGhvdXRQbHVnaW5zKCkge1xuICAgICAgICByZXR1cm4gbmV3IFNjaGVtYU1vZHVsZSh0aGlzLiNleGVjdXRvci53aXRob3V0UGx1Z2lucygpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VlIHtAbGluayBRdWVyeUNyZWF0b3Iud2l0aFNjaGVtYX1cbiAgICAgKi9cbiAgICB3aXRoU2NoZW1hKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gbmV3IFNjaGVtYU1vZHVsZSh0aGlzLiNleGVjdXRvci53aXRoUGx1Z2luQXRGcm9udChuZXcgV2l0aFNjaGVtYVBsdWdpbihzY2hlbWEpKSk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9keW5hbWljLmQudHNcIiAvPlxuaW1wb3J0IHsgRHluYW1pY1JlZmVyZW5jZUJ1aWxkZXIgfSBmcm9tICcuL2R5bmFtaWMtcmVmZXJlbmNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgRHluYW1pY1RhYmxlQnVpbGRlciB9IGZyb20gJy4vZHluYW1pYy10YWJsZS1idWlsZGVyLmpzJztcbmV4cG9ydCBjbGFzcyBEeW5hbWljTW9kdWxlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZHluYW1pYyByZWZlcmVuY2UgdG8gYSBjb2x1bW4gdGhhdCBpcyBub3Qga25vdyBhdCBjb21waWxlIHRpbWUuXG4gICAgICpcbiAgICAgKiBLeXNlbHkgaXMgYnVpbHQgaW4gYSB3YXkgdGhhdCBieSBkZWZhdWx0IHlvdSBjYW4ndCByZWZlciB0byB0YWJsZXMgb3IgY29sdW1uc1xuICAgICAqIHRoYXQgYXJlIG5vdCBhY3R1YWxseSB2aXNpYmxlIGluIHRoZSBjdXJyZW50IHF1ZXJ5IGFuZCBjb250ZXh0LiBUaGlzIGlzIGFsbFxuICAgICAqIGRvbmUgYnkgVHlwZVNjcmlwdCBhdCBjb21waWxlIHRpbWUsIHdoaWNoIG1lYW5zIHRoYXQgeW91IG5lZWQgdG8ga25vdyB0aGVcbiAgICAgKiBjb2x1bW5zIGFuZCB0YWJsZXMgYXQgY29tcGlsZSB0aW1lLiBUaGlzIGlzIG5vdCBhbHdheXMgdGhlIGNhc2Ugb2YgY291cnNlLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbWVhbnQgdG8gYmUgdXNlZCBpbiB0aG9zZSBjYXNlcyB3aGVyZSB0aGUgY29sdW1uIG5hbWVzXG4gICAgICogY29tZSBmcm9tIHRoZSB1c2VyIGlucHV0IG9yIGFyZSBub3Qgb3RoZXJ3aXNlIGtub3duIGF0IGNvbXBpbGUgdGltZS5cbiAgICAgKlxuICAgICAqIFdBUk5JTkchIFVubGlrZSB2YWx1ZXMsIGNvbHVtbiBuYW1lcyBhcmUgbm90IGVzY2FwZWQgYnkgdGhlIGRhdGFiYXNlIGVuZ2luZVxuICAgICAqIG9yIEt5c2VseSBhbmQgaWYgeW91IHBhc3MgaW4gdW5jaGVja2VkIGNvbHVtbiBuYW1lcyB1c2luZyB0aGlzIG1ldGhvZCwgeW91XG4gICAgICogY3JlYXRlIGFuIFNRTCBpbmplY3Rpb24gdnVsbmVyYWJpbGl0eS4gQWx3YXlzIF9fYWx3YXlzX18gdmFsaWRhdGUgdGhlIHVzZXJcbiAgICAgKiBpbnB1dCBiZWZvcmUgcGFzc2luZyBpdCB0byB0aGlzIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIFRoZXJlIGFyZSBjb3VwbGUgb2YgZXhhbXBsZXMgYmVsb3cgZm9yIHNvbWUgdXNlIGNhc2VzLCBidXQgeW91IGNhbiBwYXNzXG4gICAgICogYHJlZmAgdG8gb3RoZXIgbWV0aG9kcyBhcyB3ZWxsLiBJZiB0aGUgdHlwZXMgYWxsb3cgeW91IHRvIHBhc3MgYSBgcmVmYFxuICAgICAqIHZhbHVlIHRvIHNvbWUgcGxhY2UsIGl0IHNob3VsZCB3b3JrLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBGaWx0ZXIgYnkgYSBjb2x1bW4gbm90IGtub3cgYXQgY29tcGlsZSB0aW1lOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhc3luYyBmdW5jdGlvbiBzb21lUXVlcnkoZmlsdGVyQ29sdW1uOiBzdHJpbmcsIGZpbHRlclZhbHVlOiBzdHJpbmcpIHtcbiAgICAgKiAgIGNvbnN0IHsgcmVmIH0gPSBkYi5keW5hbWljXG4gICAgICpcbiAgICAgKiAgIHJldHVybiBhd2FpdCBkYlxuICAgICAqICAgICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAgICAgKiAgICAgLnNlbGVjdEFsbCgpXG4gICAgICogICAgIC53aGVyZShyZWYoZmlsdGVyQ29sdW1uKSwgJz0nLCBmaWx0ZXJWYWx1ZSlcbiAgICAgKiAgICAgLmV4ZWN1dGUoKVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHNvbWVRdWVyeSgnZmlyc3RfbmFtZScsICdBcm5vbGQnKVxuICAgICAqIHNvbWVRdWVyeSgncGVyc29uLmxhc3RfbmFtZScsICdBbmlzdG9uJylcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIE9yZGVyIGJ5IGEgY29sdW1uIG5vdCBrbm93IGF0IGNvbXBpbGUgdGltZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXN5bmMgZnVuY3Rpb24gc29tZVF1ZXJ5KG9yZGVyQnk6IHN0cmluZykge1xuICAgICAqICAgY29uc3QgeyByZWYgfSA9IGRiLmR5bmFtaWNcbiAgICAgKlxuICAgICAqICAgcmV0dXJuIGF3YWl0IGRiXG4gICAgICogICAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICAgICAqICAgICAuc2VsZWN0KCdwZXJzb24uZmlyc3RfbmFtZSBhcyBmbicpXG4gICAgICogICAgIC5vcmRlckJ5KHJlZihvcmRlckJ5KSlcbiAgICAgKiAgICAgLmV4ZWN1dGUoKVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHNvbWVRdWVyeSgnZm4nKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogSW4gdGhpcyBleGFtcGxlIHdlIGFkZCBzZWxlY3Rpb25zIGR5bmFtaWNhbGx5OlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCB7IHJlZiB9ID0gZGIuZHluYW1pY1xuICAgICAqXG4gICAgICogLy8gU29tZSBjb2x1bW4gbmFtZSBwcm92aWRlZCBieSB0aGUgdXNlci4gVmFsdWUgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZS5cbiAgICAgKiBjb25zdCBjb2x1bW5Gcm9tVXNlcklucHV0OiBQb3NzaWJsZUNvbHVtbnMgPSAnYmlydGhkYXRlJztcbiAgICAgKlxuICAgICAqIC8vIEEgdHlwZSB0aGF0IGxpc3RzIGFsbCBwb3NzaWJsZSB2YWx1ZXMgYGNvbHVtbkZyb21Vc2VySW5wdXRgIGNhbiBoYXZlLlxuICAgICAqIC8vIFlvdSBjYW4gdXNlIGBrZXlvZiBQZXJzb25gIGlmIGFueSBjb2x1bW4gb2YgYW4gaW50ZXJmYWNlIGlzIGFsbG93ZWQuXG4gICAgICogdHlwZSBQb3NzaWJsZUNvbHVtbnMgPSAnbGFzdF9uYW1lJyB8ICdmaXJzdF9uYW1lJyB8ICdiaXJ0aGRhdGUnXG4gICAgICpcbiAgICAgKiBjb25zdCBbcGVyc29uXSA9IGF3YWl0IGRiLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gICAgICogICAuc2VsZWN0KFtcbiAgICAgKiAgICAgcmVmPFBvc3NpYmxlQ29sdW1ucz4oY29sdW1uRnJvbVVzZXJJbnB1dCksXG4gICAgICogICAgICdpZCdcbiAgICAgKiAgIF0pXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICpcbiAgICAgKiAvLyBUaGUgcmVzdWx0aW5nIHR5cGUgY29udGFpbnMgYWxsIGBQb3NzaWJsZUNvbHVtbnNgIGFzIG9wdGlvbmFsIGZpZWxkc1xuICAgICAqIC8vIGJlY2F1c2Ugd2UgY2Fubm90IGtub3cgd2hpY2ggZmllbGQgd2FzIGFjdHVhbGx5IHNlbGVjdGVkIGJlZm9yZVxuICAgICAqIC8vIHJ1bm5pbmcgdGhlIGNvZGUuXG4gICAgICogY29uc3QgbGFzdE5hbWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBwZXJzb24/Lmxhc3RfbmFtZVxuICAgICAqIGNvbnN0IGZpcnN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gcGVyc29uPy5maXJzdF9uYW1lXG4gICAgICogY29uc3QgYmlydGhEYXRlOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHBlcnNvbj8uYmlydGhkYXRlXG4gICAgICpcbiAgICAgKiAvLyBUaGUgcmVzdWx0IHR5cGUgYWxzbyBjb250YWlucyB0aGUgY29tcGlsZSB0aW1lIHNlbGVjdGlvbiBgaWRgLlxuICAgICAqIHBlcnNvbj8uaWRcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZWYocmVmZXJlbmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRHluYW1pY1JlZmVyZW5jZUJ1aWxkZXIocmVmZXJlbmNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHRhYmxlIHJlZmVyZW5jZSB0byBhIHRhYmxlIHRoYXQncyBub3QgZnVsbHkga25vd24gYXQgY29tcGlsZSB0aW1lLlxuICAgICAqXG4gICAgICogVGhlIHR5cGUgYFRgIGlzIGFsbG93ZWQgdG8gYmUgYSB1bmlvbiBvZiBtdWx0aXBsZSB0YWJsZXMuXG4gICAgICpcbiAgICAgKiA8IS0tIHNpdGVFeGFtcGxlKFwic2VsZWN0XCIsIFwiR2VuZXJpYyBmaW5kIHF1ZXJ5XCIsIDEzMCkgLS0+XG4gICAgICpcbiAgICAgKiBBIGdlbmVyaWMgdHlwZS1zYWZlIGhlbHBlciBmdW5jdGlvbiBmb3IgZmluZGluZyBhIHJvdyBieSBhIGNvbHVtbiB2YWx1ZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgU2VsZWN0VHlwZSB9IGZyb20gJ2t5c2VseSdcbiAgICAgKiBpbXBvcnQgeyBEYXRhYmFzZSB9IGZyb20gJ3R5cGUtZWRpdG9yJ1xuICAgICAqXG4gICAgICogYXN5bmMgZnVuY3Rpb24gZ2V0Um93QnlDb2x1bW48XG4gICAgICogICBUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsXG4gICAgICogICBDIGV4dGVuZHMga2V5b2YgRGF0YWJhc2VbVF0gJiBzdHJpbmcsXG4gICAgICogICBWIGV4dGVuZHMgU2VsZWN0VHlwZTxEYXRhYmFzZVtUXVtDXT4sXG4gICAgICogPih0OiBULCBjOiBDLCB2OiBWKSB7XG4gICAgICogICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgZHluYW1pYyBtb2R1bGUgc2luY2UgdGhlIHRhYmxlIG5hbWVcbiAgICAgKiAgIC8vIGlzIG5vdCBrbm93biBhdCBjb21waWxlIHRpbWUuXG4gICAgICogICBjb25zdCB7IHRhYmxlLCByZWYgfSA9IGRiLmR5bmFtaWNcbiAgICAgKlxuICAgICAqICAgcmV0dXJuIGF3YWl0IGRiXG4gICAgICogICAgIC5zZWxlY3RGcm9tKHRhYmxlKHQpLmFzKCd0JykpXG4gICAgICogICAgIC5zZWxlY3RBbGwoKVxuICAgICAqICAgICAud2hlcmUocmVmKGMpLCAnPScsIHYpXG4gICAgICogICAgIC5vcmRlckJ5KCd0LmlkJylcbiAgICAgKiAgICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBjb25zdCBwZXJzb24gPSBhd2FpdCBnZXRSb3dCeUNvbHVtbigncGVyc29uJywgJ2ZpcnN0X25hbWUnLCAnQXJub2xkJylcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB0YWJsZSh0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IER5bmFtaWNUYWJsZUJ1aWxkZXIodGFibGUpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZGVmYXVsdC1jb25uZWN0aW9uLXByb3ZpZGVyLmQudHNcIiAvPlxuZXhwb3J0IGNsYXNzIERlZmF1bHRDb25uZWN0aW9uUHJvdmlkZXIge1xuICAgICNkcml2ZXI7XG4gICAgY29uc3RydWN0b3IoZHJpdmVyKSB7XG4gICAgICAgIHRoaXMuI2RyaXZlciA9IGRyaXZlcjtcbiAgICB9XG4gICAgYXN5bmMgcHJvdmlkZUNvbm5lY3Rpb24oY29uc3VtZXIpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IHRoaXMuI2RyaXZlci5hY3F1aXJlQ29ubmVjdGlvbigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGNvbnN1bWVyKGNvbm5lY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4jZHJpdmVyLnJlbGVhc2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kZWZhdWx0LXF1ZXJ5LWV4ZWN1dG9yLmQudHNcIiAvPlxuaW1wb3J0IHsgUXVlcnlFeGVjdXRvckJhc2UgfSBmcm9tICcuL3F1ZXJ5LWV4ZWN1dG9yLWJhc2UuanMnO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRRdWVyeUV4ZWN1dG9yIGV4dGVuZHMgUXVlcnlFeGVjdXRvckJhc2Uge1xuICAgICNjb21waWxlcjtcbiAgICAjYWRhcHRlcjtcbiAgICAjY29ubmVjdGlvblByb3ZpZGVyO1xuICAgIGNvbnN0cnVjdG9yKGNvbXBpbGVyLCBhZGFwdGVyLCBjb25uZWN0aW9uUHJvdmlkZXIsIHBsdWdpbnMgPSBbXSkge1xuICAgICAgICBzdXBlcihwbHVnaW5zKTtcbiAgICAgICAgdGhpcy4jY29tcGlsZXIgPSBjb21waWxlcjtcbiAgICAgICAgdGhpcy4jYWRhcHRlciA9IGFkYXB0ZXI7XG4gICAgICAgIHRoaXMuI2Nvbm5lY3Rpb25Qcm92aWRlciA9IGNvbm5lY3Rpb25Qcm92aWRlcjtcbiAgICB9XG4gICAgZ2V0IGFkYXB0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhZGFwdGVyO1xuICAgIH1cbiAgICBjb21waWxlUXVlcnkobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY29tcGlsZXIuY29tcGlsZVF1ZXJ5KG5vZGUsIHF1ZXJ5SWQpO1xuICAgIH1cbiAgICBwcm92aWRlQ29ubmVjdGlvbihjb25zdW1lcikge1xuICAgICAgICByZXR1cm4gdGhpcy4jY29ubmVjdGlvblByb3ZpZGVyLnByb3ZpZGVDb25uZWN0aW9uKGNvbnN1bWVyKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbnMocGx1Z2lucykge1xuICAgICAgICByZXR1cm4gbmV3IERlZmF1bHRRdWVyeUV4ZWN1dG9yKHRoaXMuI2NvbXBpbGVyLCB0aGlzLiNhZGFwdGVyLCB0aGlzLiNjb25uZWN0aW9uUHJvdmlkZXIsIFsuLi50aGlzLnBsdWdpbnMsIC4uLnBsdWdpbnNdKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbihwbHVnaW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0UXVlcnlFeGVjdXRvcih0aGlzLiNjb21waWxlciwgdGhpcy4jYWRhcHRlciwgdGhpcy4jY29ubmVjdGlvblByb3ZpZGVyLCBbLi4udGhpcy5wbHVnaW5zLCBwbHVnaW5dKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbkF0RnJvbnQocGx1Z2luKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVmYXVsdFF1ZXJ5RXhlY3V0b3IodGhpcy4jY29tcGlsZXIsIHRoaXMuI2FkYXB0ZXIsIHRoaXMuI2Nvbm5lY3Rpb25Qcm92aWRlciwgW3BsdWdpbiwgLi4udGhpcy5wbHVnaW5zXSk7XG4gICAgfVxuICAgIHdpdGhDb25uZWN0aW9uUHJvdmlkZXIoY29ubmVjdGlvblByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVmYXVsdFF1ZXJ5RXhlY3V0b3IodGhpcy4jY29tcGlsZXIsIHRoaXMuI2FkYXB0ZXIsIGNvbm5lY3Rpb25Qcm92aWRlciwgWy4uLnRoaXMucGx1Z2luc10pO1xuICAgIH1cbiAgICB3aXRob3V0UGx1Z2lucygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0UXVlcnlFeGVjdXRvcih0aGlzLiNjb21waWxlciwgdGhpcy4jYWRhcHRlciwgdGhpcy4jY29ubmVjdGlvblByb3ZpZGVyLCBbXSk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9wZXJmb3JtYW5jZS1ub3cuZC50c1wiIC8+XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBlcmZvcm1hbmNlTm93KCkge1xuICAgIGlmICh0eXBlb2YgcGVyZm9ybWFuY2UgIT09ICd1bmRlZmluZWQnICYmIGlzRnVuY3Rpb24ocGVyZm9ybWFuY2Uubm93KSkge1xuICAgICAgICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3J1bnRpbWUtZHJpdmVyLmQudHNcIiAvPlxuaW1wb3J0IHsgcGVyZm9ybWFuY2VOb3cgfSBmcm9tICcuLi91dGlsL3BlcmZvcm1hbmNlLW5vdy5qcyc7XG4vKipcbiAqIEEgc21hbGwgd3JhcHBlciBhcm91bmQge0BsaW5rIERyaXZlcn0gdGhhdCBtYWtlcyBzdXJlIHRoZSBkcml2ZXIgaXNcbiAqIGluaXRpYWxpemVkIGJlZm9yZSBpdCBpcyB1c2VkLCBvbmx5IGluaXRpYWxpemVkIGFuZCBkZXN0cm95ZWRcbiAqIG9uY2UgZXRjLlxuICovXG5leHBvcnQgY2xhc3MgUnVudGltZURyaXZlciB7XG4gICAgI2RyaXZlcjtcbiAgICAjbG9nO1xuICAgICNpbml0UHJvbWlzZTtcbiAgICAjaW5pdERvbmU7XG4gICAgI2Rlc3Ryb3lQcm9taXNlO1xuICAgICNjb25uZWN0aW9ucyA9IG5ldyBXZWFrU2V0KCk7XG4gICAgY29uc3RydWN0b3IoZHJpdmVyLCBsb2cpIHtcbiAgICAgICAgdGhpcy4jaW5pdERvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy4jZHJpdmVyID0gZHJpdmVyO1xuICAgICAgICB0aGlzLiNsb2cgPSBsb2c7XG4gICAgfVxuICAgIGFzeW5jIGluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLiNkZXN0cm95UHJvbWlzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkcml2ZXIgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuI2luaXRQcm9taXNlKSB7XG4gICAgICAgICAgICB0aGlzLiNpbml0UHJvbWlzZSA9IHRoaXMuI2RyaXZlclxuICAgICAgICAgICAgICAgIC5pbml0KClcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4jaW5pdERvbmUgPSB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuI2luaXRQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy4jaW5pdFByb21pc2U7XG4gICAgfVxuICAgIGFzeW5jIGFjcXVpcmVDb25uZWN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy4jZGVzdHJveVByb21pc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZHJpdmVyIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLiNpbml0RG9uZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IHRoaXMuI2RyaXZlci5hY3F1aXJlQ29ubmVjdGlvbigpO1xuICAgICAgICBpZiAoIXRoaXMuI2Nvbm5lY3Rpb25zLmhhcyhjb25uZWN0aW9uKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuI25lZWRzTG9nZ2luZygpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jYWRkTG9nZ2luZyhjb25uZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuI2Nvbm5lY3Rpb25zLmFkZChjb25uZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29ubmVjdGlvbjtcbiAgICB9XG4gICAgYXN5bmMgcmVsZWFzZUNvbm5lY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgICBhd2FpdCB0aGlzLiNkcml2ZXIucmVsZWFzZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7XG4gICAgfVxuICAgIGJlZ2luVHJhbnNhY3Rpb24oY29ubmVjdGlvbiwgc2V0dGluZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RyaXZlci5iZWdpblRyYW5zYWN0aW9uKGNvbm5lY3Rpb24sIHNldHRpbmdzKTtcbiAgICB9XG4gICAgY29tbWl0VHJhbnNhY3Rpb24oY29ubmVjdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy4jZHJpdmVyLmNvbW1pdFRyYW5zYWN0aW9uKGNvbm5lY3Rpb24pO1xuICAgIH1cbiAgICByb2xsYmFja1RyYW5zYWN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RyaXZlci5yb2xsYmFja1RyYW5zYWN0aW9uKGNvbm5lY3Rpb24pO1xuICAgIH1cbiAgICBzYXZlcG9pbnQoY29ubmVjdGlvbiwgc2F2ZXBvaW50TmFtZSwgY29tcGlsZVF1ZXJ5KSB7XG4gICAgICAgIGlmICh0aGlzLiNkcml2ZXIuc2F2ZXBvaW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy4jZHJpdmVyLnNhdmVwb2ludChjb25uZWN0aW9uLCBzYXZlcG9pbnROYW1lLCBjb21waWxlUXVlcnkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGBzYXZlcG9pbnRgIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyJyk7XG4gICAgfVxuICAgIHJvbGxiYWNrVG9TYXZlcG9pbnQoY29ubmVjdGlvbiwgc2F2ZXBvaW50TmFtZSwgY29tcGlsZVF1ZXJ5KSB7XG4gICAgICAgIGlmICh0aGlzLiNkcml2ZXIucm9sbGJhY2tUb1NhdmVwb2ludCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2RyaXZlci5yb2xsYmFja1RvU2F2ZXBvaW50KGNvbm5lY3Rpb24sIHNhdmVwb2ludE5hbWUsIGNvbXBpbGVRdWVyeSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHJvbGxiYWNrVG9TYXZlcG9pbnRgIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyJyk7XG4gICAgfVxuICAgIHJlbGVhc2VTYXZlcG9pbnQoY29ubmVjdGlvbiwgc2F2ZXBvaW50TmFtZSwgY29tcGlsZVF1ZXJ5KSB7XG4gICAgICAgIGlmICh0aGlzLiNkcml2ZXIucmVsZWFzZVNhdmVwb2ludCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2RyaXZlci5yZWxlYXNlU2F2ZXBvaW50KGNvbm5lY3Rpb24sIHNhdmVwb2ludE5hbWUsIGNvbXBpbGVRdWVyeSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHJlbGVhc2VTYXZlcG9pbnRgIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyJyk7XG4gICAgfVxuICAgIGFzeW5jIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICghdGhpcy4jaW5pdFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLiNpbml0UHJvbWlzZTtcbiAgICAgICAgaWYgKCF0aGlzLiNkZXN0cm95UHJvbWlzZSkge1xuICAgICAgICAgICAgdGhpcy4jZGVzdHJveVByb21pc2UgPSB0aGlzLiNkcml2ZXIuZGVzdHJveSgpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNkZXN0cm95UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuI2Rlc3Ryb3lQcm9taXNlO1xuICAgIH1cbiAgICAjbmVlZHNMb2dnaW5nKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuI2xvZy5pc0xldmVsRW5hYmxlZCgncXVlcnknKSB8fCB0aGlzLiNsb2cuaXNMZXZlbEVuYWJsZWQoJ2Vycm9yJykpO1xuICAgIH1cbiAgICAvLyBUaGlzIG1ldGhvZCBtb25rZXkgcGF0Y2hlcyB0aGUgZGF0YWJhc2UgY29ubmVjdGlvbidzIGV4ZWN1dGVRdWVyeSBtZXRob2RcbiAgICAvLyBieSBhZGRpbmcgbG9nZ2luZyBjb2RlIGFyb3VuZCBpdC4gTW9ua2V5IHBhdGNoaW5nIGlzIG5vdCBwcmV0dHksIGJ1dCBpdCdzXG4gICAgLy8gdGhlIGJlc3Qgb3B0aW9uIGluIHRoaXMgY2FzZS5cbiAgICAjYWRkTG9nZ2luZyhjb25uZWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGV4ZWN1dGVRdWVyeSA9IGNvbm5lY3Rpb24uZXhlY3V0ZVF1ZXJ5O1xuICAgICAgICBjb25zdCBzdHJlYW1RdWVyeSA9IGNvbm5lY3Rpb24uc3RyZWFtUXVlcnk7XG4gICAgICAgIGNvbnN0IGRpcyA9IHRoaXM7XG4gICAgICAgIGNvbm5lY3Rpb24uZXhlY3V0ZVF1ZXJ5ID0gYXN5bmMgKGNvbXBpbGVkUXVlcnkpID0+IHtcbiAgICAgICAgICAgIGxldCBjYXVnaHRFcnJvcjtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlTm93KCk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBleGVjdXRlUXVlcnkuY2FsbChjb25uZWN0aW9uLCBjb21waWxlZFF1ZXJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgYXdhaXQgZGlzLiNsb2dFcnJvcihlcnJvciwgY29tcGlsZWRRdWVyeSwgc3RhcnRUaW1lKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGlmICghY2F1Z2h0RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGlzLiNsb2dRdWVyeShjb21waWxlZFF1ZXJ5LCBzdGFydFRpbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29ubmVjdGlvbi5zdHJlYW1RdWVyeSA9IGFzeW5jIGZ1bmN0aW9uKiAoY29tcGlsZWRRdWVyeSwgY2h1bmtTaXplKSB7XG4gICAgICAgICAgICBsZXQgY2F1Z2h0RXJyb3I7XG4gICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZU5vdygpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHJlc3VsdCBvZiBzdHJlYW1RdWVyeS5jYWxsKGNvbm5lY3Rpb24sIGNvbXBpbGVkUXVlcnksIGNodW5rU2l6ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgYXdhaXQgZGlzLiNsb2dFcnJvcihlcnJvciwgY29tcGlsZWRRdWVyeSwgc3RhcnRUaW1lKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGlmICghY2F1Z2h0RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZGlzLiNsb2dRdWVyeShjb21waWxlZFF1ZXJ5LCBzdGFydFRpbWUsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgI2xvZ0Vycm9yKGVycm9yLCBjb21waWxlZFF1ZXJ5LCBzdGFydFRpbWUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jbG9nLmVycm9yKCgpID0+ICh7XG4gICAgICAgICAgICBsZXZlbDogJ2Vycm9yJyxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgcXVlcnk6IGNvbXBpbGVkUXVlcnksXG4gICAgICAgICAgICBxdWVyeUR1cmF0aW9uTWlsbGlzOiB0aGlzLiNjYWxjdWxhdGVEdXJhdGlvbk1pbGxpcyhzdGFydFRpbWUpLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGFzeW5jICNsb2dRdWVyeShjb21waWxlZFF1ZXJ5LCBzdGFydFRpbWUsIGlzU3RyZWFtID0gZmFsc2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jbG9nLnF1ZXJ5KCgpID0+ICh7XG4gICAgICAgICAgICBsZXZlbDogJ3F1ZXJ5JyxcbiAgICAgICAgICAgIGlzU3RyZWFtLFxuICAgICAgICAgICAgcXVlcnk6IGNvbXBpbGVkUXVlcnksXG4gICAgICAgICAgICBxdWVyeUR1cmF0aW9uTWlsbGlzOiB0aGlzLiNjYWxjdWxhdGVEdXJhdGlvbk1pbGxpcyhzdGFydFRpbWUpLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgICNjYWxjdWxhdGVEdXJhdGlvbk1pbGxpcyhzdGFydFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlTm93KCkgLSBzdGFydFRpbWU7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9zaW5nbGUtY29ubmVjdGlvbi1wcm92aWRlci5kLnRzXCIgLz5cbmNvbnN0IGlnbm9yZUVycm9yID0gKCkgPT4geyB9O1xuZXhwb3J0IGNsYXNzIFNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlciB7XG4gICAgI2Nvbm5lY3Rpb247XG4gICAgI3J1bm5pbmdQcm9taXNlO1xuICAgIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgdGhpcy4jY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgfVxuICAgIGFzeW5jIHByb3ZpZGVDb25uZWN0aW9uKGNvbnN1bWVyKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLiNydW5uaW5nUHJvbWlzZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4jcnVubmluZ1Byb21pc2UuY2F0Y2goaWdub3JlRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGAjcnVubmluZ1Byb21pc2VgIG11c3QgYmUgc2V0IHRvIHVuZGVmaW5lZCBiZWZvcmUgaXQnc1xuICAgICAgICAvLyByZXNvbHZlZCBvciByZWplY3RlZC4gT3RoZXJ3aXNlIHRoZSB3aGlsZSBsb29wIGFib3ZlXG4gICAgICAgIC8vIHdpbGwgbWlzYmVoYXZlLlxuICAgICAgICB0aGlzLiNydW5uaW5nUHJvbWlzZSA9IHRoaXMuI3J1bihjb25zdW1lcikuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNydW5uaW5nUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLiNydW5uaW5nUHJvbWlzZTtcbiAgICB9XG4gICAgLy8gUnVuIHRoZSBydW5uZXIgaW4gYW4gYXN5bmMgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3RcbiAgICAvLyB0aHJvdyBzeW5jaHJvbm91cyBlcnJvcnMuXG4gICAgYXN5bmMgI3J1bihydW5uZXIpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJ1bm5lcih0aGlzLiNjb25uZWN0aW9uKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2RyaXZlci5kLnRzXCIgLz5cbmV4cG9ydCBjb25zdCBUUkFOU0FDVElPTl9BQ0NFU1NfTU9ERVMgPSBbJ3JlYWQgb25seScsICdyZWFkIHdyaXRlJ107XG5leHBvcnQgY29uc3QgVFJBTlNBQ1RJT05fSVNPTEFUSU9OX0xFVkVMUyA9IFtcbiAgICAncmVhZCB1bmNvbW1pdHRlZCcsXG4gICAgJ3JlYWQgY29tbWl0dGVkJyxcbiAgICAncmVwZWF0YWJsZSByZWFkJyxcbiAgICAnc2VyaWFsaXphYmxlJyxcbiAgICAnc25hcHNob3QnLFxuXTtcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRyYW5zYWN0aW9uU2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgICBpZiAoc2V0dGluZ3MuYWNjZXNzTW9kZSAmJlxuICAgICAgICAhVFJBTlNBQ1RJT05fQUNDRVNTX01PREVTLmluY2x1ZGVzKHNldHRpbmdzLmFjY2Vzc01vZGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCB0cmFuc2FjdGlvbiBhY2Nlc3MgbW9kZSAke3NldHRpbmdzLmFjY2Vzc01vZGV9YCk7XG4gICAgfVxuICAgIGlmIChzZXR0aW5ncy5pc29sYXRpb25MZXZlbCAmJlxuICAgICAgICAhVFJBTlNBQ1RJT05fSVNPTEFUSU9OX0xFVkVMUy5pbmNsdWRlcyhzZXR0aW5ncy5pc29sYXRpb25MZXZlbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCAke3NldHRpbmdzLmlzb2xhdGlvbkxldmVsfWApO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vbG9nLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplLCBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNvbnN0IExPR19MRVZFTFMgPSBmcmVlemUoWydxdWVyeScsICdlcnJvciddKTtcbmV4cG9ydCBjbGFzcyBMb2cge1xuICAgICNsZXZlbHM7XG4gICAgI2xvZ2dlcjtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY29uZmlnKSkge1xuICAgICAgICAgICAgdGhpcy4jbG9nZ2VyID0gY29uZmlnO1xuICAgICAgICAgICAgdGhpcy4jbGV2ZWxzID0gZnJlZXplKHtcbiAgICAgICAgICAgICAgICBxdWVyeTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlcnJvcjogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jbG9nZ2VyID0gZGVmYXVsdExvZ2dlcjtcbiAgICAgICAgICAgIHRoaXMuI2xldmVscyA9IGZyZWV6ZSh7XG4gICAgICAgICAgICAgICAgcXVlcnk6IGNvbmZpZy5pbmNsdWRlcygncXVlcnknKSxcbiAgICAgICAgICAgICAgICBlcnJvcjogY29uZmlnLmluY2x1ZGVzKCdlcnJvcicpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNMZXZlbEVuYWJsZWQobGV2ZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2xldmVsc1tsZXZlbF07XG4gICAgfVxuICAgIGFzeW5jIHF1ZXJ5KGdldEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLiNsZXZlbHMucXVlcnkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI2xvZ2dlcihnZXRFdmVudCgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBlcnJvcihnZXRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy4jbGV2ZWxzLmVycm9yKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNsb2dnZXIoZ2V0RXZlbnQoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0TG9nZ2VyKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmxldmVsID09PSAncXVlcnknKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGBreXNlbHk6cXVlcnk6JHtldmVudC5pc1N0cmVhbSA/ICdzdHJlYW06JyA6ICcnfWA7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke3ByZWZpeH0gJHtldmVudC5xdWVyeS5zcWx9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke3ByZWZpeH0gZHVyYXRpb246ICR7ZXZlbnQucXVlcnlEdXJhdGlvbk1pbGxpcy50b0ZpeGVkKDEpfW1zYCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50LmxldmVsID09PSAnZXJyb3InKSB7XG4gICAgICAgIGlmIChldmVudC5lcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBreXNlbHk6ZXJyb3I6ICR7ZXZlbnQuZXJyb3Iuc3RhY2sgPz8gZXZlbnQuZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGt5c2VseTplcnJvcjogJHtKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXJyb3I6IGV2ZW50LmVycm9yLFxuICAgICAgICAgICAgICAgIHF1ZXJ5OiBldmVudC5xdWVyeS5zcWwsXG4gICAgICAgICAgICAgICAgcXVlcnlEdXJhdGlvbk1pbGxpczogZXZlbnQucXVlcnlEdXJhdGlvbk1pbGxpcyxcbiAgICAgICAgICAgIH0pfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jb21waWxhYmxlLmQudHNcIiAvPlxuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNPYmplY3QgfSBmcm9tICcuL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gaXNDb21waWxhYmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHZhbHVlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBpbGUpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9reXNlbHkuZC50c1wiIC8+XG5pbXBvcnQgeyBTY2hlbWFNb2R1bGUgfSBmcm9tICcuL3NjaGVtYS9zY2hlbWEuanMnO1xuaW1wb3J0IHsgRHluYW1pY01vZHVsZSB9IGZyb20gJy4vZHluYW1pYy9keW5hbWljLmpzJztcbmltcG9ydCB7IERlZmF1bHRDb25uZWN0aW9uUHJvdmlkZXIgfSBmcm9tICcuL2RyaXZlci9kZWZhdWx0LWNvbm5lY3Rpb24tcHJvdmlkZXIuanMnO1xuaW1wb3J0IHsgUXVlcnlDcmVhdG9yIH0gZnJvbSAnLi9xdWVyeS1jcmVhdG9yLmpzJztcbmltcG9ydCB7IERlZmF1bHRRdWVyeUV4ZWN1dG9yIH0gZnJvbSAnLi9xdWVyeS1leGVjdXRvci9kZWZhdWx0LXF1ZXJ5LWV4ZWN1dG9yLmpzJztcbmltcG9ydCB7IGZyZWV6ZSwgaXNPYmplY3QsIGlzVW5kZWZpbmVkIH0gZnJvbSAnLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBSdW50aW1lRHJpdmVyIH0gZnJvbSAnLi9kcml2ZXIvcnVudGltZS1kcml2ZXIuanMnO1xuaW1wb3J0IHsgU2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyIH0gZnJvbSAnLi9kcml2ZXIvc2luZ2xlLWNvbm5lY3Rpb24tcHJvdmlkZXIuanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVUcmFuc2FjdGlvblNldHRpbmdzLCB9IGZyb20gJy4vZHJpdmVyL2RyaXZlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVGdW5jdGlvbk1vZHVsZSwgfSBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIvZnVuY3Rpb24tbW9kdWxlLmpzJztcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vdXRpbC9sb2cuanMnO1xuaW1wb3J0IHsgY3JlYXRlUXVlcnlJZCB9IGZyb20gJy4vdXRpbC9xdWVyeS1pZC5qcyc7XG5pbXBvcnQgeyBpc0NvbXBpbGFibGUgfSBmcm9tICcuL3V0aWwvY29tcGlsYWJsZS5qcyc7XG5pbXBvcnQgeyBDYXNlQnVpbGRlciB9IGZyb20gJy4vcXVlcnktYnVpbGRlci9jYXNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgQ2FzZU5vZGUgfSBmcm9tICcuL29wZXJhdGlvbi1ub2RlL2Nhc2Utbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZUV4cHJlc3Npb24gfSBmcm9tICcuL3BhcnNlci9leHByZXNzaW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBXaXRoU2NoZW1hUGx1Z2luIH0gZnJvbSAnLi9wbHVnaW4vd2l0aC1zY2hlbWEvd2l0aC1zY2hlbWEtcGx1Z2luLmpzJztcbmltcG9ydCB7IHByb3ZpZGVDb250cm9sbGVkQ29ubmVjdGlvbiwgfSBmcm9tICcuL3V0aWwvcHJvdmlkZS1jb250cm9sbGVkLWNvbm5lY3Rpb24uanMnO1xuLy8gQHRzLWlnbm9yZVxuU3ltYm9sLmFzeW5jRGlzcG9zZSA/Pz0gU3ltYm9sKCdTeW1ib2wuYXN5bmNEaXNwb3NlJyk7XG4vKipcbiAqIFRoZSBtYWluIEt5c2VseSBjbGFzcy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGNyZWF0ZSBvbmUgaW5zdGFuY2Ugb2YgYEt5c2VseWAgcGVyIGRhdGFiYXNlIHVzaW5nIHRoZSB7QGxpbmsgS3lzZWx5fVxuICogY29uc3RydWN0b3IuIEVhY2ggYEt5c2VseWAgaW5zdGFuY2UgbWFpbnRhaW5zIGl0cyBvd24gY29ubmVjdGlvbiBwb29sLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIFRoaXMgZXhhbXBsZSBhc3N1bWVzIHlvdXIgZGF0YWJhc2UgaGFzIGEgXCJwZXJzb25cIiB0YWJsZTpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0ICogYXMgU3FsaXRlIGZyb20gJ2JldHRlci1zcWxpdGUzJ1xuICogaW1wb3J0IHtcdTAwQTB0eXBlIEdlbmVyYXRlZCwgS3lzZWx5LCBTcWxpdGVEaWFsZWN0IH0gZnJvbSAna3lzZWx5J1xuICpcbiAqIGludGVyZmFjZSBEYXRhYmFzZSB7XG4gKiAgIHBlcnNvbjoge1xuICogICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPlxuICogICAgIGZpcnN0X25hbWU6IHN0cmluZ1xuICogICAgIGxhc3RfbmFtZTogc3RyaW5nIHwgbnVsbFxuICogICB9XG4gKiB9XG4gKlxuICogY29uc3QgZGIgPSBuZXcgS3lzZWx5PERhdGFiYXNlPih7XG4gKiAgIGRpYWxlY3Q6IG5ldyBTcWxpdGVEaWFsZWN0KHtcbiAqICAgICBkYXRhYmFzZTogbmV3IFNxbGl0ZSgnOm1lbW9yeTonKSxcbiAqICAgfSlcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBAdHlwZVBhcmFtIERCIC0gVGhlIGRhdGFiYXNlIGludGVyZmFjZSB0eXBlLiBLZXlzIG9mIHRoaXMgdHlwZSBtdXN0IGJlIHRhYmxlIG5hbWVzXG4gKiAgICBpbiB0aGUgZGF0YWJhc2UgYW5kIHZhbHVlcyBtdXN0IGJlIGludGVyZmFjZXMgdGhhdCBkZXNjcmliZSB0aGUgcm93cyBpbiB0aG9zZVxuICogICAgdGFibGVzLiBTZWUgdGhlIGV4YW1wbGVzIGFib3ZlLlxuICovXG5leHBvcnQgY2xhc3MgS3lzZWx5IGV4dGVuZHMgUXVlcnlDcmVhdG9yIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IoYXJncykge1xuICAgICAgICBsZXQgc3VwZXJQcm9wcztcbiAgICAgICAgbGV0IHByb3BzO1xuICAgICAgICBpZiAoaXNLeXNlbHlQcm9wcyhhcmdzKSkge1xuICAgICAgICAgICAgc3VwZXJQcm9wcyA9IHsgZXhlY3V0b3I6IGFyZ3MuZXhlY3V0b3IgfTtcbiAgICAgICAgICAgIHByb3BzID0geyAuLi5hcmdzIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkaWFsZWN0ID0gYXJncy5kaWFsZWN0O1xuICAgICAgICAgICAgY29uc3QgZHJpdmVyID0gZGlhbGVjdC5jcmVhdGVEcml2ZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBpbGVyID0gZGlhbGVjdC5jcmVhdGVRdWVyeUNvbXBpbGVyKCk7XG4gICAgICAgICAgICBjb25zdCBhZGFwdGVyID0gZGlhbGVjdC5jcmVhdGVBZGFwdGVyKCk7XG4gICAgICAgICAgICBjb25zdCBsb2cgPSBuZXcgTG9nKGFyZ3MubG9nID8/IFtdKTtcbiAgICAgICAgICAgIGNvbnN0IHJ1bnRpbWVEcml2ZXIgPSBuZXcgUnVudGltZURyaXZlcihkcml2ZXIsIGxvZyk7XG4gICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uUHJvdmlkZXIgPSBuZXcgRGVmYXVsdENvbm5lY3Rpb25Qcm92aWRlcihydW50aW1lRHJpdmVyKTtcbiAgICAgICAgICAgIGNvbnN0IGV4ZWN1dG9yID0gbmV3IERlZmF1bHRRdWVyeUV4ZWN1dG9yKGNvbXBpbGVyLCBhZGFwdGVyLCBjb25uZWN0aW9uUHJvdmlkZXIsIGFyZ3MucGx1Z2lucyA/PyBbXSk7XG4gICAgICAgICAgICBzdXBlclByb3BzID0geyBleGVjdXRvciB9O1xuICAgICAgICAgICAgcHJvcHMgPSB7XG4gICAgICAgICAgICAgICAgY29uZmlnOiBhcmdzLFxuICAgICAgICAgICAgICAgIGV4ZWN1dG9yLFxuICAgICAgICAgICAgICAgIGRpYWxlY3QsXG4gICAgICAgICAgICAgICAgZHJpdmVyOiBydW50aW1lRHJpdmVyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihzdXBlclByb3BzKTtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgU2NoZW1hTW9kdWxlfSBtb2R1bGUgZm9yIGJ1aWxkaW5nIGRhdGFiYXNlIHNjaGVtYS5cbiAgICAgKi9cbiAgICBnZXQgc2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gbmV3IFNjaGVtYU1vZHVsZSh0aGlzLiNwcm9wcy5leGVjdXRvcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB0aGUge0BsaW5rIER5bmFtaWNNb2R1bGV9IG1vZHVsZS5cbiAgICAgKlxuICAgICAqIFRoZSB7QGxpbmsgRHluYW1pY01vZHVsZX0gbW9kdWxlIGNhbiBiZSB1c2VkIHRvIGJ5cGFzcyBzdHJpY3QgdHlwaW5nIGFuZFxuICAgICAqIHBhc3NpbmcgaW4gZHluYW1pYyB2YWx1ZXMgZm9yIHRoZSBxdWVyaWVzLlxuICAgICAqL1xuICAgIGdldCBkeW5hbWljKCkge1xuICAgICAgICByZXR1cm4gbmV3IER5bmFtaWNNb2R1bGUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHtAbGluayBEYXRhYmFzZUludHJvc3BlY3RvciB8IGRhdGFiYXNlIGludHJvc3BlY3Rvcn0uXG4gICAgICovXG4gICAgZ2V0IGludHJvc3BlY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5kaWFsZWN0LmNyZWF0ZUludHJvc3BlY3Rvcih0aGlzLndpdGhvdXRQbHVnaW5zKCkpO1xuICAgIH1cbiAgICBjYXNlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FzZUJ1aWxkZXIoe1xuICAgICAgICAgICAgbm9kZTogQ2FzZU5vZGUuY3JlYXRlKGlzVW5kZWZpbmVkKHZhbHVlKSA/IHVuZGVmaW5lZCA6IHBhcnNlRXhwcmVzc2lvbih2YWx1ZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHtAbGluayBGdW5jdGlvbk1vZHVsZX0gdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSBzb21ld2hhdCB0eXBlLXNhZmUgZnVuY3Rpb25cbiAgICAgKiBjYWxscy5cbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgeyBjb3VudCB9ID0gZGIuZm5cbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gICAgICogICAuaW5uZXJKb2luKCdwZXQnLCAncGV0Lm93bmVyX2lkJywgJ3BlcnNvbi5pZCcpXG4gICAgICogICAuc2VsZWN0KFtcbiAgICAgKiAgICAgJ2lkJyxcbiAgICAgKiAgICAgY291bnQoJ3BldC5pZCcpLmFzKCdwZXJzb25fY291bnQnKSxcbiAgICAgKiAgIF0pXG4gICAgICogICAuZ3JvdXBCeSgncGVyc29uLmlkJylcbiAgICAgKiAgIC5oYXZpbmcoY291bnQoJ3BldC5pZCcpLCAnPicsIDEwKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IFwicGVyc29uXCIuXCJpZFwiLCBjb3VudChcInBldFwiLlwiaWRcIikgYXMgXCJwZXJzb25fY291bnRcIlxuICAgICAqIGZyb20gXCJwZXJzb25cIlxuICAgICAqIGlubmVyIGpvaW4gXCJwZXRcIiBvbiBcInBldFwiLlwib3duZXJfaWRcIiA9IFwicGVyc29uXCIuXCJpZFwiXG4gICAgICogZ3JvdXAgYnkgXCJwZXJzb25cIi5cImlkXCJcbiAgICAgKiBoYXZpbmcgY291bnQoXCJwZXRcIi5cImlkXCIpID4gJDFcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFdoeSBcInNvbWV3aGF0XCIgdHlwZS1zYWZlPyBCZWNhdXNlIHRoZSBmdW5jdGlvbiBjYWxscyBhcmUgbm90IGJvdW5kIHRvIHRoZVxuICAgICAqIGN1cnJlbnQgcXVlcnkgY29udGV4dC4gVGhleSBhbGxvdyB5b3UgdG8gcmVmZXJlbmNlIGNvbHVtbnMgYW5kIHRhYmxlcyB0aGF0XG4gICAgICogYXJlIG5vdCBpbiB0aGUgY3VycmVudCBxdWVyeS4gRS5nLiByZW1vdmUgdGhlIGBpbm5lckpvaW5gIGZyb20gdGhlIHByZXZpb3VzXG4gICAgICogcXVlcnkgYW5kIFR5cGVTY3JpcHQgd29uJ3QgZXZlbiBjb21wbGFpbi5cbiAgICAgKlxuICAgICAqIElmIHlvdSB3YW50IHRvIG1ha2UgdGhlIGZ1bmN0aW9uIGNhbGxzIGZ1bGx5IHR5cGUtc2FmZSwgeW91IGNhbiB1c2UgdGhlXG4gICAgICoge0BsaW5rIEV4cHJlc3Npb25CdWlsZGVyLmZufSBnZXR0ZXIgZm9yIGEgcXVlcnkgY29udGV4dC1hd2FyZSwgc3RyaWN0ZXIge0BsaW5rIEZ1bmN0aW9uTW9kdWxlfS5cbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2VsZWN0RnJvbSgncGVyc29uJylcbiAgICAgKiAgIC5pbm5lckpvaW4oJ3BldCcsICdwZXQub3duZXJfaWQnLCAncGVyc29uLmlkJylcbiAgICAgKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICogICAgICdwZXJzb24uaWQnLFxuICAgICAqICAgICBlYi5mbi5jb3VudCgncGV0LmlkJykuYXMoJ3BldF9jb3VudCcpXG4gICAgICogICBdKVxuICAgICAqICAgLmdyb3VwQnkoJ3BlcnNvbi5pZCcpXG4gICAgICogICAuaGF2aW5nKChlYikgPT4gZWIuZm4uY291bnQoJ3BldC5pZCcpLCAnPicsIDEwKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCBmbigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZ1bmN0aW9uTW9kdWxlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgVHJhbnNhY3Rpb25CdWlsZGVyfSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJ1biBxdWVyaWVzIGluc2lkZSBhIHRyYW5zYWN0aW9uLlxuICAgICAqXG4gICAgICogVGhlIHJldHVybmVkIHtAbGluayBUcmFuc2FjdGlvbkJ1aWxkZXJ9IGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgdHJhbnNhY3Rpb24uIFRoZVxuICAgICAqIHtAbGluayBUcmFuc2FjdGlvbkJ1aWxkZXIuZXhlY3V0ZX0gbWV0aG9kIGNhbiB0aGVuIGJlIGNhbGxlZCB0byBydW4gdGhlIHRyYW5zYWN0aW9uLlxuICAgICAqIHtAbGluayBUcmFuc2FjdGlvbkJ1aWxkZXIuZXhlY3V0ZX0gdGFrZXMgYSBmdW5jdGlvbiB0aGF0IGlzIHJ1biBpbnNpZGUgdGhlXG4gICAgICogdHJhbnNhY3Rpb24uIElmIHRoZSBmdW5jdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uLFxuICAgICAqIDEuIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LFxuICAgICAqIDIuIHRoZSB0cmFuc2FjdGlvbiBpcyByb2xsZWQgYmFjaywgYW5kXG4gICAgICogMy4gdGhlIGV4Y2VwdGlvbiBpcyB0aHJvd24gYWdhaW4uXG4gICAgICogT3RoZXJ3aXNlIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuXG4gICAgICpcbiAgICAgKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gcGFzc2VkIHRvIHRoZSB7QGxpbmsgVHJhbnNhY3Rpb25CdWlsZGVyLmV4ZWN1dGUgfCBleGVjdXRlfVxuICAgICAqIG1ldGhvZCBnZXRzIHRoZSB0cmFuc2FjdGlvbiBvYmplY3QgYXMgaXRzIG9ubHkgYXJndW1lbnQuIFRoZSB0cmFuc2FjdGlvbiBpc1xuICAgICAqIG9mIHR5cGUge0BsaW5rIFRyYW5zYWN0aW9ufSB3aGljaCBpbmhlcml0cyB7QGxpbmsgS3lzZWx5fS4gQW55IHF1ZXJ5XG4gICAgICogc3RhcnRlZCB0aHJvdWdoIHRoZSB0cmFuc2FjdGlvbiBvYmplY3QgaXMgZXhlY3V0ZWQgaW5zaWRlIHRoZSB0cmFuc2FjdGlvbi5cbiAgICAgKlxuICAgICAqIFRvIHJ1biBhIGNvbnRyb2xsZWQgdHJhbnNhY3Rpb24sIGFsbG93aW5nIHlvdSB0byBjb21taXQgYW5kIHJvbGxiYWNrIG1hbnVhbGx5LFxuICAgICAqIHVzZSB7QGxpbmsgc3RhcnRUcmFuc2FjdGlvbn0gaW5zdGVhZC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogPCEtLSBzaXRlRXhhbXBsZShcInRyYW5zYWN0aW9uc1wiLCBcIlNpbXBsZSB0cmFuc2FjdGlvblwiLCAxMCkgLS0+XG4gICAgICpcbiAgICAgKiBUaGlzIGV4YW1wbGUgaW5zZXJ0cyB0d28gcm93cyBpbiBhIHRyYW5zYWN0aW9uLiBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGluc2lkZVxuICAgICAqIHRoZSBjYWxsYmFjayBwYXNzZWQgdG8gdGhlIGBleGVjdXRlYCBtZXRob2QsXG4gICAgICogMS4gdGhlIGV4Y2VwdGlvbiBpcyBjYXVnaHQsXG4gICAgICogMi4gdGhlIHRyYW5zYWN0aW9uIGlzIHJvbGxlZCBiYWNrLCBhbmRcbiAgICAgKiAzLiB0aGUgZXhjZXB0aW9uIGlzIHRocm93biBhZ2Fpbi5cbiAgICAgKiBPdGhlcndpc2UgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC5cbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgY2F0dG8gPSBhd2FpdCBkYi50cmFuc2FjdGlvbigpLmV4ZWN1dGUoYXN5bmMgKHRyeCkgPT4ge1xuICAgICAqICAgY29uc3QgamVubmlmZXIgPSBhd2FpdCB0cnguaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgICAgLnZhbHVlcyh7XG4gICAgICogICAgICAgZmlyc3RfbmFtZTogJ0plbm5pZmVyJyxcbiAgICAgKiAgICAgICBsYXN0X25hbWU6ICdBbmlzdG9uJyxcbiAgICAgKiAgICAgICBhZ2U6IDQwLFxuICAgICAqICAgICB9KVxuICAgICAqICAgICAucmV0dXJuaW5nKCdpZCcpXG4gICAgICogICAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICpcbiAgICAgKiAgIHJldHVybiBhd2FpdCB0cnguaW5zZXJ0SW50bygncGV0JylcbiAgICAgKiAgICAgLnZhbHVlcyh7XG4gICAgICogICAgICAgb3duZXJfaWQ6IGplbm5pZmVyLmlkLFxuICAgICAqICAgICAgIG5hbWU6ICdDYXR0bycsXG4gICAgICogICAgICAgc3BlY2llczogJ2NhdCcsXG4gICAgICogICAgICAgaXNfZmF2b3JpdGU6IGZhbHNlLFxuICAgICAqICAgICB9KVxuICAgICAqICAgICAucmV0dXJuaW5nQWxsKClcbiAgICAgKiAgICAgLmV4ZWN1dGVUYWtlRmlyc3QoKVxuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBTZXR0aW5nIHRoZSBpc29sYXRpb24gbGV2ZWw6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgS3lzZWx5IH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC50cmFuc2FjdGlvbigpXG4gICAgICogICAuc2V0SXNvbGF0aW9uTGV2ZWwoJ3NlcmlhbGl6YWJsZScpXG4gICAgICogICAuZXhlY3V0ZShhc3luYyAodHJ4KSA9PiB7XG4gICAgICogICAgIGF3YWl0IGRvU3R1ZmYodHJ4KVxuICAgICAqICAgfSlcbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIGRvU3R1ZmYoa3lzZWx5OiB0eXBlb2YgZGIpIHtcbiAgICAgKiAgIC8vIC4uLlxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB0cmFuc2FjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoeyAuLi50aGlzLiNwcm9wcyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHtAbGluayBDb250cm9sbGVkVHJhbnNhY3Rpb25CdWlsZGVyfSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJ1biBxdWVyaWVzIGluc2lkZSBhIGNvbnRyb2xsZWQgdHJhbnNhY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGUgcmV0dXJuZWQge0BsaW5rIENvbnRyb2xsZWRUcmFuc2FjdGlvbkJ1aWxkZXJ9IGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgdHJhbnNhY3Rpb24uXG4gICAgICogVGhlIHtAbGluayBDb250cm9sbGVkVHJhbnNhY3Rpb25CdWlsZGVyLmV4ZWN1dGV9IG1ldGhvZCBjYW4gdGhlbiBiZSBjYWxsZWRcbiAgICAgKiB0byBzdGFydCB0aGUgdHJhbnNhY3Rpb24gYW5kIHJldHVybiBhIHtAbGluayBDb250cm9sbGVkVHJhbnNhY3Rpb259LlxuICAgICAqXG4gICAgICogQSB7QGxpbmsgQ29udHJvbGxlZFRyYW5zYWN0aW9ufSBhbGxvd3MgeW91IHRvIGNvbW1pdCBhbmQgcm9sbGJhY2sgbWFudWFsbHksXG4gICAgICogZXhlY3V0ZSBzYXZlcG9pbnQgY29tbWFuZHMuIEl0IGV4dGVuZHMge0BsaW5rIFRyYW5zYWN0aW9ufSB3aGljaCBleHRlbmRzIHtAbGluayBLeXNlbHl9LFxuICAgICAqIHNvIHlvdSBjYW4gcnVuIHF1ZXJpZXMgaW5zaWRlIHRoZSB0cmFuc2FjdGlvbi4gT25jZSB0aGUgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLFxuICAgICAqIG9yIHJvbGxlZCBiYWNrLCBpdCBjYW4ndCBiZSB1c2VkIGFueW1vcmUgLSBhbGwgcXVlcmllcyB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgICAqIFRoaXMgaXMgdG8gcHJldmVudCBhY2NpZGVudGFsbHkgcnVubmluZyBxdWVyaWVzIG91dHNpZGUgdGhlIHRyYW5zYWN0aW9uIC0gd2hlcmVcbiAgICAgKiBhdG9taWNpdHkgaXMgbm90IGd1YXJhbnRlZWQgYW55bW9yZS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogPCEtLSBzaXRlRXhhbXBsZShcInRyYW5zYWN0aW9uc1wiLCBcIkNvbnRyb2xsZWQgdHJhbnNhY3Rpb25cIiwgMTEpIC0tPlxuICAgICAqXG4gICAgICogQSBjb250cm9sbGVkIHRyYW5zYWN0aW9uIGFsbG93cyB5b3UgdG8gY29tbWl0IGFuZCByb2xsYmFjayBtYW51YWxseSwgZXhlY3V0ZVxuICAgICAqIHNhdmVwb2ludCBjb21tYW5kcywgYW5kIHF1ZXJpZXMgaW4gZ2VuZXJhbC5cbiAgICAgKlxuICAgICAqIEluIHRoaXMgZXhhbXBsZSB3ZSBzdGFydCBhIHRyYW5zYWN0aW9uLCB1c2UgaXQgdG8gaW5zZXJ0IHR3byByb3dzIGFuZCB0aGVuIGNvbW1pdFxuICAgICAqIHRoZSB0cmFuc2FjdGlvbi4gSWYgYW4gZXJyb3IgaXMgdGhyb3duLCB3ZSBjYXRjaCBpdCBhbmQgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uLlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCB0cnggPSBhd2FpdCBkYi5zdGFydFRyYW5zYWN0aW9uKCkuZXhlY3V0ZSgpXG4gICAgICpcbiAgICAgKiB0cnkge1xuICAgICAqICAgY29uc3QgamVubmlmZXIgPSBhd2FpdCB0cnguaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgICAgLnZhbHVlcyh7XG4gICAgICogICAgICAgZmlyc3RfbmFtZTogJ0plbm5pZmVyJyxcbiAgICAgKiAgICAgICBsYXN0X25hbWU6ICdBbmlzdG9uJyxcbiAgICAgKiAgICAgICBhZ2U6IDQwLFxuICAgICAqICAgICB9KVxuICAgICAqICAgICAucmV0dXJuaW5nKCdpZCcpXG4gICAgICogICAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICpcbiAgICAgKiAgIGNvbnN0IGNhdHRvID0gYXdhaXQgdHJ4Lmluc2VydEludG8oJ3BldCcpXG4gICAgICogICAgIC52YWx1ZXMoe1xuICAgICAqICAgICAgIG93bmVyX2lkOiBqZW5uaWZlci5pZCxcbiAgICAgKiAgICAgICBuYW1lOiAnQ2F0dG8nLFxuICAgICAqICAgICAgIHNwZWNpZXM6ICdjYXQnLFxuICAgICAqICAgICAgIGlzX2Zhdm9yaXRlOiBmYWxzZSxcbiAgICAgKiAgICAgfSlcbiAgICAgKiAgICAgLnJldHVybmluZ0FsbCgpXG4gICAgICogICAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICpcbiAgICAgKiAgIGF3YWl0IHRyeC5jb21taXQoKS5leGVjdXRlKClcbiAgICAgKlxuICAgICAqICAgLy8gLi4uXG4gICAgICogfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgKiAgIGF3YWl0IHRyeC5yb2xsYmFjaygpLmV4ZWN1dGUoKVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJ0cmFuc2FjdGlvbnNcIiwgXCJDb250cm9sbGVkIHRyYW5zYWN0aW9uIC93IHNhdmVwb2ludHNcIiwgMTIpIC0tPlxuICAgICAqXG4gICAgICogQSBjb250cm9sbGVkIHRyYW5zYWN0aW9uIGFsbG93cyB5b3UgdG8gY29tbWl0IGFuZCByb2xsYmFjayBtYW51YWxseSwgZXhlY3V0ZVxuICAgICAqIHNhdmVwb2ludCBjb21tYW5kcywgYW5kIHF1ZXJpZXMgaW4gZ2VuZXJhbC5cbiAgICAgKlxuICAgICAqIEluIHRoaXMgZXhhbXBsZSB3ZSBzdGFydCBhIHRyYW5zYWN0aW9uLCBpbnNlcnQgYSBwZXJzb24sIGNyZWF0ZSBhIHNhdmVwb2ludCxcbiAgICAgKiB0cnkgaW5zZXJ0aW5nIGEgdG95IGFuZCBhIHBldCwgYW5kIGlmIGFuIGVycm9yIGlzIHRocm93biwgd2Ugcm9sbGJhY2sgdG8gdGhlXG4gICAgICogc2F2ZXBvaW50LiBFdmVudHVhbGx5IHdlIHJlbGVhc2UgdGhlIHNhdmVwb2ludCwgaW5zZXJ0IGFuIGF1ZGl0IHJlY29yZCBhbmRcbiAgICAgKiBjb21taXQgdGhlIHRyYW5zYWN0aW9uLiBJZiBhbiBlcnJvciBpcyB0aHJvd24sIHdlIGNhdGNoIGl0IGFuZCByb2xsYmFjayB0aGVcbiAgICAgKiB0cmFuc2FjdGlvbi5cbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgdHJ4ID0gYXdhaXQgZGIuc3RhcnRUcmFuc2FjdGlvbigpLmV4ZWN1dGUoKVxuICAgICAqXG4gICAgICogdHJ5IHtcbiAgICAgKiAgIGNvbnN0IGplbm5pZmVyID0gYXdhaXQgdHJ4XG4gICAgICogICAgIC5pbnNlcnRJbnRvKCdwZXJzb24nKVxuICAgICAqICAgICAudmFsdWVzKHtcbiAgICAgKiAgICAgICBmaXJzdF9uYW1lOiAnSmVubmlmZXInLFxuICAgICAqICAgICAgIGxhc3RfbmFtZTogJ0FuaXN0b24nLFxuICAgICAqICAgICAgIGFnZTogNDAsXG4gICAgICogICAgIH0pXG4gICAgICogICAgIC5yZXR1cm5pbmcoJ2lkJylcbiAgICAgKiAgICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKlxuICAgICAqICAgY29uc3QgdHJ4QWZ0ZXJKZW5uaWZlciA9IGF3YWl0IHRyeC5zYXZlcG9pbnQoJ2FmdGVyX2plbm5pZmVyJykuZXhlY3V0ZSgpXG4gICAgICpcbiAgICAgKiAgIHRyeSB7XG4gICAgICogICAgIGNvbnN0IGNhdHRvID0gYXdhaXQgdHJ4QWZ0ZXJKZW5uaWZlclxuICAgICAqICAgICAgIC5pbnNlcnRJbnRvKCdwZXQnKVxuICAgICAqICAgICAgIC52YWx1ZXMoe1xuICAgICAqICAgICAgICAgb3duZXJfaWQ6IGplbm5pZmVyLmlkLFxuICAgICAqICAgICAgICAgbmFtZTogJ0NhdHRvJyxcbiAgICAgKiAgICAgICAgIHNwZWNpZXM6ICdjYXQnLFxuICAgICAqICAgICAgIH0pXG4gICAgICogICAgICAgLnJldHVybmluZygnaWQnKVxuICAgICAqICAgICAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICpcbiAgICAgKiAgICAgYXdhaXQgdHJ4QWZ0ZXJKZW5uaWZlclxuICAgICAqICAgICAgIC5pbnNlcnRJbnRvKCd0b3knKVxuICAgICAqICAgICAgIC52YWx1ZXMoeyBuYW1lOiAnQm9uZScsIHByaWNlOiAxLjk5LCBwZXRfaWQ6IGNhdHRvLmlkIH0pXG4gICAgICogICAgICAgLmV4ZWN1dGUoKVxuICAgICAqICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgKiAgICAgYXdhaXQgdHJ4QWZ0ZXJKZW5uaWZlci5yb2xsYmFja1RvU2F2ZXBvaW50KCdhZnRlcl9qZW5uaWZlcicpLmV4ZWN1dGUoKVxuICAgICAqICAgfVxuICAgICAqXG4gICAgICogICBhd2FpdCB0cnhBZnRlckplbm5pZmVyLnJlbGVhc2VTYXZlcG9pbnQoJ2FmdGVyX2plbm5pZmVyJykuZXhlY3V0ZSgpXG4gICAgICpcbiAgICAgKiAgIGF3YWl0IHRyeC5pbnNlcnRJbnRvKCdhdWRpdCcpLnZhbHVlcyh7IGFjdGlvbjogJ2FkZGVkIEplbm5pZmVyJyB9KS5leGVjdXRlKClcbiAgICAgKlxuICAgICAqICAgYXdhaXQgdHJ4LmNvbW1pdCgpLmV4ZWN1dGUoKVxuICAgICAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICogICBhd2FpdCB0cngucm9sbGJhY2soKS5leGVjdXRlKClcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgc3RhcnRUcmFuc2FjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb250cm9sbGVkVHJhbnNhY3Rpb25CdWlsZGVyKHsgLi4udGhpcy4jcHJvcHMgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEga3lzZWx5IGluc3RhbmNlIGJvdW5kIHRvIGEgc2luZ2xlIGRhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC5jb25uZWN0aW9uKClcbiAgICAgKiAgIC5leGVjdXRlKGFzeW5jIChkYikgPT4ge1xuICAgICAqICAgICAvLyBgZGJgIGlzIGFuIGluc3RhbmNlIG9mIGBLeXNlbHlgIHRoYXQncyBib3VuZCB0byBhIHNpbmdsZVxuICAgICAqICAgICAvLyBkYXRhYmFzZSBjb25uZWN0aW9uLiBBbGwgcXVlcmllcyBleGVjdXRlZCB0aHJvdWdoIGBkYmAgdXNlXG4gICAgICogICAgIC8vIHRoZSBzYW1lIGNvbm5lY3Rpb24uXG4gICAgICogICAgIGF3YWl0IGRvU3R1ZmYoZGIpXG4gICAgICogICB9KVxuICAgICAqXG4gICAgICogYXN5bmMgZnVuY3Rpb24gZG9TdHVmZihreXNlbHk6IHR5cGVvZiBkYikge1xuICAgICAqICAgLy8gLi4uXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbm5lY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvbkJ1aWxkZXIoeyAuLi50aGlzLiNwcm9wcyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBLeXNlbHkgaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gcGx1Z2luIGluc3RhbGxlZC5cbiAgICAgKi9cbiAgICB3aXRoUGx1Z2luKHBsdWdpbikge1xuICAgICAgICByZXR1cm4gbmV3IEt5c2VseSh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNwcm9wcy5leGVjdXRvci53aXRoUGx1Z2luKHBsdWdpbiksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29weSBvZiB0aGlzIEt5c2VseSBpbnN0YW5jZSB3aXRob3V0IGFueSBwbHVnaW5zLlxuICAgICAqL1xuICAgIHdpdGhvdXRQbHVnaW5zKCkge1xuICAgICAgICByZXR1cm4gbmV3IEt5c2VseSh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNwcm9wcy5leGVjdXRvci53aXRob3V0UGx1Z2lucygpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQG92ZXJyaWRlXG4gICAgICovXG4gICAgd2l0aFNjaGVtYShzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBLeXNlbHkoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jcHJvcHMuZXhlY3V0b3Iud2l0aFBsdWdpbkF0RnJvbnQobmV3IFdpdGhTY2hlbWFQbHVnaW4oc2NoZW1hKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29weSBvZiB0aGlzIEt5c2VseSBpbnN0YW5jZSB3aXRoIHRhYmxlcyBhZGRlZCB0byBpdHNcbiAgICAgKiBkYXRhYmFzZSB0eXBlLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2Qgb25seSBtb2RpZmllcyB0aGUgdHlwZXMgYW5kIGRvZXNuJ3QgYWZmZWN0IGFueSBvZiB0aGVcbiAgICAgKiBleGVjdXRlZCBxdWVyaWVzIGluIGFueSB3YXkuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBhZGRzIGFuZCB1c2VzIGEgdGVtcG9yYXJ5IHRhYmxlOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgndGVtcF90YWJsZScpXG4gICAgICogICAudGVtcG9yYXJ5KClcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ3NvbWVfY29sdW1uJywgJ2ludGVnZXInKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqXG4gICAgICogY29uc3QgdGVtcERiID0gZGIud2l0aFRhYmxlczx7XG4gICAgICogICB0ZW1wX3RhYmxlOiB7XG4gICAgICogICAgIHNvbWVfY29sdW1uOiBudW1iZXJcbiAgICAgKiAgIH1cbiAgICAgKiB9PigpXG4gICAgICpcbiAgICAgKiBhd2FpdCB0ZW1wRGJcbiAgICAgKiAgIC5pbnNlcnRJbnRvKCd0ZW1wX3RhYmxlJylcbiAgICAgKiAgIC52YWx1ZXMoeyBzb21lX2NvbHVtbjogMTAwIH0pXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgd2l0aFRhYmxlcygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBLeXNlbHkoeyAuLi50aGlzLiNwcm9wcyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVsZWFzZXMgYWxsIHJlc291cmNlcyBhbmQgZGlzY29ubmVjdHMgZnJvbSB0aGUgZGF0YWJhc2UuXG4gICAgICpcbiAgICAgKiBZb3UgbmVlZCB0byBjYWxsIHRoaXMgd2hlbiB5b3UgYXJlIGRvbmUgdXNpbmcgdGhlIGBLeXNlbHlgIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGFzeW5jIGRlc3Ryb3koKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmRyaXZlci5kZXN0cm95KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGBLeXNlbHlgIGluc3RhbmNlIGlzIGEgdHJhbnNhY3Rpb24uXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIGFsc28gdXNlIGBkYiBpbnN0YW5jZW9mIFRyYW5zYWN0aW9uYC5cbiAgICAgKi9cbiAgICBnZXQgaXNUcmFuc2FjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldEV4ZWN1dG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGEgZ2l2ZW4gY29tcGlsZWQgcXVlcnkgb3IgcXVlcnkgYnVpbGRlci5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2t5c2VseS1vcmcva3lzZWx5L2Jsb2IvbWFzdGVyL3NpdGUvZG9jcy9yZWNpcGVzLzAwMDQtc3BsaXR0aW5nLXF1ZXJ5LWJ1aWxkaW5nLWFuZC1leGVjdXRpb24ubWQjZXhlY3V0ZS1jb21waWxlZC1xdWVyaWVzIHNwbGl0dGluZyBidWlsZCwgY29tcGlsZSBhbmQgZXhlY3V0ZSBjb2RlIHJlY2lwZX0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgZXhlY3V0ZVF1ZXJ5KHF1ZXJ5LCBxdWVyeUlkID0gY3JlYXRlUXVlcnlJZCgpKSB7XG4gICAgICAgIGNvbnN0IGNvbXBpbGVkUXVlcnkgPSBpc0NvbXBpbGFibGUocXVlcnkpID8gcXVlcnkuY29tcGlsZSgpIDogcXVlcnk7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEV4ZWN1dG9yKCkuZXhlY3V0ZVF1ZXJ5KGNvbXBpbGVkUXVlcnksIHF1ZXJ5SWQpO1xuICAgIH1cbiAgICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEt5c2VseSB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBwcm9wcztcbiAgICB9XG4gICAgLy8gVGhlIHJldHVybiB0eXBlIGlzIGB0cnVlYCBpbnN0ZWFkIG9mIGBib29sZWFuYCB0byBtYWtlIEt5c2VseTxEQj5cbiAgICAvLyB1bmFzc2lnbmFibGUgdG8gVHJhbnNhY3Rpb248REI+IHdoaWxlIGFsbG93aW5nIGFzc2lnbm1lbnQgdGhlXG4gICAgLy8gb3RoZXIgd2F5IGFyb3VuZC5cbiAgICBnZXQgaXNUcmFuc2FjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHRyYW5zYWN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbGxpbmcgdGhlIHRyYW5zYWN0aW9uIG1ldGhvZCBmb3IgYSBUcmFuc2FjdGlvbiBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICAgIGNvbm5lY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2FsbGluZyB0aGUgY29ubmVjdGlvbiBtZXRob2QgZm9yIGEgVHJhbnNhY3Rpb24gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbiAgICBhc3luYyBkZXN0cm95KCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbGxpbmcgdGhlIGRlc3Ryb3kgbWV0aG9kIGZvciBhIFRyYW5zYWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbihwbHVnaW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNwcm9wcy5leGVjdXRvci53aXRoUGx1Z2luKHBsdWdpbiksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3aXRob3V0UGx1Z2lucygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNwcm9wcy5leGVjdXRvci53aXRob3V0UGx1Z2lucygpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgd2l0aFNjaGVtYShzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNwcm9wcy5leGVjdXRvci53aXRoUGx1Z2luQXRGcm9udChuZXcgV2l0aFNjaGVtYVBsdWdpbihzY2hlbWEpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdpdGhUYWJsZXMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb24oeyAuLi50aGlzLiNwcm9wcyB9KTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaXNLeXNlbHlQcm9wcyhvYmopIHtcbiAgICByZXR1cm4gKGlzT2JqZWN0KG9iaikgJiZcbiAgICAgICAgaXNPYmplY3Qob2JqLmNvbmZpZykgJiZcbiAgICAgICAgaXNPYmplY3Qob2JqLmRyaXZlcikgJiZcbiAgICAgICAgaXNPYmplY3Qob2JqLmV4ZWN1dG9yKSAmJlxuICAgICAgICBpc09iamVjdChvYmouZGlhbGVjdCkpO1xufVxuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb25CdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5wcm92aWRlQ29ubmVjdGlvbihhc3luYyAoY29ubmVjdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXhlY3V0b3IgPSB0aGlzLiNwcm9wcy5leGVjdXRvci53aXRoQ29ubmVjdGlvblByb3ZpZGVyKG5ldyBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoY29ubmVjdGlvbikpO1xuICAgICAgICAgICAgY29uc3QgZGIgPSBuZXcgS3lzZWx5KHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgICAgICBleGVjdXRvcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKGRiKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgc2V0QWNjZXNzTW9kZShhY2Nlc3NNb2RlKSB7XG4gICAgICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgYWNjZXNzTW9kZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNldElzb2xhdGlvbkxldmVsKGlzb2xhdGlvbkxldmVsKSB7XG4gICAgICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWwsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHsgaXNvbGF0aW9uTGV2ZWwsIGFjY2Vzc01vZGUsIC4uLmt5c2VseVByb3BzIH0gPSB0aGlzLiNwcm9wcztcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7IGlzb2xhdGlvbkxldmVsLCBhY2Nlc3NNb2RlIH07XG4gICAgICAgIHZhbGlkYXRlVHJhbnNhY3Rpb25TZXR0aW5ncyhzZXR0aW5ncyk7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5wcm92aWRlQ29ubmVjdGlvbihhc3luYyAoY29ubmVjdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXhlY3V0b3IgPSB0aGlzLiNwcm9wcy5leGVjdXRvci53aXRoQ29ubmVjdGlvblByb3ZpZGVyKG5ldyBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoY29ubmVjdGlvbikpO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgICAgIC4uLmt5c2VseVByb3BzLFxuICAgICAgICAgICAgICAgIGV4ZWN1dG9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmRyaXZlci5iZWdpblRyYW5zYWN0aW9uKGNvbm5lY3Rpb24sIHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWxsYmFjayh0cmFuc2FjdGlvbik7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZHJpdmVyLmNvbW1pdFRyYW5zYWN0aW9uKGNvbm5lY3Rpb24pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLiNwcm9wcy5kcml2ZXIucm9sbGJhY2tUcmFuc2FjdGlvbihjb25uZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIENvbnRyb2xsZWRUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIHNldEFjY2Vzc01vZGUoYWNjZXNzTW9kZSkge1xuICAgICAgICByZXR1cm4gbmV3IENvbnRyb2xsZWRUcmFuc2FjdGlvbkJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBhY2Nlc3NNb2RlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2V0SXNvbGF0aW9uTGV2ZWwoaXNvbGF0aW9uTGV2ZWwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb250cm9sbGVkVHJhbnNhY3Rpb25CdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgaXNvbGF0aW9uTGV2ZWwsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKCkge1xuICAgICAgICBjb25zdCB7IGlzb2xhdGlvbkxldmVsLCBhY2Nlc3NNb2RlLCAuLi5wcm9wcyB9ID0gdGhpcy4jcHJvcHM7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0geyBpc29sYXRpb25MZXZlbCwgYWNjZXNzTW9kZSB9O1xuICAgICAgICB2YWxpZGF0ZVRyYW5zYWN0aW9uU2V0dGluZ3Moc2V0dGluZ3MpO1xuICAgICAgICBjb25zdCBjb25uZWN0aW9uID0gYXdhaXQgcHJvdmlkZUNvbnRyb2xsZWRDb25uZWN0aW9uKHRoaXMuI3Byb3BzLmV4ZWN1dG9yKTtcbiAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZHJpdmVyLmJlZ2luVHJhbnNhY3Rpb24oY29ubmVjdGlvbi5jb25uZWN0aW9uLCBzZXR0aW5ncyk7XG4gICAgICAgIHJldHVybiBuZXcgQ29udHJvbGxlZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICAgICAgY29ubmVjdGlvbixcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNwcm9wcy5leGVjdXRvci53aXRoQ29ubmVjdGlvblByb3ZpZGVyKG5ldyBTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIoY29ubmVjdGlvbi5jb25uZWN0aW9uKSksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBDb250cm9sbGVkVHJhbnNhY3Rpb24gZXh0ZW5kcyBUcmFuc2FjdGlvbiB7XG4gICAgI3Byb3BzO1xuICAgICNjb21waWxlUXVlcnk7XG4gICAgI3N0YXRlO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0geyBpc0NvbW1pdHRlZDogZmFsc2UsIGlzUm9sbGVkQmFjazogZmFsc2UgfTtcbiAgICAgICAgcHJvcHMgPSB7XG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiBuZXcgTm90Q29tbWl0dGVkT3JSb2xsZWRCYWNrQXNzZXJ0aW5nRXhlY3V0b3IocHJvcHMuZXhlY3V0b3IsIHN0YXRlKSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyBjb25uZWN0aW9uLCAuLi50cmFuc2FjdGlvblByb3BzIH0gPSBwcm9wcztcbiAgICAgICAgc3VwZXIodHJhbnNhY3Rpb25Qcm9wcyk7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICAgICAgdGhpcy4jc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgY29uc3QgcXVlcnlJZCA9IGNyZWF0ZVF1ZXJ5SWQoKTtcbiAgICAgICAgdGhpcy4jY29tcGlsZVF1ZXJ5ID0gKG5vZGUpID0+IHByb3BzLmV4ZWN1dG9yLmNvbXBpbGVRdWVyeShub2RlLCBxdWVyeUlkKTtcbiAgICB9XG4gICAgZ2V0IGlzQ29tbWl0dGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jc3RhdGUuaXNDb21taXR0ZWQ7XG4gICAgfVxuICAgIGdldCBpc1JvbGxlZEJhY2soKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNzdGF0ZS5pc1JvbGxlZEJhY2s7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbW1pdHMgdGhlIHRyYW5zYWN0aW9uLlxuICAgICAqXG4gICAgICogU2VlIHtAbGluayByb2xsYmFja30uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHR5cGUgeyBLeXNlbHkgfSBmcm9tICdreXNlbHknXG4gICAgICogaW1wb3J0IHR5cGUgeyBEYXRhYmFzZSB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gICAgICpcbiAgICAgKiBjb25zdCB0cnggPSBhd2FpdCBkYi5zdGFydFRyYW5zYWN0aW9uKCkuZXhlY3V0ZSgpXG4gICAgICpcbiAgICAgKiB0cnkge1xuICAgICAqICAgYXdhaXQgZG9Tb21ldGhpbmcodHJ4KVxuICAgICAqXG4gICAgICogICBhd2FpdCB0cnguY29tbWl0KCkuZXhlY3V0ZSgpXG4gICAgICogfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgKiAgIGF3YWl0IHRyeC5yb2xsYmFjaygpLmV4ZWN1dGUoKVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIGRvU29tZXRoaW5nKGt5c2VseTogS3lzZWx5PERhdGFiYXNlPikge31cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb21taXQoKSB7XG4gICAgICAgIGFzc2VydE5vdENvbW1pdHRlZE9yUm9sbGVkQmFjayh0aGlzLiNzdGF0ZSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbWFuZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNwcm9wcy5kcml2ZXIuY29tbWl0VHJhbnNhY3Rpb24odGhpcy4jcHJvcHMuY29ubmVjdGlvbi5jb25uZWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuI3N0YXRlLmlzQ29tbWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuI3Byb3BzLmNvbm5lY3Rpb24ucmVsZWFzZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUm9sbHMgYmFjayB0aGUgdHJhbnNhY3Rpb24uXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIGNvbW1pdH0gYW5kIHtAbGluayByb2xsYmFja1RvU2F2ZXBvaW50fS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgdHlwZSB7IEt5c2VseSB9IGZyb20gJ2t5c2VseSdcbiAgICAgKiBpbXBvcnQgdHlwZSB7IERhdGFiYXNlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAgICAgKlxuICAgICAqIGNvbnN0IHRyeCA9IGF3YWl0IGRiLnN0YXJ0VHJhbnNhY3Rpb24oKS5leGVjdXRlKClcbiAgICAgKlxuICAgICAqIHRyeSB7XG4gICAgICogICBhd2FpdCBkb1NvbWV0aGluZyh0cngpXG4gICAgICpcbiAgICAgKiAgIGF3YWl0IHRyeC5jb21taXQoKS5leGVjdXRlKClcbiAgICAgKiB9IGNhdGNoIChlcnJvcikge1xuICAgICAqICAgYXdhaXQgdHJ4LnJvbGxiYWNrKCkuZXhlY3V0ZSgpXG4gICAgICogfVxuICAgICAqXG4gICAgICogYXN5bmMgZnVuY3Rpb24gZG9Tb21ldGhpbmcoa3lzZWx5OiBLeXNlbHk8RGF0YWJhc2U+KSB7fVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHJvbGxiYWNrKCkge1xuICAgICAgICBhc3NlcnROb3RDb21taXR0ZWRPclJvbGxlZEJhY2sodGhpcy4jc3RhdGUpO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZHJpdmVyLnJvbGxiYWNrVHJhbnNhY3Rpb24odGhpcy4jcHJvcHMuY29ubmVjdGlvbi5jb25uZWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuI3N0YXRlLmlzUm9sbGVkQmFjayA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLiNwcm9wcy5jb25uZWN0aW9uLnJlbGVhc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBzYXZlcG9pbnQgd2l0aCBhIGdpdmVuIG5hbWUuXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIHJvbGxiYWNrVG9TYXZlcG9pbnR9IGFuZCB7QGxpbmsgcmVsZWFzZVNhdmVwb2ludH0uXG4gICAgICpcbiAgICAgKiBGb3IgYSB0eXBlLXNhZmUgZXhwZXJpZW5jZSwgeW91IHNob3VsZCB1c2UgdGhlIHJldHVybmVkIGluc3RhbmNlIGZyb20gbm93IG9uLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgS3lzZWx5IH0gZnJvbSAna3lzZWx5J1xuICAgICAqIGltcG9ydCB0eXBlIHsgRGF0YWJhc2UgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICAgICAqXG4gICAgICogY29uc3QgdHJ4ID0gYXdhaXQgZGIuc3RhcnRUcmFuc2FjdGlvbigpLmV4ZWN1dGUoKVxuICAgICAqXG4gICAgICogYXdhaXQgaW5zZXJ0SmVubmlmZXIodHJ4KVxuICAgICAqXG4gICAgICogY29uc3QgdHJ4QWZ0ZXJKZW5uaWZlciA9IGF3YWl0IHRyeC5zYXZlcG9pbnQoJ2FmdGVyX2plbm5pZmVyJykuZXhlY3V0ZSgpXG4gICAgICpcbiAgICAgKiB0cnkge1xuICAgICAqICAgYXdhaXQgZG9Tb21ldGhpbmcodHJ4QWZ0ZXJKZW5uaWZlcilcbiAgICAgKiB9IGNhdGNoIChlcnJvcikge1xuICAgICAqICAgYXdhaXQgdHJ4QWZ0ZXJKZW5uaWZlci5yb2xsYmFja1RvU2F2ZXBvaW50KCdhZnRlcl9qZW5uaWZlcicpLmV4ZWN1dGUoKVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIGluc2VydEplbm5pZmVyKGt5c2VseTogS3lzZWx5PERhdGFiYXNlPikge31cbiAgICAgKiBhc3luYyBmdW5jdGlvbiBkb1NvbWV0aGluZyhreXNlbHk6IEt5c2VseTxEYXRhYmFzZT4pIHt9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgc2F2ZXBvaW50KHNhdmVwb2ludE5hbWUpIHtcbiAgICAgICAgYXNzZXJ0Tm90Q29tbWl0dGVkT3JSb2xsZWRCYWNrKHRoaXMuI3N0YXRlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmRyaXZlci5zYXZlcG9pbnQ/Lih0aGlzLiNwcm9wcy5jb25uZWN0aW9uLmNvbm5lY3Rpb24sIHNhdmVwb2ludE5hbWUsIHRoaXMuI2NvbXBpbGVRdWVyeSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnRyb2xsZWRUcmFuc2FjdGlvbih7IC4uLnRoaXMuI3Byb3BzIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUm9sbHMgYmFjayB0byBhIHNhdmVwb2ludCB3aXRoIGEgZ2l2ZW4gbmFtZS5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgc2F2ZXBvaW50fSBhbmQge0BsaW5rIHJlbGVhc2VTYXZlcG9pbnR9LlxuICAgICAqXG4gICAgICogWW91IG11c3QgdXNlIHRoZSBzYW1lIGluc3RhbmNlIHJldHVybmVkIGJ5IHtAbGluayBzYXZlcG9pbnR9LCBvclxuICAgICAqIGVzY2FwZSB0aGUgdHlwZS1jaGVjayBieSB1c2luZyBgYXMgYW55YC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgdHlwZSB7IEt5c2VseSB9IGZyb20gJ2t5c2VseSdcbiAgICAgKiBpbXBvcnQgdHlwZSB7IERhdGFiYXNlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAgICAgKlxuICAgICAqIGNvbnN0IHRyeCA9IGF3YWl0IGRiLnN0YXJ0VHJhbnNhY3Rpb24oKS5leGVjdXRlKClcbiAgICAgKlxuICAgICAqIGF3YWl0IGluc2VydEplbm5pZmVyKHRyeClcbiAgICAgKlxuICAgICAqIGNvbnN0IHRyeEFmdGVySmVubmlmZXIgPSBhd2FpdCB0cnguc2F2ZXBvaW50KCdhZnRlcl9qZW5uaWZlcicpLmV4ZWN1dGUoKVxuICAgICAqXG4gICAgICogdHJ5IHtcbiAgICAgKiAgIGF3YWl0IGRvU29tZXRoaW5nKHRyeEFmdGVySmVubmlmZXIpXG4gICAgICogfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgKiAgIGF3YWl0IHRyeEFmdGVySmVubmlmZXIucm9sbGJhY2tUb1NhdmVwb2ludCgnYWZ0ZXJfamVubmlmZXInKS5leGVjdXRlKClcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBhc3luYyBmdW5jdGlvbiBpbnNlcnRKZW5uaWZlcihreXNlbHk6IEt5c2VseTxEYXRhYmFzZT4pIHt9XG4gICAgICogYXN5bmMgZnVuY3Rpb24gZG9Tb21ldGhpbmcoa3lzZWx5OiBLeXNlbHk8RGF0YWJhc2U+KSB7fVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHJvbGxiYWNrVG9TYXZlcG9pbnQoc2F2ZXBvaW50TmFtZSkge1xuICAgICAgICBhc3NlcnROb3RDb21taXR0ZWRPclJvbGxlZEJhY2sodGhpcy4jc3RhdGUpO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZHJpdmVyLnJvbGxiYWNrVG9TYXZlcG9pbnQ/Lih0aGlzLiNwcm9wcy5jb25uZWN0aW9uLmNvbm5lY3Rpb24sIHNhdmVwb2ludE5hbWUsIHRoaXMuI2NvbXBpbGVRdWVyeSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnRyb2xsZWRUcmFuc2FjdGlvbih7IC4uLnRoaXMuI3Byb3BzIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVsZWFzZXMgYSBzYXZlcG9pbnQgd2l0aCBhIGdpdmVuIG5hbWUuXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIHNhdmVwb2ludH0gYW5kIHtAbGluayByb2xsYmFja1RvU2F2ZXBvaW50fS5cbiAgICAgKlxuICAgICAqIFlvdSBtdXN0IHVzZSB0aGUgc2FtZSBpbnN0YW5jZSByZXR1cm5lZCBieSB7QGxpbmsgc2F2ZXBvaW50fSwgb3JcbiAgICAgKiBlc2NhcGUgdGhlIHR5cGUtY2hlY2sgYnkgdXNpbmcgYGFzIGFueWAuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHR5cGUgeyBLeXNlbHkgfSBmcm9tICdreXNlbHknXG4gICAgICogaW1wb3J0IHR5cGUgeyBEYXRhYmFzZSB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gICAgICpcbiAgICAgKiBjb25zdCB0cnggPSBhd2FpdCBkYi5zdGFydFRyYW5zYWN0aW9uKCkuZXhlY3V0ZSgpXG4gICAgICpcbiAgICAgKiBhd2FpdCBpbnNlcnRKZW5uaWZlcih0cngpXG4gICAgICpcbiAgICAgKiBjb25zdCB0cnhBZnRlckplbm5pZmVyID0gYXdhaXQgdHJ4LnNhdmVwb2ludCgnYWZ0ZXJfamVubmlmZXInKS5leGVjdXRlKClcbiAgICAgKlxuICAgICAqIHRyeSB7XG4gICAgICogICBhd2FpdCBkb1NvbWV0aGluZyh0cnhBZnRlckplbm5pZmVyKVxuICAgICAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICogICBhd2FpdCB0cnhBZnRlckplbm5pZmVyLnJvbGxiYWNrVG9TYXZlcG9pbnQoJ2FmdGVyX2plbm5pZmVyJykuZXhlY3V0ZSgpXG4gICAgICogfVxuICAgICAqXG4gICAgICogYXdhaXQgdHJ4QWZ0ZXJKZW5uaWZlci5yZWxlYXNlU2F2ZXBvaW50KCdhZnRlcl9qZW5uaWZlcicpLmV4ZWN1dGUoKVxuICAgICAqXG4gICAgICogYXdhaXQgZG9Tb21ldGhpbmdFbHNlKHRyeClcbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIGluc2VydEplbm5pZmVyKGt5c2VseTogS3lzZWx5PERhdGFiYXNlPikge31cbiAgICAgKiBhc3luYyBmdW5jdGlvbiBkb1NvbWV0aGluZyhreXNlbHk6IEt5c2VseTxEYXRhYmFzZT4pIHt9XG4gICAgICogYXN5bmMgZnVuY3Rpb24gZG9Tb21ldGhpbmdFbHNlKGt5c2VseTogS3lzZWx5PERhdGFiYXNlPikge31cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZWxlYXNlU2F2ZXBvaW50KHNhdmVwb2ludE5hbWUpIHtcbiAgICAgICAgYXNzZXJ0Tm90Q29tbWl0dGVkT3JSb2xsZWRCYWNrKHRoaXMuI3N0YXRlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmRyaXZlci5yZWxlYXNlU2F2ZXBvaW50Py4odGhpcy4jcHJvcHMuY29ubmVjdGlvbi5jb25uZWN0aW9uLCBzYXZlcG9pbnROYW1lLCB0aGlzLiNjb21waWxlUXVlcnkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb250cm9sbGVkVHJhbnNhY3Rpb24oeyAuLi50aGlzLiNwcm9wcyB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdpdGhQbHVnaW4ocGx1Z2luKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29udHJvbGxlZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhQbHVnaW4ocGx1Z2luKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdpdGhvdXRQbHVnaW5zKCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbnRyb2xsZWRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNwcm9wcy5leGVjdXRvci53aXRob3V0UGx1Z2lucygpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgd2l0aFNjaGVtYShzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb250cm9sbGVkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jcHJvcHMuZXhlY3V0b3Iud2l0aFBsdWdpbkF0RnJvbnQobmV3IFdpdGhTY2hlbWFQbHVnaW4oc2NoZW1hKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3aXRoVGFibGVzKCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbnRyb2xsZWRUcmFuc2FjdGlvbih7IC4uLnRoaXMuI3Byb3BzIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBDb21tYW5kIHtcbiAgICAjY2I7XG4gICAgY29uc3RydWN0b3IoY2IpIHtcbiAgICAgICAgdGhpcy4jY2IgPSBjYjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIGNvbW1hbmQuXG4gICAgICovXG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuI2NiKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXNzZXJ0Tm90Q29tbWl0dGVkT3JSb2xsZWRCYWNrKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLmlzQ29tbWl0dGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBjb21taXR0ZWQnKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlLmlzUm9sbGVkQmFjaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIGlzIGFscmVhZHkgcm9sbGVkIGJhY2snKTtcbiAgICB9XG59XG4vKipcbiAqIEFuIGV4ZWN1dG9yIHdyYXBwZXIgdGhhdCBhc3NlcnRzIHRoYXQgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIGlzIG5vdCBjb21taXR0ZWRcbiAqIG9yIHJvbGxlZCBiYWNrIHdoZW4gYSBxdWVyeSBpcyBleGVjdXRlZC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuY2xhc3MgTm90Q29tbWl0dGVkT3JSb2xsZWRCYWNrQXNzZXJ0aW5nRXhlY3V0b3Ige1xuICAgICNleGVjdXRvcjtcbiAgICAjc3RhdGU7XG4gICAgY29uc3RydWN0b3IoZXhlY3V0b3IsIHN0YXRlKSB7XG4gICAgICAgIGlmIChleGVjdXRvciBpbnN0YW5jZW9mIE5vdENvbW1pdHRlZE9yUm9sbGVkQmFja0Fzc2VydGluZ0V4ZWN1dG9yKSB7XG4gICAgICAgICAgICB0aGlzLiNleGVjdXRvciA9IGV4ZWN1dG9yLiNleGVjdXRvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2V4ZWN1dG9yID0gZXhlY3V0b3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4jc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG4gICAgZ2V0IGFkYXB0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNleGVjdXRvci5hZGFwdGVyO1xuICAgIH1cbiAgICBnZXQgcGx1Z2lucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2V4ZWN1dG9yLnBsdWdpbnM7XG4gICAgfVxuICAgIHRyYW5zZm9ybVF1ZXJ5KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2V4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KG5vZGUsIHF1ZXJ5SWQpO1xuICAgIH1cbiAgICBjb21waWxlUXVlcnkobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZXhlY3V0b3IuY29tcGlsZVF1ZXJ5KG5vZGUsIHF1ZXJ5SWQpO1xuICAgIH1cbiAgICBwcm92aWRlQ29ubmVjdGlvbihjb25zdW1lcikge1xuICAgICAgICByZXR1cm4gdGhpcy4jZXhlY3V0b3IucHJvdmlkZUNvbm5lY3Rpb24oY29uc3VtZXIpO1xuICAgIH1cbiAgICBleGVjdXRlUXVlcnkoY29tcGlsZWRRdWVyeSwgcXVlcnlJZCkge1xuICAgICAgICBhc3NlcnROb3RDb21taXR0ZWRPclJvbGxlZEJhY2sodGhpcy4jc3RhdGUpO1xuICAgICAgICByZXR1cm4gdGhpcy4jZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KGNvbXBpbGVkUXVlcnksIHF1ZXJ5SWQpO1xuICAgIH1cbiAgICBzdHJlYW0oY29tcGlsZWRRdWVyeSwgY2h1bmtTaXplLCBxdWVyeUlkKSB7XG4gICAgICAgIGFzc2VydE5vdENvbW1pdHRlZE9yUm9sbGVkQmFjayh0aGlzLiNzdGF0ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLiNleGVjdXRvci5zdHJlYW0oY29tcGlsZWRRdWVyeSwgY2h1bmtTaXplLCBxdWVyeUlkKTtcbiAgICB9XG4gICAgd2l0aENvbm5lY3Rpb25Qcm92aWRlcihjb25uZWN0aW9uUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RDb21taXR0ZWRPclJvbGxlZEJhY2tBc3NlcnRpbmdFeGVjdXRvcih0aGlzLiNleGVjdXRvci53aXRoQ29ubmVjdGlvblByb3ZpZGVyKGNvbm5lY3Rpb25Qcm92aWRlciksIHRoaXMuI3N0YXRlKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbihwbHVnaW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RDb21taXR0ZWRPclJvbGxlZEJhY2tBc3NlcnRpbmdFeGVjdXRvcih0aGlzLiNleGVjdXRvci53aXRoUGx1Z2luKHBsdWdpbiksIHRoaXMuI3N0YXRlKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbnMocGx1Z2lucykge1xuICAgICAgICByZXR1cm4gbmV3IE5vdENvbW1pdHRlZE9yUm9sbGVkQmFja0Fzc2VydGluZ0V4ZWN1dG9yKHRoaXMuI2V4ZWN1dG9yLndpdGhQbHVnaW5zKHBsdWdpbnMpLCB0aGlzLiNzdGF0ZSk7XG4gICAgfVxuICAgIHdpdGhQbHVnaW5BdEZyb250KHBsdWdpbikge1xuICAgICAgICByZXR1cm4gbmV3IE5vdENvbW1pdHRlZE9yUm9sbGVkQmFja0Fzc2VydGluZ0V4ZWN1dG9yKHRoaXMuI2V4ZWN1dG9yLndpdGhQbHVnaW5BdEZyb250KHBsdWdpbiksIHRoaXMuI3N0YXRlKTtcbiAgICB9XG4gICAgd2l0aG91dFBsdWdpbnMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTm90Q29tbWl0dGVkT3JSb2xsZWRCYWNrQXNzZXJ0aW5nRXhlY3V0b3IodGhpcy4jZXhlY3V0b3Iud2l0aG91dFBsdWdpbnMoKSwgdGhpcy4jc3RhdGUpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcmF3LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBBbGlhc05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hbGlhcy1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IE5PT1BfUVVFUllfRVhFQ1VUT1IgfSBmcm9tICcuLi9xdWVyeS1leGVjdXRvci9ub29wLXF1ZXJ5LWV4ZWN1dG9yLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IGlzT3BlcmF0aW9uTm9kZVNvdXJjZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXNvdXJjZS5qcyc7XG5jbGFzcyBSYXdCdWlsZGVySW1wbCB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgZ2V0IGV4cHJlc3Npb25UeXBlKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgaXNSYXdCdWlsZGVyKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYXMoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbGlhc2VkUmF3QnVpbGRlckltcGwodGhpcywgYWxpYXMpO1xuICAgIH1cbiAgICAkY2FzdFRvKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJhd0J1aWxkZXJJbXBsKHsgLi4udGhpcy4jcHJvcHMgfSk7XG4gICAgfVxuICAgICRub3ROdWxsKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJhd0J1aWxkZXJJbXBsKHRoaXMuI3Byb3BzKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbihwbHVnaW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSYXdCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHBsdWdpbnM6IHRoaXMuI3Byb3BzLnBsdWdpbnMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZnJlZXplKFsuLi50aGlzLiNwcm9wcy5wbHVnaW5zLCBwbHVnaW5dKVxuICAgICAgICAgICAgICAgIDogZnJlZXplKFtwbHVnaW5dKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3RvT3BlcmF0aW9uTm9kZSh0aGlzLiNnZXRFeGVjdXRvcigpKTtcbiAgICB9XG4gICAgY29tcGlsZShleGVjdXRvclByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNjb21waWxlKHRoaXMuI2dldEV4ZWN1dG9yKGV4ZWN1dG9yUHJvdmlkZXIpKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZShleGVjdXRvclByb3ZpZGVyKSB7XG4gICAgICAgIGNvbnN0IGV4ZWN1dG9yID0gdGhpcy4jZ2V0RXhlY3V0b3IoZXhlY3V0b3JQcm92aWRlcik7XG4gICAgICAgIHJldHVybiBleGVjdXRvci5leGVjdXRlUXVlcnkodGhpcy4jY29tcGlsZShleGVjdXRvciksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICAjZ2V0RXhlY3V0b3IoZXhlY3V0b3JQcm92aWRlcikge1xuICAgICAgICBjb25zdCBleGVjdXRvciA9IGV4ZWN1dG9yUHJvdmlkZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBleGVjdXRvclByb3ZpZGVyLmdldEV4ZWN1dG9yKClcbiAgICAgICAgICAgIDogTk9PUF9RVUVSWV9FWEVDVVRPUjtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLnBsdWdpbnMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBleGVjdXRvci53aXRoUGx1Z2lucyh0aGlzLiNwcm9wcy5wbHVnaW5zKVxuICAgICAgICAgICAgOiBleGVjdXRvcjtcbiAgICB9XG4gICAgI3RvT3BlcmF0aW9uTm9kZShleGVjdXRvcikge1xuICAgICAgICByZXR1cm4gZXhlY3V0b3IudHJhbnNmb3JtUXVlcnkodGhpcy4jcHJvcHMucmF3Tm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgICNjb21waWxlKGV4ZWN1dG9yKSB7XG4gICAgICAgIHJldHVybiBleGVjdXRvci5jb21waWxlUXVlcnkodGhpcy4jdG9PcGVyYXRpb25Ob2RlKGV4ZWN1dG9yKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJhd0J1aWxkZXIocHJvcHMpIHtcbiAgICByZXR1cm4gbmV3IFJhd0J1aWxkZXJJbXBsKHByb3BzKTtcbn1cbmNsYXNzIEFsaWFzZWRSYXdCdWlsZGVySW1wbCB7XG4gICAgI3Jhd0J1aWxkZXI7XG4gICAgI2FsaWFzO1xuICAgIGNvbnN0cnVjdG9yKHJhd0J1aWxkZXIsIGFsaWFzKSB7XG4gICAgICAgIHRoaXMuI3Jhd0J1aWxkZXIgPSByYXdCdWlsZGVyO1xuICAgICAgICB0aGlzLiNhbGlhcyA9IGFsaWFzO1xuICAgIH1cbiAgICBnZXQgZXhwcmVzc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Jhd0J1aWxkZXI7XG4gICAgfVxuICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2FsaWFzO1xuICAgIH1cbiAgICBnZXQgcmF3QnVpbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Jhd0J1aWxkZXI7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIEFsaWFzTm9kZS5jcmVhdGUodGhpcy4jcmF3QnVpbGRlci50b09wZXJhdGlvbk5vZGUoKSwgaXNPcGVyYXRpb25Ob2RlU291cmNlKHRoaXMuI2FsaWFzKVxuICAgICAgICAgICAgPyB0aGlzLiNhbGlhcy50b09wZXJhdGlvbk5vZGUoKVxuICAgICAgICAgICAgOiBJZGVudGlmaWVyTm9kZS5jcmVhdGUodGhpcy4jYWxpYXMpKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3NxbC5kLnRzXCIgLz5cbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IGlzT3BlcmF0aW9uTm9kZVNvdXJjZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXNvdXJjZS5qcyc7XG5pbXBvcnQgeyBSYXdOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcmF3LW5vZGUuanMnO1xuaW1wb3J0IHsgVmFsdWVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvdmFsdWUtbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVN0cmluZ1JlZmVyZW5jZSB9IGZyb20gJy4uL3BhcnNlci9yZWZlcmVuY2UtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlVGFibGUgfSBmcm9tICcuLi9wYXJzZXIvdGFibGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlVmFsdWVFeHByZXNzaW9uIH0gZnJvbSAnLi4vcGFyc2VyL3ZhbHVlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVRdWVyeUlkIH0gZnJvbSAnLi4vdXRpbC9xdWVyeS1pZC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVSYXdCdWlsZGVyIH0gZnJvbSAnLi9yYXctYnVpbGRlci5qcyc7XG5leHBvcnQgY29uc3Qgc3FsID0gT2JqZWN0LmFzc2lnbigoc3FsRnJhZ21lbnRzLCAuLi5wYXJhbWV0ZXJzKSA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZVJhd0J1aWxkZXIoe1xuICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgIHJhd05vZGU6IFJhd05vZGUuY3JlYXRlKHNxbEZyYWdtZW50cywgcGFyYW1ldGVycz8ubWFwKHBhcnNlUGFyYW1ldGVyKSA/PyBbXSksXG4gICAgfSk7XG59LCB7XG4gICAgcmVmKGNvbHVtblJlZmVyZW5jZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhDaGlsZChwYXJzZVN0cmluZ1JlZmVyZW5jZShjb2x1bW5SZWZlcmVuY2UpKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICB2YWwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJhd0J1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgcmF3Tm9kZTogUmF3Tm9kZS5jcmVhdGVXaXRoQ2hpbGQocGFyc2VWYWx1ZUV4cHJlc3Npb24odmFsdWUpKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICB2YWx1ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWwodmFsdWUpO1xuICAgIH0sXG4gICAgdGFibGUodGFibGVSZWZlcmVuY2UpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJhd0J1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgcmF3Tm9kZTogUmF3Tm9kZS5jcmVhdGVXaXRoQ2hpbGQocGFyc2VUYWJsZSh0YWJsZVJlZmVyZW5jZSkpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGlkKC4uLmlkcykge1xuICAgICAgICBjb25zdCBmcmFnbWVudHMgPSBuZXcgQXJyYXkoaWRzLmxlbmd0aCArIDEpLmZpbGwoJy4nKTtcbiAgICAgICAgZnJhZ21lbnRzWzBdID0gJyc7XG4gICAgICAgIGZyYWdtZW50c1tmcmFnbWVudHMubGVuZ3RoIC0gMV0gPSAnJztcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJhd0J1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgcmF3Tm9kZTogUmF3Tm9kZS5jcmVhdGUoZnJhZ21lbnRzLCBpZHMubWFwKElkZW50aWZpZXJOb2RlLmNyZWF0ZSkpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGxpdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhDaGlsZChWYWx1ZU5vZGUuY3JlYXRlSW1tZWRpYXRlKHZhbHVlKSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgbGl0ZXJhbCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5saXQodmFsdWUpO1xuICAgIH0sXG4gICAgcmF3KHNxbCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhTcWwoc3FsKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBqb2luKGFycmF5LCBzZXBhcmF0b3IgPSBzcWwgYCwgYCkge1xuICAgICAgICBjb25zdCBub2RlcyA9IG5ldyBBcnJheShNYXRoLm1heCgyICogYXJyYXkubGVuZ3RoIC0gMSwgMCkpO1xuICAgICAgICBjb25zdCBzZXAgPSBzZXBhcmF0b3IudG9PcGVyYXRpb25Ob2RlKCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIG5vZGVzWzIgKiBpXSA9IHBhcnNlUGFyYW1ldGVyKGFycmF5W2ldKTtcbiAgICAgICAgICAgIGlmIChpICE9PSBhcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgbm9kZXNbMiAqIGkgKyAxXSA9IHNlcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhDaGlsZHJlbihub2RlcyksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbmZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVyKHBhcmFtKSB7XG4gICAgaWYgKGlzT3BlcmF0aW9uTm9kZVNvdXJjZShwYXJhbSkpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtLnRvT3BlcmF0aW9uTm9kZSgpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VWYWx1ZUV4cHJlc3Npb24ocGFyYW0pO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vcGVyYXRpb24tbm9kZS12aXNpdG9yLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIE9wZXJhdGlvbk5vZGVWaXNpdG9yIHtcbiAgICBub2RlU3RhY2sgPSBbXTtcbiAgICBnZXQgcGFyZW50Tm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm9kZVN0YWNrW3RoaXMubm9kZVN0YWNrLmxlbmd0aCAtIDJdO1xuICAgIH1cbiAgICAjdmlzaXRvcnMgPSBmcmVlemUoe1xuICAgICAgICBBbGlhc05vZGU6IHRoaXMudmlzaXRBbGlhcy5iaW5kKHRoaXMpLFxuICAgICAgICBDb2x1bW5Ob2RlOiB0aGlzLnZpc2l0Q29sdW1uLmJpbmQodGhpcyksXG4gICAgICAgIElkZW50aWZpZXJOb2RlOiB0aGlzLnZpc2l0SWRlbnRpZmllci5iaW5kKHRoaXMpLFxuICAgICAgICBTY2hlbWFibGVJZGVudGlmaWVyTm9kZTogdGhpcy52aXNpdFNjaGVtYWJsZUlkZW50aWZpZXIuYmluZCh0aGlzKSxcbiAgICAgICAgUmF3Tm9kZTogdGhpcy52aXNpdFJhdy5iaW5kKHRoaXMpLFxuICAgICAgICBSZWZlcmVuY2VOb2RlOiB0aGlzLnZpc2l0UmVmZXJlbmNlLmJpbmQodGhpcyksXG4gICAgICAgIFNlbGVjdFF1ZXJ5Tm9kZTogdGhpcy52aXNpdFNlbGVjdFF1ZXJ5LmJpbmQodGhpcyksXG4gICAgICAgIFNlbGVjdGlvbk5vZGU6IHRoaXMudmlzaXRTZWxlY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgVGFibGVOb2RlOiB0aGlzLnZpc2l0VGFibGUuYmluZCh0aGlzKSxcbiAgICAgICAgRnJvbU5vZGU6IHRoaXMudmlzaXRGcm9tLmJpbmQodGhpcyksXG4gICAgICAgIFNlbGVjdEFsbE5vZGU6IHRoaXMudmlzaXRTZWxlY3RBbGwuYmluZCh0aGlzKSxcbiAgICAgICAgQW5kTm9kZTogdGhpcy52aXNpdEFuZC5iaW5kKHRoaXMpLFxuICAgICAgICBPck5vZGU6IHRoaXMudmlzaXRPci5iaW5kKHRoaXMpLFxuICAgICAgICBWYWx1ZU5vZGU6IHRoaXMudmlzaXRWYWx1ZS5iaW5kKHRoaXMpLFxuICAgICAgICBWYWx1ZUxpc3ROb2RlOiB0aGlzLnZpc2l0VmFsdWVMaXN0LmJpbmQodGhpcyksXG4gICAgICAgIFByaW1pdGl2ZVZhbHVlTGlzdE5vZGU6IHRoaXMudmlzaXRQcmltaXRpdmVWYWx1ZUxpc3QuYmluZCh0aGlzKSxcbiAgICAgICAgUGFyZW5zTm9kZTogdGhpcy52aXNpdFBhcmVucy5iaW5kKHRoaXMpLFxuICAgICAgICBKb2luTm9kZTogdGhpcy52aXNpdEpvaW4uYmluZCh0aGlzKSxcbiAgICAgICAgT3BlcmF0b3JOb2RlOiB0aGlzLnZpc2l0T3BlcmF0b3IuYmluZCh0aGlzKSxcbiAgICAgICAgV2hlcmVOb2RlOiB0aGlzLnZpc2l0V2hlcmUuYmluZCh0aGlzKSxcbiAgICAgICAgSW5zZXJ0UXVlcnlOb2RlOiB0aGlzLnZpc2l0SW5zZXJ0UXVlcnkuYmluZCh0aGlzKSxcbiAgICAgICAgRGVsZXRlUXVlcnlOb2RlOiB0aGlzLnZpc2l0RGVsZXRlUXVlcnkuYmluZCh0aGlzKSxcbiAgICAgICAgUmV0dXJuaW5nTm9kZTogdGhpcy52aXNpdFJldHVybmluZy5iaW5kKHRoaXMpLFxuICAgICAgICBDcmVhdGVUYWJsZU5vZGU6IHRoaXMudmlzaXRDcmVhdGVUYWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICBBZGRDb2x1bW5Ob2RlOiB0aGlzLnZpc2l0QWRkQ29sdW1uLmJpbmQodGhpcyksXG4gICAgICAgIENvbHVtbkRlZmluaXRpb25Ob2RlOiB0aGlzLnZpc2l0Q29sdW1uRGVmaW5pdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wVGFibGVOb2RlOiB0aGlzLnZpc2l0RHJvcFRhYmxlLmJpbmQodGhpcyksXG4gICAgICAgIERhdGFUeXBlTm9kZTogdGhpcy52aXNpdERhdGFUeXBlLmJpbmQodGhpcyksXG4gICAgICAgIE9yZGVyQnlOb2RlOiB0aGlzLnZpc2l0T3JkZXJCeS5iaW5kKHRoaXMpLFxuICAgICAgICBPcmRlckJ5SXRlbU5vZGU6IHRoaXMudmlzaXRPcmRlckJ5SXRlbS5iaW5kKHRoaXMpLFxuICAgICAgICBHcm91cEJ5Tm9kZTogdGhpcy52aXNpdEdyb3VwQnkuYmluZCh0aGlzKSxcbiAgICAgICAgR3JvdXBCeUl0ZW1Ob2RlOiB0aGlzLnZpc2l0R3JvdXBCeUl0ZW0uYmluZCh0aGlzKSxcbiAgICAgICAgVXBkYXRlUXVlcnlOb2RlOiB0aGlzLnZpc2l0VXBkYXRlUXVlcnkuYmluZCh0aGlzKSxcbiAgICAgICAgQ29sdW1uVXBkYXRlTm9kZTogdGhpcy52aXNpdENvbHVtblVwZGF0ZS5iaW5kKHRoaXMpLFxuICAgICAgICBMaW1pdE5vZGU6IHRoaXMudmlzaXRMaW1pdC5iaW5kKHRoaXMpLFxuICAgICAgICBPZmZzZXROb2RlOiB0aGlzLnZpc2l0T2Zmc2V0LmJpbmQodGhpcyksXG4gICAgICAgIE9uQ29uZmxpY3ROb2RlOiB0aGlzLnZpc2l0T25Db25mbGljdC5iaW5kKHRoaXMpLFxuICAgICAgICBPbkR1cGxpY2F0ZUtleU5vZGU6IHRoaXMudmlzaXRPbkR1cGxpY2F0ZUtleS5iaW5kKHRoaXMpLFxuICAgICAgICBDcmVhdGVJbmRleE5vZGU6IHRoaXMudmlzaXRDcmVhdGVJbmRleC5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wSW5kZXhOb2RlOiB0aGlzLnZpc2l0RHJvcEluZGV4LmJpbmQodGhpcyksXG4gICAgICAgIExpc3ROb2RlOiB0aGlzLnZpc2l0TGlzdC5iaW5kKHRoaXMpLFxuICAgICAgICBQcmltYXJ5S2V5Q29uc3RyYWludE5vZGU6IHRoaXMudmlzaXRQcmltYXJ5S2V5Q29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBVbmlxdWVDb25zdHJhaW50Tm9kZTogdGhpcy52aXNpdFVuaXF1ZUNvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgUmVmZXJlbmNlc05vZGU6IHRoaXMudmlzaXRSZWZlcmVuY2VzLmJpbmQodGhpcyksXG4gICAgICAgIENoZWNrQ29uc3RyYWludE5vZGU6IHRoaXMudmlzaXRDaGVja0NvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgV2l0aE5vZGU6IHRoaXMudmlzaXRXaXRoLmJpbmQodGhpcyksXG4gICAgICAgIENvbW1vblRhYmxlRXhwcmVzc2lvbk5vZGU6IHRoaXMudmlzaXRDb21tb25UYWJsZUV4cHJlc3Npb24uYmluZCh0aGlzKSxcbiAgICAgICAgQ29tbW9uVGFibGVFeHByZXNzaW9uTmFtZU5vZGU6IHRoaXMudmlzaXRDb21tb25UYWJsZUV4cHJlc3Npb25OYW1lLmJpbmQodGhpcyksXG4gICAgICAgIEhhdmluZ05vZGU6IHRoaXMudmlzaXRIYXZpbmcuYmluZCh0aGlzKSxcbiAgICAgICAgQ3JlYXRlU2NoZW1hTm9kZTogdGhpcy52aXNpdENyZWF0ZVNjaGVtYS5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wU2NoZW1hTm9kZTogdGhpcy52aXNpdERyb3BTY2hlbWEuYmluZCh0aGlzKSxcbiAgICAgICAgQWx0ZXJUYWJsZU5vZGU6IHRoaXMudmlzaXRBbHRlclRhYmxlLmJpbmQodGhpcyksXG4gICAgICAgIERyb3BDb2x1bW5Ob2RlOiB0aGlzLnZpc2l0RHJvcENvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBSZW5hbWVDb2x1bW5Ob2RlOiB0aGlzLnZpc2l0UmVuYW1lQ29sdW1uLmJpbmQodGhpcyksXG4gICAgICAgIEFsdGVyQ29sdW1uTm9kZTogdGhpcy52aXNpdEFsdGVyQ29sdW1uLmJpbmQodGhpcyksXG4gICAgICAgIE1vZGlmeUNvbHVtbk5vZGU6IHRoaXMudmlzaXRNb2RpZnlDb2x1bW4uYmluZCh0aGlzKSxcbiAgICAgICAgQWRkQ29uc3RyYWludE5vZGU6IHRoaXMudmlzaXRBZGRDb25zdHJhaW50LmJpbmQodGhpcyksXG4gICAgICAgIERyb3BDb25zdHJhaW50Tm9kZTogdGhpcy52aXNpdERyb3BDb25zdHJhaW50LmJpbmQodGhpcyksXG4gICAgICAgIFJlbmFtZUNvbnN0cmFpbnROb2RlOiB0aGlzLnZpc2l0UmVuYW1lQ29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBGb3JlaWduS2V5Q29uc3RyYWludE5vZGU6IHRoaXMudmlzaXRGb3JlaWduS2V5Q29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBDcmVhdGVWaWV3Tm9kZTogdGhpcy52aXNpdENyZWF0ZVZpZXcuYmluZCh0aGlzKSxcbiAgICAgICAgUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdOb2RlOiB0aGlzLnZpc2l0UmVmcmVzaE1hdGVyaWFsaXplZFZpZXcuYmluZCh0aGlzKSxcbiAgICAgICAgRHJvcFZpZXdOb2RlOiB0aGlzLnZpc2l0RHJvcFZpZXcuYmluZCh0aGlzKSxcbiAgICAgICAgR2VuZXJhdGVkTm9kZTogdGhpcy52aXNpdEdlbmVyYXRlZC5iaW5kKHRoaXMpLFxuICAgICAgICBEZWZhdWx0VmFsdWVOb2RlOiB0aGlzLnZpc2l0RGVmYXVsdFZhbHVlLmJpbmQodGhpcyksXG4gICAgICAgIE9uTm9kZTogdGhpcy52aXNpdE9uLmJpbmQodGhpcyksXG4gICAgICAgIFZhbHVlc05vZGU6IHRoaXMudmlzaXRWYWx1ZXMuYmluZCh0aGlzKSxcbiAgICAgICAgU2VsZWN0TW9kaWZpZXJOb2RlOiB0aGlzLnZpc2l0U2VsZWN0TW9kaWZpZXIuYmluZCh0aGlzKSxcbiAgICAgICAgQ3JlYXRlVHlwZU5vZGU6IHRoaXMudmlzaXRDcmVhdGVUeXBlLmJpbmQodGhpcyksXG4gICAgICAgIERyb3BUeXBlTm9kZTogdGhpcy52aXNpdERyb3BUeXBlLmJpbmQodGhpcyksXG4gICAgICAgIEV4cGxhaW5Ob2RlOiB0aGlzLnZpc2l0RXhwbGFpbi5iaW5kKHRoaXMpLFxuICAgICAgICBEZWZhdWx0SW5zZXJ0VmFsdWVOb2RlOiB0aGlzLnZpc2l0RGVmYXVsdEluc2VydFZhbHVlLmJpbmQodGhpcyksXG4gICAgICAgIEFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZTogdGhpcy52aXNpdEFnZ3JlZ2F0ZUZ1bmN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIE92ZXJOb2RlOiB0aGlzLnZpc2l0T3Zlci5iaW5kKHRoaXMpLFxuICAgICAgICBQYXJ0aXRpb25CeU5vZGU6IHRoaXMudmlzaXRQYXJ0aXRpb25CeS5iaW5kKHRoaXMpLFxuICAgICAgICBQYXJ0aXRpb25CeUl0ZW1Ob2RlOiB0aGlzLnZpc2l0UGFydGl0aW9uQnlJdGVtLmJpbmQodGhpcyksXG4gICAgICAgIFNldE9wZXJhdGlvbk5vZGU6IHRoaXMudmlzaXRTZXRPcGVyYXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgQmluYXJ5T3BlcmF0aW9uTm9kZTogdGhpcy52aXNpdEJpbmFyeU9wZXJhdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBVbmFyeU9wZXJhdGlvbk5vZGU6IHRoaXMudmlzaXRVbmFyeU9wZXJhdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBVc2luZ05vZGU6IHRoaXMudmlzaXRVc2luZy5iaW5kKHRoaXMpLFxuICAgICAgICBGdW5jdGlvbk5vZGU6IHRoaXMudmlzaXRGdW5jdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBDYXNlTm9kZTogdGhpcy52aXNpdENhc2UuYmluZCh0aGlzKSxcbiAgICAgICAgV2hlbk5vZGU6IHRoaXMudmlzaXRXaGVuLmJpbmQodGhpcyksXG4gICAgICAgIEpTT05SZWZlcmVuY2VOb2RlOiB0aGlzLnZpc2l0SlNPTlJlZmVyZW5jZS5iaW5kKHRoaXMpLFxuICAgICAgICBKU09OUGF0aE5vZGU6IHRoaXMudmlzaXRKU09OUGF0aC5iaW5kKHRoaXMpLFxuICAgICAgICBKU09OUGF0aExlZ05vZGU6IHRoaXMudmlzaXRKU09OUGF0aExlZy5iaW5kKHRoaXMpLFxuICAgICAgICBKU09OT3BlcmF0b3JDaGFpbk5vZGU6IHRoaXMudmlzaXRKU09OT3BlcmF0b3JDaGFpbi5iaW5kKHRoaXMpLFxuICAgICAgICBUdXBsZU5vZGU6IHRoaXMudmlzaXRUdXBsZS5iaW5kKHRoaXMpLFxuICAgICAgICBNZXJnZVF1ZXJ5Tm9kZTogdGhpcy52aXNpdE1lcmdlUXVlcnkuYmluZCh0aGlzKSxcbiAgICAgICAgTWF0Y2hlZE5vZGU6IHRoaXMudmlzaXRNYXRjaGVkLmJpbmQodGhpcyksXG4gICAgICAgIEFkZEluZGV4Tm9kZTogdGhpcy52aXNpdEFkZEluZGV4LmJpbmQodGhpcyksXG4gICAgICAgIENhc3ROb2RlOiB0aGlzLnZpc2l0Q2FzdC5iaW5kKHRoaXMpLFxuICAgICAgICBGZXRjaE5vZGU6IHRoaXMudmlzaXRGZXRjaC5iaW5kKHRoaXMpLFxuICAgICAgICBUb3BOb2RlOiB0aGlzLnZpc2l0VG9wLmJpbmQodGhpcyksXG4gICAgICAgIE91dHB1dE5vZGU6IHRoaXMudmlzaXRPdXRwdXQuYmluZCh0aGlzKSxcbiAgICAgICAgT3JBY3Rpb25Ob2RlOiB0aGlzLnZpc2l0T3JBY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgQ29sbGF0ZU5vZGU6IHRoaXMudmlzaXRDb2xsYXRlLmJpbmQodGhpcyksXG4gICAgfSk7XG4gICAgdmlzaXROb2RlID0gKG5vZGUpID0+IHtcbiAgICAgICAgdGhpcy5ub2RlU3RhY2sucHVzaChub2RlKTtcbiAgICAgICAgdGhpcy4jdmlzaXRvcnNbbm9kZS5raW5kXShub2RlKTtcbiAgICAgICAgdGhpcy5ub2RlU3RhY2sucG9wKCk7XG4gICAgfTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZGVmYXVsdC1xdWVyeS1jb21waWxlci5kLnRzXCIgLz5cbmltcG9ydCB7IENyZWF0ZVRhYmxlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NyZWF0ZS10YWJsZS1ub2RlLmpzJztcbmltcG9ydCB7IEluc2VydFF1ZXJ5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2luc2VydC1xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IE9wZXJhdGlvbk5vZGVWaXNpdG9yIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtdmlzaXRvci5qcyc7XG5pbXBvcnQgeyBPcGVyYXRvck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vcGVyYXRvci1ub2RlLmpzJztcbmltcG9ydCB7IFBhcmVuc05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9wYXJlbnMtbm9kZS5qcyc7XG5pbXBvcnQgeyBRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSwgaXNTdHJpbmcsIGlzTnVtYmVyLCBpc0Jvb2xlYW4sIGlzTnVsbCwgaXNEYXRlLCBpc0JpZ0ludCwgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBDcmVhdGVWaWV3Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NyZWF0ZS12aWV3LW5vZGUuanMnO1xuaW1wb3J0IHsgU2V0T3BlcmF0aW9uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3NldC1vcGVyYXRpb24tbm9kZS5qcyc7XG5pbXBvcnQgeyBNZXJnZVF1ZXJ5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL21lcmdlLXF1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgbG9nT25jZSB9IGZyb20gJy4uL3V0aWwvbG9nLW9uY2UuanMnO1xuY29uc3QgTElUX1dSQVBfUkVHRVggPSAvJy9nO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRRdWVyeUNvbXBpbGVyIGV4dGVuZHMgT3BlcmF0aW9uTm9kZVZpc2l0b3Ige1xuICAgICNzcWwgPSAnJztcbiAgICAjcGFyYW1ldGVycyA9IFtdO1xuICAgIGdldCBudW1QYXJhbWV0ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGFyYW1ldGVycy5sZW5ndGg7XG4gICAgfVxuICAgIGNvbXBpbGVRdWVyeShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHRoaXMuI3NxbCA9ICcnO1xuICAgICAgICB0aGlzLiNwYXJhbWV0ZXJzID0gW107XG4gICAgICAgIHRoaXMubm9kZVN0YWNrLnNwbGljZSgwLCB0aGlzLm5vZGVTdGFjay5sZW5ndGgpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlKTtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBxdWVyeTogbm9kZSxcbiAgICAgICAgICAgIHF1ZXJ5SWQsXG4gICAgICAgICAgICBzcWw6IHRoaXMuZ2V0U3FsKCksXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiBbLi4udGhpcy4jcGFyYW1ldGVyc10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXRTcWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNzcWw7XG4gICAgfVxuICAgIHZpc2l0U2VsZWN0UXVlcnkobm9kZSkge1xuICAgICAgICBjb25zdCB3cmFwSW5QYXJlbnMgPSB0aGlzLnBhcmVudE5vZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgIVBhcmVuc05vZGUuaXModGhpcy5wYXJlbnROb2RlKSAmJlxuICAgICAgICAgICAgIUluc2VydFF1ZXJ5Tm9kZS5pcyh0aGlzLnBhcmVudE5vZGUpICYmXG4gICAgICAgICAgICAhQ3JlYXRlVGFibGVOb2RlLmlzKHRoaXMucGFyZW50Tm9kZSkgJiZcbiAgICAgICAgICAgICFDcmVhdGVWaWV3Tm9kZS5pcyh0aGlzLnBhcmVudE5vZGUpICYmXG4gICAgICAgICAgICAhU2V0T3BlcmF0aW9uTm9kZS5pcyh0aGlzLnBhcmVudE5vZGUpO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlID09PSB1bmRlZmluZWQgJiYgbm9kZS5leHBsYWluKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmV4cGxhaW4pO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod3JhcEluUGFyZW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndpdGgpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2l0aCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdzZWxlY3QnKTtcbiAgICAgICAgaWYgKG5vZGUuZGlzdGluY3RPbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZURpc3RpbmN0T24obm9kZS5kaXN0aW5jdE9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5mcm9udE1vZGlmaWVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmZyb250TW9kaWZpZXJzLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnRvcCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudG9wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5zZWxlY3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnNlbGVjdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmZyb20pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmZyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmpvaW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmpvaW5zLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndoZXJlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS53aGVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZ3JvdXBCeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZ3JvdXBCeSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuaGF2aW5nKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5oYXZpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnNldE9wZXJhdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuc2V0T3BlcmF0aW9ucywgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vcmRlckJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcmRlckJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5saW1pdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9mZnNldCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5mZXRjaCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZmV0Y2gpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmVuZE1vZGlmaWVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdCh0aGlzLnNvcnRTZWxlY3RNb2RpZmllcnMoWy4uLm5vZGUuZW5kTW9kaWZpZXJzXSksICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdyYXBJblBhcmVucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdEZyb20obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZnJvbSAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmZyb21zKTtcbiAgICB9XG4gICAgdmlzaXRTZWxlY3Rpb24obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnNlbGVjdGlvbik7XG4gICAgfVxuICAgIHZpc2l0Q29sdW1uKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2x1bW4pO1xuICAgIH1cbiAgICBjb21waWxlRGlzdGluY3RPbihleHByZXNzaW9ucykge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZGlzdGluY3Qgb24gKCcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KGV4cHJlc3Npb25zKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICB9XG4gICAgY29tcGlsZUxpc3Qobm9kZXMsIHNlcGFyYXRvciA9ICcsICcpIHtcbiAgICAgICAgY29uc3QgbGFzdEluZGV4ID0gbm9kZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbGFzdEluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGVzW2ldKTtcbiAgICAgICAgICAgIGlmIChpIDwgbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoc2VwYXJhdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdFdoZXJlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3doZXJlICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndoZXJlKTtcbiAgICB9XG4gICAgdmlzaXRIYXZpbmcobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnaGF2aW5nICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmhhdmluZyk7XG4gICAgfVxuICAgIHZpc2l0SW5zZXJ0UXVlcnkobm9kZSkge1xuICAgICAgICBjb25zdCByb290UXVlcnlOb2RlID0gdGhpcy5ub2RlU3RhY2suZmluZChRdWVyeU5vZGUuaXMpO1xuICAgICAgICBjb25zdCBpc1N1YlF1ZXJ5ID0gcm9vdFF1ZXJ5Tm9kZSAhPT0gbm9kZTtcbiAgICAgICAgaWYgKCFpc1N1YlF1ZXJ5ICYmIG5vZGUuZXhwbGFpbikge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHBsYWluKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3ViUXVlcnkgJiYgIU1lcmdlUXVlcnlOb2RlLmlzKHJvb3RRdWVyeU5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndpdGgpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2l0aCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKG5vZGUucmVwbGFjZSA/ICdyZXBsYWNlJyA6ICdpbnNlcnQnKTtcbiAgICAgICAgLy8gVE9ETzogcmVtb3ZlIGluIDAuMjkuXG4gICAgICAgIGlmIChub2RlLmlnbm9yZSkge1xuICAgICAgICAgICAgbG9nT25jZSgnYEluc2VydFF1ZXJ5Tm9kZS5pZ25vcmVgIGlzIGRlcHJlY2F0ZWQuIFVzZSBgSW5zZXJ0UXVlcnlOb2RlLm9yQWN0aW9uYCBpbnN0ZWFkLicpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBpZ25vcmUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vckFjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3JBY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnRvcCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudG9wKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5pbnRvKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGludG8gJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmludG8pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgKCcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vdXRwdXQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS52YWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRlZmF1bHRWYWx1ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnZGVmYXVsdCB2YWx1ZXMnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vbkNvbmZsaWN0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vbkNvbmZsaWN0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vbkR1cGxpY2F0ZUtleSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub25EdXBsaWNhdGVLZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnJldHVybmluZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmV0dXJuaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdWJRdWVyeSAmJiAhTWVyZ2VRdWVyeU5vZGUuaXMocm9vdFF1ZXJ5Tm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZW5kTW9kaWZpZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCAnICcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0VmFsdWVzKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3ZhbHVlcyAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnZhbHVlcyk7XG4gICAgfVxuICAgIHZpc2l0RGVsZXRlUXVlcnkobm9kZSkge1xuICAgICAgICBjb25zdCBpc1N1YlF1ZXJ5ID0gdGhpcy5ub2RlU3RhY2suZmluZChRdWVyeU5vZGUuaXMpICE9PSBub2RlO1xuICAgICAgICBpZiAoIWlzU3ViUXVlcnkgJiYgbm9kZS5leHBsYWluKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmV4cGxhaW4pO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdWJRdWVyeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS53aXRoKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndpdGgpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnZGVsZXRlICcpO1xuICAgICAgICBpZiAobm9kZS50b3ApIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudG9wKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5mcm9tKTtcbiAgICAgICAgaWYgKG5vZGUub3V0cHV0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vdXRwdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnVzaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS51c2luZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuam9pbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuam9pbnMsICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2hlcmUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndoZXJlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vcmRlckJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcmRlckJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5saW1pdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnJldHVybmluZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmV0dXJuaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdWJRdWVyeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5lbmRNb2RpZmllcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5lbmRNb2RpZmllcnMsICcgJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRSZXR1cm5pbmcobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgncmV0dXJuaW5nICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuc2VsZWN0aW9ucyk7XG4gICAgfVxuICAgIHZpc2l0QWxpYXMobm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5vZGUpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnIGFzICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmFsaWFzKTtcbiAgICB9XG4gICAgdmlzaXRSZWZlcmVuY2Uobm9kZSkge1xuICAgICAgICBpZiAobm9kZS50YWJsZSkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICB9XG4gICAgdmlzaXRTZWxlY3RBbGwoXykge1xuICAgICAgICB0aGlzLmFwcGVuZCgnKicpO1xuICAgIH1cbiAgICB2aXNpdElkZW50aWZpZXIobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLmdldExlZnRJZGVudGlmaWVyV3JhcHBlcigpKTtcbiAgICAgICAgdGhpcy5jb21waWxlVW53cmFwcGVkSWRlbnRpZmllcihub2RlKTtcbiAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRSaWdodElkZW50aWZpZXJXcmFwcGVyKCkpO1xuICAgIH1cbiAgICBjb21waWxlVW53cmFwcGVkSWRlbnRpZmllcihub2RlKSB7XG4gICAgICAgIGlmICghaXNTdHJpbmcobm9kZS5uYW1lKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdhIG5vbi1zdHJpbmcgaWRlbnRpZmllciB3YXMgcGFzc2VkIHRvIGNvbXBpbGVVbndyYXBwZWRJZGVudGlmaWVyLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKHRoaXMuc2FuaXRpemVJZGVudGlmaWVyKG5vZGUubmFtZSkpO1xuICAgIH1cbiAgICB2aXNpdEFuZChub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubGVmdCk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgYW5kICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJpZ2h0KTtcbiAgICB9XG4gICAgdmlzaXRPcihub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubGVmdCk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgb3IgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmlnaHQpO1xuICAgIH1cbiAgICB2aXNpdFZhbHVlKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZEltbWVkaWF0ZVZhbHVlKG5vZGUudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRWYWx1ZShub2RlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdFZhbHVlTGlzdChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS52YWx1ZXMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdFR1cGxlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnZhbHVlcyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgfVxuICAgIHZpc2l0UHJpbWl0aXZlVmFsdWVMaXN0KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgY29uc3QgeyB2YWx1ZXMgfSA9IG5vZGU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZFZhbHVlKHZhbHVlc1tpXSk7XG4gICAgICAgICAgICBpZiAoaSAhPT0gdmFsdWVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnLCAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdFBhcmVucyhub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubm9kZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgfVxuICAgIHZpc2l0Sm9pbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKEpPSU5fVFlQRV9TUUxbbm9kZS5qb2luVHlwZV0pO1xuICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICAgICAgaWYgKG5vZGUub24pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ29uICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9uKTtcbiAgICB9XG4gICAgdmlzaXRSYXcobm9kZSkge1xuICAgICAgICBjb25zdCB7IHNxbEZyYWdtZW50cywgcGFyYW1ldGVyczogcGFyYW1zIH0gPSBub2RlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNxbEZyYWdtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoc3FsRnJhZ21lbnRzW2ldKTtcbiAgICAgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoID4gaSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKHBhcmFtc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRPcGVyYXRvcihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5vZGUub3BlcmF0b3IpO1xuICAgIH1cbiAgICB2aXNpdFRhYmxlKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgfVxuICAgIHZpc2l0U2NoZW1hYmxlSWRlbnRpZmllcihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnNjaGVtYSkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5zY2hlbWEpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJy4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmlkZW50aWZpZXIpO1xuICAgIH1cbiAgICB2aXNpdENyZWF0ZVRhYmxlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2NyZWF0ZSAnKTtcbiAgICAgICAgaWYgKG5vZGUuZnJvbnRNb2RpZmllcnMgJiYgbm9kZS5mcm9udE1vZGlmaWVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZnJvbnRNb2RpZmllcnMsICcgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnRlbXBvcmFyeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3RlbXBvcmFyeSAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgndGFibGUgJyk7XG4gICAgICAgIGlmIChub2RlLmlmTm90RXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgbm90IGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICAgICAgaWYgKG5vZGUuc2VsZWN0UXVlcnkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgYXMgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnNlbGVjdFF1ZXJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgKCcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChbLi4ubm9kZS5jb2x1bW5zLCAuLi4obm9kZS5jb25zdHJhaW50cyA/PyBbXSldKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgICAgICBpZiAobm9kZS5vbkNvbW1pdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb24gY29tbWl0ICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5vZGUub25Db21taXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGUuZW5kTW9kaWZpZXJzICYmIG5vZGUuZW5kTW9kaWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5lbmRNb2RpZmllcnMsICcgJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRDb2x1bW5EZWZpbml0aW9uKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuaWZOb3RFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBub3QgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5kYXRhVHlwZSk7XG4gICAgICAgIGlmIChub2RlLnVuc2lnbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHVuc2lnbmVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZnJvbnRNb2RpZmllcnMgJiYgbm9kZS5mcm9udE1vZGlmaWVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmZyb250TW9kaWZpZXJzLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmdlbmVyYXRlZCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZ2VuZXJhdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5pZGVudGl0eSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBpZGVudGl0eScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRlZmF1bHRUbykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZGVmYXVsdFRvKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5ub3ROdWxsKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG5vdCBudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudW5pcXVlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHVuaXF1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm51bGxzTm90RGlzdGluY3QpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgbnVsbHMgbm90IGRpc3RpbmN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUucHJpbWFyeUtleSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBwcmltYXJ5IGtleScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmF1dG9JbmNyZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLmdldEF1dG9JbmNyZW1lbnQoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUucmVmZXJlbmNlcykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmVmZXJlbmNlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuY2hlY2spIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNoZWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5lbmRNb2RpZmllcnMgJiYgbm9kZS5lbmRNb2RpZmllcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5lbmRNb2RpZmllcnMsICcgJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0QXV0b0luY3JlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuICdhdXRvX2luY3JlbWVudCc7XG4gICAgfVxuICAgIHZpc2l0UmVmZXJlbmNlcyhub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdyZWZlcmVuY2VzICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAoJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgaWYgKG5vZGUub25EZWxldGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb24gZGVsZXRlICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5vbkRlbGV0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub25VcGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb24gdXBkYXRlICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5vblVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXREcm9wVGFibGUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCB0YWJsZSAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIGlmIChub2RlLmNhc2NhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgY2FzY2FkZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0RGF0YVR5cGUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChub2RlLmRhdGFUeXBlKTtcbiAgICB9XG4gICAgdmlzaXRPcmRlckJ5KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ29yZGVyIGJ5ICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuaXRlbXMpO1xuICAgIH1cbiAgICB2aXNpdE9yZGVyQnlJdGVtKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcmRlckJ5KTtcbiAgICAgICAgaWYgKG5vZGUuY29sbGF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2xsYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZGlyZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5udWxscykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBudWxscyAnKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5vZGUubnVsbHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0R3JvdXBCeShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdncm91cCBieSAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLml0ZW1zKTtcbiAgICB9XG4gICAgdmlzaXRHcm91cEJ5SXRlbShub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZ3JvdXBCeSk7XG4gICAgfVxuICAgIHZpc2l0VXBkYXRlUXVlcnkobm9kZSkge1xuICAgICAgICBjb25zdCByb290UXVlcnlOb2RlID0gdGhpcy5ub2RlU3RhY2suZmluZChRdWVyeU5vZGUuaXMpO1xuICAgICAgICBjb25zdCBpc1N1YlF1ZXJ5ID0gcm9vdFF1ZXJ5Tm9kZSAhPT0gbm9kZTtcbiAgICAgICAgaWYgKCFpc1N1YlF1ZXJ5ICYmIG5vZGUuZXhwbGFpbikge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHBsYWluKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3ViUXVlcnkgJiYgIU1lcmdlUXVlcnlOb2RlLmlzKHJvb3RRdWVyeU5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndpdGgpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2l0aCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCd1cGRhdGUgJyk7XG4gICAgICAgIGlmIChub2RlLnRvcCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50b3ApO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS50YWJsZSkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdzZXQgJyk7XG4gICAgICAgIGlmIChub2RlLnVwZGF0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS51cGRhdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vdXRwdXQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZnJvbSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuam9pbnMpIHtcbiAgICAgICAgICAgIGlmICghbm9kZS5mcm9tKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSm9pbnMgaW4gYW4gdXBkYXRlIHF1ZXJ5IGFyZSBvbmx5IHN1cHBvcnRlZCBhcyBhIHBhcnQgb2YgYSBQb3N0Z3JlU1FMICd1cGRhdGUgc2V0IGZyb20gam9pbicgcXVlcnkuIElmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIE15U1FMICd1cGRhdGUgam9pbiBzZXQnIHF1ZXJ5LCBzZWUgaHR0cHM6Ly9reXNlbHkuZGV2L2RvY3MvZXhhbXBsZXMvdXBkYXRlL215LXNxbC1qb2luc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuam9pbnMsICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2hlcmUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndoZXJlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vcmRlckJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcmRlckJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5saW1pdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnJldHVybmluZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmV0dXJuaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdWJRdWVyeSAmJiAhTWVyZ2VRdWVyeU5vZGUuaXMocm9vdFF1ZXJ5Tm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZW5kTW9kaWZpZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCAnICcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0Q29sdW1uVXBkYXRlKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2x1bW4pO1xuICAgICAgICB0aGlzLmFwcGVuZCgnID0gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudmFsdWUpO1xuICAgIH1cbiAgICB2aXNpdExpbWl0KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2xpbWl0ICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmxpbWl0KTtcbiAgICB9XG4gICAgdmlzaXRPZmZzZXQobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnb2Zmc2V0ICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9mZnNldCk7XG4gICAgfVxuICAgIHZpc2l0T25Db25mbGljdChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdvbiBjb25mbGljdCcpO1xuICAgICAgICBpZiAobm9kZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICgnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9kZS5jb25zdHJhaW50KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9uIGNvbnN0cmFpbnQgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbnN0cmFpbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vZGUuaW5kZXhFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICgnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuaW5kZXhFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuaW5kZXhXaGVyZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuaW5kZXhXaGVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZG9Ob3RoaW5nID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGRvIG5vdGhpbmcnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub2RlLnVwZGF0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgZG8gdXBkYXRlIHNldCAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS51cGRhdGVzKTtcbiAgICAgICAgICAgIGlmIChub2RlLnVwZGF0ZVdoZXJlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnVwZGF0ZVdoZXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE9uRHVwbGljYXRlS2V5KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ29uIGR1cGxpY2F0ZSBrZXkgdXBkYXRlICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUudXBkYXRlcyk7XG4gICAgfVxuICAgIHZpc2l0Q3JlYXRlSW5kZXgobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnY3JlYXRlICcpO1xuICAgICAgICBpZiAobm9kZS51bmlxdWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCd1bmlxdWUgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ2luZGV4ICcpO1xuICAgICAgICBpZiAobm9kZS5pZk5vdEV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIG5vdCBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgaWYgKG5vZGUudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb24gJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS51c2luZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB1c2luZyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudXNpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgKCcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5udWxsc05vdERpc3RpbmN0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG51bGxzIG5vdCBkaXN0aW5jdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndoZXJlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS53aGVyZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXREcm9wSW5kZXgobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCBpbmRleCAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgaWYgKG5vZGUudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb24gJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRhYmxlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5jYXNjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGNhc2NhZGUnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdENyZWF0ZVNjaGVtYShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdjcmVhdGUgc2NoZW1hICcpO1xuICAgICAgICBpZiAobm9kZS5pZk5vdEV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIG5vdCBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5zY2hlbWEpO1xuICAgIH1cbiAgICB2aXNpdERyb3BTY2hlbWEobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCBzY2hlbWEgJyk7XG4gICAgICAgIGlmIChub2RlLmlmRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuc2NoZW1hKTtcbiAgICAgICAgaWYgKG5vZGUuY2FzY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBjYXNjYWRlJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRQcmltYXJ5S2V5Q29uc3RyYWludChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdjb25zdHJhaW50ICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ3ByaW1hcnkga2V5ICgnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB0aGlzLmJ1aWxkRGVmZXJyYWJsZShub2RlKTtcbiAgICB9XG4gICAgYnVpbGREZWZlcnJhYmxlKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuZGVmZXJyYWJsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5kZWZlcnJhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBkZWZlcnJhYmxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG5vdCBkZWZlcnJhYmxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGx5RGVmZXJyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGx5RGVmZXJyZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGluaXRpYWxseSBkZWZlcnJlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBpbml0aWFsbHkgaW1tZWRpYXRlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRVbmlxdWVDb25zdHJhaW50KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUubmFtZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2NvbnN0cmFpbnQgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgndW5pcXVlJyk7XG4gICAgICAgIGlmIChub2RlLm51bGxzTm90RGlzdGluY3QpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgbnVsbHMgbm90IGRpc3RpbmN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJyAoJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgdGhpcy5idWlsZERlZmVycmFibGUobm9kZSk7XG4gICAgfVxuICAgIHZpc2l0Q2hlY2tDb25zdHJhaW50KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUubmFtZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2NvbnN0cmFpbnQgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnY2hlY2sgKCcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdEZvcmVpZ25LZXlDb25zdHJhaW50KG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUubmFtZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2NvbnN0cmFpbnQgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnZm9yZWlnbiBrZXkgKCcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJlZmVyZW5jZXMpO1xuICAgICAgICBpZiAobm9kZS5vbkRlbGV0ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBvbiBkZWxldGUgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZChub2RlLm9uRGVsZXRlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vblVwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBvbiB1cGRhdGUgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZChub2RlLm9uVXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1aWxkRGVmZXJyYWJsZShub2RlKTtcbiAgICB9XG4gICAgdmlzaXRMaXN0KG5vZGUpIHtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLml0ZW1zKTtcbiAgICB9XG4gICAgdmlzaXRXaXRoKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3dpdGggJyk7XG4gICAgICAgIGlmIChub2RlLnJlY3Vyc2l2ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3JlY3Vyc2l2ZSAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZXhwcmVzc2lvbnMpO1xuICAgIH1cbiAgICB2aXNpdENvbW1vblRhYmxlRXhwcmVzc2lvbihub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgYXMgJyk7XG4gICAgICAgIGlmIChpc0Jvb2xlYW4obm9kZS5tYXRlcmlhbGl6ZWQpKSB7XG4gICAgICAgICAgICBpZiAoIW5vZGUubWF0ZXJpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ25vdCAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdtYXRlcmlhbGl6ZWQgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTtcbiAgICB9XG4gICAgdmlzaXRDb21tb25UYWJsZUV4cHJlc3Npb25OYW1lKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIGlmIChub2RlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0QWx0ZXJUYWJsZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdhbHRlciB0YWJsZSAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIGlmIChub2RlLnJlbmFtZVRvKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgncmVuYW1lIHRvICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZW5hbWVUbyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuc2V0U2NoZW1hKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnc2V0IHNjaGVtYSAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuc2V0U2NoZW1hKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5hZGRDb25zdHJhaW50KSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmFkZENvbnN0cmFpbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRyb3BDb25zdHJhaW50KSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRyb3BDb25zdHJhaW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5yZW5hbWVDb25zdHJhaW50KSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJlbmFtZUNvbnN0cmFpbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNvbHVtbkFsdGVyYXRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVDb2x1bW5BbHRlcmF0aW9ucyhub2RlLmNvbHVtbkFsdGVyYXRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5hZGRJbmRleCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5hZGRJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZHJvcEluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRyb3BJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRBZGRDb2x1bW4obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnYWRkIGNvbHVtbiAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2x1bW4pO1xuICAgIH1cbiAgICB2aXNpdFJlbmFtZUNvbHVtbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdyZW5hbWUgY29sdW1uICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgdG8gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmVuYW1lVG8pO1xuICAgIH1cbiAgICB2aXNpdERyb3BDb2x1bW4obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCBjb2x1bW4gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICB9XG4gICAgdmlzaXRBbHRlckNvbHVtbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdhbHRlciBjb2x1bW4gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgaWYgKG5vZGUuZGF0YVR5cGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFubm91bmNlc05ld0NvbHVtbkRhdGFUeXBlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgndHlwZSAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZGF0YVR5cGUpO1xuICAgICAgICAgICAgaWYgKG5vZGUuZGF0YVR5cGVFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3VzaW5nICcpO1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZGF0YVR5cGVFeHByZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5zZXREZWZhdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnc2V0IGRlZmF1bHQgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnNldERlZmF1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRyb3BEZWZhdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCBkZWZhdWx0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuc2V0Tm90TnVsbCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3NldCBub3QgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRyb3BOb3ROdWxsKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCBub3QgbnVsbCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0TW9kaWZ5Q29sdW1uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ21vZGlmeSBjb2x1bW4gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICB9XG4gICAgdmlzaXRBZGRDb25zdHJhaW50KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2FkZCAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb25zdHJhaW50KTtcbiAgICB9XG4gICAgdmlzaXREcm9wQ29uc3RyYWludChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkcm9wIGNvbnN0cmFpbnQgJyk7XG4gICAgICAgIGlmIChub2RlLmlmRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29uc3RyYWludE5hbWUpO1xuICAgICAgICBpZiAobm9kZS5tb2RpZmllciA9PT0gJ2Nhc2NhZGUnKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGNhc2NhZGUnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub2RlLm1vZGlmaWVyID09PSAncmVzdHJpY3QnKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHJlc3RyaWN0Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRSZW5hbWVDb25zdHJhaW50KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3JlbmFtZSBjb25zdHJhaW50ICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9sZE5hbWUpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnIHRvICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5ld05hbWUpO1xuICAgIH1cbiAgICB2aXNpdFNldE9wZXJhdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5vZGUub3BlcmF0b3IpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICBpZiAobm9kZS5hbGwpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdhbGwgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTtcbiAgICB9XG4gICAgdmlzaXRDcmVhdGVWaWV3KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2NyZWF0ZSAnKTtcbiAgICAgICAgaWYgKG5vZGUub3JSZXBsYWNlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnb3IgcmVwbGFjZSAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5tYXRlcmlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdtYXRlcmlhbGl6ZWQgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudGVtcG9yYXJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgndGVtcG9yYXJ5ICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCd2aWV3ICcpO1xuICAgICAgICBpZiAobm9kZS5pZk5vdEV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIG5vdCBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgaWYgKG5vZGUuY29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmFzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnYXMgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmFzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3JlZnJlc2ggbWF0ZXJpYWxpemVkIHZpZXcgJyk7XG4gICAgICAgIGlmIChub2RlLmNvbmN1cnJlbnRseSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2NvbmN1cnJlbnRseSAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICBpZiAobm9kZS53aXRoTm9EYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHdpdGggbm8gZGF0YScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB3aXRoIGRhdGEnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdERyb3BWaWV3KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3AgJyk7XG4gICAgICAgIGlmIChub2RlLm1hdGVyaWFsaXplZCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ21hdGVyaWFsaXplZCAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgndmlldyAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgaWYgKG5vZGUuY2FzY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBjYXNjYWRlJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRHZW5lcmF0ZWQobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZ2VuZXJhdGVkICcpO1xuICAgICAgICBpZiAobm9kZS5hbHdheXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdhbHdheXMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuYnlEZWZhdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnYnkgZGVmYXVsdCAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnYXMgJyk7XG4gICAgICAgIGlmIChub2RlLmlkZW50aXR5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWRlbnRpdHknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuc3RvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHN0b3JlZCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0RGVmYXVsdFZhbHVlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2RlZmF1bHQgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgdmlzaXRTZWxlY3RNb2RpZmllcihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnJhd01vZGlmaWVyKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJhd01vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKFNFTEVDVF9NT0RJRklFUl9TUUxbbm9kZS5tb2RpZmllcl0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9mKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9mICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLm9mLCAnLCAnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdENyZWF0ZVR5cGUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnY3JlYXRlIHR5cGUgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgIGlmIChub2RlLmVudW0pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgYXMgZW51bSAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZW51bSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXREcm9wVHlwZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkcm9wIHR5cGUgJyk7XG4gICAgICAgIGlmIChub2RlLmlmRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgfVxuICAgIHZpc2l0RXhwbGFpbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdleHBsYWluJyk7XG4gICAgICAgIGlmIChub2RlLm9wdGlvbnMgfHwgbm9kZS5mb3JtYXQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLmdldExlZnRFeHBsYWluT3B0aW9uc1dyYXBwZXIoKSk7XG4gICAgICAgICAgICBpZiAobm9kZS5vcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5mb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRFeHBsYWluT3B0aW9uc0RlbGltaXRlcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm9kZS5mb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnZm9ybWF0Jyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRFeHBsYWluT3B0aW9uQXNzaWdubWVudCgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZChub2RlLmZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLmdldFJpZ2h0RXhwbGFpbk9wdGlvbnNXcmFwcGVyKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0RGVmYXVsdEluc2VydFZhbHVlKF8pIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2RlZmF1bHQnKTtcbiAgICB9XG4gICAgdmlzaXRBZ2dyZWdhdGVGdW5jdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5vZGUuZnVuYyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIGlmIChub2RlLmRpc3RpbmN0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnZGlzdGluY3QgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmFnZ3JlZ2F0ZWQpO1xuICAgICAgICBpZiAobm9kZS5vcmRlckJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcmRlckJ5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICBpZiAobm9kZS53aXRoaW5Hcm91cCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB3aXRoaW4gZ3JvdXAgKCcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS53aXRoaW5Hcm91cCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBmaWx0ZXIoJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmZpbHRlcik7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm92ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm92ZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0T3Zlcihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdvdmVyKCcpO1xuICAgICAgICBpZiAobm9kZS5wYXJ0aXRpb25CeSkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5wYXJ0aXRpb25CeSk7XG4gICAgICAgICAgICBpZiAobm9kZS5vcmRlckJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vcmRlckJ5KSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9yZGVyQnkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgfVxuICAgIHZpc2l0UGFydGl0aW9uQnkobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgncGFydGl0aW9uIGJ5ICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuaXRlbXMpO1xuICAgIH1cbiAgICB2aXNpdFBhcnRpdGlvbkJ5SXRlbShub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucGFydGl0aW9uQnkpO1xuICAgIH1cbiAgICB2aXNpdEJpbmFyeU9wZXJhdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubGVmdE9wZXJhbmQpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9wZXJhdG9yKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yaWdodE9wZXJhbmQpO1xuICAgIH1cbiAgICB2aXNpdFVuYXJ5T3BlcmF0aW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcGVyYXRvcik7XG4gICAgICAgIGlmICghdGhpcy5pc01pbnVzT3BlcmF0b3Iobm9kZS5vcGVyYXRvcikpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcGVyYW5kKTtcbiAgICB9XG4gICAgaXNNaW51c09wZXJhdG9yKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIE9wZXJhdG9yTm9kZS5pcyhub2RlKSAmJiBub2RlLm9wZXJhdG9yID09PSAnLSc7XG4gICAgfVxuICAgIHZpc2l0VXNpbmcobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgndXNpbmcgJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS50YWJsZXMpO1xuICAgIH1cbiAgICB2aXNpdEZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5mdW5jKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgfVxuICAgIHZpc2l0Q2FzZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdjYXNlJyk7XG4gICAgICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2hlbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS53aGVuLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmVsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgZWxzZSAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJyBlbmQnKTtcbiAgICAgICAgaWYgKG5vZGUuaXNTdGF0ZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgY2FzZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0V2hlbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCd3aGVuICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbmRpdGlvbik7XG4gICAgICAgIGlmIChub2RlLnJlc3VsdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB0aGVuICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZXN1bHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0SlNPTlJlZmVyZW5jZShub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmVmZXJlbmNlKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50cmF2ZXJzYWwpO1xuICAgIH1cbiAgICB2aXNpdEpTT05QYXRoKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuaW5PcGVyYXRvcikge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5pbk9wZXJhdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZChcIickXCIpO1xuICAgICAgICBmb3IgKGNvbnN0IHBhdGhMZWcgb2Ygbm9kZS5wYXRoTGVncykge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUocGF0aExlZyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoXCInXCIpO1xuICAgIH1cbiAgICB2aXNpdEpTT05QYXRoTGVnKG5vZGUpIHtcbiAgICAgICAgY29uc3QgaXNBcnJheUxvY2F0aW9uID0gbm9kZS50eXBlID09PSAnQXJyYXlMb2NhdGlvbic7XG4gICAgICAgIHRoaXMuYXBwZW5kKGlzQXJyYXlMb2NhdGlvbiA/ICdbJyA6ICcuJyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKFN0cmluZyhub2RlLnZhbHVlKSk7XG4gICAgICAgIGlmIChpc0FycmF5TG9jYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCddJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRKU09OT3BlcmF0b3JDaGFpbihub2RlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBub2RlLnZhbHVlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPT09IGxlbiAtIDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9wZXJhdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCctPicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS52YWx1ZXNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0TWVyZ2VRdWVyeShub2RlKSB7XG4gICAgICAgIGlmIChub2RlLndpdGgpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2l0aCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdtZXJnZSAnKTtcbiAgICAgICAgaWYgKG5vZGUudG9wKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRvcCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdpbnRvICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmludG8pO1xuICAgICAgICBpZiAobm9kZS51c2luZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudXNpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndoZW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLndoZW5zLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnJldHVybmluZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmV0dXJuaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vdXRwdXQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZW5kTW9kaWZpZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCAnICcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0TWF0Y2hlZChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLm5vdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ25vdCAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnbWF0Y2hlZCcpO1xuICAgICAgICBpZiAobm9kZS5ieVNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBieSBzb3VyY2UnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdEFkZEluZGV4KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2FkZCAnKTtcbiAgICAgICAgaWYgKG5vZGUudW5pcXVlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgndW5pcXVlICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdpbmRleCAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgaWYgKG5vZGUuY29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAoJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnVzaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIHVzaW5nICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS51c2luZyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRDYXN0KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Nhc3QoJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbik7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgYXMgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZGF0YVR5cGUpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdEZldGNoKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2ZldGNoIG5leHQgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucm93Q291bnQpO1xuICAgICAgICB0aGlzLmFwcGVuZChgIHJvd3MgJHtub2RlLm1vZGlmaWVyfWApO1xuICAgIH1cbiAgICB2aXNpdE91dHB1dChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdvdXRwdXQgJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5zZWxlY3Rpb25zKTtcbiAgICB9XG4gICAgdmlzaXRUb3Aobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChgdG9wKCR7bm9kZS5leHByZXNzaW9ufSlgKTtcbiAgICAgICAgaWYgKG5vZGUubW9kaWZpZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZChgICR7bm9kZS5tb2RpZmllcnN9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRPckFjdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5vZGUuYWN0aW9uKTtcbiAgICB9XG4gICAgdmlzaXRDb2xsYXRlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2NvbGxhdGUgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sbGF0aW9uKTtcbiAgICB9XG4gICAgYXBwZW5kKHN0cikge1xuICAgICAgICB0aGlzLiNzcWwgKz0gc3RyO1xuICAgIH1cbiAgICBhcHBlbmRWYWx1ZShwYXJhbWV0ZXIpIHtcbiAgICAgICAgdGhpcy5hZGRQYXJhbWV0ZXIocGFyYW1ldGVyKTtcbiAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRDdXJyZW50UGFyYW1ldGVyUGxhY2Vob2xkZXIoKSk7XG4gICAgfVxuICAgIGdldExlZnRJZGVudGlmaWVyV3JhcHBlcigpIHtcbiAgICAgICAgcmV0dXJuICdcIic7XG4gICAgfVxuICAgIGdldFJpZ2h0SWRlbnRpZmllcldyYXBwZXIoKSB7XG4gICAgICAgIHJldHVybiAnXCInO1xuICAgIH1cbiAgICBnZXRDdXJyZW50UGFyYW1ldGVyUGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIHJldHVybiAnJCcgKyB0aGlzLm51bVBhcmFtZXRlcnM7XG4gICAgfVxuICAgIGdldExlZnRFeHBsYWluT3B0aW9uc1dyYXBwZXIoKSB7XG4gICAgICAgIHJldHVybiAnKCc7XG4gICAgfVxuICAgIGdldEV4cGxhaW5PcHRpb25Bc3NpZ25tZW50KCkge1xuICAgICAgICByZXR1cm4gJyAnO1xuICAgIH1cbiAgICBnZXRFeHBsYWluT3B0aW9uc0RlbGltaXRlcigpIHtcbiAgICAgICAgcmV0dXJuICcsICc7XG4gICAgfVxuICAgIGdldFJpZ2h0RXhwbGFpbk9wdGlvbnNXcmFwcGVyKCkge1xuICAgICAgICByZXR1cm4gJyknO1xuICAgIH1cbiAgICBzYW5pdGl6ZUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICAgICAgICBjb25zdCBsZWZ0V3JhcCA9IHRoaXMuZ2V0TGVmdElkZW50aWZpZXJXcmFwcGVyKCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0V3JhcCA9IHRoaXMuZ2V0UmlnaHRJZGVudGlmaWVyV3JhcHBlcigpO1xuICAgICAgICBsZXQgc2FuaXRpemVkID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBpZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBzYW5pdGl6ZWQgKz0gYztcbiAgICAgICAgICAgIGlmIChjID09PSBsZWZ0V3JhcCkge1xuICAgICAgICAgICAgICAgIHNhbml0aXplZCArPSBsZWZ0V3JhcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGMgPT09IHJpZ2h0V3JhcCkge1xuICAgICAgICAgICAgICAgIHNhbml0aXplZCArPSByaWdodFdyYXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNhbml0aXplZDtcbiAgICB9XG4gICAgc2FuaXRpemVTdHJpbmdMaXRlcmFsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKExJVF9XUkFQX1JFR0VYLCBcIicnXCIpO1xuICAgIH1cbiAgICBhZGRQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgICAgIHRoaXMuI3BhcmFtZXRlcnMucHVzaChwYXJhbWV0ZXIpO1xuICAgIH1cbiAgICBhcHBlbmRJbW1lZGlhdGVWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZFN0cmluZ0xpdGVyYWwodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyKHZhbHVlKSB8fCBpc0Jvb2xlYW4odmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCh2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc051bGwodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kSW1tZWRpYXRlVmFsdWUodmFsdWUudG9JU09TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNCaWdJbnQodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZEltbWVkaWF0ZVZhbHVlKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGltbWVkaWF0ZSB2YWx1ZSAke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFwcGVuZFN0cmluZ0xpdGVyYWwodmFsdWUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoXCInXCIpO1xuICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLnNhbml0aXplU3RyaW5nTGl0ZXJhbCh2YWx1ZSkpO1xuICAgICAgICB0aGlzLmFwcGVuZChcIidcIik7XG4gICAgfVxuICAgIHNvcnRTZWxlY3RNb2RpZmllcnMoYXJyKSB7XG4gICAgICAgIGFyci5zb3J0KChsZWZ0LCByaWdodCkgPT4gbGVmdC5tb2RpZmllciAmJiByaWdodC5tb2RpZmllclxuICAgICAgICAgICAgPyBTRUxFQ1RfTU9ESUZJRVJfUFJJT1JJVFlbbGVmdC5tb2RpZmllcl0gLVxuICAgICAgICAgICAgICAgIFNFTEVDVF9NT0RJRklFUl9QUklPUklUWVtyaWdodC5tb2RpZmllcl1cbiAgICAgICAgICAgIDogMSk7XG4gICAgICAgIHJldHVybiBmcmVlemUoYXJyKTtcbiAgICB9XG4gICAgY29tcGlsZUNvbHVtbkFsdGVyYXRpb25zKGNvbHVtbkFsdGVyYXRpb25zKSB7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3QoY29sdW1uQWx0ZXJhdGlvbnMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBjb250cm9scyB3aGV0aGVyIHRoZSBkaWFsZWN0IGFkZHMgYSBcInR5cGVcIiBrZXl3b3JkIGJlZm9yZSBhIGNvbHVtbidzIG5ldyBkYXRhXG4gICAgICogdHlwZSBpbiBhbiBBTFRFUiBUQUJMRSBzdGF0ZW1lbnQuXG4gICAgICovXG4gICAgYW5ub3VuY2VzTmV3Q29sdW1uRGF0YVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbmNvbnN0IFNFTEVDVF9NT0RJRklFUl9TUUwgPSBmcmVlemUoe1xuICAgIEZvcktleVNoYXJlOiAnZm9yIGtleSBzaGFyZScsXG4gICAgRm9yTm9LZXlVcGRhdGU6ICdmb3Igbm8ga2V5IHVwZGF0ZScsXG4gICAgRm9yVXBkYXRlOiAnZm9yIHVwZGF0ZScsXG4gICAgRm9yU2hhcmU6ICdmb3Igc2hhcmUnLFxuICAgIE5vV2FpdDogJ25vd2FpdCcsXG4gICAgU2tpcExvY2tlZDogJ3NraXAgbG9ja2VkJyxcbiAgICBEaXN0aW5jdDogJ2Rpc3RpbmN0Jyxcbn0pO1xuY29uc3QgU0VMRUNUX01PRElGSUVSX1BSSU9SSVRZID0gZnJlZXplKHtcbiAgICBGb3JLZXlTaGFyZTogMSxcbiAgICBGb3JOb0tleVVwZGF0ZTogMSxcbiAgICBGb3JVcGRhdGU6IDEsXG4gICAgRm9yU2hhcmU6IDEsXG4gICAgTm9XYWl0OiAyLFxuICAgIFNraXBMb2NrZWQ6IDIsXG4gICAgRGlzdGluY3Q6IDAsXG59KTtcbmNvbnN0IEpPSU5fVFlQRV9TUUwgPSBmcmVlemUoe1xuICAgIElubmVySm9pbjogJ2lubmVyIGpvaW4nLFxuICAgIExlZnRKb2luOiAnbGVmdCBqb2luJyxcbiAgICBSaWdodEpvaW46ICdyaWdodCBqb2luJyxcbiAgICBGdWxsSm9pbjogJ2Z1bGwgam9pbicsXG4gICAgQ3Jvc3NKb2luOiAnY3Jvc3Mgam9pbicsXG4gICAgTGF0ZXJhbElubmVySm9pbjogJ2lubmVyIGpvaW4gbGF0ZXJhbCcsXG4gICAgTGF0ZXJhbExlZnRKb2luOiAnbGVmdCBqb2luIGxhdGVyYWwnLFxuICAgIExhdGVyYWxDcm9zc0pvaW46ICdjcm9zcyBqb2luIGxhdGVyYWwnLFxuICAgIE91dGVyQXBwbHk6ICdvdXRlciBhcHBseScsXG4gICAgQ3Jvc3NBcHBseTogJ2Nyb3NzIGFwcGx5JyxcbiAgICBVc2luZzogJ3VzaW5nJyxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kdW1teS1kcml2ZXIuZC50c1wiIC8+XG4vKipcbiAqIEEgZHJpdmVyIHRoYXQgZG9lcyBhYnNvbHV0ZWx5IG5vdGhpbmcuXG4gKlxuICogWW91IGNhbiB1c2UgdGhpcyB0byBjcmVhdGUgS3lzZWx5IGluc3RhbmNlcyBzb2xlbHkgZm9yIGJ1aWxkaW5nIHF1ZXJpZXNcbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBUaGlzIGV4YW1wbGUgY3JlYXRlcyBhIEt5c2VseSBpbnN0YW5jZSBmb3IgYnVpbGRpbmcgcG9zdGdyZXMgcXVlcmllczpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHtcbiAqICAgRHVtbXlEcml2ZXIsXG4gKiAgIEt5c2VseSxcbiAqICAgUG9zdGdyZXNBZGFwdGVyLFxuICogICBQb3N0Z3Jlc0ludHJvc3BlY3RvcixcbiAqICAgUG9zdGdyZXNRdWVyeUNvbXBpbGVyXG4gKiB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB0eXBlIHsgRGF0YWJhc2UgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICpcbiAqIGNvbnN0IGRiID0gbmV3IEt5c2VseTxEYXRhYmFzZT4oe1xuICogICBkaWFsZWN0OiB7XG4gKiAgICAgY3JlYXRlQWRhcHRlcjogKCkgPT4gbmV3IFBvc3RncmVzQWRhcHRlcigpLFxuICogICAgIGNyZWF0ZURyaXZlcjogKCkgPT4gbmV3IER1bW15RHJpdmVyKCksXG4gKiAgICAgY3JlYXRlSW50cm9zcGVjdG9yOiAoZGI6IEt5c2VseTxhbnk+KSA9PiBuZXcgUG9zdGdyZXNJbnRyb3NwZWN0b3IoZGIpLFxuICogICAgIGNyZWF0ZVF1ZXJ5Q29tcGlsZXI6ICgpID0+IG5ldyBQb3N0Z3Jlc1F1ZXJ5Q29tcGlsZXIoKSxcbiAqICAgfSxcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBZb3UgY2FuIHVzZSBpdCB0byBidWlsZCBhIHF1ZXJ5IGFuZCBjb21waWxlIGl0IHRvIFNRTCBidXQgdHJ5aW5nIHRvXG4gKiBleGVjdXRlIHRoZSBxdWVyeSB3aWxsIHRocm93IGFuIGVycm9yLlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCB7IHNxbCB9ID0gZGIuc2VsZWN0RnJvbSgncGVyc29uJykuc2VsZWN0QWxsKCkuY29tcGlsZSgpXG4gKiBjb25zb2xlLmxvZyhzcWwpIC8vIHNlbGVjdCAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBEdW1teURyaXZlciB7XG4gICAgYXN5bmMgaW5pdCgpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLlxuICAgIH1cbiAgICBhc3luYyBhY3F1aXJlQ29ubmVjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEdW1teUNvbm5lY3Rpb24oKTtcbiAgICB9XG4gICAgYXN5bmMgYmVnaW5UcmFuc2FjdGlvbigpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLlxuICAgIH1cbiAgICBhc3luYyBjb21taXRUcmFuc2FjdGlvbigpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLlxuICAgIH1cbiAgICBhc3luYyByb2xsYmFja1RyYW5zYWN0aW9uKCkge1xuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuXG4gICAgfVxuICAgIGFzeW5jIHJlbGVhc2VDb25uZWN0aW9uKCkge1xuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuXG4gICAgfVxuICAgIGFzeW5jIGRlc3Ryb3koKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZS5cbiAgICB9XG4gICAgYXN5bmMgcmVsZWFzZVNhdmVwb2ludCgpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLlxuICAgIH1cbiAgICBhc3luYyByb2xsYmFja1RvU2F2ZXBvaW50KCkge1xuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuXG4gICAgfVxuICAgIGFzeW5jIHNhdmVwb2ludCgpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLlxuICAgIH1cbn1cbmNsYXNzIER1bW15Q29ubmVjdGlvbiB7XG4gICAgYXN5bmMgZXhlY3V0ZVF1ZXJ5KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcm93czogW10sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jICpzdHJlYW1RdWVyeSgpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLlxuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZGlhbGVjdC1hZGFwdGVyLWJhc2UuZC50c1wiIC8+XG4vKipcbiAqIEEgYmFzaWMgaW1wbGVtZW50YXRpb24gb2YgYERpYWxlY3RBZGFwdGVyYCB3aXRoIHNlbnNpYmxlIGRlZmF1bHQgdmFsdWVzLlxuICogVGhpcmQtcGFydHkgZGlhbGVjdHMgY2FuIGV4dGVuZCB0aGlzIGluc3RlYWQgb2YgaW1wbGVtZW50aW5nIHRoZSBgRGlhbGVjdEFkYXB0ZXJgXG4gKiBpbnRlcmZhY2UgZnJvbSBzY3JhdGNoLiBUaGF0IHdheSBhbGwgbmV3IHNldHRpbmdzIHdpbGwgZ2V0IGRlZmF1bHQgdmFsdWVzIHdoZW5cbiAqIHRoZXkgYXJlIGFkZGVkIGFuZCB0aGVyZSB3aWxsIGJlIGxlc3MgYnJlYWtpbmcgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIERpYWxlY3RBZGFwdGVyQmFzZSB7XG4gICAgZ2V0IHN1cHBvcnRzQ3JlYXRlSWZOb3RFeGlzdHMoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgc3VwcG9ydHNUcmFuc2FjdGlvbmFsRGRsKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdldCBzdXBwb3J0c1JldHVybmluZygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBnZXQgc3VwcG9ydHNPdXRwdXQoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3Bvc3RncmVzLXF1ZXJ5LWNvbXBpbGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgRGVmYXVsdFF1ZXJ5Q29tcGlsZXIgfSBmcm9tICcuLi8uLi9xdWVyeS1jb21waWxlci9kZWZhdWx0LXF1ZXJ5LWNvbXBpbGVyLmpzJztcbmNvbnN0IElEX1dSQVBfUkVHRVggPSAvXCIvZztcbmV4cG9ydCBjbGFzcyBQb3N0Z3Jlc1F1ZXJ5Q29tcGlsZXIgZXh0ZW5kcyBEZWZhdWx0UXVlcnlDb21waWxlciB7XG4gICAgc2FuaXRpemVJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIucmVwbGFjZShJRF9XUkFQX1JFR0VYLCAnXCJcIicpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcG9zdGdyZXMtYWRhcHRlci5kLnRzXCIgLz5cbmltcG9ydCB7IHNxbCB9IGZyb20gJy4uLy4uL3Jhdy1idWlsZGVyL3NxbC5qcyc7XG5pbXBvcnQgeyBEaWFsZWN0QWRhcHRlckJhc2UgfSBmcm9tICcuLi9kaWFsZWN0LWFkYXB0ZXItYmFzZS5qcyc7XG4vLyBSYW5kb20gaWQgZm9yIG91ciB0cmFuc2FjdGlvbiBsb2NrLlxuY29uc3QgTE9DS19JRCA9IEJpZ0ludCgnMzg1MzMxNDc5MTA2MjMwOTEwNycpO1xuZXhwb3J0IGNsYXNzIFBvc3RncmVzQWRhcHRlciBleHRlbmRzIERpYWxlY3RBZGFwdGVyQmFzZSB7XG4gICAgZ2V0IHN1cHBvcnRzVHJhbnNhY3Rpb25hbERkbCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBzdXBwb3J0c1JldHVybmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGFzeW5jIGFjcXVpcmVNaWdyYXRpb25Mb2NrKGRiLCBfb3B0KSB7XG4gICAgICAgIC8vIEFjcXVpcmUgYSB0cmFuc2FjdGlvbiBsZXZlbCBhZHZpc29yeSBsb2NrLlxuICAgICAgICBhd2FpdCBzcWwgYHNlbGVjdCBwZ19hZHZpc29yeV94YWN0X2xvY2soJHtzcWwubGl0KExPQ0tfSUQpfSlgLmV4ZWN1dGUoZGIpO1xuICAgIH1cbiAgICBhc3luYyByZWxlYXNlTWlncmF0aW9uTG9jayhfZGIsIF9vcHQpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLiBgcGdfYWR2aXNvcnlfeGFjdF9sb2NrYCBpcyBhdXRvbWF0aWNhbGx5IHJlbGVhc2VkIGF0IHRoZVxuICAgICAgICAvLyBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uIGFuZCBzaW5jZSBgc3VwcG9ydHNUcmFuc2FjdGlvbmFsRGRsYCB0cnVlLCB3ZSBrbm93XG4gICAgICAgIC8vIHRoZSBgZGJgIGluc3RhbmNlIHBhc3NlZCB0byBhY3F1aXJlTWlncmF0aW9uTG9jayBpcyBhY3R1YWxseSBhIHRyYW5zYWN0aW9uLlxuICAgIH1cbn1cbiIsICJpbXBvcnQge1xuICB0eXBlIENvbXBpbGFibGUsXG4gIHR5cGUgRGlhbGVjdEFkYXB0ZXIsXG4gIER1bW15RHJpdmVyLFxuICBLeXNlbHksXG4gIHR5cGUgS3lzZWx5UGx1Z2luLFxuICBPcGVyYXRpb25Ob2RlVHJhbnNmb3JtZXIsXG4gIHR5cGUgUGx1Z2luVHJhbnNmb3JtUXVlcnlBcmdzLFxuICB0eXBlIFBsdWdpblRyYW5zZm9ybVJlc3VsdEFyZ3MsXG4gIHR5cGUgUHJpbWl0aXZlVmFsdWVMaXN0Tm9kZSxcbiAgdHlwZSBRdWVyeUNvbXBpbGVyLFxuICB0eXBlIFF1ZXJ5UmVzdWx0IGFzIEt5c2VseVF1ZXJ5UmVzdWx0LFxuICB0eXBlIFJvb3RPcGVyYXRpb25Ob2RlLFxuICB0eXBlIFVua25vd25Sb3csXG4gIFZhbHVlTGlzdE5vZGUsXG4gIFZhbHVlTm9kZSxcbiAgdHlwZSBXaGVyZUludGVyZmFjZSxcbn0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgdHlwZSB7IFRhYmxlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJSZXF1aXJlbWVudHMge1xuICBBZGFwdGVyOiB7IG5ldyAoKTogRGlhbGVjdEFkYXB0ZXIgfTtcbiAgbm9QYXJhbWV0ZXJzPzogYm9vbGVhbjtcbiAgUXVlcnlDb21waWxlcjogeyBuZXcgKCk6IFF1ZXJ5Q29tcGlsZXIgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1aWxkZXI8REI+KHJlcXVpcmVtZW50czogQnVpbGRlclJlcXVpcmVtZW50cyk6IEt5c2VseTxEQj4ge1xuICByZXR1cm4gbmV3IEt5c2VseSh7XG4gICAgZGlhbGVjdDoge1xuICAgICAgY3JlYXRlQWRhcHRlcjogKCkgPT4gbmV3IHJlcXVpcmVtZW50cy5BZGFwdGVyKCksXG4gICAgICBjcmVhdGVEcml2ZXI6ICgpID0+IG5ldyBEdW1teURyaXZlcigpLFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHdlIGRvbid0IG5lZWQgYnVpbHQtaW4gaW50cm9zcGVjdGlvbiBpbiB0aGlzIGNhc2VcbiAgICAgIGNyZWF0ZUludHJvc3BlY3RvcjogKCkgPT4gbnVsbCxcbiAgICAgIGNyZWF0ZVF1ZXJ5Q29tcGlsZXI6ICgpID0+IG5ldyByZXF1aXJlbWVudHMuUXVlcnlDb21waWxlcigpLFxuICAgIH0sXG4gICAgcGx1Z2luczogWy4uLihyZXF1aXJlbWVudHMubm9QYXJhbWV0ZXJzID8gW25ldyBJbW1lZGlhdGVWYWx1ZVBsdWdpbigpXSA6IFtdKV0sXG4gIH0pO1xufVxuXG4vKipcbiAqIEEgcGx1Z2luIHRoYXQgdHJhbnNmb3JtcyBhbGwgdmFsdWVzIHRvIGltbWVkaWF0ZSB2YWx1ZXMuIFRoaXMgbWVhbnMgdGhlaXIgaW5qZWN0ZWQgaW50byB0aGUgU1FMIHN0cmluZyBpbnN0ZWFkIG9mIHBvcHVsYXRpbmcgdGhlIHBhcmFtZXRlcnMgYXJyYXkuXG4gKiBJbiBzb21lIHNpdHVhdGlvbnMsIGEgZGF0YWJhc2UgZHJpdmVyIG1pZ2h0IG5vdCBzdXBwb3J0IHBhcmFtZXRlcnMsIGFuZCB0aGlzIHBsdWdpbiBjYW4gYmUgdXNlZCB0byB3b3JrIGFyb3VuZCB0aGF0LlxuICovXG5jbGFzcyBJbW1lZGlhdGVWYWx1ZVBsdWdpbiBpbXBsZW1lbnRzIEt5c2VseVBsdWdpbiB7XG4gIHJlYWRvbmx5ICN0cmFuc2Zvcm1lciA9IG5ldyBJbW1lZGlhdGVWYWx1ZVRyYW5zZm9ybWVyKCk7XG5cbiAgdHJhbnNmb3JtUXVlcnkoYXJnczogUGx1Z2luVHJhbnNmb3JtUXVlcnlBcmdzKTogUm9vdE9wZXJhdGlvbk5vZGUge1xuICAgIHJldHVybiB0aGlzLiN0cmFuc2Zvcm1lci50cmFuc2Zvcm1Ob2RlKGFyZ3Mubm9kZSk7XG4gIH1cblxuICB0cmFuc2Zvcm1SZXN1bHQoYXJnczogUGx1Z2luVHJhbnNmb3JtUmVzdWx0QXJncyk6IFByb21pc2U8S3lzZWx5UXVlcnlSZXN1bHQ8VW5rbm93blJvdz4+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGFyZ3MucmVzdWx0KTtcbiAgfVxufVxuXG5jbGFzcyBJbW1lZGlhdGVWYWx1ZVRyYW5zZm9ybWVyIGV4dGVuZHMgT3BlcmF0aW9uTm9kZVRyYW5zZm9ybWVyIHtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHRyYW5zZm9ybVByaW1pdGl2ZVZhbHVlTGlzdChub2RlOiBQcmltaXRpdmVWYWx1ZUxpc3ROb2RlKTogUHJpbWl0aXZlVmFsdWVMaXN0Tm9kZSB7XG4gICAgcmV0dXJuIFZhbHVlTGlzdE5vZGUuY3JlYXRlKG5vZGUudmFsdWVzLm1hcChWYWx1ZU5vZGUuY3JlYXRlSW1tZWRpYXRlKSkgYXMgbmV2ZXI7XG4gIH1cblxuICBvdmVycmlkZSB0cmFuc2Zvcm1WYWx1ZShub2RlOiBWYWx1ZU5vZGUpOiBWYWx1ZU5vZGUge1xuICAgIHJldHVybiB7IC4uLnN1cGVyLnRyYW5zZm9ybVZhbHVlKG5vZGUpLCBpbW1lZGlhdGU6IHRydWUgfTtcbiAgfVxufVxuXG5kZWNsYXJlIGNvbnN0IHF1ZXJ5VHlwZTogdW5pcXVlIHN5bWJvbDtcbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnk8VCA9IHVua25vd24+IHtcbiAgW3F1ZXJ5VHlwZV0/OiBUO1xuICBwYXJhbWV0ZXJzOiByZWFkb25seSB1bmtub3duW107XG4gIHNxbDogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNRdWVyeTxUPihxdWVyeTogc3RyaW5nIHwgUXVlcnk8dW5rbm93bj4pOiBRdWVyeTxUPiB7XG4gIGlmICh0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4geyBwYXJhbWV0ZXJzOiBbXSwgc3FsOiBxdWVyeSB9IGFzIG5ldmVyO1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5IGFzIG5ldmVyO1xufVxuXG5leHBvcnQgdHlwZSBRdWVyeVJlc3VsdDxUPiA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIFQgZXh0ZW5kcyBRdWVyeTxpbmZlciBSPiA/IFJbXSA6IFQgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IFF1ZXJ5PGluZmVyIFI+ID8gUltdIDogbmV2ZXI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlPFQ+KGNvbXBpbGVhYmxlOiBDb21waWxhYmxlPFQ+KTogUXVlcnk8VD4ge1xuICBjb25zdCBjb21waWxlZFF1ZXJ5ID0gY29tcGlsZWFibGUuY29tcGlsZSgpO1xuXG4gIHJldHVybiB7XG4gICAgcGFyYW1ldGVyczogY29tcGlsZWRRdWVyeS5wYXJhbWV0ZXJzLFxuICAgIHNxbDogY29tcGlsZWRRdWVyeS5zcWwsXG4gIH07XG59XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbHRlciB0byB0aGUgZ2l2ZW4gcm93cyBiYXNlZCBvbiB0aGUgcHJpbWFyeSBrZXkgY29sdW1ucyBvZiB0aGUgdGFibGUuXG4gKlxuICogQGV4YW1wbGUgZGIuc2VsZWN0RnJvbShcInVzZXJzXCIpLiRjYWxsKGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzKHJvd3MsIGNvbHVtbnMpKS5zZWxlY3RBbGwoKVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMocm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgY29sdW1uczogVGFibGVbXCJjb2x1bW5zXCJdKSB7XG4gIGNvbnN0IHJvd0ZpbHRlcnMgPSBpbmZlclJvd0ZpbHRlcnMocm93cywgY29sdW1ucyk7XG5cbiAgcmV0dXJuIDxRQiBleHRlbmRzIFdoZXJlSW50ZXJmYWNlPGFueSwgYW55Pj4ocWI6IFFCKTogUUIgPT5cbiAgICBxYi53aGVyZSgoZWIpID0+IHtcbiAgICAgIHJldHVybiBlYi5vcihcbiAgICAgICAgcm93RmlsdGVycy5tYXAoKHJvd0ZpbHRlcikgPT4ge1xuICAgICAgICAgIHJldHVybiBlYi5hbmQocm93RmlsdGVyLm1hcCgoW2NvbHVtbk5hbWUsIHZhbHVlXSkgPT4gZWIoY29sdW1uTmFtZSwgdmFsdWUgPT09IG51bGwgPyBcImlzXCIgOiBcIj1cIiwgdmFsdWUpKSk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KSBhcyBuZXZlcjtcbn1cblxuLyoqXG4gKiBQYXJ0IG9mIGEgZmlsdGVyIHRoYXQgcHJlZGljdHMgYSBtYXRjaC5cbiAqIGllLiAuLi4gV0hFUkUgJENvbHVtTmFtZSA9ICRWYWx1ZSAuLi5cbiAqL1xudHlwZSBSb3dGaWx0ZXJQcmVkaWNhdGUgPSBbQ29sdW1uTmFtZTogc3RyaW5nLCBWYWx1ZTogdW5rbm93bl07XG5cbi8qKlxuICogQSByb3cgZmlsdGVyIGlzIGNvbXByaXNlZCBvZiBvbmUgb3IgbW9yZSBwcmVkaWNhdGVzLlxuICovXG50eXBlIFJvd0ZpbHRlciA9IFJvd0ZpbHRlclByZWRpY2F0ZVtdO1xuXG4vKipcbiAqIFJvdyBmaWx0ZXJzIGlzIHNpbXBseSBhIHNldCBvZiBtdWx0aXBsZSB7QGxpbmsgUm93RmlsdGVyfS5cbiAqL1xudHlwZSBSb3dGaWx0ZXJzID0gUm93RmlsdGVyW107XG5cbi8qKlxuICogSW5mZXJzIHRoZSBmaWx0ZXIgdGhhdCBpcyBuZWNlc3NhcnkgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBnaXZlbiByb3dcbiAqIGluZGl2aWR1YWxseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZmVyUm93RmlsdGVyKHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGNvbHVtbnM6IFRhYmxlW1wiY29sdW1uc1wiXSk6IFJvd0ZpbHRlciB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhcbiAgICBPYmplY3QudmFsdWVzKGNvbHVtbnMpLnJlZHVjZShcbiAgICAgIChwaywgY29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaXNJblByaW1hcnlLZXksIG5hbWU6IGNvbHVtbk5hbWUgfSA9IGNvbHVtbjtcblxuICAgICAgICBpZiAoIWlzSW5QcmltYXJ5S2V5KSB7XG4gICAgICAgICAgcmV0dXJuIHBrO1xuICAgICAgICB9XG5cbiAgICAgICAgcGtbY29sdW1uTmFtZV0gPSByb3dbY29sdW1uTmFtZV0gPz8gbnVsbDtcbiAgICAgICAgcmV0dXJuIHBrO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgICksXG4gICk7XG59XG5cbi8qKlxuICogSW5mZXJzIHRoZSBmaWx0ZXIgdGhhdCBpcyBuZWNlc3NhcnkgdG8gdW5pcXVlbHkgaWRlbnRpZnkgbXVsdGlwbGUgcm93c1xuICogaW5kaXZpZHVhbGx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5mZXJSb3dGaWx0ZXJzKHJvd3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sIGNvbHVtbnM6IFRhYmxlW1wiY29sdW1uc1wiXSk6IFJvd0ZpbHRlcnMge1xuICByZXR1cm4gcm93cy5tYXAoKHJvdykgPT4gaW5mZXJSb3dGaWx0ZXIocm93LCBjb2x1bW5zKSk7XG59XG4iLCAiaW1wb3J0IHsgdHlwZSBLeXNlbHksIFBvc3RncmVzQWRhcHRlciwgUG9zdGdyZXNRdWVyeUNvbXBpbGVyIH0gZnJvbSBcImt5c2VseVwiO1xuXG5pbXBvcnQgeyB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGdldEJ1aWxkZXIgfSBmcm9tIFwiLi4vcXVlcnlcIjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBnZXRQb3N0Z3JlU1FMQnVpbGRlcjxEYXRhYmFzZSA9IGFueT4oXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pOiBLeXNlbHk8RGF0YWJhc2U+IHtcbiAgcmV0dXJuIGdldEJ1aWxkZXIoeyAuLi5yZXF1aXJlbWVudHMsIEFkYXB0ZXI6IFBvc3RncmVzQWRhcHRlciwgUXVlcnlDb21waWxlcjogUG9zdGdyZXNRdWVyeUNvbXBpbGVyIH0pO1xufVxuIiwgImltcG9ydCB7IEV4cHJlc3Npb24sIEV4cHJlc3Npb25CdWlsZGVyLCBzcWwsIFNxbEJvb2wgfSBmcm9tIFwia3lzZWx5XCI7XG5cbmltcG9ydCB0eXBlIHtcbiAgQWRhcHRlckRlbGV0ZURldGFpbHMsXG4gIEFkYXB0ZXJJbnNlcnREZXRhaWxzLFxuICBBZGFwdGVyUXVlcnlEZXRhaWxzLFxuICBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgQ29sdW1uRmlsdGVyLFxuICBGaWx0ZXJHcm91cCxcbn0gZnJvbSBcIi4uL2FkYXB0ZXJcIjtcbmltcG9ydCB7IGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzLCB0eXBlIEJ1aWxkZXJSZXF1aXJlbWVudHMsIGNvbXBpbGUgfSBmcm9tIFwiLi4vcXVlcnlcIjtcbmltcG9ydCB0eXBlIHsgQmlnSW50U3RyaW5nIH0gZnJvbSBcIi4uL3R5cGUtdXRpbHNcIjtcbmltcG9ydCB7IGdldFBvc3RncmVTUUxCdWlsZGVyIH0gZnJvbSBcIi4vYnVpbGRlclwiO1xuaW1wb3J0IHR5cGUgeyBtb2NrVGFibGVzUXVlcnkgfSBmcm9tIFwiLi9pbnRyb3NwZWN0aW9uXCI7XG5cbi8qKlxuICogYGN0aWRgIGlzIGEgc3lzdGVtIGNvbHVtbiB0aGF0IHJlcHJlc2VudHMgdGhlIHBoeXNpY2FsIGxvY2F0aW9uIG9mIGEgcm93IGluIGEgdGFibGUuXG4gKiBJdCBpcyBhIHR1cGxlIG9mIHR3byBpbnRlZ2VyczogYChibG9ja051bWJlciwgdHVwbGVJbmRleClgLlxuICogSXQgaXMgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSBhIHJvdyBpbiBhIHRhYmxlLCBldmVuIGlmIHRoZSByb3cgaGFzIG5vIHByaW1hcnkga2V5LCBvciBvdGhlciB1bmlxdWUgY29uc3RyYWludHMuXG4gKlxuICogRXhhbXBsZTogJygwLDIzKScgcmVwcmVzZW50cyB0aGUgMjR0aCByb3cgaW4gdGhlIGZpcnN0IGJsb2NrIG9mIHRoZSB0YWJsZS5cbiAqL1xuZXhwb3J0IHR5cGUgQ1RJRGFzVGV4dCA9IGAoJHtudW1iZXJ9LCR7bnVtYmVyfSlgO1xuXG4vKipcbiAqIEluc2VydHMgb25lIG9yIG1vcmUgcm93cyBpbnRvIGEgdGFibGUgYW5kIHJldHVybnMgdGhlIGluc2VydGVkIHJvd3MgYWxvbmcgd2l0aCB0aGVpciBgY3RpZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnNlcnRRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlckluc2VydERldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3QgeyB0YWJsZSwgcm93cyB9ID0gZGV0YWlscztcbiAgY29uc3QgeyBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSwgY29sdW1ucyB9ID0gdGFibGU7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFBvc3RncmVTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIHsgY3RpZDogdW5rbm93biB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuICBjb25zdCBjb2xzID0gT2JqZWN0LmtleXMoY29sdW1ucyk7XG4gIGNvbnN0IGVtcHR5Um93V29ya2Fyb3VuZCA9IHsgW2NvbHNbMF0hXTogc3FsYGRlZmF1bHRgIH07XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgICAgLmluc2VydEludG8odGFibGVOYW1lKVxuICAgICAgLnZhbHVlcyhyb3dzLm1hcCgocm93KSA9PiAoT2JqZWN0LmtleXMocm93KS5sZW5ndGggPT09IDAgPyBlbXB0eVJvd1dvcmthcm91bmQgOiByb3cpKSlcbiAgICAgIC5yZXR1cm5pbmcoY29scylcbiAgICAgIC5yZXR1cm5pbmcoKGViKSA9PiBlYi5jYXN0PENUSURhc1RleHQ+KFwiY3RpZFwiLCBcInRleHRcIikuYXMoXCJjdGlkXCIpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCBzZWxlY3RzIGFsbCBjb2x1bW5zIGZyb20gYSB0YWJsZSwgYWxvbmcgd2l0aCB0aGUgYGN0aWRgIGNvbHVtbiwgYW5kIHVuYm91bmQgcm93IGNvdW50IGFzIGBvaWRgIChyZXNlcnZlZCBjb2x1bW4gbmFtZSB0aGF0IGNhbm5vdCBjb25mbGljdCB3aXRoIHVzZXIgY29sdW1ucykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlclF1ZXJ5RGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgcGFnZUluZGV4LFxuICAgIHBhZ2VTaXplLFxuICAgIHNvcnRPcmRlcixcbiAgICB0YWJsZTogeyBuYW1lOiB0YWJsZU5hbWUsIHNjaGVtYSwgY29sdW1ucyB9LFxuICAgIGZpbHRlciA9IHsga2luZDogXCJGaWx0ZXJHcm91cFwiLCBhZnRlcjogXCJhbmRcIiwgZmlsdGVyczogW10gfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFBvc3RncmVTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIHsgY3RpZDogdW5rbm93biB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuICBjb25zdCBjb2xzID0gT2JqZWN0LmtleXMoY29sdW1ucyk7XG5cbiAgY29uc3QgY291bnRRdWVyeSA9IGJ1aWxkZXJcbiAgICAud2l0aFNjaGVtYShzY2hlbWEpXG4gICAgLnNlbGVjdEZyb20odGFibGVOYW1lKVxuICAgIC5zZWxlY3QoKGViKSA9PiBlYi5jYXN0PEJpZ0ludFN0cmluZz4oZWIuZm4uY29hbGVzY2UoZWIuZm4uY291bnRBbGwoKSwgc3FsLmxpdCgwKSksIFwidGV4dFwiKS5hcyhcIm9pZFwiKSk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGgoXCJjb3VudFwiLCAoKSA9PiBjb3VudFF1ZXJ5KVxuICAgICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgICAgLnNlbGVjdEZyb20oW3RhYmxlTmFtZSwgXCJjb3VudFwiXSlcbiAgICAgIC8vIGBvaWRgIGlzIGEgcmVzZXJ2ZWQgY29sdW1uIG5hbWUgaW4gUG9zdGdyZVNRTCwgc28gd2UgdXNlIGl0IGFzIGFuIGFsaWFzIGZvciB0aGUgcm93IGNvdW50IHRvIG5vdCBjb25mbGljdCB3aXRoIHVzZXIgY29sdW1ucy5cbiAgICAgIC5zZWxlY3Qoc3FsLnJlZihcImNvdW50Lm9pZFwiKS4kY2FzdFRvPEJpZ0ludFN0cmluZz4oKS5hcyhcIm9pZFwiKSlcbiAgICAgIC5zZWxlY3QoKGViKSA9PiBlYi5jYXN0PENUSURhc1RleHQ+KFwiY3RpZFwiLCBcInRleHRcIikuYXMoXCJjdGlkXCIpKVxuICAgICAgLnNlbGVjdChjb2xzKVxuICAgICAgLiRjYWxsKChxYikgPT4gc29ydE9yZGVyLnJlZHVjZSgocWIsIGl0ZW0pID0+IHFiLm9yZGVyQnkoaXRlbS5jb2x1bW4sIGl0ZW0uZGlyZWN0aW9uKSwgcWIpKVxuICAgICAgLy8gVE9ETzogY3Vyc29yIHBhZ2luYXRpb24/XG4gICAgICAud2hlcmUoZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbihmaWx0ZXIuZmlsdGVycykpXG4gICAgICAubGltaXQocGFnZVNpemUpXG4gICAgICAvLyB3ZSdyZSBpbmplY3RpbmcgdGhlIG9mZnNldCB2YWx1ZSBoZXJlIHRvIGF2b2lkIHNlcmlhbGl6YXRpb24gY29tcGxleGl0eSAoYGJpZ2ludGAgaXMgYSBuby1nbyBmb3IgYEpTT04uc3RyaW5naWZ5YCkuXG4gICAgICAub2Zmc2V0KHNxbC5saXQoQmlnSW50KHBhZ2VJbmRleCkgKiBCaWdJbnQocGFnZVNpemUpKSksXG4gICk7XG59XG5cbi8vIEhlbHBlciB0byBidWlsZCBhbiBleHByZXNzaW9uIGJ1aWxkZXIgZm9yIGEgc2luZ2xlIGZpbHRlciBvciBhIGdyb3VwXG5mdW5jdGlvbiBidWlsZEJhc2VFeHByZXNzaW9uQnVpbGRlcihcbiAgc3BlYzogQ29sdW1uRmlsdGVyIHwgRmlsdGVyR3JvdXAsXG4pOiAoZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gRXhwcmVzc2lvbjxTcWxCb29sPiB7XG4gIGlmIChzcGVjLmtpbmQgPT09IFwiQ29sdW1uRmlsdGVyXCIpIHtcbiAgICByZXR1cm4gKGViOiBFeHByZXNzaW9uQnVpbGRlcjxhbnksIGFueT4pID0+IGViKGViLnJlZihzcGVjLmNvbHVtbiksIHNwZWMub3BlcmF0b3IsIHNwZWMudmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uKHNwZWMuZmlsdGVycyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U2VsZWN0RmlsdGVyRXhwcmVzc2lvbihcbiAgZmlsdGVyczogKENvbHVtbkZpbHRlciB8IEZpbHRlckdyb3VwKVtdLFxuKTogKGViOiBFeHByZXNzaW9uQnVpbGRlcjxhbnksIGFueT4pID0+IEV4cHJlc3Npb248U3FsQm9vbD4ge1xuICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDApIHJldHVybiAoZWIpID0+IGViLmxpdCh0cnVlKTsgLy8gbm8gZmlsdGVycywgYWx3YXlzIHRydWVcblxuICBjb25zdCBvckdyb3Vwc09mQW5kQnVpbGRlcnM6ICgoZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gRXhwcmVzc2lvbjxTcWxCb29sPilbXVtdID0gW107XG4gIGxldCBjdXJyZW50QW5kR3JvdXBCdWlsZGVyczogKChlYjogRXhwcmVzc2lvbkJ1aWxkZXI8YW55LCBhbnk+KSA9PiBFeHByZXNzaW9uPFNxbEJvb2w+KVtdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgY3VycmVudEFuZEdyb3VwQnVpbGRlcnMucHVzaChidWlsZEJhc2VFeHByZXNzaW9uQnVpbGRlcihmaWx0ZXJzW2ldISkpO1xuXG4gICAgLy8gJm4gQU5EIGdyb3VwIGVuZHMgaWYgaXQncyB0aGUgbGFzdCBmaWx0ZXIsIG9yIHRoZSBpdGVtIGlzIGZvbGxvd2VkIGJ5IGFuICdvcidcbiAgICBpZiAoaSA9PT0gZmlsdGVycy5sZW5ndGggLSAxIHx8IGZpbHRlcnNbaV0hLmFmdGVyID09PSBcIm9yXCIpIHtcbiAgICAgIG9yR3JvdXBzT2ZBbmRCdWlsZGVycy5wdXNoKGN1cnJlbnRBbmRHcm91cEJ1aWxkZXJzKTtcbiAgICAgIGN1cnJlbnRBbmRHcm91cEJ1aWxkZXJzID0gW107IC8vIHN0YXJ0IGEgbmV3IGdyb3VwXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlYjogRXhwcmVzc2lvbkJ1aWxkZXI8YW55LCBhbnk+KSA9PiB7XG4gICAgY29uc3QgYW5kRXhwcmVzc2lvbnMgPSBvckdyb3Vwc09mQW5kQnVpbGRlcnMubWFwKChncm91cCkgPT4ge1xuICAgICAgcmV0dXJuIGViLmFuZChncm91cC5tYXAoKGJ1aWxkZXIpID0+IGJ1aWxkZXIoZWIpKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZWIub3IoYW5kRXhwcmVzc2lvbnMpO1xuICB9O1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1NlbGVjdFF1ZXJ5KCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKFwiMjAyNS0wMS0yNlQyMTo1NjoxMi4zNDVaXCIpLFxuICAgICAgY3RpZDogXCIoMCwxKVwiLFxuICAgICAgZGVsZXRlZF9hdDogbnVsbCxcbiAgICAgIGlkOiAxLFxuICAgICAgbmFtZTogXCJKb2huIERvZVwiLFxuICAgICAgb2lkOiBcIjJcIixcbiAgICAgIHJvbGU6IFwiYWRtaW5cIixcbiAgICAgIG5hbWVfcm9sZTogXCJKb25uIERvZSAtIGFkbWluXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShcIjIwMjUtMDEtMjZUMjA6NTY6MTIuMzQ1WlwiKSxcbiAgICAgIGN0aWQ6IFwiKDAsMilcIixcbiAgICAgIGRlbGV0ZWRfYXQ6IG51bGwsXG4gICAgICBpZDogMixcbiAgICAgIG5hbWU6IFwiSmFuZSBEb2VcIixcbiAgICAgIG9pZDogXCIyXCIsXG4gICAgICByb2xlOiBcInBvd2VydXNlclwiLFxuICAgICAgbmFtZV9yb2xlOiBcIkphbmUgRG9lIC0gcG93ZXJ1c2VyXCIsXG4gICAgfSxcbiAgXSBhcyBjb25zdCBzYXRpc2ZpZXMge1xuICAgIC8vIGJlc3QgZWZmb3J0IG5vIG5lZWQgdG8gZ28gb3ZlcmJvYXJkXG4gICAgW0sgaW4gUmV0dXJuVHlwZTx0eXBlb2YgbW9ja1RhYmxlc1F1ZXJ5PlsxXVtcImNvbHVtbnNcIl1bbnVtYmVyXVtcIm5hbWVcIl0gfCBcImN0aWRcIiB8IFwib2lkXCJdOiB1bmtub3duO1xuICB9W107XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHF1ZXJ5IHRoYXQgdXBkYXRlcyBhIGdpdmVuIHJvdyBpbiBhIHRhYmxlIHdpdGggZ2l2ZW4gY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVwZGF0ZVF1ZXJ5KFxuICBkZXRhaWxzOiBBZGFwdGVyVXBkYXRlRGV0YWlscyxcbiAgcmVxdWlyZW1lbnRzPzogT21pdDxCdWlsZGVyUmVxdWlyZW1lbnRzLCBcIkFkYXB0ZXJcIiB8IFwiUXVlcnlDb21waWxlclwiPixcbikge1xuICBjb25zdCB7XG4gICAgY2hhbmdlcyxcbiAgICByb3csXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFBvc3RncmVTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIHsgY3RpZDogdW5rbm93biB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuICBjb25zdCBjb2xzID0gT2JqZWN0LmtleXMoY29sdW1ucyk7XG5cbiAgcmV0dXJuIGNvbXBpbGUoXG4gICAgYnVpbGRlclxuICAgICAgLndpdGhTY2hlbWEoc2NoZW1hKVxuICAgICAgLnVwZGF0ZVRhYmxlKHRhYmxlTmFtZSlcbiAgICAgIC5zZXQoY2hhbmdlcylcbiAgICAgIC4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhbcm93XSwgY29sdW1ucykpXG4gICAgICAucmV0dXJuaW5nKGNvbHMpXG4gICAgICAucmV0dXJuaW5nKChlYikgPT4gW1xuICAgICAgICBlYi5jYXN0PENUSURhc1RleHQ+KFwiY3RpZFwiLCBcInRleHRcIikuYXMoXCJjdGlkXCIpLFxuICAgICAgICBlYlxuICAgICAgICAgIC5jYXN0PEJpZ0ludFN0cmluZz4oZWIuZm4oXCJmbG9vclwiLCBbZWIoZWIuZm4oXCJleHRyYWN0XCIsIFtzcWxgZXBvY2ggZnJvbSBub3coKWBdKSwgXCIqXCIsIDFfMDAwXzAwMCldKSwgXCJ0ZXh0XCIpXG4gICAgICAgICAgLmFzKFwiX19wc191cGRhdGVkX2F0X19cIiksXG4gICAgICBdKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcXVlcnkgdGhhdCBkZWxldGVzIGEgZ2l2ZW4gc2V0IG9mIHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWxldGVRdWVyeShcbiAgZGV0YWlsczogQWRhcHRlckRlbGV0ZURldGFpbHMsXG4gIHJlcXVpcmVtZW50cz86IE9taXQ8QnVpbGRlclJlcXVpcmVtZW50cywgXCJBZGFwdGVyXCIgfCBcIlF1ZXJ5Q29tcGlsZXJcIj4sXG4pIHtcbiAgY29uc3Qge1xuICAgIHJvd3MsXG4gICAgdGFibGU6IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfSxcbiAgfSA9IGRldGFpbHM7XG5cbiAgY29uc3QgYnVpbGRlciA9IGdldFBvc3RncmVTUUxCdWlsZGVyPFJlY29yZDxzdHJpbmcsIHsgY3RpZDogdW5rbm93biB9ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PihyZXF1aXJlbWVudHMpO1xuXG4gIHJldHVybiBjb21waWxlKGJ1aWxkZXIud2l0aFNjaGVtYShzY2hlbWEpLmRlbGV0ZUZyb20odGFibGVOYW1lKS4kY2FsbChhcHBseUluZmVycmVkUm93RmlsdGVycyhyb3dzLCBjb2x1bW5zKSkpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9wb3N0Z3Jlcy5kLnRzXCIgLz5cbmltcG9ydCB7IHNxbCB9IGZyb20gJy4uL3Jhdy1idWlsZGVyL3NxbC5qcyc7XG4vKipcbiAqIEEgcG9zdGdyZXMgaGVscGVyIGZvciBhZ2dyZWdhdGluZyBhIHN1YnF1ZXJ5IChvciBvdGhlciBleHByZXNzaW9uKSBpbnRvIGEgSlNPTkIgYXJyYXkuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogPCEtLSBzaXRlRXhhbXBsZShcInNlbGVjdFwiLCBcIk5lc3RlZCBhcnJheVwiLCAxMTApIC0tPlxuICpcbiAqIFdoaWxlIGt5c2VseSBpcyBub3QgYW4gT1JNIGFuZCBpdCBkb2Vzbid0IGhhdmUgdGhlIGNvbmNlcHQgb2YgcmVsYXRpb25zLCB3ZSBkbyBwcm92aWRlXG4gKiBoZWxwZXJzIGZvciBmZXRjaGluZyBuZXN0ZWQgb2JqZWN0cyBhbmQgYXJyYXlzIGluIGEgc2luZ2xlIHF1ZXJ5LiBJbiB0aGlzIGV4YW1wbGUgd2VcbiAqIHVzZSB0aGUgYGpzb25BcnJheUZyb21gIGhlbHBlciB0byBmZXRjaCBwZXJzb24ncyBwZXRzIGFsb25nIHdpdGggdGhlIHBlcnNvbidzIGlkLlxuICpcbiAqIFBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCB0aGUgaGVscGVycyB1bmRlciB0aGUgYGt5c2VseS9oZWxwZXJzYCBmb2xkZXIsIGluY2x1ZGluZ1xuICogYGpzb25BcnJheUZyb21gLCBhcmUgbm90IGd1YXJhbnRlZWQgdG8gd29yayB3aXRoIHRoaXJkIHBhcnR5IGRpYWxlY3RzLiBJbiBvcmRlciBmb3JcbiAqIHRoZW0gdG8gd29yaywgdGhlIGRpYWxlY3QgbXVzdCBhdXRvbWF0aWNhbGx5IHBhcnNlIHRoZSBganNvbmAgZGF0YSB0eXBlIGludG9cbiAqIEphdmFTY3JpcHQgSlNPTiB2YWx1ZXMgbGlrZSBvYmplY3RzIGFuZCBhcnJheXMuIFNvbWUgZGlhbGVjdHMgbWlnaHQgc2ltcGx5IHJldHVyblxuICogdGhlIGRhdGEgYXMgYSBKU09OIHN0cmluZy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluIGBQYXJzZUpTT05SZXN1bHRzUGx1Z2luYFxuICogdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGpzb25BcnJheUZyb20gfSBmcm9tICdreXNlbHkvaGVscGVycy9wb3N0Z3JlcydcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25BcnJheUZyb20oXG4gKiAgICAgICBlYi5zZWxlY3RGcm9tKCdwZXQnKVxuICogICAgICAgICAuc2VsZWN0KFsncGV0LmlkIGFzIHBldF9pZCcsICdwZXQubmFtZSddKVxuICogICAgICAgICAud2hlcmVSZWYoJ3BldC5vd25lcl9pZCcsICc9JywgJ3BlcnNvbi5pZCcpXG4gKiAgICAgICAgIC5vcmRlckJ5KCdwZXQubmFtZScpXG4gKiAgICAgKS5hcygncGV0cycpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqIGBgYFxuICpcbiAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAqXG4gKiBgYGBzcWxcbiAqIHNlbGVjdCBcImlkXCIsIChcbiAqICAgc2VsZWN0IGNvYWxlc2NlKGpzb25fYWdnKGFnZyksICdbXScpIGZyb20gKFxuICogICAgIHNlbGVjdCBcInBldFwiLlwiaWRcIiBhcyBcInBldF9pZFwiLCBcInBldFwiLlwibmFtZVwiXG4gKiAgICAgZnJvbSBcInBldFwiXG4gKiAgICAgd2hlcmUgXCJwZXRcIi5cIm93bmVyX2lkXCIgPSBcInBlcnNvblwiLlwiaWRcIlxuICogICAgIG9yZGVyIGJ5IFwicGV0XCIuXCJuYW1lXCJcbiAqICAgKSBhcyBhZ2dcbiAqICkgYXMgXCJwZXRzXCJcbiAqIGZyb20gXCJwZXJzb25cIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBqc29uQXJyYXlGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IGNvYWxlc2NlKGpzb25fYWdnKGFnZyksICdbXScpIGZyb20gJHtleHByfSBhcyBhZ2cpYDtcbn1cbi8qKlxuICogQSBwb3N0Z3JlcyBoZWxwZXIgZm9yIHR1cm5pbmcgYSBzdWJxdWVyeSAob3Igb3RoZXIgZXhwcmVzc2lvbikgaW50byBhIEpTT04gb2JqZWN0LlxuICpcbiAqIFRoZSBzdWJxdWVyeSBtdXN0IG9ubHkgcmV0dXJuIG9uZSByb3cuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogPCEtLSBzaXRlRXhhbXBsZShcInNlbGVjdFwiLCBcIk5lc3RlZCBvYmplY3RcIiwgMTIwKSAtLT5cbiAqXG4gKiBXaGlsZSBreXNlbHkgaXMgbm90IGFuIE9STSBhbmQgaXQgZG9lc24ndCBoYXZlIHRoZSBjb25jZXB0IG9mIHJlbGF0aW9ucywgd2UgZG8gcHJvdmlkZVxuICogaGVscGVycyBmb3IgZmV0Y2hpbmcgbmVzdGVkIG9iamVjdHMgYW5kIGFycmF5cyBpbiBhIHNpbmdsZSBxdWVyeS4gSW4gdGhpcyBleGFtcGxlIHdlXG4gKiB1c2UgdGhlIGBqc29uT2JqZWN0RnJvbWAgaGVscGVyIHRvIGZldGNoIHBlcnNvbidzIGZhdm9yaXRlIHBldCBhbG9uZyB3aXRoIHRoZSBwZXJzb24ncyBpZC5cbiAqXG4gKiBQbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGhlbHBlcnMgdW5kZXIgdGhlIGBreXNlbHkvaGVscGVyc2AgZm9sZGVyLCBpbmNsdWRpbmdcbiAqIGBqc29uT2JqZWN0RnJvbWAsIGFyZSBub3QgZ3VhcmFudGVlZCB0byB3b3JrIHdpdGggdGhpcmQtcGFydHkgZGlhbGVjdHMuIEluIG9yZGVyIGZvclxuICogdGhlbSB0byB3b3JrLCB0aGUgZGlhbGVjdCBtdXN0IGF1dG9tYXRpY2FsbHkgcGFyc2UgdGhlIGBqc29uYCBkYXRhIHR5cGUgaW50b1xuICogSmF2YVNjcmlwdCBKU09OIHZhbHVlcyBsaWtlIG9iamVjdHMgYW5kIGFycmF5cy4gU29tZSBkaWFsZWN0cyBtaWdodCBzaW1wbHkgcmV0dXJuXG4gKiB0aGUgZGF0YSBhcyBhIEpTT04gc3RyaW5nLiBJbiB0aGVzZSBjYXNlcyB5b3UgY2FuIHVzZSB0aGUgYnVpbHQgaW4gYFBhcnNlSlNPTlJlc3VsdHNQbHVnaW5gXG4gKiB0byBwYXJzZSB0aGUgcmVzdWx0cy5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsganNvbk9iamVjdEZyb20gfSBmcm9tICdreXNlbHkvaGVscGVycy9wb3N0Z3JlcydcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAqICAgLnNlbGVjdCgoZWIpID0+IFtcbiAqICAgICAnaWQnLFxuICogICAgIGpzb25PYmplY3RGcm9tKFxuICogICAgICAgZWIuc2VsZWN0RnJvbSgncGV0JylcbiAqICAgICAgICAgLnNlbGVjdChbJ3BldC5pZCBhcyBwZXRfaWQnLCAncGV0Lm5hbWUnXSlcbiAqICAgICAgICAgLndoZXJlUmVmKCdwZXQub3duZXJfaWQnLCAnPScsICdwZXJzb24uaWQnKVxuICogICAgICAgICAud2hlcmUoJ3BldC5pc19mYXZvcml0ZScsICc9JywgdHJ1ZSlcbiAqICAgICApLmFzKCdmYXZvcml0ZV9wZXQnKVxuICogICBdKVxuICogICAuZXhlY3V0ZSgpXG4gKiBgYGBcbiAqXG4gKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gKlxuICogYGBgc3FsXG4gKiBzZWxlY3QgXCJpZFwiLCAoXG4gKiAgIHNlbGVjdCB0b19qc29uKG9iaikgZnJvbSAoXG4gKiAgICAgc2VsZWN0IFwicGV0XCIuXCJpZFwiIGFzIFwicGV0X2lkXCIsIFwicGV0XCIuXCJuYW1lXCJcbiAqICAgICBmcm9tIFwicGV0XCJcbiAqICAgICB3aGVyZSBcInBldFwiLlwib3duZXJfaWRcIiA9IFwicGVyc29uXCIuXCJpZFwiXG4gKiAgICAgYW5kIFwicGV0XCIuXCJpc19mYXZvcml0ZVwiID0gJDFcbiAqICAgKSBhcyBvYmpcbiAqICkgYXMgXCJmYXZvcml0ZV9wZXRcIlxuICogZnJvbSBcInBlcnNvblwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25PYmplY3RGcm9tKGV4cHIpIHtcbiAgICByZXR1cm4gc3FsIGAoc2VsZWN0IHRvX2pzb24ob2JqKSBmcm9tICR7ZXhwcn0gYXMgb2JqKWA7XG59XG4vKipcbiAqIFRoZSBQb3N0Z3JlU1FMIGBqc29uX2J1aWxkX29iamVjdGAgZnVuY3Rpb24uXG4gKlxuICogTk9URTogVGhpcyBoZWxwZXIgaXMgb25seSBndWFyYW50ZWVkIHRvIGZ1bGx5IHdvcmsgd2l0aCB0aGUgYnVpbHQtaW4gYFBvc3RncmVzRGlhbGVjdGAuXG4gKiBXaGlsZSB0aGUgcHJvZHVjZWQgU1FMIGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgUG9zdGdyZVNRTCBkYXRhYmFzZXMsIHNvbWUgdGhpcmQtcGFydHkgZGlhbGVjdHNcbiAqIG1heSBub3QgcGFyc2UgdGhlIG5lc3RlZCBKU09OIGludG8gb2JqZWN0cy4gSW4gdGhlc2UgY2FzZXMgeW91IGNhbiB1c2UgdGhlIGJ1aWx0IGluXG4gKiBgUGFyc2VKU09OUmVzdWx0c1BsdWdpbmAgdG8gcGFyc2UgdGhlIHJlc3VsdHMuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCB7IGpzb25CdWlsZE9iamVjdCB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3Bvc3RncmVzJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICogICAuc2VsZWN0KChlYikgPT4gW1xuICogICAgICdpZCcsXG4gKiAgICAganNvbkJ1aWxkT2JqZWN0KHtcbiAqICAgICAgIGZpcnN0OiBlYi5yZWYoJ2ZpcnN0X25hbWUnKSxcbiAqICAgICAgIGxhc3Q6IGViLnJlZignbGFzdF9uYW1lJyksXG4gKiAgICAgICBmdWxsOiBzcWw8c3RyaW5nPmBmaXJzdF9uYW1lIHx8XHUwMEEwJyAnIHx8IGxhc3RfbmFtZWBcbiAqICAgICB9KS5hcygnbmFtZScpXG4gKiAgIF0pXG4gKiAgIC5leGVjdXRlKClcbiAqXG4gKiByZXN1bHRbMF0/LmlkXG4gKiByZXN1bHRbMF0/Lm5hbWUuZmlyc3RcbiAqIHJlc3VsdFswXT8ubmFtZS5sYXN0XG4gKiByZXN1bHRbMF0/Lm5hbWUuZnVsbFxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICpcbiAqIGBgYHNxbFxuICogc2VsZWN0IFwiaWRcIiwganNvbl9idWlsZF9vYmplY3QoXG4gKiAgICdmaXJzdCcsIGZpcnN0X25hbWUsXG4gKiAgICdsYXN0JywgbGFzdF9uYW1lLFxuICogICAnZnVsbCcsIGZpcnN0X25hbWUgfHwgJyAnIHx8IGxhc3RfbmFtZVxuICogKSBhcyBcIm5hbWVcIlxuICogZnJvbSBcInBlcnNvblwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpzb25CdWlsZE9iamVjdChvYmopIHtcbiAgICByZXR1cm4gc3FsIGBqc29uX2J1aWxkX29iamVjdCgke3NxbC5qb2luKE9iamVjdC5rZXlzKG9iaikuZmxhdE1hcCgoaykgPT4gW3NxbC5saXQoayksIG9ialtrXV0pKX0pYDtcbn1cbi8qKlxuICogVGhlIFBvc3RncmVTUUwgYG1lcmdlX2FjdGlvbmAgZnVuY3Rpb24uXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBpbiBhIGByZXR1cm5pbmdgIGNsYXVzZSB0byBnZXQgdGhlIGFjdGlvbiB0aGF0IHdhc1xuICogcGVyZm9ybWVkIGluIGEgYG1lcmdlSW50b2AgcXVlcnkuIFRoZSBmdW5jdGlvbiByZXR1cm5zIG9uZSBvZiB0aGUgZm9sbG93aW5nXG4gKiBzdHJpbmdzOiBgJ0lOU0VSVCdgLCBgJ1VQREFURSdgLCBvciBgJ0RFTEVURSdgLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBtZXJnZUFjdGlvbiB9IGZyb20gJ2t5c2VseS9oZWxwZXJzL3Bvc3RncmVzJ1xuICpcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gKiAgIC5tZXJnZUludG8oJ3BlcnNvbiBhcyBwJylcbiAqICAgLnVzaW5nKCdwZXJzb25fYmFja3VwIGFzIHBiJywgJ3AuaWQnLCAncGIuaWQnKVxuICogICAud2hlbk1hdGNoZWQoKVxuICogICAudGhlblVwZGF0ZVNldCgoeyByZWYgfSkgPT4gKHtcbiAqICAgICBmaXJzdF9uYW1lOiByZWYoJ3BiLmZpcnN0X25hbWUnKSxcbiAqICAgICB1cGRhdGVkX2F0OiByZWYoJ3BiLnVwZGF0ZWRfYXQnKS4kY2FzdFRvPHN0cmluZyB8IG51bGw+KCksXG4gKiAgIH0pKVxuICogICAud2hlbk5vdE1hdGNoZWQoKVxuICogICAudGhlbkluc2VydFZhbHVlcygoeyByZWZ9KSA9PiAoe1xuICogICAgIGlkOiByZWYoJ3BiLmlkJyksXG4gKiAgICAgZmlyc3RfbmFtZTogcmVmKCdwYi5maXJzdF9uYW1lJyksXG4gKiAgICAgY3JlYXRlZF9hdDogcmVmKCdwYi51cGRhdGVkX2F0JyksXG4gKiAgICAgdXBkYXRlZF9hdDogcmVmKCdwYi51cGRhdGVkX2F0JykuJGNhc3RUbzxzdHJpbmcgfCBudWxsPigpLFxuICogICB9KSlcbiAqICAgLnJldHVybmluZyhbbWVyZ2VBY3Rpb24oKS5hcygnYWN0aW9uJyksICdwLmlkJywgJ3AudXBkYXRlZF9hdCddKVxuICogICAuZXhlY3V0ZSgpXG4gKlxuICogcmVzdWx0WzBdLmFjdGlvblxuICogYGBgXG4gKlxuICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICpcbiAqIGBgYHNxbFxuICogbWVyZ2UgaW50byBcInBlcnNvblwiIGFzIFwicFwiXG4gKiB1c2luZyBcInBlcnNvbl9iYWNrdXBcIiBhcyBcInBiXCIgb24gXCJwXCIuXCJpZFwiID0gXCJwYlwiLlwiaWRcIlxuICogd2hlbiBtYXRjaGVkIHRoZW4gdXBkYXRlIHNldFxuICogICBcImZpcnN0X25hbWVcIiA9IFwicGJcIi5cImZpcnN0X25hbWVcIixcbiAqICAgXCJ1cGRhdGVkX2F0XCIgPSBcInBiXCIuXCJ1cGRhdGVkX2F0XCI6OnRleHRcbiAqIHdoZW4gbm90IG1hdGNoZWQgdGhlbiBpbnNlcnQgdmFsdWVzIChcImlkXCIsIFwiZmlyc3RfbmFtZVwiLCBcImNyZWF0ZWRfYXRcIiwgXCJ1cGRhdGVkX2F0XCIpXG4gKiB2YWx1ZXMgKFwicGJcIi5cImlkXCIsIFwicGJcIi5cImZpcnN0X25hbWVcIiwgXCJwYlwiLlwidXBkYXRlZF9hdFwiLCBcInBiXCIuXCJ1cGRhdGVkX2F0XCIpXG4gKiByZXR1cm5pbmcgbWVyZ2VfYWN0aW9uKCkgYXMgXCJhY3Rpb25cIiwgXCJwXCIuXCJpZFwiLCBcInBcIi5cInVwZGF0ZWRfYXRcIlxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFjdGlvbigpIHtcbiAgICByZXR1cm4gc3FsIGBtZXJnZV9hY3Rpb24oKWA7XG59XG4iLCAiaW1wb3J0IHsgdHlwZSBTZWxlY3RRdWVyeUJ1aWxkZXIsIHNxbCB9IGZyb20gXCJreXNlbHlcIjtcbmltcG9ydCB7IGpzb25BcnJheUZyb20gfSBmcm9tIFwia3lzZWx5L2hlbHBlcnMvcG9zdGdyZXNcIjtcblxuaW1wb3J0IHsgdHlwZSBCdWlsZGVyUmVxdWlyZW1lbnRzLCBjb21waWxlLCB0eXBlIFF1ZXJ5UmVzdWx0IH0gZnJvbSBcIi4uL3F1ZXJ5XCI7XG5pbXBvcnQgeyBnZXRQb3N0Z3JlU1FMQnVpbGRlciB9IGZyb20gXCIuL2J1aWxkZXJcIjtcblxuY29uc3QgUkVHVUxBUl9UQUJMRV9LSU5EID0gXCJyXCI7XG5jb25zdCBWSUVXX1RBQkxFX0tJTkQgPSBcInZcIjtcbmNvbnN0IFRBQkxFX0tJTkRTID0gW1JFR1VMQVJfVEFCTEVfS0lORCwgVklFV19UQUJMRV9LSU5EXSBhcyBjb25zdDtcbnR5cGUgVGFibGVLaW5kID0gKHR5cGVvZiBUQUJMRV9LSU5EUylbbnVtYmVyXTtcblxuaW50ZXJmYWNlIERhdGFiYXNlIHtcbiAgLyoqIGNvbHVtbnMgKi9cbiAgXCJwZ19jYXRhbG9nLnBnX2F0dHJpYnV0ZVwiOiB7XG4gICAgLyoqIGNvbHVtbiBvcmRlciBudW1iZXIgaW4gaXRzIHRhYmxlICovXG4gICAgYXR0bnVtOiBudW1iZXI7XG4gICAgLyoqIHRhYmxlL3ZpZXcgaWRlbnRpZmllciAqL1xuICAgIGF0dHJlbGlkOiBzdHJpbmc7XG4gICAgLyoqIGNvbHVtbiBuYW1lICovXG4gICAgYXR0bmFtZTogc3RyaW5nO1xuICAgIC8qKiB3YXMgdGhlIGNvbHVtbiBkcm9wcGVkLiBkcm9wcGVkIGNvbHVtbnMgbWlnaHQgbm90IGJlIDEwMCUgcmVtb3ZlZCBpbW1lZGlhdGVseS4gKi9cbiAgICBhdHRpc2Ryb3BwZWQ6IGJvb2xlYW47XG4gICAgLyoqIGNvbHVtbiBkYXRhdHlwZSBpZGVudGlmaWVyICovXG4gICAgYXR0dHlwaWQ6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBnZW5lcmF0aW9uIGZsYWcgZm9yIGNvbXB1dGVkIGNvbHVtbnM6XG4gICAgICogJycgKGVtcHR5KSBmb3IgcmVndWxhciBjb2x1bW5zLFxuICAgICAqICdzJyBmb3IgU1RPUkVEIGdlbmVyYXRlZCBjb2x1bW5zIChQb3N0Z3JlcyBHRU5FUkFURUQgQUxXQVlTIEFTKS5cbiAgICAgKi9cbiAgICBhdHRnZW5lcmF0ZWQ6IFwiXCIgfCBcInNcIjtcbiAgICAvKiogTk9UIE5VTEwgY29uc3RyYWludDogdHJ1ZSBpZiB0aGUgY29sdW1uIGhhcyBhIE5PVCBOVUxMIGNvbnN0cmFpbnQgKi9cbiAgICBhdHRub3RudWxsOiBib29sZWFuO1xuICB9O1xuICAvKiogcmVzb3VyY2VzLCBlLmcuIHRhYmxlcywgc2VxdWVuY2VzLCBldGMuICovXG4gIFwicGdfY2F0YWxvZy5wZ19jbGFzc1wiOiB7XG4gICAgLyoqIHJlc291cmNlIGlkICovXG4gICAgb2lkOiBudW1iZXI7XG4gICAgLyoqIHJlc291cmNlIG5hbWUgKi9cbiAgICByZWxuYW1lOiBzdHJpbmc7XG4gICAgLyoqIHNjaGVtYSBpZCAqL1xuICAgIHJlbG5hbWVzcGFjZTogbnVtYmVyO1xuICAgIC8qKiByZXNvdXJjZSBraW5kOiByZWd1bGFyIHRhYmxlLCB2aWV3ICovXG4gICAgcmVsa2luZDogVGFibGVLaW5kO1xuICB9O1xuICAvKiogZW51bSB0eXBlcycgdmFsdWVzICovXG4gIFwicGdfY2F0YWxvZy5wZ19lbnVtXCI6IHtcbiAgICAvKiogZW51bSB2YWx1ZSAqL1xuICAgIGVudW1sYWJlbDogc3RyaW5nO1xuICAgIC8qKiBlbnVtJ3MgdHlwZSBpZCAqL1xuICAgIGVudW10eXBpZDogbnVtYmVyO1xuICB9O1xuICAvKiogc2NoZW1hcyAqL1xuICBcInBnX2NhdGFsb2cucGdfbmFtZXNwYWNlXCI6IHtcbiAgICAvKiogc2NoZW1hIG5hbWUgKi9cbiAgICBuc3BuYW1lOiBzdHJpbmc7XG4gICAgLyoqIHNjaGVtYSBpZCAqL1xuICAgIG9pZDogbnVtYmVyO1xuICB9O1xuICAvKiogZGF0YXR5cGVzICovXG4gIFwicGdfY2F0YWxvZy5wZ190eXBlXCI6IHtcbiAgICAvKiogdHlwZSBpZCAqL1xuICAgIG9pZDogbnVtYmVyO1xuICAgIC8qKiB0eXBlIG5hbWUgKi9cbiAgICB0eXBuYW1lOiBzdHJpbmc7XG4gICAgLyoqIHR5cGUncyBzY2hlbWEgKGFrYSBuYW1lc3BhY2UpIGlkICovXG4gICAgdHlwbmFtZXNwYWNlOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogdHlwZSdzIGtpbmRcbiAgICAgKlxuICAgICAqICdlJyAtIGVudW0gdHlwZVxuICAgICAqL1xuICAgIHR5cHR5cGU6IFwiZVwiIHwgKHN0cmluZyAmIHt9KTtcbiAgfTtcbiAgLyoqIGNvbnN0cmFpbnRzICovXG4gIFwicGdfY2F0YWxvZy5wZ19jb25zdHJhaW50XCI6IHtcbiAgICAvKiogcmVsYXRpb24gKHRhYmxlKSBpZCB3aGljaCB0aGlzIGNvbnN0cmFpbnQgd2FzIGNyZWF0ZWQgZm9yICovXG4gICAgY29ucmVsaWQ6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBjb25zdHJhaW50IHR5cGUuXG4gICAgICpcbiAgICAgKiBgJ3AnYCAtIHByaW1hcnkga2V5IGNvbnN0cmFpbnQuXG4gICAgICogYCdmJ2AgLSBmb3JlaWduIGtleSBjb25zdHJhaW50LlxuICAgICAqL1xuICAgIGNvbnR5cGU6IFwicFwiIHwgXCJmXCIgfCAoc3RyaW5nICYge30pO1xuICAgIC8qKlxuICAgICAqIGFuIG9yZGVyZWQgYXJyYXkgb2YgY29sdW1ucyBpbmNsdWRlZCBpbiB0aGUgY29uc3RyYWludC5cbiAgICAgKlxuICAgICAqIHRoZSBjb2x1bW5zIGFyZSByZXByZXNlbnRlZCBieSB0aGVpciBvcmRpbmFsIG51bWJlciAoYGF0dG51bWApIGluIHRoZWlyIHJlbGF0aW9uICh0YWJsZSkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBgJ3sxLDN9J2AgLSBhIGNvbnN0cmFpbnQgd2l0aCAyIGNvbHVtbnMsIHRoZSAxc3QgJiAzcmQgaW4gdGhlaXIgdGFibGUuXG4gICAgICovXG4gICAgY29ua2V5OiBudW1iZXJbXTtcbiAgICAvKiogaWYgYSBmb3JlaWduIGtleSwgdGhlIHJlZmVyZW5jZWQgdGFibGUgKi9cbiAgICBjb25mcmVsaWQ6IG51bWJlcjtcbiAgICAvKiogaWYgYSBmb3JlaWduIGtleSwgdGhlIHJlZmVyZW5jZWQgY29sdW1ucyAqL1xuICAgIGNvbmZrZXk6IG51bWJlcltdO1xuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHJldHVybnMgbWV0YWRhdGEgZm9yIGFsbCB1c2VyLWRlZmluZWQgdGFibGVzIGFuZCB2aWV3cyBpbiB0aGUgZGF0YWJhc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZXNRdWVyeShyZXF1aXJlbWVudHM/OiBPbWl0PEJ1aWxkZXJSZXF1aXJlbWVudHMsIFwiQWRhcHRlclwiIHwgXCJRdWVyeUNvbXBpbGVyXCI+KSB7XG4gIHJldHVybiBjb21waWxlKFxuICAgIGdldFBvc3RncmVTUUxCdWlsZGVyPERhdGFiYXNlPihyZXF1aXJlbWVudHMpXG4gICAgICAuc2VsZWN0RnJvbShcInBnX2NhdGFsb2cucGdfY2xhc3MgYXMgY2xzXCIpXG4gICAgICAuaW5uZXJKb2luKFwicGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgYXMgbnNcIiwgXCJjbHMucmVsbmFtZXNwYWNlXCIsIFwibnMub2lkXCIpXG4gICAgICAuJGNhbGwoZXhjbHVkZVN5c3RlbVRhYmxlcylcbiAgICAgIC8vIHJlZ3VsYXIgdGFibGVzIG9yIHZpZXdzXG4gICAgICAud2hlcmUoXCJjbHMucmVsa2luZFwiLCBcImluXCIsIFRBQkxFX0tJTkRTKVxuICAgICAgLnNlbGVjdCgoZWIpID0+IFtcbiAgICAgICAgXCJucy5uc3BuYW1lIGFzIHNjaGVtYVwiLFxuICAgICAgICBcImNscy5yZWxuYW1lIGFzIG5hbWVcIixcbiAgICAgICAganNvbkFycmF5RnJvbShcbiAgICAgICAgICBlYlxuICAgICAgICAgICAgLnNlbGVjdEZyb20oXCJwZ19jYXRhbG9nLnBnX2F0dHJpYnV0ZSBhcyBhdHRcIilcbiAgICAgICAgICAgIC5pbm5lckpvaW4oXCJwZ19jYXRhbG9nLnBnX3R5cGUgYXMgdHlwXCIsIFwidHlwLm9pZFwiLCBcImF0dC5hdHR0eXBpZFwiKVxuICAgICAgICAgICAgLmlubmVySm9pbihcInBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIGFzIHRuc1wiLCBcInRucy5vaWRcIiwgXCJ0eXAudHlwbmFtZXNwYWNlXCIpXG4gICAgICAgICAgICAubGVmdEpvaW4oXCJwZ19jYXRhbG9nLnBnX2NvbnN0cmFpbnQgYXMgcGtfY29uXCIsIChqYikgPT5cbiAgICAgICAgICAgICAgamJcbiAgICAgICAgICAgICAgICAub24oXCJwa19jb24uY29udHlwZVwiLCBcIj1cIiwgXCJwXCIpXG4gICAgICAgICAgICAgICAgLm9uUmVmKFwicGtfY29uLmNvbnJlbGlkXCIsIFwiPVwiLCBcImNscy5vaWRcIilcbiAgICAgICAgICAgICAgICAub24oKGViKSA9PiBlYihcImF0dC5hdHRudW1cIiwgXCI9XCIsIGViLmZuLmFueShcInBrX2Nvbi5jb25rZXlcIikpKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5sZWZ0Sm9pbihcInBnX2NhdGFsb2cucGdfY29uc3RyYWludCBhcyBma19jb25cIiwgKGpiKSA9PlxuICAgICAgICAgICAgICBqYlxuICAgICAgICAgICAgICAgIC5vbihcImZrX2Nvbi5jb250eXBlXCIsIFwiPVwiLCBcImZcIilcbiAgICAgICAgICAgICAgICAub25SZWYoXCJma19jb24uY29ucmVsaWRcIiwgXCI9XCIsIFwiY2xzLm9pZFwiKVxuICAgICAgICAgICAgICAgIC5vbigoZWIpID0+IGViKFwiYXR0LmF0dG51bVwiLCBcIj1cIiwgZWIuZm4uYW55KFwiZmtfY29uLmNvbmtleVwiKSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwicGdfY2F0YWxvZy5wZ19jbGFzcyBhcyBma19jbHNcIiwgXCJma19jbHMub2lkXCIsIFwiZmtfY29uLmNvbmZyZWxpZFwiKVxuICAgICAgICAgICAgLmxlZnRKb2luKFwicGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgYXMgZmtfbnNcIiwgXCJma19ucy5vaWRcIiwgXCJma19jbHMucmVsbmFtZXNwYWNlXCIpXG4gICAgICAgICAgICAubGVmdEpvaW4oXCJwZ19jYXRhbG9nLnBnX2F0dHJpYnV0ZSBhcyBma19hdHRcIiwgKGpiKSA9PlxuICAgICAgICAgICAgICBqYlxuICAgICAgICAgICAgICAgIC5vblJlZihcImZrX2F0dC5hdHRyZWxpZFwiLCBcIj1cIiwgXCJma19jbHMub2lkXCIpXG4gICAgICAgICAgICAgICAgLy8gVXNlIGEgY2FsbGJhY2sgZm9yIHRoZSAub24oKSBjb25kaXRpb24gdG8gZW5zdXJlIGNvcnJlY3QgY29udGV4dCBmb3IgdHlwZXNcbiAgICAgICAgICAgICAgICAub24oKG9uX2ViKSA9PiBvbl9lYihcImZrX2F0dC5hdHRudW1cIiwgXCI9XCIsIG9uX2ViLmZuLmFueShcImZrX2Nvbi5jb25ma2V5XCIpKSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAud2hlcmVSZWYoXCJhdHQuYXR0cmVsaWRcIiwgXCI9XCIsIFwiY2xzLm9pZFwiKVxuICAgICAgICAgICAgLy8gZXhjbHVkZSBzeXN0ZW0gY29sdW1uc1xuICAgICAgICAgICAgLndoZXJlKFwiYXR0LmF0dG51bVwiLCBcIj49XCIsIDApXG4gICAgICAgICAgICAud2hlcmUoXCJhdHQuYXR0aXNkcm9wcGVkXCIsIFwiIT1cIiwgdHJ1ZSlcbiAgICAgICAgICAgIC5zZWxlY3QoW1xuICAgICAgICAgICAgICBcImF0dC5hdHRuYW1lIGFzIG5hbWVcIixcbiAgICAgICAgICAgICAgXCJ0eXAudHlwbmFtZSBhcyBkYXRhdHlwZVwiLFxuICAgICAgICAgICAgICBcInRucy5uc3BuYW1lIGFzIGRhdGF0eXBlX3NjaGVtYVwiLFxuICAgICAgICAgICAgICBcImZrX25zLm5zcG5hbWUgYXMgZm9yZWlnbl9rZXlfc2NoZW1hXCIsXG4gICAgICAgICAgICAgIFwiZmtfY2xzLnJlbG5hbWUgYXMgZm9yZWlnbl9rZXlfdGFibGVcIixcbiAgICAgICAgICAgICAgXCJma19hdHQuYXR0bmFtZSBhcyBmb3JlaWduX2tleV9jb2x1bW5cIixcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAuc2VsZWN0KChlYikgPT4gW1xuICAgICAgICAgICAgICBlYihcInBrX2Nvbi5jb25rZXlcIiwgXCJpcyBub3RcIiwgbnVsbCkuJGNhc3RUbzxib29sZWFuPigpLmFzKFwicGtcIiksXG4gICAgICAgICAgICAgIGViKFwiYXR0LmF0dGdlbmVyYXRlZFwiLCBcIiE9XCIsIFwiXCIpLiRjYXN0VG88Ym9vbGVhbj4oKS5hcyhcImNvbXB1dGVkXCIpLFxuICAgICAgICAgICAgICBlYihcImF0dC5hdHRub3RudWxsXCIsIFwiIT1cIiwgdHJ1ZSkuJGNhc3RUbzxib29sZWFuPigpLmFzKFwibnVsbGFibGVcIiksXG4gICAgICAgICAgICAgIGViLmZuXG4gICAgICAgICAgICAgICAgLmNvYWxlc2NlKFxuICAgICAgICAgICAgICAgICAgZWJcbiAgICAgICAgICAgICAgICAgICAgLnNlbGVjdEZyb20oXCJwZ19jYXRhbG9nLnBnX2VudW0gYXMgZW5tXCIpXG4gICAgICAgICAgICAgICAgICAgIC53aGVyZVJlZihcImVubS5lbnVtdHlwaWRcIiwgXCI9XCIsIFwidHlwLm9pZFwiKVxuICAgICAgICAgICAgICAgICAgICAuc2VsZWN0KChlYikgPT4gZWIuZm4uanNvbkFnZyhlYi5yZWYoXCJlbm0uZW51bWxhYmVsXCIpKS5hcyhcIm9cIikpLFxuICAgICAgICAgICAgICAgICAgc3FsPHN0cmluZ1tdPmAnW10nYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmFzKFwib3B0aW9uc1wiKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICApLmFzKFwiY29sdW1uc1wiKSxcbiAgICAgIF0pLFxuICApO1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1RhYmxlc1F1ZXJ5KCkge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHNjaGVtYTogXCJ6b29cIixcbiAgICAgIG5hbWU6IFwiYW5pbWFsc1wiLFxuICAgICAgY29sdW1uczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJpZFwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcImludDRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiB0cnVlLFxuICAgICAgICAgIGNvbXB1dGVkOiBmYWxzZSxcbiAgICAgICAgICBvcHRpb25zOiBbXSxcbiAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBzY2hlbWE6IFwicHVibGljXCIsXG4gICAgICBuYW1lOiBcInVzZXJzXCIsXG4gICAgICBjb2x1bW5zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwiaW50NFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IHRydWUsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGltZXN0YW1wXCIsXG4gICAgICAgICAgZGF0YXR5cGVfc2NoZW1hOiBcInBnX2NhdGFsb2dcIixcbiAgICAgICAgICBwazogZmFsc2UsXG4gICAgICAgICAgY29tcHV0ZWQ6IGZhbHNlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3NjaGVtYTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV90YWJsZTogbnVsbCxcbiAgICAgICAgICBmb3JlaWduX2tleV9jb2x1bW46IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImRlbGV0ZWRfYXRcIixcbiAgICAgICAgICBkYXRhdHlwZTogXCJ0aW1lc3RhbXBcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwicm9sZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInZhcmNoYXJcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZVwiLFxuICAgICAgICAgIGRhdGF0eXBlOiBcInZhcmNoYXJcIixcbiAgICAgICAgICBkYXRhdHlwZV9zY2hlbWE6IFwicGdfY2F0YWxvZ1wiLFxuICAgICAgICAgIHBrOiBmYWxzZSxcbiAgICAgICAgICBjb21wdXRlZDogZmFsc2UsXG4gICAgICAgICAgb3B0aW9uczogW10sXG4gICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfc2NoZW1hOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X3RhYmxlOiBudWxsLFxuICAgICAgICAgIGZvcmVpZ25fa2V5X2NvbHVtbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwibmFtZV9yb2xlXCIsXG4gICAgICAgICAgZGF0YXR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIGRhdGF0eXBlX3NjaGVtYTogXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgcGs6IGZhbHNlLFxuICAgICAgICAgIGNvbXB1dGVkOiB0cnVlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgICAgICBmb3JlaWduX2tleV9zY2hlbWE6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfdGFibGU6IG51bGwsXG4gICAgICAgICAgZm9yZWlnbl9rZXlfY29sdW1uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdIGFzIGNvbnN0IHNhdGlzZmllcyBRdWVyeVJlc3VsdDx0eXBlb2YgZ2V0VGFibGVzUXVlcnk+O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGN1cnJlbnQgdGltZXpvbmUgc2V0dGluZyBvZiB0aGUgUG9zdGdyZVNRTCBkYXRhYmFzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWV6b25lUXVlcnkoKSB7XG4gIGNvbnN0IGJ1aWxkZXIgPSBnZXRQb3N0Z3JlU1FMQnVpbGRlcigpO1xuXG4gIHJldHVybiBjb21waWxlKGJ1aWxkZXIuc2VsZWN0Tm9Gcm9tKGJ1aWxkZXIuZm48c3RyaW5nPihcImN1cnJlbnRfc2V0dGluZ1wiLCBbc3FsLmxpdChcInRpbWV6b25lXCIpXSkuYXMoXCJ0aW1lem9uZVwiKSkpO1xufVxuXG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja1RpbWV6b25lUXVlcnkoKSB7XG4gIHJldHVybiBbeyB0aW1lem9uZTogXCJVVENcIiB9XSBhcyBjb25zdCBzYXRpc2ZpZXMgUXVlcnlSZXN1bHQ8dHlwZW9mIGdldFRpbWV6b25lUXVlcnk+O1xufVxuXG4vKipcbiAqIFdlIGRvbid0IHdhbnQgUG9zdGdyZVNRTCBpbnRlcm5hbHMgaW4gaW50cm9zcGVjdGlvbiByZXN1bHRzLiBUbyBiZSB1c2VkIGluIGAkY2FsbGAuXG4gKi9cbmZ1bmN0aW9uIGV4Y2x1ZGVTeXN0ZW1UYWJsZXM8XG4gIFQgZXh0ZW5kcyBTZWxlY3RRdWVyeUJ1aWxkZXI8XG4gICAgRGF0YWJhc2UgJiB7IG5zOiBEYXRhYmFzZVtcInBnX2NhdGFsb2cucGdfbmFtZXNwYWNlXCJdOyBjbHM6IERhdGFiYXNlW1wicGdfY2F0YWxvZy5wZ19jbGFzc1wiXSB9LFxuICAgIFwibnNcIiB8IFwiY2xzXCIsXG4gICAgb2JqZWN0XG4gID4sXG4+KHFiOiBUKTogVCB7XG4gIHJldHVybiBxYi53aGVyZShgbnMubnNwbmFtZWAsIGAhfmAsIGBecGdfYCkud2hlcmUoYG5zLm5zcG5hbWVgLCBgIT1gLCBgaW5mb3JtYXRpb25fc2NoZW1hYCkgYXMgbmV2ZXI7XG59XG4iLCAiaW1wb3J0IHtcbiAgdHlwZSBBZGFwdGVyLFxuICB0eXBlIEFkYXB0ZXJEZWxldGVSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckVycm9yLFxuICB0eXBlIEFkYXB0ZXJJbnNlcnRSZXN1bHQsXG4gIHR5cGUgQWRhcHRlckludHJvc3BlY3RSZXN1bHQsXG4gIHR5cGUgQWRhcHRlclF1ZXJ5UmVzdWx0LFxuICB0eXBlIEFkYXB0ZXJVcGRhdGVSZXN1bHQsXG4gIHR5cGUgQ29sdW1uLFxuICBjcmVhdGVBZGFwdGVyRXJyb3IsXG4gIHR5cGUgRmlsdGVyT3BlcmF0b3IsXG4gIHR5cGUgVGFibGUsXG59IGZyb20gXCIuLi9hZGFwdGVyXCI7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dG9yIH0gZnJvbSBcIi4uL2V4ZWN1dG9yXCI7XG5pbXBvcnQgdHlwZSB7IFF1ZXJ5LCBRdWVyeVJlc3VsdCB9IGZyb20gXCIuLi9xdWVyeVwiO1xuaW1wb3J0IHR5cGUgeyBFaXRoZXIgfSBmcm9tIFwiLi4vdHlwZS11dGlsc1wiO1xuaW1wb3J0IHsgUE9TVEdSRVNRTF9EQVRBX1RZUEVTX1RPX01FVEFEQVRBIH0gZnJvbSBcIi4vZGF0YXR5cGVcIjtcbmltcG9ydCB7IGdldERlbGV0ZVF1ZXJ5LCBnZXRJbnNlcnRRdWVyeSwgZ2V0U2VsZWN0UXVlcnksIGdldFVwZGF0ZVF1ZXJ5IH0gZnJvbSBcIi4vZG1sXCI7XG5pbXBvcnQgeyBnZXRUYWJsZXNRdWVyeSwgZ2V0VGltZXpvbmVRdWVyeSwgbW9ja1RhYmxlc1F1ZXJ5LCBtb2NrVGltZXpvbmVRdWVyeSB9IGZyb20gXCIuL2ludHJvc3BlY3Rpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBQb3N0Z3Jlc0FkYXB0ZXJSZXF1aXJlbWVudHMge1xuICBleGVjdXRvcjogRXhlY3V0b3I7XG4gIG5vUGFyYW1ldGVycz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQb3N0Z3Jlc0FkYXB0ZXIocmVxdWlyZW1lbnRzOiBQb3N0Z3Jlc0FkYXB0ZXJSZXF1aXJlbWVudHMpOiBBZGFwdGVyIHtcbiAgY29uc3QgeyBleGVjdXRvciwgLi4ub3RoZXJSZXF1aXJlbWVudHMgfSA9IHJlcXVpcmVtZW50cztcblxuICByZXR1cm4ge1xuICAgIGRlZmF1bHRTY2hlbWE6IFwicHVibGljXCIsXG4gICAgYXN5bmMgaW50cm9zcGVjdChvcHRpb25zKTogUHJvbWlzZTxFaXRoZXI8QWRhcHRlckVycm9yLCBBZGFwdGVySW50cm9zcGVjdFJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhYmxlc1F1ZXJ5ID0gZ2V0VGFibGVzUXVlcnkob3RoZXJSZXF1aXJlbWVudHMpO1xuICAgICAgICBjb25zdCB0aW1lem9uZVF1ZXJ5ID0gZ2V0VGltZXpvbmVRdWVyeSgpO1xuXG4gICAgICAgIGNvbnN0IFtbdGFibGVzRXJyb3IsIHRhYmxlc10sIFt0aW1lem9uZUVycm9yLCB0aW1lem9uZXNdXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICBleGVjdXRvci5leGVjdXRlKHRhYmxlc1F1ZXJ5LCBvcHRpb25zKSxcbiAgICAgICAgICBleGVjdXRvci5leGVjdXRlKHRpbWV6b25lUXVlcnksIG9wdGlvbnMpLFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAodGFibGVzRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IHRhYmxlc0Vycm9yLCBxdWVyeTogdGFibGVzUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGltZXpvbmVFcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogdGltZXpvbmVFcnJvciwgcXVlcnk6IHRpbWV6b25lUXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aW1lem9uZSA9IHRpbWV6b25lc1swXT8udGltZXpvbmU7XG5cbiAgICAgICAgaWYgKCF0aW1lem9uZSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvcjogbmV3IEVycm9yKFwiVGltZXpvbmUgbm90IGZvdW5kXCIpLCBxdWVyeTogdGltZXpvbmVRdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbbnVsbCwgY3JlYXRlSW50cm9zcGVjdGlvbih7IHRhYmxlcywgdGltZXpvbmUsIHF1ZXJ5OiB0YWJsZXNRdWVyeSB9KV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgcHJvcGVybHlcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcXVlcnkoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclF1ZXJ5UmVzdWx0Pj4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBnZXRTZWxlY3RRdWVyeShkZXRhaWxzLCBvdGhlclJlcXVpcmVtZW50cyk7XG4gICAgICAgIGNvbnN0IFtlcnJvciwgcmVzdWx0c10gPSBhd2FpdCBleGVjdXRvci5leGVjdXRlKHF1ZXJ5LCBvcHRpb25zKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3IsIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IGZpbHRlcmVkUm93Q291bnQ6IHJlc3VsdHNbMF0/Lm9pZCB8fCBcIjBcIiwgcm93czogcmVzdWx0cywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAvLyBUT0RPOiBoYW5kbGUgcHJvcGVybHlcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yOiBlcnJvciBhcyBFcnJvciB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgaW5zZXJ0KGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJJbnNlcnRSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldEluc2VydFF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgW2Vycm9yLCByb3dzXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgcm93cywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGUoZGV0YWlscywgb3B0aW9ucyk6IFByb21pc2U8RWl0aGVyPEFkYXB0ZXJFcnJvciwgQWRhcHRlclVwZGF0ZVJlc3VsdD4+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gZ2V0VXBkYXRlUXVlcnkoZGV0YWlscywgb3RoZXJSZXF1aXJlbWVudHMpO1xuICAgICAgICBjb25zdCBbZXJyb3IsIHJlc3VsdHNdID0gYXdhaXQgZXhlY3V0b3IuZXhlY3V0ZShxdWVyeSwgb3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZUFkYXB0ZXJFcnJvcih7IGVycm9yLCBxdWVyeSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IFtyb3ddID0gcmVzdWx0cztcblxuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgIC8vIFRPRE86IGN1c3RvbSBlcnJvcj9cbiAgICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IG5ldyBFcnJvcihcIlVwZGF0ZSBmYWlsZWRcIiksIHF1ZXJ5IH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtudWxsLCB7IHJvdywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgZGVsZXRlKGRldGFpbHMsIG9wdGlvbnMpOiBQcm9taXNlPEVpdGhlcjxBZGFwdGVyRXJyb3IsIEFkYXB0ZXJEZWxldGVSZXN1bHQ+PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldERlbGV0ZVF1ZXJ5KGRldGFpbHMsIG90aGVyUmVxdWlyZW1lbnRzKTtcbiAgICAgICAgY29uc3QgW2Vycm9yXSA9IGF3YWl0IGV4ZWN1dG9yLmV4ZWN1dGUocXVlcnksIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVBZGFwdGVyRXJyb3IoeyBlcnJvciwgcXVlcnkgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW251bGwsIHsgLi4uZGV0YWlscywgcXVlcnkgfV07XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICByZXR1cm4gY3JlYXRlQWRhcHRlckVycm9yKHsgZXJyb3I6IGVycm9yIGFzIEVycm9yIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludHJvc3BlY3Rpb24oYXJnczogeyB0YWJsZXM6IFF1ZXJ5UmVzdWx0PHR5cGVvZiBnZXRUYWJsZXNRdWVyeT47IHRpbWV6b25lOiBzdHJpbmc7IHF1ZXJ5OiBRdWVyeSB9KSB7XG4gIGNvbnN0IHsgdGFibGVzLCB0aW1lem9uZSwgcXVlcnkgfSA9IGFyZ3M7XG5cbiAgcmV0dXJuIHRhYmxlcy5yZWR1Y2UoXG4gICAgKHJlc3VsdCwgcm93KSA9PiB7XG4gICAgICBjb25zdCB7IHNjaGVtYXMgfSA9IHJlc3VsdDtcbiAgICAgIGNvbnN0IHsgY29sdW1ucywgbmFtZTogdGFibGVOYW1lLCBzY2hlbWEgfSA9IHJvdztcblxuICAgICAgY29uc3QgY29sdW1uc1JlY29yZCA9IGNvbHVtbnMucmVkdWNlKFxuICAgICAgICAoY29sdW1ucywgY29sdW1uKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBkYXRhdHlwZSwgZGF0YXR5cGVfc2NoZW1hLCBuYW1lOiBjb2x1bW5OYW1lLCBvcHRpb25zLCBudWxsYWJsZSB9ID0gY29sdW1uO1xuXG4gICAgICAgICAgY29uc3QgaXNBcnJheSA9IGRhdGF0eXBlLnN0YXJ0c1dpdGgoXCJfXCIpO1xuICAgICAgICAgIGNvbnN0IHN0cmlwcGVkRGF0YVR5cGUgPSBpc0FycmF5ID8gZGF0YXR5cGUuc2xpY2UoMSkgOiBkYXRhdHlwZTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jb2x1bW5zLFxuICAgICAgICAgICAgW2NvbHVtbk5hbWVdOiB7XG4gICAgICAgICAgICAgIGRhdGF0eXBlOiB7XG4gICAgICAgICAgICAgICAgLi4uKFBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQVtzdHJpcHBlZERhdGFUeXBlXSB8fCB7XG4gICAgICAgICAgICAgICAgICBncm91cDogb3B0aW9ucy5sZW5ndGggPiAwID8gXCJlbnVtXCIgOiBcInJhd1wiLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGlzQXJyYXksXG4gICAgICAgICAgICAgICAgaXNOYXRpdmU6IGRhdGF0eXBlX3NjaGVtYSA9PT0gXCJwZ19jYXRhbG9nXCIsXG4gICAgICAgICAgICAgICAgbmFtZTogaXNBcnJheSA/IGAke3N0cmlwcGVkRGF0YVR5cGV9W11gIDogc3RyaXBwZWREYXRhVHlwZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogZGF0YXR5cGVfc2NoZW1hLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpc0NvbXB1dGVkOiBjb2x1bW4uY29tcHV0ZWQsXG4gICAgICAgICAgICAgIGlzSW5QcmltYXJ5S2V5OiBjb2x1bW4ucGssXG4gICAgICAgICAgICAgIG5hbWU6IGNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgIG51bGxhYmxlLFxuICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgIHRhYmxlOiB0YWJsZU5hbWUsXG4gICAgICAgICAgICAgIGZrU2NoZW1hOiBjb2x1bW4uZm9yZWlnbl9rZXlfc2NoZW1hLFxuICAgICAgICAgICAgICBma1RhYmxlOiBjb2x1bW4uZm9yZWlnbl9rZXlfdGFibGUsXG4gICAgICAgICAgICAgIGZrQ29sdW1uOiBjb2x1bW4uZm9yZWlnbl9rZXlfY29sdW1uLFxuICAgICAgICAgICAgfSBhcyBjb25zdCBzYXRpc2ZpZXMgQ29sdW1uLFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIHt9IGFzIFRhYmxlW1wiY29sdW1uc1wiXSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChzY2hlbWFzW3NjaGVtYV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY2hlbWFzW3NjaGVtYV0gPSB7XG4gICAgICAgICAgbmFtZTogc2NoZW1hLFxuICAgICAgICAgIHRhYmxlczoge30sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHNjaGVtYXNbc2NoZW1hXS50YWJsZXNbdGFibGVOYW1lXSA9IHtcbiAgICAgICAgY29sdW1uczogY29sdW1uc1JlY29yZCxcbiAgICAgICAgbmFtZTogdGFibGVOYW1lLFxuICAgICAgICBzY2hlbWEsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG4gICAge1xuICAgICAgc2NoZW1hczogeyBwdWJsaWM6IHsgdGFibGVzOiB7fSwgbmFtZTogXCJwdWJsaWNcIiB9IH0sXG4gICAgICB0aW1lem9uZSxcbiAgICAgIGZpbHRlck9wZXJhdG9ycyxcbiAgICAgIHF1ZXJ5LFxuICAgIH0gc2F0aXNmaWVzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0IGFzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0LFxuICApO1xufVxuXG5jb25zdCBmaWx0ZXJPcGVyYXRvcnMgPSBbXG4gIFwiPVwiLFxuICBcIiE9XCIsXG4gIFwiPlwiLFxuICBcIj49XCIsXG4gIFwiPFwiLFxuICBcIjw9XCIsXG4gIFwiaXNcIixcbiAgXCJpcyBub3RcIixcbiAgXCJsaWtlXCIsXG4gIFwibm90IGxpa2VcIixcbiAgXCJpbGlrZVwiLFxuICBcIm5vdCBpbGlrZVwiLFxuXSBzYXRpc2ZpZXMgRmlsdGVyT3BlcmF0b3JbXTtcblxuLyoqXG4gKiBGb3IgdGVzdGluZyBwdXJwb3Nlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tJbnRyb3NwZWN0KCkge1xuICBjb25zdCB0YWJsZXMgPSBtb2NrVGFibGVzUXVlcnkoKTtcbiAgY29uc3QgW3sgdGltZXpvbmUgfV0gPSBtb2NrVGltZXpvbmVRdWVyeSgpO1xuICBjb25zdCBxdWVyeSA9IHsgcGFyYW1ldGVyczogW10sIHNxbDogXCI8bW9ja2VkPlwiIH0gYXMgUXVlcnk7XG5cbiAgcmV0dXJuIGNyZWF0ZUludHJvc3BlY3Rpb24oeyB0YWJsZXMsIHRpbWV6b25lLCBxdWVyeSB9KSBhcyB7XG4gICAgLy8gYmVzdCBlZmZvcnQsIG5vIG5lZWQgZ28gb3ZlcmJvYXJkLlxuICAgIHNjaGVtYXM6IHtcbiAgICAgIFtLIGluICh0eXBlb2YgdGFibGVzKVtudW1iZXJdW1wic2NoZW1hXCJdXToge1xuICAgICAgICBuYW1lOiBLO1xuICAgICAgICB0YWJsZXM6IHtcbiAgICAgICAgICBbVCBpbiAodHlwZW9mIHRhYmxlcylbbnVtYmVyXVtcIm5hbWVcIl1dOiBUYWJsZTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfTtcbiAgICB0aW1lem9uZTogdHlwZW9mIHRpbWV6b25lO1xuICAgIGZpbHRlck9wZXJhdG9yczogRmlsdGVyT3BlcmF0b3JbXTtcbiAgICBxdWVyeTogUXVlcnk7XG4gIH0gc2F0aXNmaWVzIEFkYXB0ZXJJbnRyb3NwZWN0UmVzdWx0O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogInViQUFBLElBQUFBLEdBQUEsR0FBQUMsR0FBQUQsR0FBQSx5QkFBQUUsR0FBQSx5QkFBQUMsS0FBQSxlQUFBQyxHQUFBSixJQzZUTyxTQUFTSyxFQUFtQkMsRUFBdUMsQ0FDeEUsR0FBTSxDQUFFLE1BQUFDLEVBQU8sTUFBQUMsQ0FBTSxFQUFJRixFQUVuQkcsRUFBZUYsRUFFckIsT0FBQUUsRUFBYSxNQUFRRCxFQUVkLENBQUNDLENBQVksQ0FDdEIsQ0NuVU8sSUFBTUMsR0FBNkUsQ0FDeEYsS0FBTSxDQUNKLE1BQU8sU0FDVCxFQUNBLFFBQVMsQ0FDUCxNQUFPLFNBQ1QsRUFDQSxNQUFPLENBQ0wsTUFBTyxRQUNULEVBQ0EsS0FBTSxDQUNKLE1BQU8sUUFDVCxFQUNBLE9BQVEsQ0FDTixN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QWUsQ0FBQyxFQUUzRWEsR0FBVyxLQUFLLElBQUksRUFBSUYsR0FFOUIsT0FBSUYsR0FDRixRQUFRLElBQUksb0NBQXFDSSxHQUFVLE1BQU9ILEVBQWMsRUFHM0UsQ0FBQyxLQUFNRSxHQUFPLElBQWEsQ0FDcEMsT0FBU1IsRUFBZ0IsQ0FDdkIsTUFBTyxDQUFDQSxDQUFjLENBQ3hCLFFBQUUsQ0FDQU4sR0FBYSxvQkFBb0IsUUFBU0ssQ0FBYSxDQUN6RCxDQUNGLENBQ0YsQ0FDRixDQUtPLFNBQVNXLEdBQW9CckIsRUFBZ0JDLEVBQXlDLENBQzNGLE9BQU9xQixHQUFzQixDQUMzQixTQUFVdkIsR0FBcUJDLEVBQVFDLENBQU8sQ0FDaEQsQ0FBQyxDQUNIIiwKICAibmFtZXMiOiBbInBnbGl0ZV9leHBvcnRzIiwgIl9fZXhwb3J0IiwgImNyZWF0ZVBHTGl0ZUFkYXB0ZXIiLCAiY3JlYXRlUEdMaXRlRXhlY3V0b3IiLCAiX190b0NvbW1vbkpTIiwgImNyZWF0ZUFkYXB0ZXJFcnJvciIsICJhcmdzIiwgImVycm9yIiwgInF1ZXJ5IiwgImFkYXB0ZXJFcnJvciIsICJQT1NUR1JFU1FMX0RBVEFfVFlQRVNfVE9fTUVUQURBVEEiLCAiaXNVbmRlZmluZWQiLCAib2JqIiwgImlzU3RyaW5nIiwgImlzTnVtYmVyIiwgImlzQm9vbGVhbiIsICJpc051bGwiLCAiaXNEYXRlIiwgImlzQmlnSW50IiwgImlzRnVuY3Rpb24iLCAib2JqIiwgImlzT2JqZWN0IiwgImZyZWV6ZSIsICJvYmoiLCAiYXNBcnJheSIsICJhcmciLCAiaXNSZWFkb25seUFycmF5IiwgImlzUmVhZG9ubHlBcnJheSIsICJhcmciLCAibm9vcCIsICJvYmoiLCAiQWx0ZXJUYWJsZU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAidGFibGUiLCAicHJvcHMiLCAiY29sdW1uQWx0ZXJhdGlvbiIsICJJZGVudGlmaWVyTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJuYW1lIiwgIkNyZWF0ZUluZGV4Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJuYW1lIiwgIklkZW50aWZpZXJOb2RlIiwgInByb3BzIiwgImNvbHVtbnMiLCAiQ3JlYXRlU2NoZW1hTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJzY2hlbWEiLCAicGFyYW1zIiwgIklkZW50aWZpZXJOb2RlIiwgImNyZWF0ZVNjaGVtYSIsICJPTl9DT01NSVRfQUNUSU9OUyIsICJDcmVhdGVUYWJsZU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAidGFibGUiLCAiY3JlYXRlVGFibGUiLCAiY29sdW1uIiwgImNvbnN0cmFpbnQiLCAibW9kaWZpZXIiLCAicGFyYW1zIiwgIlNjaGVtYWJsZUlkZW50aWZpZXJOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImlkZW50aWZpZXIiLCAiSWRlbnRpZmllck5vZGUiLCAic2NoZW1hIiwgIkRyb3BJbmRleE5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAibmFtZSIsICJwYXJhbXMiLCAiU2NoZW1hYmxlSWRlbnRpZmllck5vZGUiLCAiZHJvcEluZGV4IiwgInByb3BzIiwgIkRyb3BTY2hlbWFOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInNjaGVtYSIsICJwYXJhbXMiLCAiSWRlbnRpZmllck5vZGUiLCAiZHJvcFNjaGVtYSIsICJEcm9wVGFibGVOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInRhYmxlIiwgInBhcmFtcyIsICJkcm9wSW5kZXgiLCAiQWxpYXNOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImFsaWFzIiwgIlRhYmxlTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJ0YWJsZSIsICJTY2hlbWFibGVJZGVudGlmaWVyTm9kZSIsICJzY2hlbWEiLCAiaXNPcGVyYXRpb25Ob2RlU291cmNlIiwgIm9iaiIsICJpc09iamVjdCIsICJpc0Z1bmN0aW9uIiwgImlzRXhwcmVzc2lvbiIsICJvYmoiLCAiaXNPYmplY3QiLCAiaXNPcGVyYXRpb25Ob2RlU291cmNlIiwgImlzQWxpYXNlZEV4cHJlc3Npb24iLCAiaXNTdHJpbmciLCAiU2VsZWN0TW9kaWZpZXJOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIm1vZGlmaWVyIiwgIm9mIiwgIkFuZE5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAibGVmdCIsICJyaWdodCIsICJPck5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAibGVmdCIsICJyaWdodCIsICJPbk5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiZmlsdGVyIiwgIm9uTm9kZSIsICJvcGVyYXRvciIsICJvcGVyYXRpb24iLCAiQW5kTm9kZSIsICJPck5vZGUiLCAiSm9pbk5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiam9pblR5cGUiLCAidGFibGUiLCAib24iLCAiT25Ob2RlIiwgImpvaW5Ob2RlIiwgIm9wZXJhdGlvbiIsICJCaW5hcnlPcGVyYXRpb25Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImxlZnRPcGVyYW5kIiwgIm9wZXJhdG9yIiwgInJpZ2h0T3BlcmFuZCIsICJDT01QQVJJU09OX09QRVJBVE9SUyIsICJBUklUSE1FVElDX09QRVJBVE9SUyIsICJKU09OX09QRVJBVE9SUyIsICJCSU5BUllfT1BFUkFUT1JTIiwgIlVOQVJZX0ZJTFRFUl9PUEVSQVRPUlMiLCAiVU5BUllfT1BFUkFUT1JTIiwgIk9QRVJBVE9SUyIsICJPcGVyYXRvck5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAib3BlcmF0b3IiLCAiaXNKU09OT3BlcmF0b3IiLCAib3AiLCAiaXNTdHJpbmciLCAiSlNPTl9PUEVSQVRPUlMiLCAiQ29sdW1uTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJjb2x1bW4iLCAiSWRlbnRpZmllck5vZGUiLCAiU2VsZWN0QWxsTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJSZWZlcmVuY2VOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImNvbHVtbiIsICJ0YWJsZSIsICJTZWxlY3RBbGxOb2RlIiwgIkR5bmFtaWNSZWZlcmVuY2VCdWlsZGVyIiwgIiNkeW5hbWljUmVmZXJlbmNlIiwgInJlZmVyZW5jZSIsICJwYXJzZVNpbXBsZVJlZmVyZW5jZUV4cHJlc3Npb24iLCAiaXNEeW5hbWljUmVmZXJlbmNlQnVpbGRlciIsICJvYmoiLCAiaXNPYmplY3QiLCAiaXNPcGVyYXRpb25Ob2RlU291cmNlIiwgImlzU3RyaW5nIiwgIk9yZGVyQnlJdGVtTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJvcmRlckJ5IiwgImRpcmVjdGlvbiIsICJwcm9wcyIsICJSYXdOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInNxbEZyYWdtZW50cyIsICJwYXJhbWV0ZXJzIiwgInNxbCIsICJjaGlsZCIsICJjaGlsZHJlbiIsICJDb2xsYXRlTm9kZSIsICJub2RlIiwgImNvbGxhdGlvbiIsICJmcmVlemUiLCAiSWRlbnRpZmllck5vZGUiLCAiT3JkZXJCeUl0ZW1CdWlsZGVyIiwgIl9PcmRlckJ5SXRlbUJ1aWxkZXIiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJPcmRlckJ5SXRlbU5vZGUiLCAiUmF3Tm9kZSIsICJjb2xsYXRpb24iLCAiQ29sbGF0ZU5vZGUiLCAiTE9HR0VEX01FU1NBR0VTIiwgImxvZ09uY2UiLCAibWVzc2FnZSIsICJpc09yZGVyQnlEaXJlY3Rpb24iLCAidGhpbmciLCAicGFyc2VPcmRlckJ5IiwgImFyZ3MiLCAicGFyc2VPcmRlckJ5SXRlbSIsICJvcmRlckJ5IiwgImxvZ09uY2UiLCAiaXRlbSIsICJleHByIiwgIm1vZGlmaWVycyIsICJwYXJzZWRSZWYiLCAicGFyc2VPcmRlckJ5RXhwcmVzc2lvbiIsICJPcmRlckJ5SXRlbU5vZGUiLCAicGFyc2VPcmRlckJ5V2l0aE1vZGlmaWVycyIsICJpc0V4cHJlc3Npb25PckZhY3RvcnkiLCAicGFyc2VFeHByZXNzaW9uIiwgImlzRHluYW1pY1JlZmVyZW5jZUJ1aWxkZXIiLCAicmVmIiwgImRpcmVjdGlvbiIsICJwYXJzZVN0cmluZ1JlZmVyZW5jZSIsICJSYXdOb2RlIiwgImlzRXhwcmVzc2lvbiIsICJub2RlIiwgIk9yZGVyQnlJdGVtQnVpbGRlciIsICJKU09OUmVmZXJlbmNlTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJyZWZlcmVuY2UiLCAidHJhdmVyc2FsIiwgIkpTT05PcGVyYXRvckNoYWluTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJvcGVyYXRvciIsICJ2YWx1ZSIsICJKU09OUGF0aE5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiaW5PcGVyYXRvciIsICJqc29uUGF0aE5vZGUiLCAicGF0aExlZyIsICJwYXJzZVNpbXBsZVJlZmVyZW5jZUV4cHJlc3Npb24iLCAiZXhwIiwgImlzU3RyaW5nIiwgInBhcnNlU3RyaW5nUmVmZXJlbmNlIiwgInBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbk9yTGlzdCIsICJhcmciLCAiaXNSZWFkb25seUFycmF5IiwgIml0IiwgInBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbiIsICJpc0V4cHJlc3Npb25PckZhY3RvcnkiLCAicGFyc2VFeHByZXNzaW9uIiwgInBhcnNlSlNPTlJlZmVyZW5jZSIsICJyZWYiLCAib3AiLCAicmVmZXJlbmNlTm9kZSIsICJpc0pTT05PcGVyYXRvciIsICJKU09OUmVmZXJlbmNlTm9kZSIsICJKU09OT3BlcmF0b3JDaGFpbk5vZGUiLCAiT3BlcmF0b3JOb2RlIiwgIm9wV2l0aG91dExhc3RDaGFyIiwgIkpTT05QYXRoTm9kZSIsICJDT0xVTU5fU0VQQVJBVE9SIiwgIlJlZmVyZW5jZU5vZGUiLCAiQ29sdW1uTm9kZSIsICJwYXJ0cyIsICJ0cmltIiwgInBhcnNlU3RyaW5nUmVmZXJlbmNlV2l0aFRhYmxlQW5kU2NoZW1hIiwgInBhcnNlU3RyaW5nUmVmZXJlbmNlV2l0aFRhYmxlIiwgInBhcnNlQWxpYXNlZFN0cmluZ1JlZmVyZW5jZSIsICJBTElBU19TRVBBUkFUT1IiLCAiY29sdW1uUmVmIiwgImFsaWFzIiwgIkFsaWFzTm9kZSIsICJJZGVudGlmaWVyTm9kZSIsICJwYXJzZUNvbHVtbk5hbWUiLCAiY29sdW1uIiwgInBhcnNlT3JkZXJlZENvbHVtbk5hbWUiLCAiT1JERVJfU0VQQVJBVE9SIiwgImNvbHVtbk5hbWUiLCAib3JkZXIiLCAiaXNPcmRlckJ5RGlyZWN0aW9uIiwgInBhcnNlT3JkZXJCeSIsICJzY2hlbWEiLCAidGFibGUiLCAiVGFibGVOb2RlIiwgInN0ciIsICJQcmltaXRpdmVWYWx1ZUxpc3ROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInZhbHVlcyIsICJWYWx1ZUxpc3ROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInZhbHVlcyIsICJWYWx1ZU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAidmFsdWUiLCAicGFyc2VWYWx1ZUV4cHJlc3Npb25Pckxpc3QiLCAiYXJnIiwgImlzUmVhZG9ubHlBcnJheSIsICJwYXJzZVZhbHVlRXhwcmVzc2lvbkxpc3QiLCAicGFyc2VWYWx1ZUV4cHJlc3Npb24iLCAiZXhwIiwgImlzRXhwcmVzc2lvbk9yRmFjdG9yeSIsICJwYXJzZUV4cHJlc3Npb24iLCAiVmFsdWVOb2RlIiwgImlzU2FmZUltbWVkaWF0ZVZhbHVlIiwgInZhbHVlIiwgImlzTnVtYmVyIiwgImlzQm9vbGVhbiIsICJpc051bGwiLCAicGFyc2VTYWZlSW1tZWRpYXRlVmFsdWUiLCAiVmFsdWVMaXN0Tm9kZSIsICJpdCIsICJQcmltaXRpdmVWYWx1ZUxpc3ROb2RlIiwgIlBhcmVuc05vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAicGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbiIsICJhcmdzIiwgInBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb24iLCAicGFyc2VWYWx1ZUV4cHJlc3Npb24iLCAibGVmdCIsICJvcGVyYXRvciIsICJyaWdodCIsICJpc0lzT3BlcmF0b3IiLCAibmVlZHNJc09wZXJhdG9yIiwgIkJpbmFyeU9wZXJhdGlvbk5vZGUiLCAicGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uIiwgInBhcnNlT3BlcmF0b3IiLCAiVmFsdWVOb2RlIiwgInBhcnNlVmFsdWVFeHByZXNzaW9uT3JMaXN0IiwgInBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24iLCAicGFyc2VGaWx0ZXJPYmplY3QiLCAib2JqIiwgImNvbWJpbmF0b3IiLCAicGFyc2VGaWx0ZXJMaXN0IiwgInYiLCAiaXNVbmRlZmluZWQiLCAiayIsICJsaXN0IiwgIndpdGhQYXJlbnMiLCAiY29tYmluZSIsICJBbmROb2RlIiwgIk9yTm9kZSIsICJPcGVyYXRvck5vZGUiLCAibm9kZSIsICJ0b09wZXJhdGlvbk5vZGUiLCAiaSIsICJQYXJlbnNOb2RlIiwgInZhbHVlIiwgImlzTnVsbCIsICJpc0Jvb2xlYW4iLCAiaXNTdHJpbmciLCAiT1BFUkFUT1JTIiwgImlzT3BlcmF0aW9uTm9kZVNvdXJjZSIsICJub2RlT3JTb3VyY2UiLCAiT3JkZXJCeU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiaXRlbXMiLCAib3JkZXJCeSIsICJQYXJ0aXRpb25CeU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiaXRlbXMiLCAicGFydGl0aW9uQnkiLCAiT3Zlck5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAib3Zlck5vZGUiLCAiaXRlbXMiLCAiT3JkZXJCeU5vZGUiLCAiUGFydGl0aW9uQnlOb2RlIiwgIkZyb21Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImZyb21zIiwgImZyb20iLCAiR3JvdXBCeU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiaXRlbXMiLCAiZ3JvdXBCeSIsICJIYXZpbmdOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImZpbHRlciIsICJoYXZpbmdOb2RlIiwgIm9wZXJhdG9yIiwgIm9wZXJhdGlvbiIsICJBbmROb2RlIiwgIk9yTm9kZSIsICJJbnNlcnRRdWVyeU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiaW50byIsICJ3aXRoTm9kZSIsICJyZXBsYWNlIiwgImluc2VydFF1ZXJ5IiwgInByb3BzIiwgIkxpc3ROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIml0ZW1zIiwgIlVwZGF0ZVF1ZXJ5Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJ0YWJsZXMiLCAid2l0aE5vZGUiLCAiTGlzdE5vZGUiLCAidXBkYXRlUXVlcnkiLCAiZnJvbUl0ZW1zIiwgIkZyb21Ob2RlIiwgInVwZGF0ZXMiLCAibGltaXQiLCAiVXNpbmdOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInRhYmxlcyIsICJ1c2luZyIsICJEZWxldGVRdWVyeU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiZnJvbUl0ZW1zIiwgIndpdGhOb2RlIiwgIkZyb21Ob2RlIiwgIml0ZW1zIiwgIlF1ZXJ5Tm9kZSIsICJkZWxldGVOb2RlIiwgImxpbWl0IiwgInRhYmxlcyIsICJVc2luZ05vZGUiLCAiV2hlcmVOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImZpbHRlciIsICJ3aGVyZU5vZGUiLCAib3BlcmF0b3IiLCAib3BlcmF0aW9uIiwgIkFuZE5vZGUiLCAiT3JOb2RlIiwgIlJldHVybmluZ05vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAic2VsZWN0aW9ucyIsICJyZXR1cm5pbmciLCAiRXhwbGFpbk5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiZm9ybWF0IiwgIm9wdGlvbnMiLCAiV2hlbk5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiY29uZGl0aW9uIiwgIndoZW5Ob2RlIiwgInJlc3VsdCIsICJNZXJnZVF1ZXJ5Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJpbnRvIiwgIndpdGhOb2RlIiwgIm1lcmdlTm9kZSIsICJ1c2luZyIsICJ3aGVuIiwgInRoZW4iLCAiV2hlbk5vZGUiLCAiT3V0cHV0Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJzZWxlY3Rpb25zIiwgIm91dHB1dCIsICJRdWVyeU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiU2VsZWN0UXVlcnlOb2RlIiwgIkluc2VydFF1ZXJ5Tm9kZSIsICJVcGRhdGVRdWVyeU5vZGUiLCAiRGVsZXRlUXVlcnlOb2RlIiwgIk1lcmdlUXVlcnlOb2RlIiwgIm1vZGlmaWVyIiwgIm9wZXJhdGlvbiIsICJXaGVyZU5vZGUiLCAiam9pbiIsICJzZWxlY3Rpb25zIiwgIlJldHVybmluZ05vZGUiLCAiZm9ybWF0IiwgIm9wdGlvbnMiLCAiRXhwbGFpbk5vZGUiLCAidG9wIiwgIk91dHB1dE5vZGUiLCAiaXRlbXMiLCAiT3JkZXJCeU5vZGUiLCAiU2VsZWN0UXVlcnlOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIndpdGhOb2RlIiwgImZyb21JdGVtcyIsICJGcm9tTm9kZSIsICJzZWxlY3QiLCAic2VsZWN0aW9ucyIsICJleHByZXNzaW9ucyIsICJtb2RpZmllciIsICJpdGVtcyIsICJRdWVyeU5vZGUiLCAic2VsZWN0Tm9kZSIsICJHcm91cEJ5Tm9kZSIsICJsaW1pdCIsICJvZmZzZXQiLCAiZmV0Y2giLCAib3BlcmF0aW9uIiwgIkhhdmluZ05vZGUiLCAic2V0T3BlcmF0aW9ucyIsICJKb2luQnVpbGRlciIsICJfSm9pbkJ1aWxkZXIiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJhcmdzIiwgIkpvaW5Ob2RlIiwgInBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24iLCAibGhzIiwgIm9wIiwgInJocyIsICJwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uIiwgIlJhd05vZGUiLCAiZnVuYyIsICJQYXJ0aXRpb25CeUl0ZW1Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInBhcnRpdGlvbkJ5IiwgInBhcnNlUGFydGl0aW9uQnkiLCAicGFydGl0aW9uQnkiLCAicGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uT3JMaXN0IiwgIlBhcnRpdGlvbkJ5SXRlbU5vZGUiLCAiT3ZlckJ1aWxkZXIiLCAiX092ZXJCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiYXJncyIsICJPdmVyTm9kZSIsICJwYXJzZU9yZGVyQnkiLCAiUXVlcnlOb2RlIiwgInBhcnRpdGlvbkJ5IiwgInBhcnNlUGFydGl0aW9uQnkiLCAiZnVuYyIsICJTZWxlY3Rpb25Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInNlbGVjdGlvbiIsICJTZWxlY3RBbGxOb2RlIiwgInRhYmxlIiwgIlJlZmVyZW5jZU5vZGUiLCAicGFyc2VTZWxlY3RBcmciLCAic2VsZWN0aW9uIiwgImlzRnVuY3Rpb24iLCAiZXhwcmVzc2lvbkJ1aWxkZXIiLCAiaXNSZWFkb25seUFycmF5IiwgIml0IiwgInBhcnNlU2VsZWN0RXhwcmVzc2lvbiIsICJpc1N0cmluZyIsICJTZWxlY3Rpb25Ob2RlIiwgInBhcnNlQWxpYXNlZFN0cmluZ1JlZmVyZW5jZSIsICJpc0R5bmFtaWNSZWZlcmVuY2VCdWlsZGVyIiwgInBhcnNlQWxpYXNlZEV4cHJlc3Npb24iLCAicGFyc2VTZWxlY3RBbGwiLCAidGFibGUiLCAicGFyc2VTZWxlY3RBbGxBcmciLCAicGFyc2VUYWJsZSIsICJWYWx1ZXNOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInZhbHVlcyIsICJEZWZhdWx0SW5zZXJ0VmFsdWVOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInBhcnNlSW5zZXJ0RXhwcmVzc2lvbiIsICJhcmciLCAib2JqZWN0T3JMaXN0IiwgImlzRnVuY3Rpb24iLCAiZXhwcmVzc2lvbkJ1aWxkZXIiLCAibGlzdCIsICJpc1JlYWRvbmx5QXJyYXkiLCAiZnJlZXplIiwgInBhcnNlSW5zZXJ0Q29sdW1uc0FuZFZhbHVlcyIsICJyb3dzIiwgImNvbHVtbnMiLCAicGFyc2VDb2x1bW5OYW1lc0FuZEluZGV4ZXMiLCAiQ29sdW1uTm9kZSIsICJWYWx1ZXNOb2RlIiwgInJvdyIsICJwYXJzZVJvd1ZhbHVlcyIsICJjb2xzIiwgImNvbCIsICJyb3dDb2x1bW5zIiwgInJvd1ZhbHVlcyIsICJoYXNVbmRlZmluZWRPckNvbXBsZXhDb2x1bW5zIiwgImluZGV4ZWRSb3dDb2x1bW5zIiwgImNvbHVtbklkeCIsICJpc1VuZGVmaW5lZCIsICJ2YWx1ZSIsICJpc0V4cHJlc3Npb25PckZhY3RvcnkiLCAiZGVmYXVsdFZhbHVlIiwgIkRlZmF1bHRJbnNlcnRWYWx1ZU5vZGUiLCAiVmFsdWVMaXN0Tm9kZSIsICJpdCIsICJwYXJzZVZhbHVlRXhwcmVzc2lvbiIsICJQcmltaXRpdmVWYWx1ZUxpc3ROb2RlIiwgIkNvbHVtblVwZGF0ZU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiY29sdW1uIiwgInZhbHVlIiwgInBhcnNlVXBkYXRlIiwgImFyZ3MiLCAiQ29sdW1uVXBkYXRlTm9kZSIsICJwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb24iLCAicGFyc2VWYWx1ZUV4cHJlc3Npb24iLCAicGFyc2VVcGRhdGVPYmplY3RFeHByZXNzaW9uIiwgInVwZGF0ZSIsICJ1cGRhdGVPYmoiLCAiaXNGdW5jdGlvbiIsICJleHByZXNzaW9uQnVpbGRlciIsICJfIiwgInZhbHVlIiwgImtleSIsICJDb2x1bW5Ob2RlIiwgIk9uRHVwbGljYXRlS2V5Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJ1cGRhdGVzIiwgIkluc2VydFJlc3VsdCIsICJpbnNlcnRJZCIsICJudW1JbnNlcnRlZE9yVXBkYXRlZFJvd3MiLCAiTm9SZXN1bHRFcnJvciIsICJub2RlIiwgImlzTm9SZXN1bHRFcnJvckNvbnN0cnVjdG9yIiwgImZuIiwgIk9uQ29uZmxpY3ROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInByb3BzIiwgIm9wZXJhdGlvbiIsICJXaGVyZU5vZGUiLCAiT25Db25mbGljdEJ1aWxkZXIiLCAiX09uQ29uZmxpY3RCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiY29sdW1uIiwgImNvbHVtbk5vZGUiLCAiQ29sdW1uTm9kZSIsICJPbkNvbmZsaWN0Tm9kZSIsICJjb2x1bW5zIiwgImNvbHVtbk5vZGVzIiwgImNvbnN0cmFpbnROYW1lIiwgIklkZW50aWZpZXJOb2RlIiwgImV4cHJlc3Npb24iLCAiYXJncyIsICJwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uIiwgImxocyIsICJvcCIsICJyaHMiLCAicGFyc2VSZWZlcmVudGlhbEJpbmFyeU9wZXJhdGlvbiIsICJPbkNvbmZsaWN0RG9Ob3RoaW5nQnVpbGRlciIsICJ1cGRhdGUiLCAiT25Db25mbGljdFVwZGF0ZUJ1aWxkZXIiLCAicGFyc2VVcGRhdGVPYmplY3RFeHByZXNzaW9uIiwgImZ1bmMiLCAiX09uQ29uZmxpY3RVcGRhdGVCdWlsZGVyIiwgIlRvcE5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiZXhwcmVzc2lvbiIsICJtb2RpZmllcnMiLCAicGFyc2VUb3AiLCAiZXhwcmVzc2lvbiIsICJtb2RpZmllcnMiLCAiaXNOdW1iZXIiLCAiaXNCaWdJbnQiLCAiaXNVbmRlZmluZWQiLCAiaXNUb3BNb2RpZmllcnMiLCAiVG9wTm9kZSIsICJPckFjdGlvbk5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiYWN0aW9uIiwgIkluc2VydFF1ZXJ5QnVpbGRlciIsICJfSW5zZXJ0UXVlcnlCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiaW5zZXJ0IiwgImNvbHVtbnMiLCAidmFsdWVzIiwgInBhcnNlSW5zZXJ0RXhwcmVzc2lvbiIsICJJbnNlcnRRdWVyeU5vZGUiLCAiQ29sdW1uTm9kZSIsICJleHByZXNzaW9uIiwgInBhcnNlRXhwcmVzc2lvbiIsICJtb2RpZmllciIsICJRdWVyeU5vZGUiLCAiT3JBY3Rpb25Ob2RlIiwgIm1vZGlmaWVycyIsICJwYXJzZVRvcCIsICJjYWxsYmFjayIsICJPbkNvbmZsaWN0QnVpbGRlciIsICJPbkNvbmZsaWN0Tm9kZSIsICJ1cGRhdGUiLCAiT25EdXBsaWNhdGVLZXlOb2RlIiwgInBhcnNlVXBkYXRlT2JqZWN0RXhwcmVzc2lvbiIsICJzZWxlY3Rpb24iLCAicGFyc2VTZWxlY3RBcmciLCAicGFyc2VTZWxlY3RBbGwiLCAiYXJncyIsICJ0YWJsZSIsICJmdW5jIiwgImNvbmRpdGlvbiIsICJwbHVnaW4iLCAiY29tcGlsZWRRdWVyeSIsICJyZXN1bHQiLCAiYWRhcHRlciIsICJxdWVyeSIsICJJbnNlcnRSZXN1bHQiLCAiZXJyb3JDb25zdHJ1Y3RvciIsICJOb1Jlc3VsdEVycm9yIiwgImlzTm9SZXN1bHRFcnJvckNvbnN0cnVjdG9yIiwgImNodW5rU2l6ZSIsICJzdHJlYW0iLCAiaXRlbSIsICJmb3JtYXQiLCAib3B0aW9ucyIsICJEZWxldGVSZXN1bHQiLCAibnVtRGVsZXRlZFJvd3MiLCAiTGltaXROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImxpbWl0IiwgIkRlbGV0ZVF1ZXJ5QnVpbGRlciIsICJfRGVsZXRlUXVlcnlCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiYXJncyIsICJRdWVyeU5vZGUiLCAicGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbiIsICJsaHMiLCAib3AiLCAicmhzIiwgInBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24iLCAiZXhwcmVzc2lvbiIsICJtb2RpZmllcnMiLCAicGFyc2VUb3AiLCAidGFibGVzIiwgIkRlbGV0ZVF1ZXJ5Tm9kZSIsICJwYXJzZVRhYmxlRXhwcmVzc2lvbk9yTGlzdCIsICIjam9pbiIsICJqb2luVHlwZSIsICJwYXJzZUpvaW4iLCAic2VsZWN0aW9uIiwgInBhcnNlU2VsZWN0QXJnIiwgInRhYmxlIiwgInBhcnNlU2VsZWN0QWxsIiwgInBhcnNlT3JkZXJCeSIsICJsaW1pdCIsICJMaW1pdE5vZGUiLCAicGFyc2VWYWx1ZUV4cHJlc3Npb24iLCAibW9kaWZpZXIiLCAiZnVuYyIsICJjb25kaXRpb24iLCAicGx1Z2luIiwgImNvbXBpbGVkUXVlcnkiLCAicmVzdWx0IiwgImFkYXB0ZXIiLCAicXVlcnkiLCAiRGVsZXRlUmVzdWx0IiwgImVycm9yQ29uc3RydWN0b3IiLCAiTm9SZXN1bHRFcnJvciIsICJpc05vUmVzdWx0RXJyb3JDb25zdHJ1Y3RvciIsICJjaHVua1NpemUiLCAic3RyZWFtIiwgIml0ZW0iLCAiZm9ybWF0IiwgIm9wdGlvbnMiLCAiVXBkYXRlUmVzdWx0IiwgIm51bVVwZGF0ZWRSb3dzIiwgIm51bUNoYW5nZWRSb3dzIiwgIlVwZGF0ZVF1ZXJ5QnVpbGRlciIsICJfVXBkYXRlUXVlcnlCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiYXJncyIsICJRdWVyeU5vZGUiLCAicGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbiIsICJsaHMiLCAib3AiLCAicmhzIiwgInBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24iLCAiZXhwcmVzc2lvbiIsICJtb2RpZmllcnMiLCAicGFyc2VUb3AiLCAiZnJvbSIsICJVcGRhdGVRdWVyeU5vZGUiLCAicGFyc2VUYWJsZUV4cHJlc3Npb25Pckxpc3QiLCAiI2pvaW4iLCAiam9pblR5cGUiLCAicGFyc2VKb2luIiwgInBhcnNlT3JkZXJCeSIsICJsaW1pdCIsICJMaW1pdE5vZGUiLCAicGFyc2VWYWx1ZUV4cHJlc3Npb24iLCAicGFyc2VVcGRhdGUiLCAic2VsZWN0aW9uIiwgInBhcnNlU2VsZWN0QXJnIiwgInRhYmxlIiwgInBhcnNlU2VsZWN0QWxsIiwgIm1vZGlmaWVyIiwgImZ1bmMiLCAiY29uZGl0aW9uIiwgInBsdWdpbiIsICJjb21waWxlZFF1ZXJ5IiwgInJlc3VsdCIsICJhZGFwdGVyIiwgInF1ZXJ5IiwgIlVwZGF0ZVJlc3VsdCIsICJlcnJvckNvbnN0cnVjdG9yIiwgIk5vUmVzdWx0RXJyb3IiLCAiaXNOb1Jlc3VsdEVycm9yQ29uc3RydWN0b3IiLCAiY2h1bmtTaXplIiwgInN0cmVhbSIsICJpdGVtIiwgImZvcm1hdCIsICJvcHRpb25zIiwgIkNvbW1vblRhYmxlRXhwcmVzc2lvbk5hbWVOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInRhYmxlTmFtZSIsICJjb2x1bW5OYW1lcyIsICJUYWJsZU5vZGUiLCAiQ29sdW1uTm9kZSIsICJDb21tb25UYWJsZUV4cHJlc3Npb25Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIm5hbWUiLCAiZXhwcmVzc2lvbiIsICJwcm9wcyIsICJDVEVCdWlsZGVyIiwgIl9DVEVCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiQ29tbW9uVGFibGVFeHByZXNzaW9uTm9kZSIsICJwYXJzZUNvbW1vblRhYmxlRXhwcmVzc2lvbiIsICJuYW1lT3JCdWlsZGVyQ2FsbGJhY2siLCAiZXhwcmVzc2lvbiIsICJleHByZXNzaW9uTm9kZSIsICJjcmVhdGVRdWVyeUNyZWF0b3IiLCAiaXNGdW5jdGlvbiIsICJjdGVCdWlsZGVyRmFjdG9yeSIsICJDb21tb25UYWJsZUV4cHJlc3Npb25Ob2RlIiwgInBhcnNlQ29tbW9uVGFibGVFeHByZXNzaW9uTmFtZSIsICJuYW1lIiwgIkNURUJ1aWxkZXIiLCAicGFydHMiLCAidGFibGUiLCAiY29sdW1ucyIsICJpdCIsICJDb21tb25UYWJsZUV4cHJlc3Npb25OYW1lTm9kZSIsICJXaXRoTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJleHByZXNzaW9uIiwgInBhcmFtcyIsICJ3aXRoTm9kZSIsICJDSEFSUyIsICJyYW5kb21TdHJpbmciLCAibGVuZ3RoIiwgImNoYXJzIiwgImkiLCAicmFuZG9tQ2hhciIsICJjcmVhdGVRdWVyeUlkIiwgIkxhenlRdWVyeUlkIiwgIiNxdWVyeUlkIiwgInJhbmRvbVN0cmluZyIsICJPcGVyYXRpb25Ob2RlVHJhbnNmb3JtZXIiLCAiI3RyYW5zZm9ybWVycyIsICJmcmVlemUiLCAibm9kZSIsICJxdWVyeUlkIiwgIm91dCIsICJsaXN0IiwgIl9xdWVyeUlkIiwgIlJPT1RfT1BFUkFUSU9OX05PREVTIiwgImZyZWV6ZSIsICJTQ0hFTUFMRVNTX0ZVTkNUSU9OUyIsICJXaXRoU2NoZW1hVHJhbnNmb3JtZXIiLCAiT3BlcmF0aW9uTm9kZVRyYW5zZm9ybWVyIiwgIiNzY2hlbWEiLCAiI3NjaGVtYWJsZUlkcyIsICIjY3RlcyIsICJzY2hlbWEiLCAibm9kZSIsICJxdWVyeUlkIiwgIiNpc1Jvb3RPcGVyYXRpb25Ob2RlIiwgImN0ZXMiLCAiI2NvbGxlY3RDVEVzIiwgImN0ZSIsICJ0YWJsZXMiLCAiI2NvbGxlY3RTY2hlbWFibGVJZHMiLCAidGFibGUiLCAidHJhbnNmb3JtZWQiLCAiSWRlbnRpZmllck5vZGUiLCAiVGFibGVOb2RlIiwgIiN0cmFuc2Zvcm1UYWJsZUFyZ3NXaXRob3V0U2NoZW1hcyIsICJhcmdzS2V5IiwgImFyZyIsICJzY2hlbWFibGVJZHMiLCAiU2NoZW1hYmxlSWRlbnRpZmllck5vZGUiLCAiI2NvbGxlY3RTY2hlbWFibGVJZCIsICJmcm9tIiwgIiNjb2xsZWN0U2NoZW1hYmxlSWRzRnJvbVRhYmxlRXhwciIsICJqb2luIiwgIiNjb2xsZWN0Q1RFSWRzIiwgIkFsaWFzTm9kZSIsICJMaXN0Tm9kZSIsICJpZCIsICJleHByIiwgImN0ZUlkIiwgIldpdGhTY2hlbWFQbHVnaW4iLCAiI3RyYW5zZm9ybWVyIiwgInNjaGVtYSIsICJXaXRoU2NoZW1hVHJhbnNmb3JtZXIiLCAiYXJncyIsICJNYXRjaGVkTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJub3QiLCAiYnlTb3VyY2UiLCAicGFyc2VNZXJnZVdoZW4iLCAidHlwZSIsICJhcmdzIiwgInJlZlJpZ2h0IiwgIldoZW5Ob2RlIiwgInBhcnNlRmlsdGVyTGlzdCIsICJNYXRjaGVkTm9kZSIsICJwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uIiwgInBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24iLCAicGFyc2VNZXJnZVRoZW4iLCAicmVzdWx0IiwgImlzU3RyaW5nIiwgIlJhd05vZGUiLCAiaXNPcGVyYXRpb25Ob2RlU291cmNlIiwgIkRlZmVycmVkIiwgIiNwcm9taXNlIiwgIiNyZXNvbHZlIiwgIiNyZWplY3QiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAidmFsdWUiLCAicmVhc29uIiwgInByb3ZpZGVDb250cm9sbGVkQ29ubmVjdGlvbiIsICJjb25uZWN0aW9uUHJvdmlkZXIiLCAiY29ubmVjdGlvbkRlZmVyIiwgIkRlZmVycmVkIiwgImNvbm5lY3Rpb25SZWxlYXNlRGVmZXIiLCAiY29ubmVjdGlvbiIsICJleCIsICJmcmVlemUiLCAiTk9fUExVR0lOUyIsICJmcmVlemUiLCAiUXVlcnlFeGVjdXRvckJhc2UiLCAiI3BsdWdpbnMiLCAicGx1Z2lucyIsICJub2RlIiwgInF1ZXJ5SWQiLCAicGx1Z2luIiwgInRyYW5zZm9ybWVkTm9kZSIsICJjb21waWxlZFF1ZXJ5IiwgImNvbm5lY3Rpb24iLCAicmVzdWx0IiwgImxvZ09uY2UiLCAiI3RyYW5zZm9ybVJlc3VsdCIsICJjaHVua1NpemUiLCAicmVsZWFzZSIsICJwcm92aWRlQ29udHJvbGxlZENvbm5lY3Rpb24iLCAiTm9vcFF1ZXJ5RXhlY3V0b3IiLCAiX05vb3BRdWVyeUV4ZWN1dG9yIiwgIlF1ZXJ5RXhlY3V0b3JCYXNlIiwgInBsdWdpbiIsICJwbHVnaW5zIiwgIk5PT1BfUVVFUllfRVhFQ1VUT1IiLCAiTWVyZ2VSZXN1bHQiLCAibnVtQ2hhbmdlZFJvd3MiLCAiTWVyZ2VRdWVyeUJ1aWxkZXIiLCAiX01lcmdlUXVlcnlCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAibW9kaWZpZXIiLCAiUXVlcnlOb2RlIiwgImV4cHJlc3Npb24iLCAibW9kaWZpZXJzIiwgInBhcnNlVG9wIiwgImFyZ3MiLCAiV2hlbmVhYmxlTWVyZ2VRdWVyeUJ1aWxkZXIiLCAiTWVyZ2VRdWVyeU5vZGUiLCAicGFyc2VKb2luIiwgInBhcnNlU2VsZWN0QXJnIiwgInRhYmxlIiwgInBhcnNlU2VsZWN0QWxsIiwgIl9XaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlciIsICIjd2hlbk1hdGNoZWQiLCAibGhzIiwgIm9wIiwgInJocyIsICJyZWZSaWdodCIsICJNYXRjaGVkVGhlbmFibGVNZXJnZVF1ZXJ5QnVpbGRlciIsICJwYXJzZU1lcmdlV2hlbiIsICIjd2hlbk5vdE1hdGNoZWQiLCAiYnlTb3VyY2UiLCAiQnVpbGRlciIsICJOb3RNYXRjaGVkVGhlbmFibGVNZXJnZVF1ZXJ5QnVpbGRlciIsICJmdW5jIiwgImNvbmRpdGlvbiIsICJjb21waWxlZFF1ZXJ5IiwgInJlc3VsdCIsICJhZGFwdGVyIiwgInF1ZXJ5IiwgIk1lcmdlUmVzdWx0IiwgImVycm9yQ29uc3RydWN0b3IiLCAiTm9SZXN1bHRFcnJvciIsICJpc05vUmVzdWx0RXJyb3JDb25zdHJ1Y3RvciIsICJwYXJzZU1lcmdlVGhlbiIsICJzZXQiLCAiVXBkYXRlUXVlcnlCdWlsZGVyIiwgIk5PT1BfUVVFUllfRVhFQ1VUT1IiLCAiVXBkYXRlUXVlcnlOb2RlIiwgInViIiwgImluc2VydCIsICJjb2x1bW5zIiwgInZhbHVlcyIsICJwYXJzZUluc2VydEV4cHJlc3Npb24iLCAiSW5zZXJ0UXVlcnlOb2RlIiwgIlF1ZXJ5Q3JlYXRvciIsICJfUXVlcnlDcmVhdG9yIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiZnJvbSIsICJjcmVhdGVTZWxlY3RRdWVyeUJ1aWxkZXIiLCAiY3JlYXRlUXVlcnlJZCIsICJTZWxlY3RRdWVyeU5vZGUiLCAicGFyc2VUYWJsZUV4cHJlc3Npb25Pckxpc3QiLCAic2VsZWN0aW9uIiwgInBhcnNlU2VsZWN0QXJnIiwgInRhYmxlIiwgIkluc2VydFF1ZXJ5QnVpbGRlciIsICJJbnNlcnRRdWVyeU5vZGUiLCAicGFyc2VUYWJsZSIsICJEZWxldGVRdWVyeUJ1aWxkZXIiLCAiRGVsZXRlUXVlcnlOb2RlIiwgInRhYmxlcyIsICJVcGRhdGVRdWVyeUJ1aWxkZXIiLCAiVXBkYXRlUXVlcnlOb2RlIiwgInRhcmdldFRhYmxlIiwgIk1lcmdlUXVlcnlCdWlsZGVyIiwgIk1lcmdlUXVlcnlOb2RlIiwgInBhcnNlQWxpYXNlZFRhYmxlIiwgIm5hbWVPckJ1aWxkZXIiLCAiZXhwcmVzc2lvbiIsICJjdGUiLCAicGFyc2VDb21tb25UYWJsZUV4cHJlc3Npb24iLCAiV2l0aE5vZGUiLCAicGx1Z2luIiwgInNjaGVtYSIsICJXaXRoU2NoZW1hUGx1Z2luIiwgImNyZWF0ZVF1ZXJ5Q3JlYXRvciIsICJRdWVyeUNyZWF0b3IiLCAiTk9PUF9RVUVSWV9FWEVDVVRPUiIsICJjcmVhdGVKb2luQnVpbGRlciIsICJqb2luVHlwZSIsICJ0YWJsZSIsICJKb2luQnVpbGRlciIsICJKb2luTm9kZSIsICJwYXJzZVRhYmxlRXhwcmVzc2lvbiIsICJjcmVhdGVPdmVyQnVpbGRlciIsICJPdmVyQnVpbGRlciIsICJPdmVyTm9kZSIsICJwYXJzZUpvaW4iLCAiam9pblR5cGUiLCAiYXJncyIsICJwYXJzZVNpbmdsZU9uSm9pbiIsICJwYXJzZUNhbGxiYWNrSm9pbiIsICJwYXJzZU9ubGVzc0pvaW4iLCAiZnJvbSIsICJjYWxsYmFjayIsICJjcmVhdGVKb2luQnVpbGRlciIsICJsaHNDb2x1bW4iLCAicmhzQ29sdW1uIiwgIkpvaW5Ob2RlIiwgInBhcnNlVGFibGVFeHByZXNzaW9uIiwgInBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24iLCAiT2Zmc2V0Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJvZmZzZXQiLCAiR3JvdXBCeUl0ZW1Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImdyb3VwQnkiLCAicGFyc2VHcm91cEJ5IiwgImdyb3VwQnkiLCAiaXNGdW5jdGlvbiIsICJleHByZXNzaW9uQnVpbGRlciIsICJwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb25Pckxpc3QiLCAiR3JvdXBCeUl0ZW1Ob2RlIiwgIlNldE9wZXJhdGlvbk5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAib3BlcmF0b3IiLCAiZXhwcmVzc2lvbiIsICJhbGwiLCAicGFyc2VTZXRPcGVyYXRpb25zIiwgIm9wZXJhdG9yIiwgImV4cHJlc3Npb24iLCAiYWxsIiwgImlzRnVuY3Rpb24iLCAiY3JlYXRlRXhwcmVzc2lvbkJ1aWxkZXIiLCAiaXNSZWFkb25seUFycmF5IiwgImV4cHIiLCAiU2V0T3BlcmF0aW9uTm9kZSIsICJwYXJzZUV4cHJlc3Npb24iLCAiRXhwcmVzc2lvbldyYXBwZXIiLCAiX0V4cHJlc3Npb25XcmFwcGVyIiwgIiNub2RlIiwgIm5vZGUiLCAiYWxpYXMiLCAiQWxpYXNlZEV4cHJlc3Npb25XcmFwcGVyIiwgImFyZ3MiLCAiT3JXcmFwcGVyIiwgIk9yTm9kZSIsICJwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uIiwgIkFuZFdyYXBwZXIiLCAiQW5kTm9kZSIsICIjZXhwciIsICIjYWxpYXMiLCAiZXhwciIsICJBbGlhc05vZGUiLCAiaXNPcGVyYXRpb25Ob2RlU291cmNlIiwgIklkZW50aWZpZXJOb2RlIiwgIl9PcldyYXBwZXIiLCAiUGFyZW5zTm9kZSIsICJfQW5kV3JhcHBlciIsICJGZXRjaE5vZGUiLCAibm9kZSIsICJyb3dDb3VudCIsICJtb2RpZmllciIsICJWYWx1ZU5vZGUiLCAicGFyc2VGZXRjaCIsICJyb3dDb3VudCIsICJtb2RpZmllciIsICJpc051bWJlciIsICJpc0JpZ0ludCIsICJpc0ZldGNoTW9kaWZpZXIiLCAiRmV0Y2hOb2RlIiwgInZhbHVlIiwgIlNlbGVjdFF1ZXJ5QnVpbGRlckltcGwiLCAiX1NlbGVjdFF1ZXJ5QnVpbGRlckltcGwiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJhcmdzIiwgIlF1ZXJ5Tm9kZSIsICJwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uIiwgImxocyIsICJvcCIsICJyaHMiLCAicGFyc2VSZWZlcmVudGlhbEJpbmFyeU9wZXJhdGlvbiIsICJTZWxlY3RRdWVyeU5vZGUiLCAic2VsZWN0aW9uIiwgInBhcnNlU2VsZWN0QXJnIiwgInBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbk9yTGlzdCIsICJtb2RpZmllciIsICJTZWxlY3RNb2RpZmllck5vZGUiLCAib2YiLCAiYXNBcnJheSIsICJwYXJzZVRhYmxlIiwgInRhYmxlIiwgInBhcnNlU2VsZWN0QWxsIiwgIiNqb2luIiwgImpvaW5UeXBlIiwgInBhcnNlSm9pbiIsICJwYXJzZU9yZGVyQnkiLCAiZ3JvdXBCeSIsICJwYXJzZUdyb3VwQnkiLCAibGltaXQiLCAiTGltaXROb2RlIiwgInBhcnNlVmFsdWVFeHByZXNzaW9uIiwgIm9mZnNldCIsICJPZmZzZXROb2RlIiwgInJvd0NvdW50IiwgInBhcnNlRmV0Y2giLCAiZXhwcmVzc2lvbiIsICJtb2RpZmllcnMiLCAicGFyc2VUb3AiLCAicGFyc2VTZXRPcGVyYXRpb25zIiwgImFsaWFzIiwgIkFsaWFzZWRTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsIiwgImZ1bmMiLCAiY29uZGl0aW9uIiwgIkV4cHJlc3Npb25XcmFwcGVyIiwgInBsdWdpbiIsICJjb21waWxlZFF1ZXJ5IiwgInJlc3VsdCIsICJlcnJvckNvbnN0cnVjdG9yIiwgIk5vUmVzdWx0RXJyb3IiLCAiaXNOb1Jlc3VsdEVycm9yQ29uc3RydWN0b3IiLCAiY2h1bmtTaXplIiwgInN0cmVhbSIsICJpdGVtIiwgImZvcm1hdCIsICJvcHRpb25zIiwgImNyZWF0ZVNlbGVjdFF1ZXJ5QnVpbGRlciIsICIjcXVlcnlCdWlsZGVyIiwgIiNhbGlhcyIsICJxdWVyeUJ1aWxkZXIiLCAiQWxpYXNOb2RlIiwgIklkZW50aWZpZXJOb2RlIiwgIkFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJhZ2dyZWdhdGVGdW5jdGlvbiIsICJhZ2dyZWdhdGVkIiwgImFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSIsICJvcmRlckl0ZW1zIiwgIndpdGhpbkdyb3VwIiwgInByb3AiLCAiT3JkZXJCeU5vZGUiLCAiZmlsdGVyIiwgIldoZXJlTm9kZSIsICJvdmVyIiwgIkZ1bmN0aW9uTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJmdW5jIiwgImFyZ3MiLCAiQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyIiwgIl9BZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXIiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJhbGlhcyIsICJBbGlhc2VkQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyIiwgIkFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSIsICJhcmdzIiwgIlF1ZXJ5Tm9kZSIsICJwYXJzZU9yZGVyQnkiLCAicGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbiIsICJsaHMiLCAib3AiLCAicmhzIiwgInBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24iLCAib3ZlciIsICJidWlsZGVyIiwgImNyZWF0ZU92ZXJCdWlsZGVyIiwgImZ1bmMiLCAiI2FnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlciIsICIjYWxpYXMiLCAiYWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyIiwgIkFsaWFzTm9kZSIsICJJZGVudGlmaWVyTm9kZSIsICJjcmVhdGVGdW5jdGlvbk1vZHVsZSIsICJmbiIsICJuYW1lIiwgImFyZ3MiLCAiRXhwcmVzc2lvbldyYXBwZXIiLCAiRnVuY3Rpb25Ob2RlIiwgInBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbk9yTGlzdCIsICJhZ2ciLCAiQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyIiwgIkFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSIsICJjb2x1bW4iLCAidmFsdWVzIiwgInRhYmxlIiwgInBhcnNlU2VsZWN0QWxsIiwgImlzU3RyaW5nIiwgInBhcnNlVGFibGUiLCAiVW5hcnlPcGVyYXRpb25Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIm9wZXJhdG9yIiwgIm9wZXJhbmQiLCAicGFyc2VVbmFyeU9wZXJhdGlvbiIsICJvcGVyYXRvciIsICJvcGVyYW5kIiwgIlVuYXJ5T3BlcmF0aW9uTm9kZSIsICJPcGVyYXRvck5vZGUiLCAicGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uIiwgIkNhc2VOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInZhbHVlIiwgImNhc2VOb2RlIiwgIndoZW4iLCAidGhlbiIsICJXaGVuTm9kZSIsICJwcm9wcyIsICJDYXNlQnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgImFyZ3MiLCAiQ2FzZVRoZW5CdWlsZGVyIiwgIkNhc2VOb2RlIiwgIldoZW5Ob2RlIiwgInBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24iLCAidmFsdWVFeHByZXNzaW9uIiwgIkNhc2VXaGVuQnVpbGRlciIsICJpc1NhZmVJbW1lZGlhdGVWYWx1ZSIsICJwYXJzZVNhZmVJbW1lZGlhdGVWYWx1ZSIsICJwYXJzZVZhbHVlRXhwcmVzc2lvbiIsICJDYXNlRW5kQnVpbGRlciIsICJFeHByZXNzaW9uV3JhcHBlciIsICJKU09OUGF0aExlZ05vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAidHlwZSIsICJ2YWx1ZSIsICJKU09OUGF0aEJ1aWxkZXIiLCAiI25vZGUiLCAibm9kZSIsICJpbmRleCIsICIjY3JlYXRlQnVpbGRlcldpdGhQYXRoTGVnIiwgImtleSIsICJsZWdUeXBlIiwgInZhbHVlIiwgIkpTT05SZWZlcmVuY2VOb2RlIiwgIlRyYXZlcnNlZEpTT05QYXRoQnVpbGRlciIsICJKU09OUGF0aE5vZGUiLCAiSlNPTlBhdGhMZWdOb2RlIiwgIkpTT05PcGVyYXRvckNoYWluTm9kZSIsICJWYWx1ZU5vZGUiLCAiX1RyYXZlcnNlZEpTT05QYXRoQnVpbGRlciIsICJhbGlhcyIsICJBbGlhc2VkSlNPTlBhdGhCdWlsZGVyIiwgIiNqc29uUGF0aCIsICIjYWxpYXMiLCAianNvblBhdGgiLCAiQWxpYXNOb2RlIiwgImlzT3BlcmF0aW9uTm9kZVNvdXJjZSIsICJJZGVudGlmaWVyTm9kZSIsICJUdXBsZU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAidmFsdWVzIiwgIlNJTVBMRV9DT0xVTU5fREFUQV9UWVBFUyIsICJDT0xVTU5fREFUQV9UWVBFX1JFR0VYIiwgIkRhdGFUeXBlTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJkYXRhVHlwZSIsICJpc0NvbHVtbkRhdGFUeXBlIiwgInIiLCAicGFyc2VEYXRhVHlwZUV4cHJlc3Npb24iLCAiZGF0YVR5cGUiLCAiaXNPcGVyYXRpb25Ob2RlU291cmNlIiwgImlzQ29sdW1uRGF0YVR5cGUiLCAiRGF0YVR5cGVOb2RlIiwgIkNhc3ROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImV4cHJlc3Npb24iLCAiZGF0YVR5cGUiLCAiY3JlYXRlRXhwcmVzc2lvbkJ1aWxkZXIiLCAiZXhlY3V0b3IiLCAiTk9PUF9RVUVSWV9FWEVDVVRPUiIsICJiaW5hcnkiLCAibGhzIiwgIm9wIiwgInJocyIsICJFeHByZXNzaW9uV3JhcHBlciIsICJwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uIiwgInVuYXJ5IiwgImV4cHIiLCAicGFyc2VVbmFyeU9wZXJhdGlvbiIsICJlYiIsICJ0YWJsZSIsICJjcmVhdGVTZWxlY3RRdWVyeUJ1aWxkZXIiLCAiY3JlYXRlUXVlcnlJZCIsICJTZWxlY3RRdWVyeU5vZGUiLCAicGFyc2VUYWJsZUV4cHJlc3Npb25Pckxpc3QiLCAicmVmZXJlbmNlIiwgIkNhc2VCdWlsZGVyIiwgIkNhc2VOb2RlIiwgImlzVW5kZWZpbmVkIiwgInBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbiIsICJwYXJzZVN0cmluZ1JlZmVyZW5jZSIsICJKU09OUGF0aEJ1aWxkZXIiLCAicGFyc2VKU09OUmVmZXJlbmNlIiwgIkpTT05QYXRoTm9kZSIsICJwYXJzZVRhYmxlIiwgInZhbHVlIiwgInBhcnNlVmFsdWVFeHByZXNzaW9uIiwgInZhbHVlcyIsICJUdXBsZU5vZGUiLCAicGFyc2VTYWZlSW1tZWRpYXRlVmFsdWUiLCAic3RhcnQiLCAiZW5kIiwgIkJpbmFyeU9wZXJhdGlvbk5vZGUiLCAiT3BlcmF0b3JOb2RlIiwgIkFuZE5vZGUiLCAiZXhwcnMiLCAiaXNSZWFkb25seUFycmF5IiwgInBhcnNlRmlsdGVyTGlzdCIsICJwYXJzZUZpbHRlck9iamVjdCIsICJhcmdzIiwgIm5vZGUiLCAicGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbiIsICJQYXJlbnNOb2RlIiwgImRhdGFUeXBlIiwgIkNhc3ROb2RlIiwgInBhcnNlRGF0YVR5cGVFeHByZXNzaW9uIiwgInNjaGVtYSIsICJXaXRoU2NoZW1hUGx1Z2luIiwgImNyZWF0ZUZ1bmN0aW9uTW9kdWxlIiwgImV4cHJlc3Npb25CdWlsZGVyIiwgIl8iLCAicGFyc2VFeHByZXNzaW9uIiwgImV4cCIsICJpc09wZXJhdGlvbk5vZGVTb3VyY2UiLCAiaXNGdW5jdGlvbiIsICJleHByZXNzaW9uQnVpbGRlciIsICJwYXJzZUFsaWFzZWRFeHByZXNzaW9uIiwgImlzRXhwcmVzc2lvbk9yRmFjdG9yeSIsICJvYmoiLCAiaXNFeHByZXNzaW9uIiwgImlzQWxpYXNlZEV4cHJlc3Npb24iLCAiRHluYW1pY1RhYmxlQnVpbGRlciIsICIjdGFibGUiLCAidGFibGUiLCAiYWxpYXMiLCAiQWxpYXNlZER5bmFtaWNUYWJsZUJ1aWxkZXIiLCAiI2FsaWFzIiwgIkFsaWFzTm9kZSIsICJwYXJzZVRhYmxlIiwgIklkZW50aWZpZXJOb2RlIiwgImlzQWxpYXNlZER5bmFtaWNUYWJsZUJ1aWxkZXIiLCAib2JqIiwgImlzT2JqZWN0IiwgImlzT3BlcmF0aW9uTm9kZVNvdXJjZSIsICJpc1N0cmluZyIsICJwYXJzZVRhYmxlRXhwcmVzc2lvbk9yTGlzdCIsICJ0YWJsZSIsICJpc1JlYWRvbmx5QXJyYXkiLCAiaXQiLCAicGFyc2VUYWJsZUV4cHJlc3Npb24iLCAiaXNTdHJpbmciLCAicGFyc2VBbGlhc2VkVGFibGUiLCAiaXNBbGlhc2VkRHluYW1pY1RhYmxlQnVpbGRlciIsICJwYXJzZUFsaWFzZWRFeHByZXNzaW9uIiwgImZyb20iLCAiQUxJQVNfU0VQQVJBVE9SIiwgImFsaWFzIiwgInRyaW0iLCAiQWxpYXNOb2RlIiwgInBhcnNlVGFibGUiLCAiSWRlbnRpZmllck5vZGUiLCAiU0NIRU1BX1NFUEFSQVRPUiIsICJzY2hlbWEiLCAiVGFibGVOb2RlIiwgInN0ciIsICJBZGRDb2x1bW5Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImNvbHVtbiIsICJDb2x1bW5EZWZpbml0aW9uTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJjb2x1bW4iLCAiZGF0YVR5cGUiLCAiQ29sdW1uTm9kZSIsICJtb2RpZmllciIsICJwcm9wcyIsICJEcm9wQ29sdW1uTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJjb2x1bW4iLCAiQ29sdW1uTm9kZSIsICJSZW5hbWVDb2x1bW5Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImNvbHVtbiIsICJuZXdDb2x1bW4iLCAiQ29sdW1uTm9kZSIsICJDaGVja0NvbnN0cmFpbnROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImV4cHJlc3Npb24iLCAiY29uc3RyYWludE5hbWUiLCAiSWRlbnRpZmllck5vZGUiLCAiT05fTU9ESUZZX0ZPUkVJR05fQUNUSU9OUyIsICJSZWZlcmVuY2VzTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJ0YWJsZSIsICJjb2x1bW5zIiwgInJlZmVyZW5jZXMiLCAib25EZWxldGUiLCAib25VcGRhdGUiLCAicGFyc2VEZWZhdWx0VmFsdWVFeHByZXNzaW9uIiwgInZhbHVlIiwgImlzT3BlcmF0aW9uTm9kZVNvdXJjZSIsICJWYWx1ZU5vZGUiLCAiR2VuZXJhdGVkTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJwYXJhbXMiLCAiZXhwcmVzc2lvbiIsICJEZWZhdWx0VmFsdWVOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImRlZmF1bHRWYWx1ZSIsICJwYXJzZU9uTW9kaWZ5Rm9yZWlnbkFjdGlvbiIsICJhY3Rpb24iLCAiT05fTU9ESUZZX0ZPUkVJR05fQUNUSU9OUyIsICJDb2x1bW5EZWZpbml0aW9uQnVpbGRlciIsICJfQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIiLCAiI25vZGUiLCAibm9kZSIsICJDb2x1bW5EZWZpbml0aW9uTm9kZSIsICJyZWYiLCAicmVmZXJlbmNlcyIsICJwYXJzZVN0cmluZ1JlZmVyZW5jZSIsICJTZWxlY3RBbGxOb2RlIiwgIlJlZmVyZW5jZXNOb2RlIiwgIm9uRGVsZXRlIiwgInBhcnNlT25Nb2RpZnlGb3JlaWduQWN0aW9uIiwgIm9uVXBkYXRlIiwgInZhbHVlIiwgIkRlZmF1bHRWYWx1ZU5vZGUiLCAicGFyc2VEZWZhdWx0VmFsdWVFeHByZXNzaW9uIiwgImV4cHJlc3Npb24iLCAiQ2hlY2tDb25zdHJhaW50Tm9kZSIsICJHZW5lcmF0ZWROb2RlIiwgIm1vZGlmaWVyIiwgImZ1bmMiLCAiTW9kaWZ5Q29sdW1uTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJjb2x1bW4iLCAiRm9yZWlnbktleUNvbnN0cmFpbnROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInNvdXJjZUNvbHVtbnMiLCAidGFyZ2V0VGFibGUiLCAidGFyZ2V0Q29sdW1ucyIsICJjb25zdHJhaW50TmFtZSIsICJSZWZlcmVuY2VzTm9kZSIsICJJZGVudGlmaWVyTm9kZSIsICJwcm9wcyIsICJGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIiLCAiX0ZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlciIsICIjbm9kZSIsICJub2RlIiwgIm9uRGVsZXRlIiwgIkZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZSIsICJwYXJzZU9uTW9kaWZ5Rm9yZWlnbkFjdGlvbiIsICJvblVwZGF0ZSIsICJmdW5jIiwgIkFkZENvbnN0cmFpbnROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImNvbnN0cmFpbnQiLCAiVW5pcXVlQ29uc3RyYWludE5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiY29sdW1ucyIsICJjb25zdHJhaW50TmFtZSIsICJudWxsc05vdERpc3RpbmN0IiwgIkNvbHVtbk5vZGUiLCAiSWRlbnRpZmllck5vZGUiLCAicHJvcHMiLCAiRHJvcENvbnN0cmFpbnROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImNvbnN0cmFpbnROYW1lIiwgIklkZW50aWZpZXJOb2RlIiwgImRyb3BDb25zdHJhaW50IiwgInByb3BzIiwgIkFsdGVyQ29sdW1uTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJjb2x1bW4iLCAicHJvcCIsICJ2YWx1ZSIsICJDb2x1bW5Ob2RlIiwgIkFsdGVyQ29sdW1uQnVpbGRlciIsICIjY29sdW1uIiwgImNvbHVtbiIsICJkYXRhVHlwZSIsICJBbHRlcmVkQ29sdW1uQnVpbGRlciIsICJBbHRlckNvbHVtbk5vZGUiLCAicGFyc2VEYXRhVHlwZUV4cHJlc3Npb24iLCAidmFsdWUiLCAicGFyc2VEZWZhdWx0VmFsdWVFeHByZXNzaW9uIiwgImZ1bmMiLCAiI2FsdGVyQ29sdW1uTm9kZSIsICJhbHRlckNvbHVtbk5vZGUiLCAiQWx0ZXJUYWJsZUV4ZWN1dG9yIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiQWx0ZXJUYWJsZUFkZEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlciIsICJfQWx0ZXJUYWJsZUFkZEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgIm9uRGVsZXRlIiwgIm9uVXBkYXRlIiwgImZ1bmMiLCAiQWx0ZXJUYWJsZU5vZGUiLCAiQWRkQ29uc3RyYWludE5vZGUiLCAiQWx0ZXJUYWJsZURyb3BDb25zdHJhaW50QnVpbGRlciIsICJfQWx0ZXJUYWJsZURyb3BDb25zdHJhaW50QnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgIkFsdGVyVGFibGVOb2RlIiwgIkRyb3BDb25zdHJhaW50Tm9kZSIsICJmdW5jIiwgIlByaW1hcnlLZXlDb25zdHJhaW50Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJjb2x1bW5zIiwgImNvbnN0cmFpbnROYW1lIiwgIkNvbHVtbk5vZGUiLCAiSWRlbnRpZmllck5vZGUiLCAicHJvcHMiLCAiQWRkSW5kZXhOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIm5hbWUiLCAiSWRlbnRpZmllck5vZGUiLCAicHJvcHMiLCAiY29sdW1ucyIsICJBbHRlclRhYmxlQWRkSW5kZXhCdWlsZGVyIiwgIl9BbHRlclRhYmxlQWRkSW5kZXhCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiQWx0ZXJUYWJsZU5vZGUiLCAiQWRkSW5kZXhOb2RlIiwgImNvbHVtbiIsICJwYXJzZU9yZGVyZWRDb2x1bW5OYW1lIiwgImNvbHVtbnMiLCAiZXhwcmVzc2lvbiIsICJpbmRleFR5cGUiLCAiUmF3Tm9kZSIsICJmdW5jIiwgIlVuaXF1ZUNvbnN0cmFpbnROb2RlQnVpbGRlciIsICJfVW5pcXVlQ29uc3RyYWludE5vZGVCdWlsZGVyIiwgIiNub2RlIiwgIm5vZGUiLCAiVW5pcXVlQ29uc3RyYWludE5vZGUiLCAiZnVuYyIsICJQcmltYXJ5S2V5Q29uc3RyYWludEJ1aWxkZXIiLCAiX1ByaW1hcnlLZXlDb25zdHJhaW50QnVpbGRlciIsICIjbm9kZSIsICJub2RlIiwgIlByaW1hcnlLZXlDb25zdHJhaW50Tm9kZSIsICJmdW5jIiwgIkNoZWNrQ29uc3RyYWludEJ1aWxkZXIiLCAiI25vZGUiLCAibm9kZSIsICJmdW5jIiwgIlJlbmFtZUNvbnN0cmFpbnROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIm9sZE5hbWUiLCAibmV3TmFtZSIsICJJZGVudGlmaWVyTm9kZSIsICJBbHRlclRhYmxlQnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgIm5ld1RhYmxlTmFtZSIsICJBbHRlclRhYmxlRXhlY3V0b3IiLCAiQWx0ZXJUYWJsZU5vZGUiLCAicGFyc2VUYWJsZSIsICJuZXdTY2hlbWEiLCAiSWRlbnRpZmllck5vZGUiLCAiY29sdW1uIiwgImFsdGVyYXRpb24iLCAiYnVpbGRlciIsICJBbHRlckNvbHVtbkJ1aWxkZXIiLCAiQWx0ZXJUYWJsZUNvbHVtbkFsdGVyaW5nQnVpbGRlciIsICJEcm9wQ29sdW1uTm9kZSIsICJuZXdDb2x1bW4iLCAiUmVuYW1lQ29sdW1uTm9kZSIsICJjb2x1bW5OYW1lIiwgImRhdGFUeXBlIiwgImJ1aWxkIiwgIm5vb3AiLCAiQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIiLCAiQ29sdW1uRGVmaW5pdGlvbk5vZGUiLCAicGFyc2VEYXRhVHlwZUV4cHJlc3Npb24iLCAiQWRkQ29sdW1uTm9kZSIsICJNb2RpZnlDb2x1bW5Ob2RlIiwgImNvbnN0cmFpbnROYW1lIiwgImNvbHVtbnMiLCAidW5pcXVlQ29uc3RyYWludEJ1aWxkZXIiLCAiVW5pcXVlQ29uc3RyYWludE5vZGVCdWlsZGVyIiwgIlVuaXF1ZUNvbnN0cmFpbnROb2RlIiwgIkFkZENvbnN0cmFpbnROb2RlIiwgImNoZWNrRXhwcmVzc2lvbiIsICJjb25zdHJhaW50QnVpbGRlciIsICJDaGVja0NvbnN0cmFpbnRCdWlsZGVyIiwgIkNoZWNrQ29uc3RyYWludE5vZGUiLCAidGFyZ2V0VGFibGUiLCAidGFyZ2V0Q29sdW1ucyIsICJGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIiLCAiRm9yZWlnbktleUNvbnN0cmFpbnROb2RlIiwgIkNvbHVtbk5vZGUiLCAiQWx0ZXJUYWJsZUFkZEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlciIsICJQcmltYXJ5S2V5Q29uc3RyYWludEJ1aWxkZXIiLCAiUHJpbWFyeUtleUNvbnN0cmFpbnROb2RlIiwgIkFsdGVyVGFibGVEcm9wQ29uc3RyYWludEJ1aWxkZXIiLCAiRHJvcENvbnN0cmFpbnROb2RlIiwgIm9sZE5hbWUiLCAibmV3TmFtZSIsICJSZW5hbWVDb25zdHJhaW50Tm9kZSIsICJpbmRleE5hbWUiLCAiQWx0ZXJUYWJsZUFkZEluZGV4QnVpbGRlciIsICJBZGRJbmRleE5vZGUiLCAiRHJvcEluZGV4Tm9kZSIsICJmdW5jIiwgIl9BbHRlclRhYmxlQ29sdW1uQWx0ZXJpbmdCdWlsZGVyIiwgIkltbWVkaWF0ZVZhbHVlVHJhbnNmb3JtZXIiLCAiT3BlcmF0aW9uTm9kZVRyYW5zZm9ybWVyIiwgIm5vZGUiLCAiVmFsdWVMaXN0Tm9kZSIsICJWYWx1ZU5vZGUiLCAiQ3JlYXRlSW5kZXhCdWlsZGVyIiwgIl9DcmVhdGVJbmRleEJ1aWxkZXIiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJDcmVhdGVJbmRleE5vZGUiLCAidGFibGUiLCAicGFyc2VUYWJsZSIsICJjb2x1bW4iLCAicGFyc2VPcmRlcmVkQ29sdW1uTmFtZSIsICJjb2x1bW5zIiwgImV4cHJlc3Npb24iLCAiaW5kZXhUeXBlIiwgIlJhd05vZGUiLCAiYXJncyIsICJ0cmFuc2Zvcm1lciIsICJJbW1lZGlhdGVWYWx1ZVRyYW5zZm9ybWVyIiwgIlF1ZXJ5Tm9kZSIsICJwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uIiwgImZ1bmMiLCAiQ3JlYXRlU2NoZW1hQnVpbGRlciIsICJfQ3JlYXRlU2NoZW1hQnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgIkNyZWF0ZVNjaGVtYU5vZGUiLCAiZnVuYyIsICJwYXJzZU9uQ29tbWl0QWN0aW9uIiwgImFjdGlvbiIsICJPTl9DT01NSVRfQUNUSU9OUyIsICJDcmVhdGVUYWJsZUJ1aWxkZXIiLCAiX0NyZWF0ZVRhYmxlQnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgIkNyZWF0ZVRhYmxlTm9kZSIsICJvbkNvbW1pdCIsICJwYXJzZU9uQ29tbWl0QWN0aW9uIiwgImNvbHVtbk5hbWUiLCAiZGF0YVR5cGUiLCAiYnVpbGQiLCAibm9vcCIsICJjb2x1bW5CdWlsZGVyIiwgIkNvbHVtbkRlZmluaXRpb25CdWlsZGVyIiwgIkNvbHVtbkRlZmluaXRpb25Ob2RlIiwgInBhcnNlRGF0YVR5cGVFeHByZXNzaW9uIiwgImNvbnN0cmFpbnROYW1lIiwgImNvbHVtbnMiLCAiY29uc3RyYWludEJ1aWxkZXIiLCAiUHJpbWFyeUtleUNvbnN0cmFpbnRCdWlsZGVyIiwgIlByaW1hcnlLZXlDb25zdHJhaW50Tm9kZSIsICJ1bmlxdWVDb25zdHJhaW50QnVpbGRlciIsICJVbmlxdWVDb25zdHJhaW50Tm9kZUJ1aWxkZXIiLCAiVW5pcXVlQ29uc3RyYWludE5vZGUiLCAiY2hlY2tFeHByZXNzaW9uIiwgIkNoZWNrQ29uc3RyYWludEJ1aWxkZXIiLCAiQ2hlY2tDb25zdHJhaW50Tm9kZSIsICJ0YXJnZXRUYWJsZSIsICJ0YXJnZXRDb2x1bW5zIiwgImJ1aWxkZXIiLCAiRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyIiwgIkZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZSIsICJDb2x1bW5Ob2RlIiwgInBhcnNlVGFibGUiLCAibW9kaWZpZXIiLCAiZXhwcmVzc2lvbiIsICJwYXJzZUV4cHJlc3Npb24iLCAiZnVuYyIsICJEcm9wSW5kZXhCdWlsZGVyIiwgIl9Ecm9wSW5kZXhCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAidGFibGUiLCAiRHJvcEluZGV4Tm9kZSIsICJwYXJzZVRhYmxlIiwgImZ1bmMiLCAiRHJvcFNjaGVtYUJ1aWxkZXIiLCAiX0Ryb3BTY2hlbWFCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiRHJvcFNjaGVtYU5vZGUiLCAiZnVuYyIsICJEcm9wVGFibGVCdWlsZGVyIiwgIl9Ecm9wVGFibGVCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiRHJvcFRhYmxlTm9kZSIsICJmdW5jIiwgIkNyZWF0ZVZpZXdOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIm5hbWUiLCAiU2NoZW1hYmxlSWRlbnRpZmllck5vZGUiLCAiY3JlYXRlVmlldyIsICJwYXJhbXMiLCAiSW1tZWRpYXRlVmFsdWVQbHVnaW4iLCAiI3RyYW5zZm9ybWVyIiwgIkltbWVkaWF0ZVZhbHVlVHJhbnNmb3JtZXIiLCAiYXJncyIsICJDcmVhdGVWaWV3QnVpbGRlciIsICJfQ3JlYXRlVmlld0J1aWxkZXIiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJDcmVhdGVWaWV3Tm9kZSIsICJjb2x1bW5zIiwgInBhcnNlQ29sdW1uTmFtZSIsICJxdWVyeSIsICJxdWVyeU5vZGUiLCAiSW1tZWRpYXRlVmFsdWVQbHVnaW4iLCAiZnVuYyIsICJEcm9wVmlld05vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAibmFtZSIsICJTY2hlbWFibGVJZGVudGlmaWVyTm9kZSIsICJkcm9wVmlldyIsICJwYXJhbXMiLCAiRHJvcFZpZXdCdWlsZGVyIiwgIl9Ecm9wVmlld0J1aWxkZXIiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJEcm9wVmlld05vZGUiLCAiZnVuYyIsICJDcmVhdGVUeXBlTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJuYW1lIiwgImNyZWF0ZVR5cGUiLCAidmFsdWVzIiwgIlZhbHVlTGlzdE5vZGUiLCAiVmFsdWVOb2RlIiwgIkNyZWF0ZVR5cGVCdWlsZGVyIiwgIl9DcmVhdGVUeXBlQnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgInZhbHVlcyIsICJDcmVhdGVUeXBlTm9kZSIsICJmdW5jIiwgIkRyb3BUeXBlTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJuYW1lIiwgImRyb3BUeXBlIiwgInBhcmFtcyIsICJEcm9wVHlwZUJ1aWxkZXIiLCAiX0Ryb3BUeXBlQnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgIkRyb3BUeXBlTm9kZSIsICJmdW5jIiwgInBhcnNlU2NoZW1hYmxlSWRlbnRpZmllciIsICJpZCIsICJTQ0hFTUFfU0VQQVJBVE9SIiwgInBhcnRzIiwgInRyaW0iLCAiU2NoZW1hYmxlSWRlbnRpZmllck5vZGUiLCAic3RyIiwgIlJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJuYW1lIiwgIlNjaGVtYWJsZUlkZW50aWZpZXJOb2RlIiwgImNyZWF0ZVZpZXciLCAicGFyYW1zIiwgIlJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3QnVpbGRlciIsICJfUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdOb2RlIiwgImZ1bmMiLCAiU2NoZW1hTW9kdWxlIiwgIl9TY2hlbWFNb2R1bGUiLCAiI2V4ZWN1dG9yIiwgImV4ZWN1dG9yIiwgInRhYmxlIiwgIkNyZWF0ZVRhYmxlQnVpbGRlciIsICJjcmVhdGVRdWVyeUlkIiwgIkNyZWF0ZVRhYmxlTm9kZSIsICJwYXJzZVRhYmxlIiwgIkRyb3BUYWJsZUJ1aWxkZXIiLCAiRHJvcFRhYmxlTm9kZSIsICJpbmRleE5hbWUiLCAiQ3JlYXRlSW5kZXhCdWlsZGVyIiwgIkNyZWF0ZUluZGV4Tm9kZSIsICJEcm9wSW5kZXhCdWlsZGVyIiwgIkRyb3BJbmRleE5vZGUiLCAic2NoZW1hIiwgIkNyZWF0ZVNjaGVtYUJ1aWxkZXIiLCAiQ3JlYXRlU2NoZW1hTm9kZSIsICJEcm9wU2NoZW1hQnVpbGRlciIsICJEcm9wU2NoZW1hTm9kZSIsICJBbHRlclRhYmxlQnVpbGRlciIsICJBbHRlclRhYmxlTm9kZSIsICJ2aWV3TmFtZSIsICJDcmVhdGVWaWV3QnVpbGRlciIsICJDcmVhdGVWaWV3Tm9kZSIsICJSZWZyZXNoTWF0ZXJpYWxpemVkVmlld0J1aWxkZXIiLCAiUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdOb2RlIiwgIkRyb3BWaWV3QnVpbGRlciIsICJEcm9wVmlld05vZGUiLCAidHlwZU5hbWUiLCAiQ3JlYXRlVHlwZUJ1aWxkZXIiLCAiQ3JlYXRlVHlwZU5vZGUiLCAicGFyc2VTY2hlbWFibGVJZGVudGlmaWVyIiwgIkRyb3BUeXBlQnVpbGRlciIsICJEcm9wVHlwZU5vZGUiLCAicGx1Z2luIiwgIldpdGhTY2hlbWFQbHVnaW4iLCAiRHluYW1pY01vZHVsZSIsICJyZWZlcmVuY2UiLCAiRHluYW1pY1JlZmVyZW5jZUJ1aWxkZXIiLCAidGFibGUiLCAiRHluYW1pY1RhYmxlQnVpbGRlciIsICJEZWZhdWx0Q29ubmVjdGlvblByb3ZpZGVyIiwgIiNkcml2ZXIiLCAiZHJpdmVyIiwgImNvbnN1bWVyIiwgImNvbm5lY3Rpb24iLCAiRGVmYXVsdFF1ZXJ5RXhlY3V0b3IiLCAiX0RlZmF1bHRRdWVyeUV4ZWN1dG9yIiwgIlF1ZXJ5RXhlY3V0b3JCYXNlIiwgIiNjb21waWxlciIsICIjYWRhcHRlciIsICIjY29ubmVjdGlvblByb3ZpZGVyIiwgImNvbXBpbGVyIiwgImFkYXB0ZXIiLCAiY29ubmVjdGlvblByb3ZpZGVyIiwgInBsdWdpbnMiLCAibm9kZSIsICJxdWVyeUlkIiwgImNvbnN1bWVyIiwgInBsdWdpbiIsICJwZXJmb3JtYW5jZU5vdyIsICJpc0Z1bmN0aW9uIiwgIlJ1bnRpbWVEcml2ZXIiLCAiI2RyaXZlciIsICIjbG9nIiwgIiNpbml0UHJvbWlzZSIsICIjaW5pdERvbmUiLCAiI2Rlc3Ryb3lQcm9taXNlIiwgIiNjb25uZWN0aW9ucyIsICJkcml2ZXIiLCAibG9nIiwgImVyciIsICJjb25uZWN0aW9uIiwgIiNuZWVkc0xvZ2dpbmciLCAiI2FkZExvZ2dpbmciLCAic2V0dGluZ3MiLCAic2F2ZXBvaW50TmFtZSIsICJjb21waWxlUXVlcnkiLCAiZXhlY3V0ZVF1ZXJ5IiwgInN0cmVhbVF1ZXJ5IiwgImRpcyIsICJjb21waWxlZFF1ZXJ5IiwgImNhdWdodEVycm9yIiwgInN0YXJ0VGltZSIsICJwZXJmb3JtYW5jZU5vdyIsICJlcnJvciIsICIjbG9nRXJyb3IiLCAiI2xvZ1F1ZXJ5IiwgImNodW5rU2l6ZSIsICJyZXN1bHQiLCAiI2NhbGN1bGF0ZUR1cmF0aW9uTWlsbGlzIiwgImlzU3RyZWFtIiwgImlnbm9yZUVycm9yIiwgIlNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlciIsICIjY29ubmVjdGlvbiIsICIjcnVubmluZ1Byb21pc2UiLCAiY29ubmVjdGlvbiIsICJjb25zdW1lciIsICIjcnVuIiwgInJ1bm5lciIsICJUUkFOU0FDVElPTl9BQ0NFU1NfTU9ERVMiLCAiVFJBTlNBQ1RJT05fSVNPTEFUSU9OX0xFVkVMUyIsICJ2YWxpZGF0ZVRyYW5zYWN0aW9uU2V0dGluZ3MiLCAic2V0dGluZ3MiLCAiTE9HX0xFVkVMUyIsICJmcmVlemUiLCAiTG9nIiwgIiNsZXZlbHMiLCAiI2xvZ2dlciIsICJjb25maWciLCAiaXNGdW5jdGlvbiIsICJkZWZhdWx0TG9nZ2VyIiwgImxldmVsIiwgImdldEV2ZW50IiwgImV2ZW50IiwgInByZWZpeCIsICJpc0NvbXBpbGFibGUiLCAidmFsdWUiLCAiaXNPYmplY3QiLCAiaXNGdW5jdGlvbiIsICJLeXNlbHkiLCAiX0t5c2VseSIsICJRdWVyeUNyZWF0b3IiLCAiI3Byb3BzIiwgImFyZ3MiLCAic3VwZXJQcm9wcyIsICJwcm9wcyIsICJpc0t5c2VseVByb3BzIiwgImRpYWxlY3QiLCAiZHJpdmVyIiwgImNvbXBpbGVyIiwgImFkYXB0ZXIiLCAibG9nIiwgIkxvZyIsICJydW50aW1lRHJpdmVyIiwgIlJ1bnRpbWVEcml2ZXIiLCAiY29ubmVjdGlvblByb3ZpZGVyIiwgIkRlZmF1bHRDb25uZWN0aW9uUHJvdmlkZXIiLCAiZXhlY3V0b3IiLCAiRGVmYXVsdFF1ZXJ5RXhlY3V0b3IiLCAiZnJlZXplIiwgIlNjaGVtYU1vZHVsZSIsICJEeW5hbWljTW9kdWxlIiwgInZhbHVlIiwgIkNhc2VCdWlsZGVyIiwgIkNhc2VOb2RlIiwgImlzVW5kZWZpbmVkIiwgInBhcnNlRXhwcmVzc2lvbiIsICJjcmVhdGVGdW5jdGlvbk1vZHVsZSIsICJUcmFuc2FjdGlvbkJ1aWxkZXIiLCAiQ29udHJvbGxlZFRyYW5zYWN0aW9uQnVpbGRlciIsICJDb25uZWN0aW9uQnVpbGRlciIsICJwbHVnaW4iLCAic2NoZW1hIiwgIldpdGhTY2hlbWFQbHVnaW4iLCAicXVlcnkiLCAicXVlcnlJZCIsICJjcmVhdGVRdWVyeUlkIiwgImNvbXBpbGVkUXVlcnkiLCAiaXNDb21waWxhYmxlIiwgIlRyYW5zYWN0aW9uIiwgIl9UcmFuc2FjdGlvbiIsICJvYmoiLCAiaXNPYmplY3QiLCAiY2FsbGJhY2siLCAiY29ubmVjdGlvbiIsICJTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIiLCAiZGIiLCAiX1RyYW5zYWN0aW9uQnVpbGRlciIsICJhY2Nlc3NNb2RlIiwgImlzb2xhdGlvbkxldmVsIiwgImt5c2VseVByb3BzIiwgInNldHRpbmdzIiwgInZhbGlkYXRlVHJhbnNhY3Rpb25TZXR0aW5ncyIsICJ0cmFuc2FjdGlvbiIsICJyZXN1bHQiLCAiZXJyb3IiLCAiX0NvbnRyb2xsZWRUcmFuc2FjdGlvbkJ1aWxkZXIiLCAicHJvdmlkZUNvbnRyb2xsZWRDb25uZWN0aW9uIiwgIkNvbnRyb2xsZWRUcmFuc2FjdGlvbiIsICJfQ29udHJvbGxlZFRyYW5zYWN0aW9uIiwgIiNjb21waWxlUXVlcnkiLCAiI3N0YXRlIiwgInN0YXRlIiwgIk5vdENvbW1pdHRlZE9yUm9sbGVkQmFja0Fzc2VydGluZ0V4ZWN1dG9yIiwgInRyYW5zYWN0aW9uUHJvcHMiLCAibm9kZSIsICJhc3NlcnROb3RDb21taXR0ZWRPclJvbGxlZEJhY2siLCAiQ29tbWFuZCIsICJzYXZlcG9pbnROYW1lIiwgIiNjYiIsICJjYiIsICJfTm90Q29tbWl0dGVkT3JSb2xsZWRCYWNrQXNzZXJ0aW5nRXhlY3V0b3IiLCAiI2V4ZWN1dG9yIiwgImNvbnN1bWVyIiwgImNodW5rU2l6ZSIsICJwbHVnaW5zIiwgIlJhd0J1aWxkZXJJbXBsIiwgIl9SYXdCdWlsZGVySW1wbCIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgImFsaWFzIiwgIkFsaWFzZWRSYXdCdWlsZGVySW1wbCIsICJwbHVnaW4iLCAiI3RvT3BlcmF0aW9uTm9kZSIsICIjZ2V0RXhlY3V0b3IiLCAiZXhlY3V0b3JQcm92aWRlciIsICIjY29tcGlsZSIsICJleGVjdXRvciIsICJOT09QX1FVRVJZX0VYRUNVVE9SIiwgImNyZWF0ZVJhd0J1aWxkZXIiLCAiI3Jhd0J1aWxkZXIiLCAiI2FsaWFzIiwgInJhd0J1aWxkZXIiLCAiQWxpYXNOb2RlIiwgImlzT3BlcmF0aW9uTm9kZVNvdXJjZSIsICJJZGVudGlmaWVyTm9kZSIsICJzcWwiLCAic3FsRnJhZ21lbnRzIiwgInBhcmFtZXRlcnMiLCAiY3JlYXRlUmF3QnVpbGRlciIsICJjcmVhdGVRdWVyeUlkIiwgIlJhd05vZGUiLCAicGFyc2VQYXJhbWV0ZXIiLCAiY29sdW1uUmVmZXJlbmNlIiwgInBhcnNlU3RyaW5nUmVmZXJlbmNlIiwgInZhbHVlIiwgInBhcnNlVmFsdWVFeHByZXNzaW9uIiwgInRhYmxlUmVmZXJlbmNlIiwgInBhcnNlVGFibGUiLCAiaWRzIiwgImZyYWdtZW50cyIsICJJZGVudGlmaWVyTm9kZSIsICJWYWx1ZU5vZGUiLCAiYXJyYXkiLCAic2VwYXJhdG9yIiwgIm5vZGVzIiwgInNlcCIsICJpIiwgInBhcmFtIiwgImlzT3BlcmF0aW9uTm9kZVNvdXJjZSIsICJPcGVyYXRpb25Ob2RlVmlzaXRvciIsICIjdmlzaXRvcnMiLCAiZnJlZXplIiwgIm5vZGUiLCAiTElUX1dSQVBfUkVHRVgiLCAiRGVmYXVsdFF1ZXJ5Q29tcGlsZXIiLCAiT3BlcmF0aW9uTm9kZVZpc2l0b3IiLCAiI3NxbCIsICIjcGFyYW1ldGVycyIsICJub2RlIiwgInF1ZXJ5SWQiLCAiZnJlZXplIiwgIndyYXBJblBhcmVucyIsICJQYXJlbnNOb2RlIiwgIkluc2VydFF1ZXJ5Tm9kZSIsICJDcmVhdGVUYWJsZU5vZGUiLCAiQ3JlYXRlVmlld05vZGUiLCAiU2V0T3BlcmF0aW9uTm9kZSIsICJleHByZXNzaW9ucyIsICJub2RlcyIsICJzZXBhcmF0b3IiLCAibGFzdEluZGV4IiwgImkiLCAicm9vdFF1ZXJ5Tm9kZSIsICJRdWVyeU5vZGUiLCAiaXNTdWJRdWVyeSIsICJNZXJnZVF1ZXJ5Tm9kZSIsICJsb2dPbmNlIiwgIl8iLCAiaXNTdHJpbmciLCAidmFsdWVzIiwgIkpPSU5fVFlQRV9TUUwiLCAic3FsRnJhZ21lbnRzIiwgInBhcmFtcyIsICJpc0Jvb2xlYW4iLCAiU0VMRUNUX01PRElGSUVSX1NRTCIsICJPcGVyYXRvck5vZGUiLCAicGF0aExlZyIsICJpc0FycmF5TG9jYXRpb24iLCAibGVuIiwgInN0ciIsICJwYXJhbWV0ZXIiLCAiaWRlbnRpZmllciIsICJsZWZ0V3JhcCIsICJyaWdodFdyYXAiLCAic2FuaXRpemVkIiwgImMiLCAidmFsdWUiLCAiaXNOdW1iZXIiLCAiaXNOdWxsIiwgImlzRGF0ZSIsICJpc0JpZ0ludCIsICJhcnIiLCAibGVmdCIsICJyaWdodCIsICJTRUxFQ1RfTU9ESUZJRVJfUFJJT1JJVFkiLCAiY29sdW1uQWx0ZXJhdGlvbnMiLCAiRHVtbXlEcml2ZXIiLCAiRHVtbXlDb25uZWN0aW9uIiwgIkRpYWxlY3RBZGFwdGVyQmFzZSIsICJJRF9XUkFQX1JFR0VYIiwgIlBvc3RncmVzUXVlcnlDb21waWxlciIsICJEZWZhdWx0UXVlcnlDb21waWxlciIsICJpZGVudGlmaWVyIiwgIkxPQ0tfSUQiLCAiUG9zdGdyZXNBZGFwdGVyIiwgIkRpYWxlY3RBZGFwdGVyQmFzZSIsICJkYiIsICJfb3B0IiwgInNxbCIsICJfZGIiLCAiZ2V0QnVpbGRlciIsICJyZXF1aXJlbWVudHMiLCAiS3lzZWx5IiwgIkR1bW15RHJpdmVyIiwgIkltbWVkaWF0ZVZhbHVlUGx1Z2luIiwgIiN0cmFuc2Zvcm1lciIsICJJbW1lZGlhdGVWYWx1ZVRyYW5zZm9ybWVyIiwgImFyZ3MiLCAiT3BlcmF0aW9uTm9kZVRyYW5zZm9ybWVyIiwgIm5vZGUiLCAiVmFsdWVMaXN0Tm9kZSIsICJWYWx1ZU5vZGUiLCAiY29tcGlsZSIsICJjb21waWxlYWJsZSIsICJjb21waWxlZFF1ZXJ5IiwgImFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzIiwgInJvd3MiLCAiY29sdW1ucyIsICJyb3dGaWx0ZXJzIiwgImluZmVyUm93RmlsdGVycyIsICJxYiIsICJlYiIsICJyb3dGaWx0ZXIiLCAiY29sdW1uTmFtZSIsICJ2YWx1ZSIsICJpbmZlclJvd0ZpbHRlciIsICJyb3ciLCAicGsiLCAiY29sdW1uIiwgImlzSW5QcmltYXJ5S2V5IiwgImdldFBvc3RncmVTUUxCdWlsZGVyIiwgInJlcXVpcmVtZW50cyIsICJnZXRCdWlsZGVyIiwgIlBvc3RncmVzQWRhcHRlciIsICJQb3N0Z3Jlc1F1ZXJ5Q29tcGlsZXIiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAiZGV0YWlscyIsICJyZXF1aXJlbWVudHMiLCAidGFibGUiLCAicm93cyIsICJ0YWJsZU5hbWUiLCAic2NoZW1hIiwgImNvbHVtbnMiLCAiYnVpbGRlciIsICJnZXRQb3N0Z3JlU1FMQnVpbGRlciIsICJjb2xzIiwgImVtcHR5Um93V29ya2Fyb3VuZCIsICJzcWwiLCAiY29tcGlsZSIsICJyb3ciLCAiZWIiLCAiZ2V0U2VsZWN0UXVlcnkiLCAicGFnZUluZGV4IiwgInBhZ2VTaXplIiwgInNvcnRPcmRlciIsICJmaWx0ZXIiLCAiY291bnRRdWVyeSIsICJxYiIsICJpdGVtIiwgImdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24iLCAiYnVpbGRCYXNlRXhwcmVzc2lvbkJ1aWxkZXIiLCAic3BlYyIsICJmaWx0ZXJzIiwgIm9yR3JvdXBzT2ZBbmRCdWlsZGVycyIsICJjdXJyZW50QW5kR3JvdXBCdWlsZGVycyIsICJpIiwgImFuZEV4cHJlc3Npb25zIiwgImdyb3VwIiwgImdldFVwZGF0ZVF1ZXJ5IiwgImRldGFpbHMiLCAicmVxdWlyZW1lbnRzIiwgImNoYW5nZXMiLCAicm93IiwgImNvbHVtbnMiLCAidGFibGVOYW1lIiwgInNjaGVtYSIsICJidWlsZGVyIiwgImdldFBvc3RncmVTUUxCdWlsZGVyIiwgImNvbHMiLCAiY29tcGlsZSIsICJhcHBseUluZmVycmVkUm93RmlsdGVycyIsICJlYiIsICJzcWwiLCAiZ2V0RGVsZXRlUXVlcnkiLCAicm93cyIsICJqc29uQXJyYXlGcm9tIiwgImV4cHIiLCAic3FsIiwgIlJFR1VMQVJfVEFCTEVfS0lORCIsICJWSUVXX1RBQkxFX0tJTkQiLCAiVEFCTEVfS0lORFMiLCAiZ2V0VGFibGVzUXVlcnkiLCAicmVxdWlyZW1lbnRzIiwgImNvbXBpbGUiLCAiZ2V0UG9zdGdyZVNRTEJ1aWxkZXIiLCAiZXhjbHVkZVN5c3RlbVRhYmxlcyIsICJlYiIsICJqc29uQXJyYXlGcm9tIiwgImpiIiwgIm9uX2ViIiwgInNxbCIsICJnZXRUaW1lem9uZVF1ZXJ5IiwgImJ1aWxkZXIiLCAiZ2V0UG9zdGdyZVNRTEJ1aWxkZXIiLCAiY29tcGlsZSIsICJzcWwiLCAiZXhjbHVkZVN5c3RlbVRhYmxlcyIsICJxYiIsICJjcmVhdGVQb3N0Z3Jlc0FkYXB0ZXIiLCAicmVxdWlyZW1lbnRzIiwgImV4ZWN1dG9yIiwgIm90aGVyUmVxdWlyZW1lbnRzIiwgIm9wdGlvbnMiLCAidGFibGVzUXVlcnkiLCAiZ2V0VGFibGVzUXVlcnkiLCAidGltZXpvbmVRdWVyeSIsICJnZXRUaW1lem9uZVF1ZXJ5IiwgInRhYmxlc0Vycm9yIiwgInRhYmxlcyIsICJ0aW1lem9uZUVycm9yIiwgInRpbWV6b25lcyIsICJjcmVhdGVBZGFwdGVyRXJyb3IiLCAidGltZXpvbmUiLCAiY3JlYXRlSW50cm9zcGVjdGlvbiIsICJlcnJvciIsICJkZXRhaWxzIiwgInF1ZXJ5IiwgImdldFNlbGVjdFF1ZXJ5IiwgInJlc3VsdHMiLCAiZ2V0SW5zZXJ0UXVlcnkiLCAicm93cyIsICJnZXRVcGRhdGVRdWVyeSIsICJyb3ciLCAiZ2V0RGVsZXRlUXVlcnkiLCAiYXJncyIsICJyZXN1bHQiLCAic2NoZW1hcyIsICJjb2x1bW5zIiwgInRhYmxlTmFtZSIsICJzY2hlbWEiLCAiY29sdW1uc1JlY29yZCIsICJjb2x1bW4iLCAiZGF0YXR5cGUiLCAiZGF0YXR5cGVfc2NoZW1hIiwgImNvbHVtbk5hbWUiLCAibnVsbGFibGUiLCAiaXNBcnJheSIsICJzdHJpcHBlZERhdGFUeXBlIiwgIlBPU1RHUkVTUUxfREFUQV9UWVBFU19UT19NRVRBREFUQSIsICJmaWx0ZXJPcGVyYXRvcnMiLCAiY3JlYXRlUEdMaXRlRXhlY3V0b3IiLCAicGdsaXRlIiwgIm9wdGlvbnMiLCAiYWRkRGVsYXkiLCAibG9nZ2luZyIsICJxdWVyeSIsICJhYm9ydFNpZ25hbCIsICJhYm9ydCIsICJhYm9ydGlvblByb21pc2UiLCAiXyIsICJyZWplY3QiLCAiYWJvcnRMaXN0ZW5lciIsICJlcnJvciIsICJhZGRlZERlbGF5IiwgInF1ZXJ5UEdMaXRlIiwgInF1ZXJ5UEdMaXRlUG9zc2libHlEZWxheWVkIiwgInJlc29sdmUiLCAic2hvdWxkTG9nIiwgImxvZ2dhYmxlUXVlcnkiLCAibm93IiwgInJlc3VsdCIsICJkdXJhdGlvbiIsICJjcmVhdGVQR0xpdGVBZGFwdGVyIiwgImNyZWF0ZVBvc3RncmVzQWRhcHRlciJdCn0K
|