@prisma/studio-core-licensed 0.7.0 → 0.8.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.
Files changed (60) hide show
  1. package/dist/chunk-32BUC7NR.js +10 -0
  2. package/dist/chunk-A6CVKSUD.js +10 -0
  3. package/dist/chunk-M7E5UEO3.js +10 -0
  4. package/dist/chunk-O6ZAHVDF.js +10 -0
  5. package/dist/chunk-PA5LQLPW.js +10 -0
  6. package/dist/chunk-SXTJF4PD.js +10 -0
  7. package/dist/chunk-ZUEQ555M.js +10 -0
  8. package/dist/data/accelerate/index.d.cts +1 -1
  9. package/dist/data/accelerate/index.d.ts +1 -1
  10. package/dist/data/bff/index.cjs +2 -2
  11. package/dist/data/bff/index.d.cts +15 -3
  12. package/dist/data/bff/index.d.ts +15 -3
  13. package/dist/data/bff/index.js +2 -2
  14. package/dist/data/index.d.cts +1 -1
  15. package/dist/data/index.d.ts +1 -1
  16. package/dist/data/index.js +1 -1
  17. package/dist/data/mysql-core/index.cjs +3 -0
  18. package/dist/data/mysql-core/index.d.cts +176 -0
  19. package/dist/data/mysql-core/index.d.ts +176 -0
  20. package/dist/data/mysql-core/index.js +11 -0
  21. package/dist/data/mysql2/index.cjs +2 -0
  22. package/dist/data/mysql2/index.d.cts +7 -0
  23. package/dist/data/mysql2/index.d.ts +7 -0
  24. package/dist/data/mysql2/index.js +10 -0
  25. package/dist/data/node-sqlite/index.cjs +2 -2
  26. package/dist/data/node-sqlite/index.d.cts +2 -3
  27. package/dist/data/node-sqlite/index.d.ts +2 -3
  28. package/dist/data/node-sqlite/index.js +2 -2
  29. package/dist/data/pglite/index.cjs +2 -2
  30. package/dist/data/pglite/index.d.cts +1 -1
  31. package/dist/data/pglite/index.d.ts +1 -1
  32. package/dist/data/pglite/index.js +2 -2
  33. package/dist/data/postgres-core/index.cjs +2 -2
  34. package/dist/data/postgres-core/index.d.cts +37 -37
  35. package/dist/data/postgres-core/index.d.ts +37 -37
  36. package/dist/data/postgres-core/index.js +1 -1
  37. package/dist/data/postgresjs/index.cjs +2 -2
  38. package/dist/data/postgresjs/index.d.cts +3 -14
  39. package/dist/data/postgresjs/index.d.ts +3 -14
  40. package/dist/data/postgresjs/index.js +2 -2
  41. package/dist/data/ppg/index.d.cts +1 -1
  42. package/dist/data/ppg/index.d.ts +1 -1
  43. package/dist/data/sqlite-core/index.cjs +2 -2
  44. package/dist/data/sqlite-core/index.d.cts +25 -25
  45. package/dist/data/sqlite-core/index.d.ts +25 -25
  46. package/dist/data/sqlite-core/index.js +2 -2
  47. package/dist/{index-2horhMcs.d.cts → index-BhPjNuvP.d.cts} +10 -6
  48. package/dist/{index-2horhMcs.d.ts → index-BhPjNuvP.d.ts} +10 -6
  49. package/dist/metafile-cjs.json +1 -1
  50. package/dist/metafile-esm.json +1 -1
  51. package/dist/ui/index.cjs +1 -1
  52. package/dist/ui/index.d.cts +1 -1
  53. package/dist/ui/index.d.ts +1 -1
  54. package/dist/ui/index.js +2 -2
  55. package/package.json +22 -1
  56. package/dist/chunk-AHIV4VYN.js +0 -10
  57. package/dist/chunk-CTJRZ7VA.js +0 -10
  58. package/dist/chunk-NDYVVFWW.js +0 -10
  59. package/dist/chunk-OTK4ZF2W.js +0 -10
  60. package/dist/chunk-WHLVNWIR.js +0 -10
@@ -1,10 +0,0 @@
1
- import * as ___react___ from 'react';
2
- import * as ___react_dom___ from 'react-dom';
3
-
4
- function require(mod) {
5
- if (mod === 'react') return ___react___;
6
- if (mod === 'react-dom') return ___react_dom___;
7
- throw new Error(`Unknown module ${mod}`);
8
- }
9
- import{e as o}from"./chunk-GDQBQ7MK.js";o();o();o();o();o();o();function $(t){return typeof t>"u"||t===void 0}function v(t){return typeof t=="string"}function ke(t){return typeof t=="number"}function Pe(t){return typeof t=="boolean"}function Ke(t){return t===null}function Ki(t){return t instanceof Date}function je(t){return typeof t=="bigint"}function b(t){return typeof t=="function"}function B(t){return typeof t=="object"&&t!==null}function i(t){return Object.freeze(t)}function St(t){return P(t)?t:[t]}function P(t){return Array.isArray(t)}function F(t){return t}var m=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]})}});o();o();var p=i({is(t){return t.kind==="IdentifierNode"},create(t){return i({kind:"IdentifierNode",name:t})}});var re=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]})}});o();var Vt=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})}});o();var ji=["preserve rows","delete rows","drop"],Q=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})}});o();o();var M=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 Se=i({is(t){return t.kind==="DropIndexNode"},create(t,e){return i({kind:"DropIndexNode",name:M.create(t),...e})},cloneWith(t,e){return i({...t,...e})}});o();var Tt=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})}});o();var Et=i({is(t){return t.kind==="DropTableNode"},create(t,e){return i({kind:"DropTableNode",table:t,...e})},cloneWith(t,e){return i({...t,...e})}});o();o();var R=i({is(t){return t.kind==="AliasNode"},create(t,e){return i({kind:"AliasNode",node:t,alias:e})}});o();var K=i({is(t){return t.kind==="TableNode"},create(t){return i({kind:"TableNode",table:M.create(t)})},createWithSchema(t,e){return i({kind:"TableNode",table:M.createWithSchema(t,e)})}});o();o();o();function g(t){return B(t)&&b(t.toOperationNode)}function zt(t){return B(t)&&"expressionType"in t&&g(t)}function Gi(t){return B(t)&&"expression"in t&&v(t.alias)&&g(t)}o();o();o();var he=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})}});o();o();o();o();var U=i({is(t){return t.kind==="AndNode"},create(t,e){return i({kind:"AndNode",left:t,right:e})}});o();var ie=i({is(t){return t.kind==="OrNode"},create(t,e){return i({kind:"OrNode",left:t,right:e})}});var Ut=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"?U.create(t.on,r):ie.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:Ut.create(r)})},cloneWithOn(t,e){return i({...t,on:t.on?Ut.cloneWithOperation(t.on,"And",e):Ut.create(e)})}});o();o();var Te=i({is(t){return t.kind==="BinaryOperationNode"},create(t,e,r){return i({kind:"BinaryOperationNode",leftOperand:t,operator:e,rightOperand:r})}});o();var Go=["=","==","!=","<>",">",">=","<","<=","in","not in","is","is not","like","not like","match","ilike","not ilike","@>","<@","^@","&&","?","?&","?|","!<","!>","<=>","!~","~","~*","!~*","@@","@@@","!!","<->","regexp","is distinct from","is not distinct from"],Ho=["+","-","*","/","%","^","&","|","#","<<",">>"],Hi=["->","->>"],Yo=[...Go,...Ho,"&&","||"],Xo=["exists","not exists"],Zo=["not","-",...Xo],Yi=[...Yo,...Hi,...Zo,"between","between symmetric"],j=i({is(t){return t.kind==="OperatorNode"},create(t){return i({kind:"OperatorNode",operator:t})}});function jr(t){return v(t)&&Hi.includes(t)}o();o();var c=i({is(t){return t.kind==="ColumnNode"},create(t){return i({kind:"ColumnNode",column:p.create(t)})}});o();o();var Ge=i({is(t){return t.kind==="SelectAllNode"},create(){return i({kind:"SelectAllNode"})}});var He=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:Ge.create()})}});o();o();var Jt=class{#e;get dynamicReference(){return this.#e}get refType(){}constructor(e){this.#e=e}toOperationNode(){return Gr(this.#e)}};function $t(t){return B(t)&&g(t)&&v(t.dynamicReference)}o();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})}});o();var x=i({is(t){return t.kind==="RawNode"},create(t,e){return i({kind:"RawNode",sqlFragments:i(t),parameters:i(e)})},createWithSql(t){return x.create([t],[])},createWithChild(t){return x.create(["",""],[t])},createWithChildren(t){return x.create(new Array(t.length+1).fill(""),t)}});o();o();var Xi={is(t){return t.kind==="CollateNode"},create(t){return i({kind:"CollateNode",collation:p.create(t)})}};var Kt=class t{#e;constructor(e){this.#e=i(e)}desc(){return new t({node:ne.cloneWith(this.#e.node,{direction:x.createWithSql("desc")})})}asc(){return new t({node:ne.cloneWith(this.#e.node,{direction:x.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:Xi.create(e)})})}toOperationNode(){return this.#e.node}};o();var Zi=new Set;function ce(t){Zi.has(t)||(Zi.add(t),console.log(t))}function Yr(t){return t==="asc"||t==="desc"}function H(t){if(t.length===2)return[Hr(t[0],t[1])];if(t.length===1){let[e]=t;return Array.isArray(e)?(ce("orderBy(array) is deprecated, use multiple orderBy calls instead."),e.map(r=>Hr(r))):[Hr(e)]}throw new Error(`Invalid number of arguments at order by! expected 1-2, received ${t.length}`)}function Hr(t,e){let r=_o(t);if(ne.is(r)){if(e)throw new Error("Cannot specify direction twice!");return r}return _i(r,e)}function _o(t){if(we(t))return J(t);if($t(t))return t.toOperationNode();let[e,r]=t.split(" ");return r?(ce("`orderBy('column asc')` is deprecated. Use `orderBy('column', 'asc')` instead."),_i(G(e),r)):G(t)}function _i(t,e){if(typeof e=="string"){if(!Yr(e))throw new Error(`Invalid order by direction: ${e}`);return ne.create(t,x.createWithSql(e))}if(zt(e))return ce("`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 Kt({node:r})).toOperationNode():r}o();var Ye=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})}});o();var jt=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])})}});o();var Ee=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 Gr(t){return v(t)?G(t):t.toOperationNode()}function Oe(t){return P(t)?t.map(e=>q(e)):[q(t)]}function q(t){return we(t)?J(t):Gr(t)}function eo(t,e){let r=G(t);if(jr(e))return Ye.create(r,jt.create(j.create(e)));let n=e.slice(0,-1);if(jr(n))return Ye.create(r,Ee.create(j.create(n)));throw new Error(`Invalid JSON operator: ${e}`)}function G(t){let e=".";if(!t.includes(e))return He.create(c.create(t));let r=t.split(e).map(Zr);if(r.length===3)return en(r);if(r.length===2)return tn(r);throw new Error(`invalid column reference ${t}`)}function to(t){let e=" as ";if(t.includes(e)){let[r,n]=t.split(e).map(Zr);return R.create(G(r),p.create(n))}else return G(t)}function Xr(t){return c.create(t)}function Xe(t){let e=" ";if(t.includes(e)){let[r,n]=t.split(e).map(Zr);if(!Yr(n))throw new Error(`invalid order direction "${n}" next to "${r}"`);return H([r,n])[0]}else return Xr(t)}function en(t){let[e,r,n]=t;return He.create(c.create(n),K.createWithSchema(e,r))}function tn(t){let[e,r]=t;return He.create(c.create(r),K.create(e))}function Zr(t){return t.trim()}o();o();var Gt=i({is(t){return t.kind==="PrimitiveValueListNode"},create(t){return i({kind:"PrimitiveValueListNode",values:i([...t])})}});o();var me=i({is(t){return t.kind==="ValueListNode"},create(t){return i({kind:"ValueListNode",values:i(t)})}});o();var S=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 ro(t){return P(t)?rn(t):w(t)}function w(t){return we(t)?J(t):S.create(t)}function Ht(t){return ke(t)||Pe(t)||Ke(t)}function At(t){if(!Ht(t))throw new Error(`unsafe immediate value ${JSON.stringify(t)}`);return S.createImmediate(t)}function rn(t){return t.some(we)?me.create(t.map(e=>w(e))):Gt.create(t)}o();var Y=i({is(t){return t.kind==="ParensNode"},create(t){return i({kind:"ParensNode",node:t})}});function O(t){if(t.length===3)return Yt(t[0],t[1],t[2]);if(t.length===1)return w(t[0]);throw new Error(`invalid arguments: ${JSON.stringify(t)}`)}function Yt(t,e,r){return on(e)&&oo(r)?Te.create(q(t),_r(e),S.createImmediate(r)):Te.create(q(t),_r(e),ro(r))}function I(t,e,r){return Te.create(q(t),_r(e),q(r))}function ei(t,e){return Ze(Object.entries(t).filter(([,r])=>!$(r)).map(([r,n])=>Yt(r,oo(n)?"is":"=",n)),e)}function Ze(t,e,r=!0){let n=e==="and"?U.create:ie.create;if(t.length===0)return Te.create(S.createImmediate(1),j.create("="),S.createImmediate(e==="and"?1:0));let a=io(t[0]);for(let d=1;d<t.length;++d)a=n(a,io(t[d]));return t.length>1&&r?Y.create(a):a}function on(t){return t==="is"||t==="is not"}function oo(t){return Ke(t)||Pe(t)}function _r(t){if(v(t)&&Yi.includes(t))return j.create(t);if(g(t))return t.toOperationNode();throw new Error(`invalid operator ${JSON.stringify(t)}`)}function io(t){return g(t)?t.toOperationNode():t}o();o();o();var ge=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])})}});o();var ti=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 Rt=i({is(t){return t.kind==="OverNode"},create(){return i({kind:"OverNode"})},cloneWithOrderByItems(t,e){return i({...t,orderBy:t.orderBy?ge.cloneWithItems(t.orderBy,e):ge.create(e)})},cloneWithPartitionByItems(t,e){return i({...t,partitionBy:t.partitionBy?ti.cloneWithItems(t.partitionBy,e):ti.create(e)})}});o();o();var Qe=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])})}});o();var ri=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])})}});o();var ii=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"?U.create(t.having,r):ie.create(t.having,r)})}});o();o();var k=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})}});o();o();var Xt=i({is(t){return t.kind==="ListNode"},create(t){return i({kind:"ListNode",items:i(t)})}});var le=i({is(t){return t.kind==="UpdateQueryNode"},create(t,e){return i({kind:"UpdateQueryNode",table:t.length===1?t[0]:Xt.create(t),...e&&{with:e}})},createWithoutTable(){return i({kind:"UpdateQueryNode"})},cloneWithFromItems(t,e){return i({...t,from:t.from?Qe.cloneWithFroms(t.from,e):Qe.create(e)})},cloneWithUpdates(t,e){return i({...t,updates:t.updates?i([...t.updates,...e]):e})},cloneWithLimit(t,e){return i({...t,limit:e})}});o();o();var oi=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 Ae=i({is(t){return t.kind==="DeleteQueryNode"},create(t,e){return i({kind:"DeleteQueryNode",from:Qe.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?oi.cloneWithTables(t.using,e):oi.create(e)})}});o();var L=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"?U.create(t.where,r):ie.create(t.where,r)})}});o();var ni=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)})}});o();var no=i({is(t){return t.kind==="ExplainNode"},create(t,e){return i({kind:"ExplainNode",format:t,options:e})}});o();o();var _=i({is(t){return t.kind==="WhenNode"},create(t){return i({kind:"WhenNode",condition:t})},cloneWithResult(t,e){return i({...t,result:e})}});var X=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),_.cloneWithResult(t.whens[t.whens.length-1],e)]):void 0})}});o();var si=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 y.is(t)||k.is(t)||le.is(t)||Ae.is(t)||X.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?L.cloneWithOperation(t.where,"And",e):L.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?ni.cloneWithSelections(t.returning,e):ni.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:no.create(e,r?.toOperationNode())})},cloneWithTop(t,e){return i({...t,top:e})},cloneWithOutput(t,e){return i({...t,output:t.output?si.cloneWithSelections(t.output,e):si.create(e)})},cloneWithOrderByItems(t,e){return i({...t,orderBy:t.orderBy?ge.cloneWithItems(t.orderBy,e):ge.create(e)})},cloneWithoutOrderBy(t){return i({...t,orderBy:void 0})}});var y=i({is(t){return t.kind==="SelectQueryNode"},create(t){return i({kind:"SelectQueryNode",...t&&{with:t}})},createFrom(t,e){return i({kind:"SelectQueryNode",from:Qe.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?ri.cloneWithItems(t.groupBy,e):ri.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?ii.cloneWithOperation(t.having,"And",e):ii.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})}});o();var Zt=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,n){return new t({...this.#e,joinNode:oe.cloneWithOn(this.#e.joinNode,I(e,r,n))})}onTrue(){return new t({...this.#e,joinNode:oe.cloneWithOn(this.#e.joinNode,x.createWithSql("true"))})}$call(e){return e(this)}toOperationNode(){return this.#e.joinNode}};o();o();o();var so=i({is(t){return t.kind==="PartitionByItemNode"},create(t){return i({kind:"PartitionByItemNode",partitionBy:t})}});function ao(t){return Oe(t).map(so.create)}var _t=class t{#e;constructor(e){this.#e=i(e)}orderBy(...e){return new t({overNode:Rt.cloneWithOrderByItems(this.#e.overNode,H(e))})}clearOrderBy(){return new t({overNode:u.cloneWithoutOrderBy(this.#e.overNode)})}partitionBy(e){return new t({overNode:Rt.cloneWithPartitionByItems(this.#e.overNode,ao(e))})}$call(e){return e(this)}toOperationNode(){return this.#e.overNode}};o();o();o();o();var _e=i({is(t){return t.kind==="SelectionNode"},create(t){return i({kind:"SelectionNode",selection:t})},createSelectAll(){return i({kind:"SelectionNode",selection:Ge.create()})},createSelectAllFromTable(t){return i({kind:"SelectionNode",selection:He.createSelectAll(t)})}});function E(t){return b(t)?E(t(V())):P(t)?t.map(e=>uo(e)):[uo(t)]}function uo(t){return v(t)?_e.create(to(t)):$t(t)?_e.create(t.toOperationNode()):_e.create(er(t))}function D(t){return t?Array.isArray(t)?t.map(po):[po(t)]:[_e.createSelectAll()]}function po(t){if(v(t))return _e.createSelectAllFromTable(l(t));throw new Error(`invalid value selectAll expression: ${JSON.stringify(t)}`)}o();o();var ho=i({is(t){return t.kind==="ValuesNode"},create(t){return i({kind:"ValuesNode",values:i(t)})}});o();var co=i({is(t){return t.kind==="DefaultInsertValueNode"},create(){return i({kind:"DefaultInsertValueNode"})}});function tr(t){let e=b(t)?t(V()):t,r=P(e)?e:i([e]);return nn(r)}function nn(t){let e=sn(t);return[i([...e.keys()].map(c.create)),ho.create(t.map(r=>an(r,e)))]}function sn(t){let e=new Map;for(let r of t){let n=Object.keys(r);for(let a of n)!e.has(a)&&r[a]!==void 0&&e.set(a,e.size)}return e}function an(t,e){let r=Object.keys(t),n=Array.from({length:e.size}),a=!1,d=r.length;for(let W of r){let T=e.get(W);if($(T)){d--;continue}let A=t[W];($(A)||we(A))&&(a=!0),n[T]=A}if(d<e.size||a){let W=co.create();return me.create(n.map(T=>$(T)?W:w(T)))}return Gt.create(n)}o();o();var ai=i({is(t){return t.kind==="ColumnUpdateNode"},create(t,e){return i({kind:"ColumnUpdateNode",column:t,value:e})}});function mo(...t){return t.length===2?[ai.create(q(t[0]),w(t[1]))]:It(t[0])}function It(t){let e=b(t)?t(V()):t;return Object.entries(e).filter(([r,n])=>n!==void 0).map(([r,n])=>ai.create(c.create(r),w(n)))}o();var lo=i({is(t){return t.kind==="OnDuplicateKeyNode"},create(t){return i({kind:"OnDuplicateKeyNode",updates:t})}});o();var rr=class{insertId;numInsertedOrUpdatedRows;constructor(e,r){this.insertId=e,this.numInsertedOrUpdatedRows=r}};o();var ee=class extends Error{node;constructor(e){super("no result"),this.node=e}};function fe(t){return Object.prototype.hasOwnProperty.call(t,"prototype")}o();o();var z=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?L.cloneWithOperation(t.indexWhere,"And",e):L.create(e)})},cloneWithIndexOrWhere(t,e){return i({...t,indexWhere:t.indexWhere?L.cloneWithOperation(t.indexWhere,"Or",e):L.create(e)})},cloneWithUpdateWhere(t,e){return i({...t,updateWhere:t.updateWhere?L.cloneWithOperation(t.updateWhere,"And",e):L.create(e)})},cloneWithUpdateOrWhere(t,e){return i({...t,updateWhere:t.updateWhere?L.cloneWithOperation(t.updateWhere,"Or",e):L.create(e)})},cloneWithoutIndexWhere(t){return i({...t,indexWhere:void 0})},cloneWithoutUpdateWhere(t){return i({...t,updateWhere:void 0})}});var ir=class t{#e;constructor(e){this.#e=i(e)}column(e){let r=c.create(e);return new t({...this.#e,onConflictNode:z.cloneWith(this.#e.onConflictNode,{columns:this.#e.onConflictNode.columns?i([...this.#e.onConflictNode.columns,r]):i([r])})})}columns(e){let r=e.map(c.create);return new t({...this.#e,onConflictNode:z.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:z.cloneWith(this.#e.onConflictNode,{constraint:p.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,r,n){return new t({...this.#e,onConflictNode:z.cloneWithIndexWhere(this.#e.onConflictNode,I(e,r,n))})}clearWhere(){return new t({...this.#e,onConflictNode:z.cloneWithoutIndexWhere(this.#e.onConflictNode)})}doNothing(){return new ui({...this.#e,onConflictNode:z.cloneWith(this.#e.onConflictNode,{doNothing:!0})})}doUpdateSet(e){return new di({...this.#e,onConflictNode:z.cloneWith(this.#e.onConflictNode,{updates:It(e)})})}$call(e){return e(this)}},ui=class{#e;constructor(e){this.#e=i(e)}toOperationNode(){return this.#e.onConflictNode}},di=class t{#e;constructor(e){this.#e=i(e)}where(...e){return new t({...this.#e,onConflictNode:z.cloneWithUpdateWhere(this.#e.onConflictNode,O(e))})}whereRef(e,r,n){return new t({...this.#e,onConflictNode:z.cloneWithUpdateWhere(this.#e.onConflictNode,I(e,r,n))})}clearWhere(){return new t({...this.#e,onConflictNode:z.cloneWithoutUpdateWhere(this.#e.onConflictNode)})}$call(e){return e(this)}toOperationNode(){return this.#e.onConflictNode}};o();o();var fo=i({is(t){return t.kind==="TopNode"},create(t,e){return i({kind:"TopNode",expression:t,modifiers:e})}});function se(t,e){if(!ke(t)&&!je(t))throw new Error(`Invalid top expression: ${t}`);if(!$(e)&&!un(e))throw new Error(`Invalid top modifiers: ${e}`);return fo.create(t,e)}function un(t){return t==="percent"||t==="with ties"||t==="percent with ties"}o();var Me=i({is(t){return t.kind==="OrActionNode"},create(t){return i({kind:"OrActionNode",action:t})}});var Dt=class t{#e;constructor(e){this.#e=i(e)}values(e){let[r,n]=tr(e);return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{columns:r,values:n})})}columns(e){return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{columns:i(e.map(c.create))})})}expression(e){return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{values:J(e)})})}defaultValues(){return new t({...this.#e,queryNode:k.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:k.cloneWith(this.#e.queryNode,{orAction:Me.create("ignore")})})}orIgnore(){return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{orAction:Me.create("ignore")})})}orAbort(){return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{orAction:Me.create("abort")})})}orFail(){return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{orAction:Me.create("fail")})})}orReplace(){return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{orAction:Me.create("replace")})})}orRollback(){return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{orAction:Me.create("rollback")})})}top(e,r){return new t({...this.#e,queryNode:u.cloneWithTop(this.#e.queryNode,se(e,r))})}onConflict(e){return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{onConflict:e(new ir({onConflictNode:z.create()})).toOperationNode()})})}onDuplicateKeyUpdate(e){return new t({...this.#e,queryNode:k.cloneWith(this.#e.queryNode,{onDuplicateKey:lo.create(It(e))})})}returning(e){return new t({...this.#e,queryNode:u.cloneWithReturning(this.#e.queryNode,E(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,E(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),{adapter:n}=this.#e.executor,a=e.query;return a.returning&&n.supportsReturning||a.output&&n.supportsOutput?r.rows:[new rr(r.insertId,r.numAffectedRows??BigInt(0))]}async executeTakeFirst(){let[e]=await this.execute();return e}async executeTakeFirstOrThrow(e=ee){let r=await this.executeTakeFirst();if(r===void 0)throw fe(e)?new e(this.toOperationNode()):e(this.toOperationNode());return r}async*stream(e=100){let r=this.compile(),n=this.#e.executor.stream(r,e);for await(let a of n)yield*a.rows}async explain(e,r){return await new t({...this.#e,queryNode:u.cloneWithExplain(this.#e.queryNode,e,r)}).execute()}};o();o();var or=class{numDeletedRows;constructor(e){this.numDeletedRows=e}};o();var et=i({is(t){return t.kind==="LimitNode"},create(t){return i({kind:"LimitNode",limit:t})}});var nr=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,n){return new t({...this.#e,queryNode:u.cloneWithWhere(this.#e.queryNode,I(e,r,n))})}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,se(e,r))})}using(e){return new t({...this.#e,queryNode:Ae.cloneWithUsing(this.#e.queryNode,ae(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,Re(e,r))})}returning(e){return new t({...this.#e,queryNode:u.cloneWithReturning(this.#e.queryNode,E(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,E(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:Ae.cloneWithoutLimit(this.#e.queryNode)})}orderBy(...e){return new t({...this.#e,queryNode:u.cloneWithOrderByItems(this.#e.queryNode,H(e))})}clearOrderBy(){return new t({...this.#e,queryNode:u.cloneWithoutOrderBy(this.#e.queryNode)})}limit(e){return new t({...this.#e,queryNode:Ae.cloneWithLimit(this.#e.queryNode,et.create(w(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),{adapter:n}=this.#e.executor,a=e.query;return a.returning&&n.supportsReturning||a.output&&n.supportsOutput?r.rows:[new or(r.numAffectedRows??BigInt(0))]}async executeTakeFirst(){let[e]=await this.execute();return e}async executeTakeFirstOrThrow(e=ee){let r=await this.executeTakeFirst();if(r===void 0)throw fe(e)?new e(this.toOperationNode()):e(this.toOperationNode());return r}async*stream(e=100){let r=this.compile(),n=this.#e.executor.stream(r,e);for await(let a of n)yield*a.rows}async explain(e,r){return await new t({...this.#e,queryNode:u.cloneWithExplain(this.#e.queryNode,e,r)}).execute()}};o();o();var sr=class{numUpdatedRows;numChangedRows;constructor(e,r){this.numUpdatedRows=e,this.numChangedRows=r}};var tt=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,n){return new t({...this.#e,queryNode:u.cloneWithWhere(this.#e.queryNode,I(e,r,n))})}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,se(e,r))})}from(e){return new t({...this.#e,queryNode:le.cloneWithFromItems(this.#e.queryNode,ae(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,Re(e,r))})}orderBy(...e){return new t({...this.#e,queryNode:u.cloneWithOrderByItems(this.#e.queryNode,H(e))})}clearOrderBy(){return new t({...this.#e,queryNode:u.cloneWithoutOrderBy(this.#e.queryNode)})}limit(e){return new t({...this.#e,queryNode:le.cloneWithLimit(this.#e.queryNode,et.create(w(e)))})}set(...e){return new t({...this.#e,queryNode:le.cloneWithUpdates(this.#e.queryNode,mo(...e))})}returning(e){return new t({...this.#e,queryNode:u.cloneWithReturning(this.#e.queryNode,E(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,E(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),{adapter:n}=this.#e.executor,a=e.query;return a.returning&&n.supportsReturning||a.output&&n.supportsOutput?r.rows:[new sr(r.numAffectedRows??BigInt(0),r.numChangedRows)]}async executeTakeFirst(){let[e]=await this.execute();return e}async executeTakeFirstOrThrow(e=ee){let r=await this.executeTakeFirst();if(r===void 0)throw fe(e)?new e(this.toOperationNode()):e(this.toOperationNode());return r}async*stream(e=100){let r=this.compile(),n=this.#e.executor.stream(r,e);for await(let a of n)yield*a.rows}async explain(e,r){return await new t({...this.#e,queryNode:u.cloneWithExplain(this.#e.queryNode,e,r)}).execute()}};o();o();var pi=i({is(t){return t.kind==="CommonTableExpressionNameNode"},create(t,e){return i({kind:"CommonTableExpressionNameNode",table:K.create(t),columns:e?i(e.map(c.create)):void 0})}});o();o();var rt=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 ar=class t{#e;constructor(e){this.#e=i(e)}materialized(){return new t({...this.#e,node:rt.cloneWith(this.#e.node,{materialized:!0})})}notMaterialized(){return new t({...this.#e,node:rt.cloneWith(this.#e.node,{materialized:!1})})}toOperationNode(){return this.#e.node}};function hi(t,e){let r=e(yo()).toOperationNode();return b(t)?t(dn(r)).toOperationNode():rt.create(No(t),r)}function dn(t){return e=>new ar({node:rt.create(No(e),t)})}function No(t){if(t.includes("(")){let e=t.split(/[\(\)]/),r=e[0],n=e[1].split(",").map(a=>a.trim());return pi.create(r,n)}else return pi.create(t)}o();var Bt=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])})}});o();o();var xo=["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 wo(t){let e="";for(let r=0;r<t;++r)e+=pn();return e}function pn(){return xo[~~(Math.random()*xo.length)]}function f(){return new ci}var ci=class{#e;get queryId(){return this.#e===void 0&&(this.#e=wo(8)),this.#e}};o();o();o();var Ie=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 n=this.transformNodeImpl(e,r);return this.nodeStack.pop(),i(n)}transformNodeImpl(e,r){return this.#e[e.kind](e,r)}transformNodeList(e,r){return e&&i(e.map(n=>this.transformNode(n,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 hn=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}),cn={json_agg:!0,to_json:!0},ur=class extends Ie{#e;#t=new Set;#r=new Set;constructor(e){super(),this.#e=e}transformNodeImpl(e,r){if(!this.#n(e))return super.transformNodeImpl(e,r);let n=this.#d(e);for(let h of n)this.#r.add(h);let a=this.#a(e);for(let h of a)this.#t.add(h);let d=super.transformNodeImpl(e,r);for(let h of a)this.#t.delete(h);for(let h of n)this.#r.delete(h);return d}transformSchemableIdentifier(e,r){let n=super.transformSchemableIdentifier(e,r);return n.schema||!this.#t.has(e.identifier.name)?n:{...n,schema:p.create(this.#e)}}transformReferences(e,r){let n=super.transformReferences(e,r);return n.table.table.schema?n:{...n,table:K.createWithSchema(this.#e,n.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,n){return cn[e.func]?e[n].map(a=>!K.is(a)||a.table.schema?this.transformNode(a,r):{...a,table:this.transformIdentifier(a.table.identifier,r)}):this.transformNodeList(e[n],r)}#n(e){return e.kind in hn}#a(e){let r=new Set;if("name"in e&&e.name&&M.is(e.name)&&this.#s(e.name,r),"from"in e&&e.from)for(let n of e.from.froms)this.#o(n,r);if("into"in e&&e.into&&this.#o(e.into,r),"table"in e&&e.table&&this.#o(e.table,r),"joins"in e&&e.joins)for(let n of e.joins)this.#o(n.table,r);return"using"in e&&e.using&&(oe.is(e.using)?this.#o(e.using.table,r):this.#o(e.using,r)),r}#d(e){let r=new Set;return"with"in e&&e.with&&this.#u(e.with,r),r}#o(e,r){if(K.is(e))this.#s(e.table,r);else if(R.is(e)&&K.is(e.node))this.#s(e.node.table,r);else if(Xt.is(e))for(let n of e.items)this.#o(n,r)}#s(e,r){let n=e.identifier.name;!this.#t.has(n)&&!this.#r.has(n)&&r.add(n)}#u(e,r){for(let n of e.expressions){let a=n.name.table.table.identifier.name;this.#r.has(a)||r.add(a)}}};var te=class{#e;constructor(e){this.#e=new ur(e)}transformQuery(e){return this.#e.transformNode(e.node,e.queryId)}async transformResult(e){return e.result}};o();o();o();var Oo=i({is(t){return t.kind==="MatchedNode"},create(t,e=!1){return i({kind:"MatchedNode",not:t,bySource:e})}});function mi(t,e,r){return _.create(Ze([Oo.create(!t.isMatched,t.bySource),...e&&e.length>0?[e.length===3&&r?I(e[0],e[1],e[2]):O(e)]:[]],"and",!1))}function it(t){return v(t)?x.create([t],[]):g(t)?t.toOperationNode():t}o();o();o();o();var qt=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 dr(t){let e=new qt,r=new qt;return t.provideConnection(async n=>(e.resolve(n),await r.promise)).catch(n=>e.reject(n)),i({connection:await e.promise,release:r.resolve})}var mn=i([]),ot=class{#e;constructor(e=mn){this.#e=e}get plugins(){return this.#e}transformQuery(e,r){for(let n of this.#e){let a=n.transformQuery({node:e,queryId:r});if(a.kind===e.kind)e=a;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 ${a.kind}`].join(" "))}return e}async executeQuery(e){return await this.provideConnection(async r=>{let n=await r.executeQuery(e);return"numUpdatedOrDeletedRows"in n&&ce("kysely:warning: outdated driver/plugin detected! `QueryResult.numUpdatedOrDeletedRows` has been replaced with `QueryResult.numAffectedRows`."),await this.#t(n,e.queryId)})}async*stream(e,r){let{connection:n,release:a}=await dr(this);try{for await(let d of n.streamQuery(e,r))yield await this.#t(d,e.queryId)}finally{a()}}async#t(e,r){for(let n of this.#e)e=await n.transformResult({result:e,queryId:r});return e}};var li=class t extends ot{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([])}},De=new li;o();var pr=class{numChangedRows;constructor(e){this.numChangedRows=e}};var hr=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,se(e,r))})}using(...e){return new Be({...this.#e,queryNode:X.cloneWithUsing(this.#e.queryNode,Re("Using",e))})}returning(e){return new t({...this.#e,queryNode:u.cloneWithReturning(this.#e.queryNode,E(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,E(e))})}outputAll(e){return new t({...this.#e,queryNode:u.cloneWithOutput(this.#e.queryNode,D(e))})}},Be=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,se(e,r))})}whenMatched(){return this.#t([])}whenMatchedAnd(...e){return this.#t(e)}whenMatchedAndRef(e,r,n){return this.#t([e,r,n],!0)}#t(e,r){return new cr({...this.#e,queryNode:X.cloneWithWhen(this.#e.queryNode,mi({isMatched:!0},e,r))})}whenNotMatched(){return this.#r([])}whenNotMatchedAnd(...e){return this.#r(e)}whenNotMatchedAndRef(e,r,n){return this.#r([e,r,n],!0)}whenNotMatchedBySource(){return this.#r([],!1,!0)}whenNotMatchedBySourceAnd(...e){return this.#r(e,!1,!0)}whenNotMatchedBySourceAndRef(e,r,n){return this.#r([e,r,n],!0,!0)}returning(e){return new t({...this.#e,queryNode:u.cloneWithReturning(this.#e.queryNode,E(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,E(e))})}outputAll(e){return new t({...this.#e,queryNode:u.cloneWithOutput(this.#e.queryNode,D(e))})}#r(e,r=!1,n=!1){let a={...this.#e,queryNode:X.cloneWithWhen(this.#e.queryNode,mi({isMatched:!1,bySource:n},e,r))},d=n?cr:fi;return new d(a)}$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),{adapter:n}=this.#e.executor,a=e.query;return a.returning&&n.supportsReturning||a.output&&n.supportsOutput?r.rows:[new pr(r.numAffectedRows)]}async executeTakeFirst(){let[e]=await this.execute();return e}async executeTakeFirstOrThrow(e=ee){let r=await this.executeTakeFirst();if(r===void 0)throw fe(e)?new e(this.toOperationNode()):e(this.toOperationNode());return r}},cr=class{#e;constructor(e){this.#e=i(e)}thenDelete(){return new Be({...this.#e,queryNode:X.cloneWithThen(this.#e.queryNode,it("delete"))})}thenDoNothing(){return new Be({...this.#e,queryNode:X.cloneWithThen(this.#e.queryNode,it("do nothing"))})}thenUpdate(e){return new Be({...this.#e,queryNode:X.cloneWithThen(this.#e.queryNode,it(e(new tt({queryId:this.#e.queryId,executor:De,queryNode:le.createWithoutTable()}))))})}thenUpdateSet(...e){return this.thenUpdate(r=>r.set(...e))}},fi=class{#e;constructor(e){this.#e=i(e)}thenDoNothing(){return new Be({...this.#e,queryNode:X.cloneWithThen(this.#e.queryNode,it("do nothing"))})}thenInsertValues(e){let[r,n]=tr(e);return new Be({...this.#e,queryNode:X.cloneWithThen(this.#e.queryNode,it(k.cloneWith(k.createWithoutInto(),{columns:r,values:n})))})}};var nt=class t{#e;constructor(e){this.#e=i(e)}selectFrom(e){return Lt({queryId:f(),executor:this.#e.executor,queryNode:y.createFrom(ae(e),this.#e.withNode)})}selectNoFrom(e){return Lt({queryId:f(),executor:this.#e.executor,queryNode:y.cloneWithSelections(y.create(this.#e.withNode),E(e))})}insertInto(e){return new Dt({queryId:f(),executor:this.#e.executor,queryNode:k.create(l(e),this.#e.withNode)})}replaceInto(e){return new Dt({queryId:f(),executor:this.#e.executor,queryNode:k.create(l(e),this.#e.withNode,!0)})}deleteFrom(e){return new nr({queryId:f(),executor:this.#e.executor,queryNode:Ae.create(ae(e),this.#e.withNode)})}updateTable(e){return new tt({queryId:f(),executor:this.#e.executor,queryNode:le.create(ae(e),this.#e.withNode)})}mergeInto(e){return new hr({queryId:f(),executor:this.#e.executor,queryNode:X.create(Ni(e),this.#e.withNode)})}with(e,r){let n=hi(e,r);return new t({...this.#e,withNode:this.#e.withNode?Bt.cloneWithExpression(this.#e.withNode,n):Bt.create(n)})}withRecursive(e,r){let n=hi(e,r);return new t({...this.#e,withNode:this.#e.withNode?Bt.cloneWithExpression(this.#e.withNode,n):Bt.create(n,{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 te(e))})}};function yo(){return new nt({executor:De})}function go(t,e){return new Zt({joinNode:oe.create(t,Fe(e))})}function Co(){return new _t({overNode:Rt.create()})}function Re(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]);if(e.length===1)return Nn(t,e[0]);throw new Error("not implemented")}function ln(t,e,r){return r(go(t,e)).toOperationNode()}function fn(t,e,r,n){return oe.createWithOn(t,Fe(e),I(r,"=",n))}function Nn(t,e){return oe.create(t,Fe(e))}o();var vo=i({is(t){return t.kind==="OffsetNode"},create(t){return i({kind:"OffsetNode",offset:t})}});o();o();var bo=i({is(t){return t.kind==="GroupByItemNode"},create(t){return i({kind:"GroupByItemNode",groupBy:t})}});function Wo(t){return t=b(t)?t(V()):t,Oe(t).map(bo.create)}o();o();var mr=i({is(t){return t.kind==="SetOperationNode"},create(t,e,r){return i({kind:"SetOperationNode",operator:t,expression:e,all:r})}});function Ve(t,e,r){return b(e)&&(e=e(lr())),P(e)||(e=[e]),e.map(n=>mr.create(t,J(n),r))}o();var N=class t{#e;constructor(e){this.#e=e}get expressionType(){}as(e){return new Pt(this,e)}or(...e){return new yi(ie.create(this.#e,O(e)))}and(...e){return new xi(U.create(this.#e,O(e)))}$castTo(){return new t(this.#e)}$notNull(){return new t(this.#e)}toOperationNode(){return this.#e}},Pt=class{#e;#t;constructor(e,r){this.#e=e,this.#t=r}get expression(){return this.#e}get alias(){return this.#t}toOperationNode(){return R.create(this.#e.toOperationNode(),g(this.#t)?this.#t.toOperationNode():p.create(this.#t))}},yi=class t{#e;constructor(e){this.#e=e}get expressionType(){}as(e){return new Pt(this,e)}or(...e){return new t(ie.create(this.#e,O(e)))}$castTo(){return new t(this.#e)}toOperationNode(){return Y.create(this.#e)}},xi=class t{#e;constructor(e){this.#e=e}get expressionType(){}as(e){return new Pt(this,e)}and(...e){return new t(U.create(this.#e,O(e)))}$castTo(){return new t(this.#e)}toOperationNode(){return Y.create(this.#e)}};o();o();var ko={is(t){return t.kind==="FetchNode"},create(t,e){return{kind:"FetchNode",rowCount:S.create(t),modifier:e}}};function So(t,e){if(!ke(t)&&!je(t))throw new Error(`Invalid fetch row count: ${t}`);if(!yn(e))throw new Error(`Invalid fetch modifier: ${e}`);return ko.create(t,e)}function yn(t){return t==="only"||t==="with ties"}var wi=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,n){return new t({...this.#e,queryNode:u.cloneWithWhere(this.#e.queryNode,I(e,r,n))})}having(...e){return new t({...this.#e,queryNode:y.cloneWithHaving(this.#e.queryNode,O(e))})}havingRef(e,r,n){return new t({...this.#e,queryNode:y.cloneWithHaving(this.#e.queryNode,I(e,r,n))})}select(e){return new t({...this.#e,queryNode:y.cloneWithSelections(this.#e.queryNode,E(e))})}distinctOn(e){return new t({...this.#e,queryNode:y.cloneWithDistinctOn(this.#e.queryNode,Oe(e))})}modifyFront(e){return new t({...this.#e,queryNode:y.cloneWithFrontModifier(this.#e.queryNode,he.createWithExpression(e.toOperationNode()))})}modifyEnd(e){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,he.createWithExpression(e.toOperationNode()))})}distinct(){return new t({...this.#e,queryNode:y.cloneWithFrontModifier(this.#e.queryNode,he.create("Distinct"))})}forUpdate(e){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,he.create("ForUpdate",e?St(e).map(l):void 0))})}forShare(e){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,he.create("ForShare",e?St(e).map(l):void 0))})}forKeyShare(e){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,he.create("ForKeyShare",e?St(e).map(l):void 0))})}forNoKeyUpdate(e){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,he.create("ForNoKeyUpdate",e?St(e).map(l):void 0))})}skipLocked(){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,he.create("SkipLocked"))})}noWait(){return new t({...this.#e,queryNode:u.cloneWithEndModifier(this.#e.queryNode,he.create("NoWait"))})}selectAll(e){return new t({...this.#e,queryNode:y.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,Re(e,r))})}orderBy(...e){return new t({...this.#e,queryNode:u.cloneWithOrderByItems(this.#e.queryNode,H(e))})}groupBy(e){return new t({...this.#e,queryNode:y.cloneWithGroupByItems(this.#e.queryNode,Wo(e))})}limit(e){return new t({...this.#e,queryNode:y.cloneWithLimit(this.#e.queryNode,et.create(w(e)))})}offset(e){return new t({...this.#e,queryNode:y.cloneWithOffset(this.#e.queryNode,vo.create(w(e)))})}fetch(e,r="only"){return new t({...this.#e,queryNode:y.cloneWithFetch(this.#e.queryNode,So(e,r))})}top(e,r){return new t({...this.#e,queryNode:u.cloneWithTop(this.#e.queryNode,se(e,r))})}union(e){return new t({...this.#e,queryNode:y.cloneWithSetOperations(this.#e.queryNode,Ve("union",e,!1))})}unionAll(e){return new t({...this.#e,queryNode:y.cloneWithSetOperations(this.#e.queryNode,Ve("union",e,!0))})}intersect(e){return new t({...this.#e,queryNode:y.cloneWithSetOperations(this.#e.queryNode,Ve("intersect",e,!1))})}intersectAll(e){return new t({...this.#e,queryNode:y.cloneWithSetOperations(this.#e.queryNode,Ve("intersect",e,!0))})}except(e){return new t({...this.#e,queryNode:y.cloneWithSetOperations(this.#e.queryNode,Ve("except",e,!1))})}exceptAll(e){return new t({...this.#e,queryNode:y.cloneWithSetOperations(this.#e.queryNode,Ve("except",e,!0))})}as(e){return new Oi(this,e)}clearSelect(){return new t({...this.#e,queryNode:y.cloneWithoutSelections(this.#e.queryNode)})}clearWhere(){return new t({...this.#e,queryNode:u.cloneWithoutWhere(this.#e.queryNode)})}clearLimit(){return new t({...this.#e,queryNode:y.cloneWithoutLimit(this.#e.queryNode)})}clearOffset(){return new t({...this.#e,queryNode:y.cloneWithoutOffset(this.#e.queryNode)})}clearOrderBy(){return new t({...this.#e,queryNode:u.cloneWithoutOrderBy(this.#e.queryNode)})}clearGroupBy(){return new t({...this.#e,queryNode:y.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 N(this.toOperationNode())}$asScalar(){return new N(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)).rows}async executeTakeFirst(){let[e]=await this.execute();return e}async executeTakeFirstOrThrow(e=ee){let r=await this.executeTakeFirst();if(r===void 0)throw fe(e)?new e(this.toOperationNode()):e(this.toOperationNode());return r}async*stream(e=100){let r=this.compile(),n=this.#e.executor.stream(r,e);for await(let a of n)yield*a.rows}async explain(e,r){return await new t({...this.#e,queryNode:u.cloneWithExplain(this.#e.queryNode,e,r)}).execute()}};function Lt(t){return new wi(t)}var Oi=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 R.create(this.#e.toOperationNode(),p.create(this.#t))}};o();o();var Ne=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 n=r?"withinGroup":"orderBy";return i({...t,[n]:t[n]?ge.cloneWithItems(t[n],e):ge.create(e)})},cloneWithFilter(t,e){return i({...t,filter:t.filter?L.cloneWithOperation(t.filter,"And",e):L.create(e)})},cloneWithOrFilter(t,e){return i({...t,filter:t.filter?L.cloneWithOperation(t.filter,"Or",e):L.create(e)})},cloneWithOver(t,e){return i({...t,over:e})}});o();var gi=i({is(t){return t.kind==="FunctionNode"},create(t,e){return i({kind:"FunctionNode",func:t,arguments:e})}});o();var st=class t{#e;constructor(e){this.#e=i(e)}get expressionType(){}as(e){return new Ci(this,e)}distinct(){return new t({...this.#e,aggregateFunctionNode:Ne.cloneWithDistinct(this.#e.aggregateFunctionNode)})}orderBy(...e){return new t({...this.#e,aggregateFunctionNode:u.cloneWithOrderByItems(this.#e.aggregateFunctionNode,H(e))})}clearOrderBy(){return new t({...this.#e,aggregateFunctionNode:u.cloneWithoutOrderBy(this.#e.aggregateFunctionNode)})}withinGroupOrderBy(...e){return new t({...this.#e,aggregateFunctionNode:Ne.cloneWithOrderBy(this.#e.aggregateFunctionNode,H(e),!0)})}filterWhere(...e){return new t({...this.#e,aggregateFunctionNode:Ne.cloneWithFilter(this.#e.aggregateFunctionNode,O(e))})}filterWhereRef(e,r,n){return new t({...this.#e,aggregateFunctionNode:Ne.cloneWithFilter(this.#e.aggregateFunctionNode,I(e,r,n))})}over(e){let r=Co();return new t({...this.#e,aggregateFunctionNode:Ne.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}},Ci=class{#e;#t;constructor(e,r){this.#e=e,this.#t=r}get expression(){return this.#e}get alias(){return this.#t}toOperationNode(){return R.create(this.#e.toOperationNode(),p.create(this.#t))}};function fr(){let t=(r,n)=>new N(gi.create(r,Oe(n??[]))),e=(r,n)=>new st({aggregateFunctionNode:Ne.create(r,n?Oe(n):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 st({aggregateFunctionNode:Ne.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 st({aggregateFunctionNode:Ne.create("json_agg",[v(r)?l(r):r.toOperationNode()])})},toJson(r){return new N(gi.create("to_json",[v(r)?l(r):r.toOperationNode()]))}})}o();o();var To=i({is(t){return t.kind==="UnaryOperationNode"},create(t,e){return i({kind:"UnaryOperationNode",operator:t,operand:e})}});function Eo(t,e){return To.create(j.create(t),q(e))}o();o();var Z=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),_.cloneWithResult(t.when[t.when.length-1],e)]):void 0})},cloneWith(t,e){return i({...t,...e})}});var at=class{#e;constructor(e){this.#e=i(e)}when(...e){return new Nr({...this.#e,node:Z.cloneWithWhen(this.#e.node,_.create(O(e)))})}},Nr=class{#e;constructor(e){this.#e=i(e)}then(e){return new vi({...this.#e,node:Z.cloneWithThen(this.#e.node,Ht(e)?At(e):w(e))})}},vi=class{#e;constructor(e){this.#e=i(e)}when(...e){return new Nr({...this.#e,node:Z.cloneWithWhen(this.#e.node,_.create(O(e)))})}else(e){return new bi({...this.#e,node:Z.cloneWith(this.#e.node,{else:Ht(e)?At(e):w(e)})})}end(){return new N(Z.cloneWith(this.#e.node,{isStatement:!1}))}endCase(){return new N(Z.cloneWith(this.#e.node,{isStatement:!0}))}},bi=class{#e;constructor(e){this.#e=i(e)}end(){return new N(Z.cloneWith(this.#e.node,{isStatement:!1}))}endCase(){return new N(Z.cloneWith(this.#e.node,{isStatement:!0}))}};o();o();var Wi=i({is(t){return t.kind==="JSONPathLegNode"},create(t,e){return i({kind:"JSONPathLegNode",type:t,value:e})}});var ut=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 Ye.is(this.#e)?new yr(Ye.cloneWithTraversal(this.#e,Ee.is(this.#e.traversal)?Ee.cloneWithLeg(this.#e.traversal,Wi.create(e,r)):jt.cloneWithValue(this.#e.traversal,S.createImmediate(r)))):new yr(Ee.cloneWithLeg(this.#e,Wi.create(e,r)))}},yr=class t extends ut{#e;constructor(e){super(e),this.#e=e}get expressionType(){}as(e){return new ki(this,e)}$castTo(){return new t(this.#e)}$notNull(){return new t(this.#e)}toOperationNode(){return this.#e}},ki=class{#e;#t;constructor(e,r){this.#e=e,this.#t=r}get expression(){return this.#e}get alias(){return this.#t}toOperationNode(){return R.create(this.#e.toOperationNode(),g(this.#t)?this.#t.toOperationNode():p.create(this.#t))}};o();var Si=i({is(t){return t.kind==="TupleNode"},create(t){return i({kind:"TupleNode",values:i(t)})}});o();o();var xn=["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"],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+\)$/],Ao=i({is(t){return t.kind==="DataTypeNode"},create(t){return i({kind:"DataTypeNode",dataType:t})}});function Ro(t){return!!(xn.includes(t)||wn.some(e=>e.test(t)))}function ue(t){if(g(t))return t.toOperationNode();if(Ro(t))return Ao.create(t);throw new Error(`invalid column data type ${JSON.stringify(t)}`)}o();var Io=i({is(t){return t.kind==="CastNode"},create(t,e){return i({kind:"CastNode",expression:t,dataType:e})}});function lr(t=De){function e(a,d,h){return new N(Yt(a,d,h))}function r(a,d){return new N(Eo(a,d))}let n=Object.assign(e,{fn:void 0,eb:void 0,selectFrom(a){return Lt({queryId:f(),executor:t,queryNode:y.createFrom(ae(a))})},case(a){return new at({node:Z.create($(a)?void 0:q(a))})},ref(a,d){return $(d)?new N(G(a)):new ut(eo(a,d))},jsonPath(){return new ut(Ee.create())},table(a){return new N(l(a))},val(a){return new N(w(a))},refTuple(...a){return new N(Si.create(a.map(q)))},tuple(...a){return new N(Si.create(a.map(w)))},lit(a){return new N(At(a))},unary:r,not(a){return r("not",a)},exists(a){return r("exists",a)},neg(a){return r("-",a)},between(a,d,h){return new N(Te.create(q(a),j.create("between"),U.create(w(d),w(h))))},betweenSymmetric(a,d,h){return new N(Te.create(q(a),j.create("between symmetric"),U.create(w(d),w(h))))},and(a){return P(a)?new N(Ze(a,"and")):new N(ei(a,"and"))},or(a){return P(a)?new N(Ze(a,"or")):new N(ei(a,"or"))},parens(...a){let d=O(a);return Y.is(d)?new N(d):new N(Y.create(d))},cast(a,d){return new N(Io.create(q(a),ue(d)))},withSchema(a){return lr(t.withPluginAtFront(new te(a)))}});return n.fn=fr(),n.eb=n,n}function V(t){return lr()}function J(t){if(g(t))return t.toOperationNode();if(b(t))return t(V()).toOperationNode();throw new Error(`invalid expression: ${JSON.stringify(t)}`)}function er(t){if(g(t))return t.toOperationNode();if(b(t))return t(V()).toOperationNode();throw new Error(`invalid aliased expression: ${JSON.stringify(t)}`)}function we(t){return zt(t)||Gi(t)||b(t)}o();var xr=class{#e;get table(){return this.#e}constructor(e){this.#e=e}as(e){return new Ti(this.#e,e)}},Ti=class{#e;#t;get table(){return this.#e}get alias(){return this.#t}constructor(e,r){this.#e=e,this.#t=r}toOperationNode(){return R.create(l(this.#e),p.create(this.#t))}};function Do(t){return B(t)&&g(t)&&v(t.table)&&v(t.alias)}function ae(t){return P(t)?t.map(e=>Fe(e)):[Fe(t)]}function Fe(t){return v(t)?Ni(t):Do(t)?t.toOperationNode():er(t)}function Ni(t){let e=" as ";if(t.includes(e)){let[r,n]=t.split(e).map(Bo);return R.create(l(r),p.create(n))}else return l(t)}function l(t){let e=".";if(t.includes(e)){let[r,n]=t.split(e).map(Bo);return K.createWithSchema(r,n)}else return K.create(t)}function Bo(t){return t.trim()}o();o();var Ei=i({is(t){return t.kind==="AddColumnNode"},create(t){return i({kind:"AddColumnNode",column:t})}});o();var C=i({is(t){return t.kind==="ColumnDefinitionNode"},create(t,e){return i({kind:"ColumnDefinitionNode",column:c.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})}});o();var Ai=i({is(t){return t.kind==="DropColumnNode"},create(t){return i({kind:"DropColumnNode",column:c.create(t)})}});o();var Ri=i({is(t){return t.kind==="RenameColumnNode"},create(t,e){return i({kind:"RenameColumnNode",column:c.create(t),renameTo:c.create(e)})}});o();o();var dt=i({is(t){return t.kind==="CheckConstraintNode"},create(t,e){return i({kind:"CheckConstraintNode",expression:t,name:e?p.create(e):void 0})}});o();var qo=["no action","restrict","cascade","set null","set default"],pt=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})}});o();function wr(t){return g(t)?t.toOperationNode():S.createImmediate(t)}o();var Qt=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})}});o();var Lo=i({is(t){return t.kind==="DefaultValueNode"},create(t){return i({kind:"DefaultValueNode",defaultValue:t})}});o();function ht(t){if(qo.includes(t))return t;throw new Error(`invalid OnModifyForeignAction ${t}`)}var Ce=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=G(e);if(!r.table||Ge.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:pt.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:pt.cloneWithOnDelete(this.#e.references,ht(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:pt.cloneWithOnUpdate(this.#e.references,ht(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:Lo.create(wr(e))}))}check(e){return new t(C.cloneWith(this.#e,{check:dt.create(e.toOperationNode())}))}generatedAlwaysAs(e){return new t(C.cloneWith(this.#e,{generated:Qt.createWithExpression(e.toOperationNode())}))}generatedAlwaysAsIdentity(){return new t(C.cloneWith(this.#e,{generated:Qt.create({identity:!0,always:!0})}))}generatedByDefaultAsIdentity(){return new t(C.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(C.cloneWith(this.#e,{generated:Qt.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}};o();var Ii=i({is(t){return t.kind==="ModifyColumnNode"},create(t){return i({kind:"ModifyColumnNode",column:t})}});o();o();var de=i({is(t){return t.kind==="ForeignKeyConstraintNode"},create(t,e,r,n){return i({kind:"ForeignKeyConstraintNode",columns:t,references:pt.create(e,r),name:n?p.create(n):void 0})},cloneWith(t,e){return i({...t,...e})}});var ct=class t{#e;constructor(e){this.#e=e}onDelete(e){return new t(de.cloneWith(this.#e,{onDelete:ht(e)}))}onUpdate(e){return new t(de.cloneWith(this.#e,{onUpdate:ht(e)}))}deferrable(){return new t(de.cloneWith(this.#e,{deferrable:!0}))}notDeferrable(){return new t(de.cloneWith(this.#e,{deferrable:!1}))}initiallyDeferred(){return new t(de.cloneWith(this.#e,{initiallyDeferred:!0}))}initiallyImmediate(){return new t(de.cloneWith(this.#e,{initiallyDeferred:!1}))}$call(e){return e(this)}toOperationNode(){return this.#e}};o();var mt=i({is(t){return t.kind==="AddConstraintNode"},create(t){return i({kind:"AddConstraintNode",constraint:t})}});o();var ye=i({is(t){return t.kind==="UniqueConstraintNode"},create(t,e,r){return i({kind:"UniqueConstraintNode",columns:i(t.map(c.create)),name:e?p.create(e):void 0,nullsNotDistinct:r})},cloneWith(t,e){return i({...t,...e})}});o();var lt=i({is(t){return t.kind==="DropConstraintNode"},create(t){return i({kind:"DropConstraintNode",constraintName:p.create(t)})},cloneWith(t,e){return i({...t,...e})}});o();o();var ft=i({is(t){return t.kind==="AlterColumnNode"},create(t,e,r){return i({kind:"AlterColumnNode",column:c.create(t),[e]:r})}});var Mt=class{#e;constructor(e){this.#e=e}setDataType(e){return new ze(ft.create(this.#e,"dataType",ue(e)))}setDefault(e){return new ze(ft.create(this.#e,"setDefault",wr(e)))}dropDefault(){return new ze(ft.create(this.#e,"dropDefault",!0))}setNotNull(){return new ze(ft.create(this.#e,"setNotNull",!0))}dropNotNull(){return new ze(ft.create(this.#e,"dropNotNull",!0))}$call(e){return e(this)}},ze=class{#e;constructor(e){this.#e=e}toOperationNode(){return this.#e}};o();var ve=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())}};o();var Or=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(m.cloneWithTableProps(this.#e.node,{addConstraint:mt.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())}};o();var Ft=class t{#e;constructor(e){this.#e=i(e)}ifExists(){return new t({...this.#e,node:m.cloneWithTableProps(this.#e.node,{dropConstraint:lt.cloneWith(this.#e.node.dropConstraint,{ifExists:!0})})})}cascade(){return new t({...this.#e,node:m.cloneWithTableProps(this.#e.node,{dropConstraint:lt.cloneWith(this.#e.node.dropConstraint,{modifier:"cascade"})})})}restrict(){return new t({...this.#e,node:m.cloneWithTableProps(this.#e.node,{dropConstraint:lt.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())}};o();var be=i({is(t){return t.kind==="PrimaryKeyConstraintNode"},create(t,e){return i({kind:"PrimaryKeyConstraintNode",columns:i(t.map(c.create)),name:e?p.create(e):void 0})},cloneWith(t,e){return i({...t,...e})}});o();var qe=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]})}});o();var gr=class t{#e;constructor(e){this.#e=i(e)}unique(){return new t({...this.#e,node:m.cloneWithTableProps(this.#e.node,{addIndex:qe.cloneWith(this.#e.node.addIndex,{unique:!0})})})}column(e){return new t({...this.#e,node:m.cloneWithTableProps(this.#e.node,{addIndex:qe.cloneWithColumns(this.#e.node.addIndex,[Xe(e)])})})}columns(e){return new t({...this.#e,node:m.cloneWithTableProps(this.#e.node,{addIndex:qe.cloneWithColumns(this.#e.node.addIndex,e.map(Xe))})})}expression(e){return new t({...this.#e,node:m.cloneWithTableProps(this.#e.node,{addIndex:qe.cloneWithColumns(this.#e.node.addIndex,[e.toOperationNode()])})})}using(e){return new t({...this.#e,node:m.cloneWithTableProps(this.#e.node,{addIndex:qe.cloneWith(this.#e.node.addIndex,{using:x.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())}};o();var Nt=class t{#e;constructor(e){this.#e=e}nullsNotDistinct(){return new t(ye.cloneWith(this.#e,{nullsNotDistinct:!0}))}deferrable(){return new t(ye.cloneWith(this.#e,{deferrable:!0}))}notDeferrable(){return new t(ye.cloneWith(this.#e,{deferrable:!1}))}initiallyDeferred(){return new t(ye.cloneWith(this.#e,{initiallyDeferred:!0}))}initiallyImmediate(){return new t(ye.cloneWith(this.#e,{initiallyDeferred:!1}))}$call(e){return e(this)}toOperationNode(){return this.#e}};o();var yt=class t{#e;constructor(e){this.#e=e}deferrable(){return new t(be.cloneWith(this.#e,{deferrable:!0}))}notDeferrable(){return new t(be.cloneWith(this.#e,{deferrable:!1}))}initiallyDeferred(){return new t(be.cloneWith(this.#e,{initiallyDeferred:!0}))}initiallyImmediate(){return new t(be.cloneWith(this.#e,{initiallyDeferred:!1}))}$call(e){return e(this)}toOperationNode(){return this.#e}};o();var xt=class{#e;constructor(e){this.#e=e}$call(e){return e(this)}toOperationNode(){return this.#e}};o();var Po=i({is(t){return t.kind==="RenameConstraintNode"},create(t,e){return i({kind:"RenameConstraintNode",oldName:p.create(t),newName:p.create(e)})}});var Cr=class{#e;constructor(e){this.#e=i(e)}renameTo(e){return new ve({...this.#e,node:m.cloneWithTableProps(this.#e.node,{renameTo:l(e)})})}setSchema(e){return new ve({...this.#e,node:m.cloneWithTableProps(this.#e.node,{setSchema:p.create(e)})})}alterColumn(e,r){let n=r(new Mt(e));return new Ue({...this.#e,node:m.cloneWithColumnAlteration(this.#e.node,n.toOperationNode())})}dropColumn(e){return new Ue({...this.#e,node:m.cloneWithColumnAlteration(this.#e.node,Ai.create(e))})}renameColumn(e,r){return new Ue({...this.#e,node:m.cloneWithColumnAlteration(this.#e.node,Ri.create(e,r))})}addColumn(e,r,n=F){let a=n(new Ce(C.create(e,ue(r))));return new Ue({...this.#e,node:m.cloneWithColumnAlteration(this.#e.node,Ei.create(a.toOperationNode()))})}modifyColumn(e,r,n=F){let a=n(new Ce(C.create(e,ue(r))));return new Ue({...this.#e,node:m.cloneWithColumnAlteration(this.#e.node,Ii.create(a.toOperationNode()))})}addUniqueConstraint(e,r,n=F){let a=n(new Nt(ye.create(r,e)));return new ve({...this.#e,node:m.cloneWithTableProps(this.#e.node,{addConstraint:mt.create(a.toOperationNode())})})}addCheckConstraint(e,r,n=F){let a=n(new xt(dt.create(r.toOperationNode(),e)));return new ve({...this.#e,node:m.cloneWithTableProps(this.#e.node,{addConstraint:mt.create(a.toOperationNode())})})}addForeignKeyConstraint(e,r,n,a,d=F){let h=d(new ct(de.create(r.map(c.create),l(n),a.map(c.create),e)));return new Or({...this.#e,constraintBuilder:h})}addPrimaryKeyConstraint(e,r,n=F){let a=n(new yt(be.create(r,e)));return new ve({...this.#e,node:m.cloneWithTableProps(this.#e.node,{addConstraint:mt.create(a.toOperationNode())})})}dropConstraint(e){return new Ft({...this.#e,node:m.cloneWithTableProps(this.#e.node,{dropConstraint:lt.create(e)})})}renameConstraint(e,r){return new Ft({...this.#e,node:m.cloneWithTableProps(this.#e.node,{renameConstraint:Po.create(e,r)})})}addIndex(e){return new gr({...this.#e,node:m.cloneWithTableProps(this.#e.node,{addIndex:qe.create(e)})})}dropIndex(e){return new ve({...this.#e,node:m.cloneWithTableProps(this.#e.node,{dropIndex:Se.create(e)})})}$call(e){return e(this)}},Ue=class t{#e;constructor(e){this.#e=i(e)}alterColumn(e,r){let n=r(new Mt(e));return new t({...this.#e,node:m.cloneWithColumnAlteration(this.#e.node,n.toOperationNode())})}dropColumn(e){return new t({...this.#e,node:m.cloneWithColumnAlteration(this.#e.node,Ai.create(e))})}renameColumn(e,r){return new t({...this.#e,node:m.cloneWithColumnAlteration(this.#e.node,Ri.create(e,r))})}addColumn(e,r,n=F){let a=n(new Ce(C.create(e,ue(r))));return new t({...this.#e,node:m.cloneWithColumnAlteration(this.#e.node,Ei.create(a.toOperationNode()))})}modifyColumn(e,r,n=F){let a=n(new Ce(C.create(e,ue(r))));return new t({...this.#e,node:m.cloneWithColumnAlteration(this.#e.node,Ii.create(a.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())}};o();o();var wt=class extends Ie{transformPrimitiveValueList(e){return me.create(e.values.map(S.createImmediate))}transformValue(e){return S.createImmediate(e.value)}};var vr=class t{#e;constructor(e){this.#e=i(e)}ifNotExists(){return new t({...this.#e,node:re.cloneWith(this.#e.node,{ifNotExists:!0})})}unique(){return new t({...this.#e,node:re.cloneWith(this.#e.node,{unique:!0})})}nullsNotDistinct(){return new t({...this.#e,node:re.cloneWith(this.#e.node,{nullsNotDistinct:!0})})}on(e){return new t({...this.#e,node:re.cloneWith(this.#e.node,{table:l(e)})})}column(e){return new t({...this.#e,node:re.cloneWithColumns(this.#e.node,[Xe(e)])})}columns(e){return new t({...this.#e,node:re.cloneWithColumns(this.#e.node,e.map(Xe))})}expression(e){return new t({...this.#e,node:re.cloneWithColumns(this.#e.node,[e.toOperationNode()])})}using(e){return new t({...this.#e,node:re.cloneWith(this.#e.node,{using:x.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())}};o();var br=class t{#e;constructor(e){this.#e=i(e)}ifNotExists(){return new t({...this.#e,node:Vt.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())}};o();o();function Qo(t){if(ji.includes(t))return t;throw new Error(`invalid OnCommitAction ${t}`)}var Wr=class t{#e;constructor(e){this.#e=i(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,r,n=F){let a=n(new Ce(C.create(e,ue(r))));return new t({...this.#e,node:Q.cloneWithColumn(this.#e.node,a.toOperationNode())})}addPrimaryKeyConstraint(e,r,n=F){let a=n(new yt(be.create(r,e)));return new t({...this.#e,node:Q.cloneWithConstraint(this.#e.node,a.toOperationNode())})}addUniqueConstraint(e,r,n=F){let a=n(new Nt(ye.create(r,e)));return new t({...this.#e,node:Q.cloneWithConstraint(this.#e.node,a.toOperationNode())})}addCheckConstraint(e,r,n=F){let a=n(new xt(dt.create(r.toOperationNode(),e)));return new t({...this.#e,node:Q.cloneWithConstraint(this.#e.node,a.toOperationNode())})}addForeignKeyConstraint(e,r,n,a,d=F){let h=d(new ct(de.create(r.map(c.create),l(n),a.map(c.create),e)));return new t({...this.#e,node:Q.cloneWithConstraint(this.#e.node,h.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: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())}};o();var kr=class t{#e;constructor(e){this.#e=i(e)}on(e){return new t({...this.#e,node:Se.cloneWith(this.#e.node,{table:l(e)})})}ifExists(){return new t({...this.#e,node:Se.cloneWith(this.#e.node,{ifExists:!0})})}cascade(){return new t({...this.#e,node:Se.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())}};o();var Sr=class t{#e;constructor(e){this.#e=i(e)}ifExists(){return new t({...this.#e,node:Tt.cloneWith(this.#e.node,{ifExists:!0})})}cascade(){return new t({...this.#e,node:Tt.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())}};o();var Tr=class t{#e;constructor(e){this.#e=i(e)}ifExists(){return new t({...this.#e,node:Et.cloneWith(this.#e.node,{ifExists:!0})})}cascade(){return new t({...this.#e,node:Et.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())}};o();o();var pe=i({is(t){return t.kind==="CreateViewNode"},create(t){return i({kind:"CreateViewNode",name:M.create(t)})},cloneWith(t,e){return i({...t,...e})}});o();var Er=class{#e=new wt;transformQuery(e){return this.#e.transformNode(e.node,e.queryId)}transformResult(e){return Promise.resolve(e.result)}};var Ar=class t{#e;constructor(e){this.#e=i(e)}temporary(){return new t({...this.#e,node:pe.cloneWith(this.#e.node,{temporary:!0})})}materialized(){return new t({...this.#e,node:pe.cloneWith(this.#e.node,{materialized:!0})})}ifNotExists(){return new t({...this.#e,node:pe.cloneWith(this.#e.node,{ifNotExists:!0})})}orReplace(){return new t({...this.#e,node:pe.cloneWith(this.#e.node,{orReplace:!0})})}columns(e){return new t({...this.#e,node:pe.cloneWith(this.#e.node,{columns:e.map(Xr)})})}as(e){let r=e.withPlugin(new Er).toOperationNode();return new t({...this.#e,node:pe.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())}};o();o();var Ot=i({is(t){return t.kind==="DropViewNode"},create(t){return i({kind:"DropViewNode",name:M.create(t)})},cloneWith(t,e){return i({...t,...e})}});var Rr=class t{#e;constructor(e){this.#e=i(e)}materialized(){return new t({...this.#e,node:Ot.cloneWith(this.#e.node,{materialized:!0})})}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())}};o();o();var Ir=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(S.createImmediate))})}});var Dr=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:Ir.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())}};o();o();var Br=i({is(t){return t.kind==="DropTypeNode"},create(t){return i({kind:"DropTypeNode",name:t})},cloneWith(t,e){return i({...t,...e})}});var qr=class t{#e;constructor(e){this.#e=i(e)}ifExists(){return new t({...this.#e,node:Br.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())}};o();function Di(t){let e=".";if(t.includes(e)){let r=t.split(e).map(On);if(r.length===2)return M.createWithSchema(r[0],r[1]);throw new Error(`invalid schemable identifier ${t}`)}else return M.create(t)}function On(t){return t.trim()}o();o();var gt=i({is(t){return t.kind==="RefreshMaterializedViewNode"},create(t){return i({kind:"RefreshMaterializedViewNode",name:M.create(t)})},cloneWith(t,e){return i({...t,...e})}});var Lr=class t{#e;constructor(e){this.#e=i(e)}concurrently(){return new t({...this.#e,node:gt.cloneWith(this.#e.node,{concurrently:!0,withNoData:!1})})}withData(){return new t({...this.#e,node:gt.cloneWith(this.#e.node,{withNoData:!1})})}withNoData(){return new t({...this.#e,node:gt.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())}};var Pr=class t{#e;constructor(e){this.#e=e}createTable(e){return new Wr({queryId:f(),executor:this.#e,node:Q.create(l(e))})}dropTable(e){return new Tr({queryId:f(),executor:this.#e,node:Et.create(l(e))})}createIndex(e){return new vr({queryId:f(),executor:this.#e,node:re.create(e)})}dropIndex(e){return new kr({queryId:f(),executor:this.#e,node:Se.create(e)})}createSchema(e){return new br({queryId:f(),executor:this.#e,node:Vt.create(e)})}dropSchema(e){return new Sr({queryId:f(),executor:this.#e,node:Tt.create(e)})}alterTable(e){return new Cr({queryId:f(),executor:this.#e,node:m.create(l(e))})}createView(e){return new Ar({queryId:f(),executor:this.#e,node:pe.create(e)})}refreshMaterializedView(e){return new Lr({queryId:f(),executor:this.#e,node:gt.create(e)})}dropView(e){return new Rr({queryId:f(),executor:this.#e,node:Ot.create(e)})}createType(e){return new Dr({queryId:f(),executor:this.#e,node:Ir.create(Di(e))})}dropType(e){return new qr({queryId:f(),executor:this.#e,node:Br.create(Di(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 te(e)))}};o();var Qr=class{ref(e){return new Jt(e)}table(e){return new xr(e)}};o();var Mr=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)}}};o();var Fr=class t extends ot{#e;#t;#r;constructor(e,r,n,a=[]){super(a),this.#e=e,this.#t=r,this.#r=n}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,[])}};o();o();function Vr(){return typeof performance<"u"&&b(performance.now)?performance.now():Date.now()}var zr=class{#e;#t;#r;#i;#n;#a=new WeakSet;constructor(e,r){this.#i=!1,this.#e=e,this.#t=r}async init(){if(this.#n)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.#n)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.#o(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,n){if(this.#e.savepoint)return this.#e.savepoint(e,r,n);throw new Error("The `savepoint` method is not supported by this driver")}rollbackToSavepoint(e,r,n){if(this.#e.rollbackToSavepoint)return this.#e.rollbackToSavepoint(e,r,n);throw new Error("The `rollbackToSavepoint` method is not supported by this driver")}releaseSavepoint(e,r,n){if(this.#e.releaseSavepoint)return this.#e.releaseSavepoint(e,r,n);throw new Error("The `releaseSavepoint` method is not supported by this driver")}async destroy(){this.#r&&(await this.#r,this.#n||(this.#n=this.#e.destroy().catch(e=>(this.#n=void 0,Promise.reject(e)))),await this.#n)}#d(){return this.#t.isLevelEnabled("query")||this.#t.isLevelEnabled("error")}#o(e){let r=e.executeQuery,n=e.streamQuery,a=this;e.executeQuery=async d=>{let h,W=Vr();try{return await r.call(e,d)}catch(T){throw h=T,await a.#s(T,d,W),T}finally{h||await a.#u(d,W)}},e.streamQuery=async function*(d,h){let W,T=Vr();try{for await(let A of n.call(e,d,h))yield A}catch(A){throw W=A,await a.#s(A,d,T),A}finally{W||await a.#u(d,T,!0)}}}async#s(e,r,n){await this.#t.error(()=>({level:"error",error:e,query:r,queryDurationMillis:this.#p(n)}))}async#u(e,r,n=!1){await this.#t.query(()=>({level:"query",isStream:n,query:e,queryDurationMillis:this.#p(r)}))}#p(e){return Vr()-e}};o();var gn=()=>{},Ct=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)}};o();var Cn=["read only","read write"],vn=["read uncommitted","read committed","repeatable read","serializable","snapshot"];function Bi(t){if(t.accessMode&&!Cn.includes(t.accessMode))throw new Error(`invalid transaction access mode ${t.accessMode}`);if(t.isolationLevel&&!vn.includes(t.isolationLevel))throw new Error(`invalid transaction isolation level ${t.isolationLevel}`)}o();var lb=i(["query","error"]),Ur=class{#e;#t;constructor(e){b(e)?(this.#t=e,this.#e=i({query:!0,error:!0})):(this.#t=bn,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 bn(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})}`))}o();function Mo(t){return B(t)&&b(t.compile)}Symbol.asyncDispose??=Symbol("Symbol.asyncDispose");var vt=class t extends nt{#e;constructor(e){let r,n;if(Wn(e))r={executor:e.executor},n={...e};else{let a=e.dialect,d=a.createDriver(),h=a.createQueryCompiler(),W=a.createAdapter(),T=new Ur(e.log??[]),A=new zr(d,T),Le=new Mr(A),kt=new Fr(h,W,Le,e.plugins??[]);r={executor:kt},n={config:e,executor:kt,dialect:a,driver:A}}super(r),this.#e=i(n)}get schema(){return new Pr(this.#e.executor)}get dynamic(){return new Qr}get introspection(){return this.#e.dialect.createIntrospector(this.withoutPlugins())}case(e){return new at({node:Z.create($(e)?void 0:J(e))})}get fn(){return fr()}transaction(){return new Li({...this.#e})}startTransaction(){return new Pi({...this.#e})}connection(){return new qi({...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 te(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){r!==void 0&&ce("Passing `queryId` in `db.executeQuery` is deprecated and will result in a compile-time error in the future.");let n=Mo(e)?e.compile():e;return this.getExecutor().executeQuery(n)}async[Symbol.asyncDispose](){await this.destroy()}},Jr=class t extends vt{#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 te(e))})}withTables(){return new t({...this.#e})}};function Wn(t){return B(t)&&B(t.config)&&B(t.driver)&&B(t.executor)&&B(t.dialect)}var qi=class{#e;constructor(e){this.#e=i(e)}async execute(e){return this.#e.executor.provideConnection(async r=>{let n=this.#e.executor.withConnectionProvider(new Ct(r)),a=new vt({...this.#e,executor:n});return await e(a)})}},Li=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:n,...a}=this.#e,d={isolationLevel:r,accessMode:n};return Bi(d),this.#e.executor.provideConnection(async h=>{let W=this.#e.executor.withConnectionProvider(new Ct(h)),T=new Jr({...a,executor:W}),A=!1;try{await this.#e.driver.beginTransaction(h,d),A=!0;let Le=await e(T);return await this.#e.driver.commitTransaction(h),Le}catch(Le){throw A&&await this.#e.driver.rollbackTransaction(h),Le}})}},Pi=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,...n}=this.#e,a={isolationLevel:e,accessMode:r};Bi(a);let d=await dr(this.#e.executor);return await this.#e.driver.beginTransaction(d.connection,a),new Qi({...n,connection:d,executor:this.#e.executor.withConnectionProvider(new Ct(d.connection))})}},Qi=class t extends Jr{#e;#t;#r;constructor(e){let r={isCommitted:!1,isRolledBack:!1};e={...e,executor:new Mi(e.executor,r)};let{connection:n,...a}=e;super(a),this.#e=i(e),this.#r=r;let d=f();this.#t=h=>e.executor.compileQuery(h,d)}get isCommitted(){return this.#r.isCommitted}get isRolledBack(){return this.#r.isRolledBack}commit(){return $e(this.#r),new Je(async()=>{await this.#e.driver.commitTransaction(this.#e.connection.connection),this.#r.isCommitted=!0,this.#e.connection.release()})}rollback(){return $e(this.#r),new Je(async()=>{await this.#e.driver.rollbackTransaction(this.#e.connection.connection),this.#r.isRolledBack=!0,this.#e.connection.release()})}savepoint(e){return $e(this.#r),new Je(async()=>(await this.#e.driver.savepoint?.(this.#e.connection.connection,e,this.#t),new t({...this.#e})))}rollbackToSavepoint(e){return $e(this.#r),new Je(async()=>(await this.#e.driver.rollbackToSavepoint?.(this.#e.connection.connection,e,this.#t),new t({...this.#e})))}releaseSavepoint(e){return $e(this.#r),new Je(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 te(e))})}withTables(){return new t({...this.#e})}},Je=class{#e;constructor(e){this.#e=e}async execute(){return await this.#e()}};function $e(t){if(t.isCommitted)throw new Error("Transaction is already committed");if(t.isRolledBack)throw new Error("Transaction is already rolled back")}var Mi=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){return $e(this.#t),this.#e.executeQuery(e)}stream(e,r){return $e(this.#t),this.#e.stream(e,r)}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)}};o();var Fi=class t{#e;constructor(e){this.#e=i(e)}get expressionType(){}get isRawBuilder(){return!0}as(e){return new Vi(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))}#t(e){let r=e!==void 0?e.getExecutor():De;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 We(t){return new Fi(t)}var Vi=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 R.create(this.#e.toOperationNode(),g(this.#t)?this.#t.toOperationNode():p.create(this.#t))}};o();var xe=Object.assign((t,...e)=>We({queryId:f(),rawNode:x.create(t,e?.map(Fo)??[])}),{ref(t){return We({queryId:f(),rawNode:x.createWithChild(G(t))})},val(t){return We({queryId:f(),rawNode:x.createWithChild(w(t))})},value(t){return this.val(t)},table(t){return We({queryId:f(),rawNode:x.createWithChild(l(t))})},id(...t){let e=new Array(t.length+1).fill(".");return e[0]="",e[e.length-1]="",We({queryId:f(),rawNode:x.create(e,t.map(p.create))})},lit(t){return We({queryId:f(),rawNode:x.createWithChild(S.createImmediate(t))})},literal(t){return this.lit(t)},raw(t){return We({queryId:f(),rawNode:x.createWithSql(t)})},join(t,e=xe`, `){let r=new Array(Math.max(2*t.length-1,0)),n=e.toOperationNode();for(let a=0;a<t.length;++a)r[2*a]=Fo(t[a]),a!==t.length-1&&(r[2*a+1]=n);return We({queryId:f(),rawNode:x.createWithChildren(r)})}});function Fo(t){return g(t)?t.toOperationNode():w(t)}o();o();var $r=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 kn=/'/g,bt=class extends $r{#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&&!Y.is(this.parentNode)&&!k.is(this.parentNode)&&!Q.is(this.parentNode)&&!pe.is(this.parentNode)&&!mr.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 n=e.length-1;for(let a=0;a<=n;a++)this.visitNode(e[a]),a<n&&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.parentNode!==void 0&&!Y.is(this.parentNode)&&!x.is(this.parentNode)&&!_.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(e.replace?"replace":"insert"),e.ignore&&(ce("`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)),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.parentNode!==void 0&&!Y.is(this.parentNode)&&!x.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("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 n=0;n<r.length;++n)this.appendValue(r[n]),n!==r.length-1&&this.append(", ");this.append(")")}visitParens(e){this.append("("),this.visitNode(e.node),this.append(")")}visitJoin(e){this.append(Tn[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:n}=e;for(let a=0;a<r.length;++a)this.append(r[a]),n.length>a&&this.visitNode(n[a])}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.parentNode!==void 0&&!Y.is(this.parentNode)&&!x.is(this.parentNode)&&!_.is(this.parentNode);if(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("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)),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 "),Pe(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(Sn[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 j.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,n=e.values.length;r<n;r++)r===n-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(),n=this.getRightIdentifierWrapper(),a="";for(let d of e)a+=d,d===r?a+=r:d===n&&(a+=n);return a}sanitizeStringLiteral(e){return e.replace(kn,"''")}addParameter(e){this.#t.push(e)}appendImmediateValue(e){if(v(e))this.appendStringLiteral(e);else if(ke(e)||Pe(e)||je(e))this.append(e.toString());else if(Ke(e))this.append("null");else if(Ki(e))this.appendImmediateValue(e.toISOString());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,n)=>r.modifier&&n.modifier?Vo[r.modifier]-Vo[n.modifier]:1),i(e)}compileColumnAlterations(e){this.compileList(e)}announcesNewColumnDataType(){return!0}},Sn=i({ForKeyShare:"for key share",ForNoKeyUpdate:"for no key update",ForUpdate:"for update",ForShare:"for share",NoWait:"nowait",SkipLocked:"skip locked",Distinct:"distinct"}),Vo=i({ForKeyShare:1,ForNoKeyUpdate:1,ForUpdate:1,ForShare:1,NoWait:2,SkipLocked:2,Distinct:0}),Tn=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"});o();var Kr=class{async init(){}async acquireConnection(){return new zi}async beginTransaction(){}async commitTransaction(){}async rollbackTransaction(){}async releaseConnection(){}async destroy(){}async releaseSavepoint(){}async rollbackToSavepoint(){}async savepoint(){}},zi=class{async executeQuery(){return{rows:[]}}async*streamQuery(){}};o();var Wt=class{get supportsCreateIfNotExists(){return!0}get supportsTransactionalDdl(){return!1}get supportsReturning(){return!1}get supportsOutput(){return!1}};o();var En=/"/g,zo=class extends bt{visitOrAction(e){this.append("or "),this.append(e.action)}getCurrentParameterPlaceholder(){return"?"}getLeftExplainOptionsWrapper(){return""}getRightExplainOptionsWrapper(){return""}getLeftIdentifierWrapper(){return'"'}getRightIdentifierWrapper(){return'"'}getAutoIncrement(){return"autoincrement"}sanitizeIdentifier(e){return e.replace(En,'""')}visitDefaultInsertValue(e){this.append("null")}};o();var Uo=class extends Wt{get supportsTransactionalDdl(){return!1}get supportsReturning(){return!0}async acquireMigrationLock(e,r){}async releaseMigrationLock(e,r){}};o();var An=/"/g,Jo=class extends bt{sanitizeIdentifier(e){return e.replace(An,'""')}};o();var Rn=BigInt("3853314791062309107"),$o=class extends Wt{get supportsTransactionalDdl(){return!0}get supportsReturning(){return!0}async acquireMigrationLock(e,r){await xe`select pg_advisory_xact_lock(${xe.lit(Rn)})`.execute(e)}async releaseMigrationLock(e,r){}};function BE(t){return new vt({dialect:{createAdapter:()=>new t.Adapter,createDriver:()=>new Kr,createIntrospector:()=>null,createQueryCompiler:()=>new t.QueryCompiler},plugins:[...t.noParameters?[new Ui]:[]]})}var Ui=class{#e=new Ji;transformQuery(e){return this.#e.transformNode(e.node)}transformResult(e){return Promise.resolve(e.result)}},Ji=class extends Ie{transformPrimitiveValueList(e){return me.create(e.values.map(S.createImmediate))}transformValue(e){return{...super.transformValue(e),immediate:!0}}};function qE(t){return typeof t=="string"?{parameters:[],sql:t}:t}function LE(t,e){let r=t.compile();return{parameters:r.parameters,sql:r.sql,transformations:e?.transformations}}function PE(t,e){let r=In(t,e);return n=>n.where(a=>a.or(r.map(d=>a.and(d.map(([h,W])=>a(h,W===null?"is":Array.isArray(W)?"in":"=",W))))))}function QE(t,e){let r={};for(let n of Object.values(e)){let{isInPrimaryKey:a,name:d}=n;a&&(r[d]=t[d]??null)}return r}function In(t,e){let r=[],n=[],a=V();for(let W of t){let T=[];for(let A of Object.values(e)){let{isInPrimaryKey:Le,name:kt}=A;Le&&(W===t.at(0)&&r.push(a.ref(kt)),T.push($i(W[kt]??null,A)))}n.push(r.length===1?T.at(0):Ko(T))}let d=r.length===1?r.at(0):Ko(r),h=n.length===1?n.at(0):n;return[[[d,h]]]}function Ko(t){return xe`(${xe.join(t,xe`, `)})`}function ME(t,e,r){return()=>Array.isArray(e)?e.map(n=>jo(n,r)):jo(e,r)}function jo(t,e){return Object.keys(t).length===0?{[Object.keys(e).at(0)]:xe`default`}:Object.entries(t).reduce((r,[n,a])=>({...r,[n]:$i(a,e[n])}),{})}function $i(t,e){let{datatype:r}=e,n=V();return t===null?n.lit(null):r.isNative?n.val(t):n.cast(n.val(t),xe.id(r.schema,r.name))}function Dn(t,e){if(t.length===0)return a=>a.lit(!0);let r=[],n=[];for(let a=0;a<t.length;a++)n.push(Bn(t[a],e)),(a===t.length-1||t[a].after==="or")&&(r.push(n),n=[]);return a=>{let d=r.map(h=>a.and(h.map(W=>W(a))));return a.or(d)}}function Bn(t,e){return t.kind==="ColumnFilter"?r=>{let{column:n,operator:a,value:d}=t,h=e[n];return r(h.datatype.group==="raw"?r.cast(n,"text"):n,a,$i(d,h))}:Dn(t.filters,e)}export{p as a,R as b,K as c,c as d,He as e,S as f,N as g,V as h,xe as i,zo as j,Uo as k,Jo as l,$o as m,BE as n,qE as o,LE as p,PE as q,QE as r,ME as s,Dn as t};
10
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vZGF0YS9xdWVyeS50cyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2luZGV4LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20va3lzZWx5LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL3NjaGVtYS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2FsdGVyLXRhYmxlLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS91dGlsL29iamVjdC11dGlscy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2NyZWF0ZS1pbmRleC1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXNjaGVtYS1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXRhYmxlLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9kcm9wLWluZGV4LW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9zY2hlbWFibGUtaWRlbnRpZmllci1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvZHJvcC1zY2hlbWEtbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2Ryb3AtdGFibGUtbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BhcnNlci90YWJsZS1wYXJzZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9hbGlhcy1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvdGFibGUtbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BhcnNlci9leHByZXNzaW9uLXBhcnNlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2V4cHJlc3Npb24vZXhwcmVzc2lvbi5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXNvdXJjZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2V4cHJlc3Npb24vZXhwcmVzc2lvbi1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci9zZWxlY3QtcXVlcnktYnVpbGRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3NlbGVjdC1tb2RpZmllci1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL2pvaW4tcGFyc2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvam9pbi1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvb24tbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2FuZC1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvb3Itbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BhcnNlci9iaW5hcnktb3BlcmF0aW9uLXBhcnNlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2JpbmFyeS1vcGVyYXRpb24tbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL29wZXJhdG9yLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9wYXJzZXIvcmVmZXJlbmNlLXBhcnNlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2NvbHVtbi1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvcmVmZXJlbmNlLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9zZWxlY3QtYWxsLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9wYXJzZXIvb3JkZXItYnktcGFyc2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vZHluYW1pYy9keW5hbWljLXJlZmVyZW5jZS1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvb3JkZXItYnktaXRlbS1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvcmF3LW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1idWlsZGVyL29yZGVyLWJ5LWl0ZW0tYnVpbGRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2NvbGxhdGUtbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3V0aWwvbG9nLW9uY2UuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9qc29uLXJlZmVyZW5jZS1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvanNvbi1vcGVyYXRvci1jaGFpbi1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvanNvbi1wYXRoLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9wYXJzZXIvdmFsdWUtcGFyc2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvcHJpbWl0aXZlLXZhbHVlLWxpc3Qtbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3ZhbHVlLWxpc3Qtbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3ZhbHVlLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9wYXJlbnMtbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BhcnNlci9wYXJzZS11dGlscy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL292ZXItbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL29yZGVyLWJ5LW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9wYXJ0aXRpb24tYnktbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3NlbGVjdC1xdWVyeS1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvZnJvbS1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvZ3JvdXAtYnktbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2hhdmluZy1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvcXVlcnktbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2luc2VydC1xdWVyeS1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvdXBkYXRlLXF1ZXJ5LW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9saXN0LW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9kZWxldGUtcXVlcnktbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3VzaW5nLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS93aGVyZS1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvcmV0dXJuaW5nLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9leHBsYWluLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9tZXJnZS1xdWVyeS1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvd2hlbi1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvb3V0cHV0LW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1idWlsZGVyL2pvaW4tYnVpbGRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3F1ZXJ5LWJ1aWxkZXIvb3Zlci1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL3BhcnRpdGlvbi1ieS1wYXJzZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9wYXJ0aXRpb24tYnktaXRlbS1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktY3JlYXRvci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3F1ZXJ5LWJ1aWxkZXIvaW5zZXJ0LXF1ZXJ5LWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9wYXJzZXIvc2VsZWN0LXBhcnNlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3NlbGVjdGlvbi1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL2luc2VydC12YWx1ZXMtcGFyc2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvdmFsdWVzLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9kZWZhdWx0LWluc2VydC12YWx1ZS1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL3VwZGF0ZS1zZXQtcGFyc2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvY29sdW1uLXVwZGF0ZS1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvb24tZHVwbGljYXRlLWtleS1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci9pbnNlcnQtcmVzdWx0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci9uby1yZXN1bHQtZXJyb3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1idWlsZGVyL29uLWNvbmZsaWN0LWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9vbi1jb25mbGljdC1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL3RvcC1wYXJzZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS90b3Atbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL29yLWFjdGlvbi1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci9kZWxldGUtcXVlcnktYnVpbGRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3F1ZXJ5LWJ1aWxkZXIvZGVsZXRlLXJlc3VsdC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2xpbWl0LW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1idWlsZGVyL3VwZGF0ZS1xdWVyeS1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci91cGRhdGUtcmVzdWx0LmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL3dpdGgtcGFyc2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvY29tbW9uLXRhYmxlLWV4cHJlc3Npb24tbmFtZS1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci9jdGUtYnVpbGRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2NvbW1vbi10YWJsZS1leHByZXNzaW9uLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS93aXRoLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS91dGlsL3F1ZXJ5LWlkLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vdXRpbC9yYW5kb20tc3RyaW5nLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGx1Z2luL3dpdGgtc2NoZW1hL3dpdGgtc2NoZW1hLXBsdWdpbi5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BsdWdpbi93aXRoLXNjaGVtYS93aXRoLXNjaGVtYS10cmFuc2Zvcm1lci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci9tZXJnZS1xdWVyeS1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL21lcmdlLXBhcnNlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL21hdGNoZWQtbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3F1ZXJ5LWV4ZWN1dG9yL25vb3AtcXVlcnktZXhlY3V0b3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1leGVjdXRvci9xdWVyeS1leGVjdXRvci1iYXNlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vdXRpbC9wcm92aWRlLWNvbnRyb2xsZWQtY29ubmVjdGlvbi5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3V0aWwvZGVmZXJyZWQuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1idWlsZGVyL21lcmdlLXJlc3VsdC5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL29mZnNldC1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL2dyb3VwLWJ5LXBhcnNlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2dyb3VwLWJ5LWl0ZW0tbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BhcnNlci9zZXQtb3BlcmF0aW9uLXBhcnNlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3NldC1vcGVyYXRpb24tbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2V4cHJlc3Npb24vZXhwcmVzc2lvbi13cmFwcGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL2ZldGNoLXBhcnNlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2ZldGNoLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1idWlsZGVyL2Z1bmN0aW9uLW1vZHVsZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2FnZ3JlZ2F0ZS1mdW5jdGlvbi1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvZnVuY3Rpb24tbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3F1ZXJ5LWJ1aWxkZXIvYWdncmVnYXRlLWZ1bmN0aW9uLWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9wYXJzZXIvdW5hcnktb3BlcmF0aW9uLXBhcnNlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3VuYXJ5LW9wZXJhdGlvbi1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktYnVpbGRlci9jYXNlLWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9jYXNlLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9xdWVyeS1idWlsZGVyL2pzb24tcGF0aC1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvanNvbi1wYXRoLWxlZy1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvdHVwbGUtbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BhcnNlci9kYXRhLXR5cGUtcGFyc2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvZGF0YS10eXBlLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9jYXN0LW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9keW5hbWljL2R5bmFtaWMtdGFibGUtYnVpbGRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3NjaGVtYS9hbHRlci10YWJsZS1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvYWRkLWNvbHVtbi1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvY29sdW1uLWRlZmluaXRpb24tbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2Ryb3AtY29sdW1uLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9yZW5hbWUtY29sdW1uLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9zY2hlbWEvY29sdW1uLWRlZmluaXRpb24tYnVpbGRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2NoZWNrLWNvbnN0cmFpbnQtbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL3JlZmVyZW5jZXMtbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BhcnNlci9kZWZhdWx0LXZhbHVlLXBhcnNlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2dlbmVyYXRlZC1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvZGVmYXVsdC12YWx1ZS1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcGFyc2VyL29uLW1vZGlmeS1hY3Rpb24tcGFyc2VyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvbW9kaWZ5LWNvbHVtbi1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL2ZvcmVpZ24ta2V5LWNvbnN0cmFpbnQtYnVpbGRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2ZvcmVpZ24ta2V5LWNvbnN0cmFpbnQtbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2FkZC1jb25zdHJhaW50LW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS91bmlxdWUtY29uc3RyYWludC1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvZHJvcC1jb25zdHJhaW50LW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9zY2hlbWEvYWx0ZXItY29sdW1uLWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9hbHRlci1jb2x1bW4tbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3NjaGVtYS9hbHRlci10YWJsZS1leGVjdXRvci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3NjaGVtYS9hbHRlci10YWJsZS1hZGQtZm9yZWlnbi1rZXktY29uc3RyYWludC1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL2FsdGVyLXRhYmxlLWRyb3AtY29uc3RyYWludC1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvcHJpbWFyeS1rZXktY29uc3RyYWludC1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvYWRkLWluZGV4LW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9zY2hlbWEvYWx0ZXItdGFibGUtYWRkLWluZGV4LWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9zY2hlbWEvdW5pcXVlLWNvbnN0cmFpbnQtYnVpbGRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3NjaGVtYS9wcmltYXJ5LWtleS1jb25zdHJhaW50LWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9zY2hlbWEvY2hlY2stY29uc3RyYWludC1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvcmVuYW1lLWNvbnN0cmFpbnQtbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3NjaGVtYS9jcmVhdGUtaW5kZXgtYnVpbGRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BsdWdpbi9pbW1lZGlhdGUtdmFsdWUvaW1tZWRpYXRlLXZhbHVlLXRyYW5zZm9ybWVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL2NyZWF0ZS1zY2hlbWEtYnVpbGRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3NjaGVtYS9jcmVhdGUtdGFibGUtYnVpbGRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BhcnNlci9vbi1jb21taXQtYWN0aW9uLXBhcnNlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL2Ryb3AtaW5kZXgtYnVpbGRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3NjaGVtYS9kcm9wLXNjaGVtYS1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL2Ryb3AtdGFibGUtYnVpbGRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3NjaGVtYS9jcmVhdGUtdmlldy1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXZpZXctbm9kZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3BsdWdpbi9pbW1lZGlhdGUtdmFsdWUvaW1tZWRpYXRlLXZhbHVlLXBsdWdpbi5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3NjaGVtYS9kcm9wLXZpZXctYnVpbGRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL2Ryb3Atdmlldy1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL2NyZWF0ZS10eXBlLWJ1aWxkZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9vcGVyYXRpb24tbm9kZS9jcmVhdGUtdHlwZS1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vc2NoZW1hL2Ryb3AtdHlwZS1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvZHJvcC10eXBlLW5vZGUuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9wYXJzZXIvaWRlbnRpZmllci1wYXJzZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9zY2hlbWEvcmVmcmVzaC1tYXRlcmlhbGl6ZWQtdmlldy1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vb3BlcmF0aW9uLW5vZGUvcmVmcmVzaC1tYXRlcmlhbGl6ZWQtdmlldy1ub2RlLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vZHluYW1pYy9keW5hbWljLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vZHJpdmVyL2RlZmF1bHQtY29ubmVjdGlvbi1wcm92aWRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3F1ZXJ5LWV4ZWN1dG9yL2RlZmF1bHQtcXVlcnktZXhlY3V0b3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9kcml2ZXIvcnVudGltZS1kcml2ZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS91dGlsL3BlcmZvcm1hbmNlLW5vdy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2RyaXZlci9zaW5nbGUtY29ubmVjdGlvbi1wcm92aWRlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2RyaXZlci9kcml2ZXIuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS91dGlsL2xvZy5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3V0aWwvY29tcGlsYWJsZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL3Jhdy1idWlsZGVyL3Jhdy1idWlsZGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcmF3LWJ1aWxkZXIvc3FsLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vcXVlcnktY29tcGlsZXIvZGVmYXVsdC1xdWVyeS1jb21waWxlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXZpc2l0b3IuanMiLCAiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2t5c2VseUAwLjI4Ljgvbm9kZV9tb2R1bGVzL2t5c2VseS9kaXN0L2VzbS9kcml2ZXIvZHVtbXktZHJpdmVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vZGlhbGVjdC9kaWFsZWN0LWFkYXB0ZXItYmFzZS5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2RpYWxlY3Qvc3FsaXRlL3NxbGl0ZS1xdWVyeS1jb21waWxlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2RpYWxlY3Qvc3FsaXRlL3NxbGl0ZS1hZGFwdGVyLmpzIiwgIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9reXNlbHlAMC4yOC44L25vZGVfbW9kdWxlcy9reXNlbHkvZGlzdC9lc20vZGlhbGVjdC9wb3N0Z3Jlcy9wb3N0Z3Jlcy1xdWVyeS1jb21waWxlci5qcyIsICIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0va3lzZWx5QDAuMjguOC9ub2RlX21vZHVsZXMva3lzZWx5L2Rpc3QvZXNtL2RpYWxlY3QvcG9zdGdyZXMvcG9zdGdyZXMtYWRhcHRlci5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHtcbiAgdHlwZSBDb21waWxhYmxlLFxuICB0eXBlIERpYWxlY3RBZGFwdGVyLFxuICBEdW1teURyaXZlcixcbiAgdHlwZSBFeHByZXNzaW9uLFxuICB0eXBlIEV4cHJlc3Npb25CdWlsZGVyLFxuICBleHByZXNzaW9uQnVpbGRlcixcbiAgdHlwZSBFeHByZXNzaW9uV3JhcHBlcixcbiAgdHlwZSBJbnNlcnRPYmplY3QsXG4gIEt5c2VseSxcbiAgdHlwZSBLeXNlbHlQbHVnaW4sXG4gIE9wZXJhdGlvbk5vZGVUcmFuc2Zvcm1lcixcbiAgdHlwZSBQbHVnaW5UcmFuc2Zvcm1RdWVyeUFyZ3MsXG4gIHR5cGUgUGx1Z2luVHJhbnNmb3JtUmVzdWx0QXJncyxcbiAgdHlwZSBQcmltaXRpdmVWYWx1ZUxpc3ROb2RlLFxuICB0eXBlIFF1ZXJ5Q29tcGlsZXIsXG4gIHR5cGUgUXVlcnlSZXN1bHQgYXMgS3lzZWx5UXVlcnlSZXN1bHQsXG4gIHR5cGUgUm9vdE9wZXJhdGlvbk5vZGUsXG4gIHNxbCxcbiAgdHlwZSBTcWxCb29sLFxuICB0eXBlIFVua25vd25Sb3csXG4gIHR5cGUgVXBkYXRlT2JqZWN0LFxuICBWYWx1ZUxpc3ROb2RlLFxuICBWYWx1ZU5vZGUsXG4gIHR5cGUgV2hlcmVJbnRlcmZhY2UsXG59IGZyb20gXCJreXNlbHlcIjtcblxuaW1wb3J0IHR5cGUgeyBDb2x1bW4sIENvbHVtbkZpbHRlciwgRmlsdGVyR3JvdXAsIFRhYmxlIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkZXJSZXF1aXJlbWVudHMge1xuICBBZGFwdGVyOiB7IG5ldyAoKTogRGlhbGVjdEFkYXB0ZXIgfTtcbiAgbm9QYXJhbWV0ZXJzPzogYm9vbGVhbjtcbiAgUXVlcnlDb21waWxlcjogeyBuZXcgKCk6IFF1ZXJ5Q29tcGlsZXIgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1aWxkZXI8REI+KHJlcXVpcmVtZW50czogQnVpbGRlclJlcXVpcmVtZW50cyk6IEt5c2VseTxEQj4ge1xuICByZXR1cm4gbmV3IEt5c2VseSh7XG4gICAgZGlhbGVjdDoge1xuICAgICAgY3JlYXRlQWRhcHRlcjogKCkgPT4gbmV3IHJlcXVpcmVtZW50cy5BZGFwdGVyKCksXG4gICAgICBjcmVhdGVEcml2ZXI6ICgpID0+IG5ldyBEdW1teURyaXZlcigpLFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIHdlIGRvbid0IG5lZWQgYnVpbHQtaW4gaW50cm9zcGVjdGlvbiBpbiB0aGlzIGNhc2VcbiAgICAgIGNyZWF0ZUludHJvc3BlY3RvcjogKCkgPT4gbnVsbCxcbiAgICAgIGNyZWF0ZVF1ZXJ5Q29tcGlsZXI6ICgpID0+IG5ldyByZXF1aXJlbWVudHMuUXVlcnlDb21waWxlcigpLFxuICAgIH0sXG4gICAgcGx1Z2luczogWy4uLihyZXF1aXJlbWVudHMubm9QYXJhbWV0ZXJzID8gW25ldyBJbW1lZGlhdGVWYWx1ZVBsdWdpbigpXSA6IFtdKV0sXG4gIH0pO1xufVxuXG4vKipcbiAqIEEgcGx1Z2luIHRoYXQgdHJhbnNmb3JtcyBhbGwgdmFsdWVzIHRvIGltbWVkaWF0ZSB2YWx1ZXMuIFRoaXMgbWVhbnMgdGhlaXIgaW5qZWN0ZWQgaW50byB0aGUgU1FMIHN0cmluZyBpbnN0ZWFkIG9mIHBvcHVsYXRpbmcgdGhlIHBhcmFtZXRlcnMgYXJyYXkuXG4gKiBJbiBzb21lIHNpdHVhdGlvbnMsIGEgZGF0YWJhc2UgZHJpdmVyIG1pZ2h0IG5vdCBzdXBwb3J0IHBhcmFtZXRlcnMsIGFuZCB0aGlzIHBsdWdpbiBjYW4gYmUgdXNlZCB0byB3b3JrIGFyb3VuZCB0aGF0LlxuICovXG5jbGFzcyBJbW1lZGlhdGVWYWx1ZVBsdWdpbiBpbXBsZW1lbnRzIEt5c2VseVBsdWdpbiB7XG4gIHJlYWRvbmx5ICN0cmFuc2Zvcm1lciA9IG5ldyBJbW1lZGlhdGVWYWx1ZVRyYW5zZm9ybWVyKCk7XG5cbiAgdHJhbnNmb3JtUXVlcnkoYXJnczogUGx1Z2luVHJhbnNmb3JtUXVlcnlBcmdzKTogUm9vdE9wZXJhdGlvbk5vZGUge1xuICAgIHJldHVybiB0aGlzLiN0cmFuc2Zvcm1lci50cmFuc2Zvcm1Ob2RlKGFyZ3Mubm9kZSk7XG4gIH1cblxuICB0cmFuc2Zvcm1SZXN1bHQoYXJnczogUGx1Z2luVHJhbnNmb3JtUmVzdWx0QXJncyk6IFByb21pc2U8S3lzZWx5UXVlcnlSZXN1bHQ8VW5rbm93blJvdz4+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGFyZ3MucmVzdWx0KTtcbiAgfVxufVxuXG5jbGFzcyBJbW1lZGlhdGVWYWx1ZVRyYW5zZm9ybWVyIGV4dGVuZHMgT3BlcmF0aW9uTm9kZVRyYW5zZm9ybWVyIHtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHRyYW5zZm9ybVByaW1pdGl2ZVZhbHVlTGlzdChub2RlOiBQcmltaXRpdmVWYWx1ZUxpc3ROb2RlKTogUHJpbWl0aXZlVmFsdWVMaXN0Tm9kZSB7XG4gICAgcmV0dXJuIFZhbHVlTGlzdE5vZGUuY3JlYXRlKG5vZGUudmFsdWVzLm1hcChWYWx1ZU5vZGUuY3JlYXRlSW1tZWRpYXRlKSkgYXMgbmV2ZXI7XG4gIH1cblxuICBvdmVycmlkZSB0cmFuc2Zvcm1WYWx1ZShub2RlOiBWYWx1ZU5vZGUpOiBWYWx1ZU5vZGUge1xuICAgIHJldHVybiB7IC4uLnN1cGVyLnRyYW5zZm9ybVZhbHVlKG5vZGUpLCBpbW1lZGlhdGU6IHRydWUgfTtcbiAgfVxufVxuXG5kZWNsYXJlIGNvbnN0IHF1ZXJ5VHlwZTogdW5pcXVlIHN5bWJvbDtcbmV4cG9ydCBpbnRlcmZhY2UgUXVlcnk8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIFtxdWVyeVR5cGVdPzogVDtcbiAgcGFyYW1ldGVyczogcmVhZG9ubHkgdW5rbm93bltdO1xuICBzcWw6IHN0cmluZztcbiAgdHJhbnNmb3JtYXRpb25zPzogUGFydGlhbDxSZWNvcmQ8a2V5b2YgVCwgXCJqc29uLXBhcnNlXCI+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzUXVlcnk8VD4ocXVlcnk6IHN0cmluZyB8IFF1ZXJ5PHVua25vd24+KTogUXVlcnk8VD4ge1xuICBpZiAodHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHsgcGFyYW1ldGVyczogW10sIHNxbDogcXVlcnkgfSBhcyBuZXZlcjtcbiAgfVxuXG4gIHJldHVybiBxdWVyeSBhcyBuZXZlcjtcbn1cblxuZXhwb3J0IHR5cGUgUXVlcnlSZXN1bHQ8VD4gPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBUIGV4dGVuZHMgUXVlcnk8aW5mZXIgUj4gPyBSW10gOiBUIGV4dGVuZHMgKC4uLmFyZ3M6IGFueVtdKSA9PiBRdWVyeTxpbmZlciBSPiA/IFJbXSA6IG5ldmVyO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVPcHRpb25zPFQ+IHtcbiAgLyoqXG4gICAqIEEgbWFwcGluZyBvZiBjb2x1bW4gbmFtZXMgdG8gdHJhbnNmb3JtYXRpb25zIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIHJlc3VsdC5cbiAgICogQ3VycmVudGx5IHN1cHBvcnRlZCB0cmFuc2Zvcm1hdGlvbiBpcyBcImpzb24tcGFyc2VcIiwgd2hpY2ggcGFyc2VzIGEgSlNPTiBzdHJpbmcgaW50byBhbiBvYmplY3QuXG4gICAqL1xuICB0cmFuc2Zvcm1hdGlvbnM/OiBQYXJ0aWFsPFJlY29yZDxrZXlvZiBULCBcImpzb24tcGFyc2VcIj4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZTxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICBjb21waWxlYWJsZTogQ29tcGlsYWJsZTxUPixcbiAgb3B0aW9ucz86IENvbXBpbGVPcHRpb25zPFQ+LFxuKTogUXVlcnk8VD4ge1xuICBjb25zdCBjb21waWxlZFF1ZXJ5ID0gY29tcGlsZWFibGUuY29tcGlsZSgpO1xuXG4gIHJldHVybiB7XG4gICAgcGFyYW1ldGVyczogY29tcGlsZWRRdWVyeS5wYXJhbWV0ZXJzLFxuICAgIHNxbDogY29tcGlsZWRRdWVyeS5zcWwsXG4gICAgdHJhbnNmb3JtYXRpb25zOiBvcHRpb25zPy50cmFuc2Zvcm1hdGlvbnMsXG4gIH07XG59XG5cbi8qKlxuICogQXBwbGllcyBhIGZpbHRlciB0byB0aGUgZ2l2ZW4gcm93cyBiYXNlZCBvbiB0aGUgcHJpbWFyeSBrZXkgY29sdW1ucyBvZiB0aGUgdGFibGUuXG4gKlxuICogQGV4YW1wbGUgZGIuc2VsZWN0RnJvbShcInVzZXJzXCIpLiRjYWxsKGFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzKHJvd3MsIGNvbHVtbnMpKS5zZWxlY3RBbGwoKVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlJbmZlcnJlZFJvd0ZpbHRlcnMocm93czogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwgY29sdW1uczogVGFibGVbXCJjb2x1bW5zXCJdKSB7XG4gIGNvbnN0IHJvd0ZpbHRlcnMgPSBpbmZlclJvd0ZpbHRlcnMocm93cywgY29sdW1ucyk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcmV0dXJuIDxRQiBleHRlbmRzIFdoZXJlSW50ZXJmYWNlPGFueSwgYW55Pj4ocWI6IFFCKTogUUIgPT5cbiAgICBxYi53aGVyZSgoZWIpID0+IHtcbiAgICAgIHJldHVybiBlYi5vcihcbiAgICAgICAgcm93RmlsdGVycy5tYXAoKHJvd0ZpbHRlcikgPT4ge1xuICAgICAgICAgIHJldHVybiBlYi5hbmQoXG4gICAgICAgICAgICByb3dGaWx0ZXIubWFwKChbY29sdW1uTmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgICBlYihjb2x1bW5OYW1lLCB2YWx1ZSA9PT0gbnVsbCA/IFwiaXNcIiA6IEFycmF5LmlzQXJyYXkodmFsdWUpID8gXCJpblwiIDogXCI9XCIsIHZhbHVlKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0pIGFzIG5ldmVyO1xufVxuXG4vKipcbiAqIFBhcnQgb2YgYSBmaWx0ZXIgdGhhdCBwcmVkaWN0cyBhIG1hdGNoLlxuICogaWUuIC4uLiBXSEVSRSAkQ29sdW1OYW1lID0gJFZhbHVlIC4uLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxudHlwZSBSb3dGaWx0ZXJQcmVkaWNhdGUgPSBbQ29sdW1uTmFtZTogc3RyaW5nIHwgRXhwcmVzc2lvbjxhbnk+LCBWYWx1ZTogdW5rbm93bl07XG5cbi8qKlxuICogQSByb3cgZmlsdGVyIGlzIGNvbXByaXNlZCBvZiBvbmUgb3IgbW9yZSBwcmVkaWNhdGVzLlxuICovXG50eXBlIFJvd0ZpbHRlciA9IFJvd0ZpbHRlclByZWRpY2F0ZVtdO1xuXG4vKipcbiAqIFJvdyBmaWx0ZXJzIGlzIHNpbXBseSBhIHNldCBvZiBtdWx0aXBsZSB7QGxpbmsgUm93RmlsdGVyfS5cbiAqL1xudHlwZSBSb3dGaWx0ZXJzID0gUm93RmlsdGVyW107XG5cbi8qKlxuICogSW5mZXJzIHRoZSBmaWx0ZXIgdGhhdCBpcyBuZWNlc3NhcnkgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBnaXZlbiByb3dcbiAqIGluZGl2aWR1YWxseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZmVyRmlsdGVyT2JqZWN0KHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGNvbHVtbnM6IFRhYmxlW1wiY29sdW1uc1wiXSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgZmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgY29sdW1uIG9mIE9iamVjdC52YWx1ZXMoY29sdW1ucykpIHtcbiAgICBjb25zdCB7IGlzSW5QcmltYXJ5S2V5LCBuYW1lOiBjb2x1bW5OYW1lIH0gPSBjb2x1bW47XG5cbiAgICBpZiAoIWlzSW5QcmltYXJ5S2V5KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmaWx0ZXJbY29sdW1uTmFtZV0gPSByb3dbY29sdW1uTmFtZV0gPz8gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBmaWx0ZXI7XG59XG5cbi8qKlxuICogSW5mZXJzIHRoZSBmaWx0ZXIgdGhhdCBpcyBuZWNlc3NhcnkgdG8gdW5pcXVlbHkgaWRlbnRpZnkgbXVsdGlwbGUgcm93c1xuICogaW5kaXZpZHVhbGx5LlxuICpcbiAqIEVsZWdhbnRseSBpbmZlcnMgdGhlIGJlc3QgcG9zc2libGUgc3RhdGVtZW50IHRvIGZpbHRlciB3aXRoLlxuICogVE9ETzogaW50cm9zcGVjdCBwcmltYXJ5IGtleSBvcmRpbmFsIG51bWJlcnMgc28gdGhlIHR1cGxlIGlzIGluIHRoZSBjb3JyZWN0IG9yZGVyLlxuICogVE9ETzogaWYgd2UgZXZlciBzdXBwb3J0IE1TU1FMLCB3ZSdsbCBuZWVkIHRvIGRyb3AgdG8gZHVtYiAoLi4uIGFuZCAuLi4pIG9yICguLi4gYW5kIC4uLikgbGlrZSBpbiB0aGUgb2xkIHdheSBqdXN0IGZvciBNU1NRTC5cbiAqXG4gKiBGb3Igc2luZ2xlIGNvbHVtbiBwcmltYXJ5IGtleTpcbiAqXG4gKiAxLiBpZiBvbmx5IDEgcm93OiBjb2wgPSB2YWx1ZVxuICogMi4gaWYgbXVsdGlwbGUgcm93czogY29sIElOICh2YWx1ZTEsIHZhbHVlMiwgLi4uKVxuICpcbiAqIEZvciBjb21wb3NpdGUgcHJpbWFyeSBrZXk6XG4gKlxuICogMS4gaWYgb25seSAxIHJvdzogKGNvbDEsIGNvbDIsIC4uLikgPSAodmFsdWUxLCB2YWx1ZTIsIC4uLilcbiAqIDIuIGlmIG11bHRpcGxlIHJvd3M6IChjb2wxLCBjb2wyLCAuLi4pIElOICgodmFsdWUxYSwgdmFsdWUyYSwgLi4uKSwgKHZhbHVlMWIsIHZhbHVlMmIsIC4uLiksIC4uLilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZmVyUm93RmlsdGVycyhyb3dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCBjb2x1bW5zOiBUYWJsZVtcImNvbHVtbnNcIl0pOiBSb3dGaWx0ZXJzIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgY29uc3QgcmVmczogRXhwcmVzc2lvbldyYXBwZXI8YW55LCBhbnksIGFueT5bXSA9IFtdO1xuICBjb25zdCB2YWx1ZXM6IHVua25vd25bXSA9IFtdO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0IGViID0gZXhwcmVzc2lvbkJ1aWxkZXI8YW55LCBhbnk+KCk7XG5cbiAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgIGNvbnN0IHZhbHVlc0ZvclJvdzogdW5rbm93bltdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKGNvbHVtbnMpKSB7XG4gICAgICBjb25zdCB7IGlzSW5QcmltYXJ5S2V5LCBuYW1lOiBjb2x1bW5OYW1lIH0gPSBjb2x1bW47XG5cbiAgICAgIGlmICghaXNJblByaW1hcnlLZXkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChyb3cgPT09IHJvd3MuYXQoMCkpIHtcbiAgICAgICAgcmVmcy5wdXNoKGViLnJlZihjb2x1bW5OYW1lKSk7XG4gICAgICB9XG5cbiAgICAgIHZhbHVlc0ZvclJvdy5wdXNoKHRyYW5zZm9ybVZhbHVlKHJvd1tjb2x1bW5OYW1lXSA/PyBudWxsLCBjb2x1bW4pKTtcbiAgICB9XG5cbiAgICB2YWx1ZXMucHVzaChyZWZzLmxlbmd0aCA9PT0gMSA/IHZhbHVlc0ZvclJvdy5hdCgwKSEgOiB0dXBsZUZyb20odmFsdWVzRm9yUm93KSk7XG4gIH1cblxuICBjb25zdCBsaHMgPSByZWZzLmxlbmd0aCA9PT0gMSA/IHJlZnMuYXQoMCkhIDogdHVwbGVGcm9tKHJlZnMpO1xuICBjb25zdCByaHMgPSB2YWx1ZXMubGVuZ3RoID09PSAxID8gdmFsdWVzLmF0KDApISA6IHZhbHVlcztcblxuICByZXR1cm4gW1tbbGhzLCByaHNdXV07XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiB0dXBsZUZyb20oaXRlbXM6IHVua25vd25bXSk6IEV4cHJlc3Npb248YW55PiB7XG4gIHJldHVybiBzcWxgKCR7c3FsLmpvaW4oaXRlbXMsIHNxbGAsIGApfSlgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlUcmFuc2Zvcm1hdGlvbnM8QyBleHRlbmRzIFwiaW5zZXJ0XCIgfCBcInVwZGF0ZVwiPihcbiAgX2NvbnRleHQ6IEMsXG4gIHZhbHVlczogQyBleHRlbmRzIFwidXBkYXRlXCIgPyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSxcbiAgY29sdW1uczogVGFibGVbXCJjb2x1bW5zXCJdLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuKTogQyBleHRlbmRzIFwidXBkYXRlXCIgPyAoKSA9PiBVcGRhdGVPYmplY3Q8YW55LCBhbnk+IDogKCkgPT4gSW5zZXJ0T2JqZWN0PGFueSwgYW55PiB8IEluc2VydE9iamVjdDxhbnksIGFueT5bXSB7XG4gIHJldHVybiAoKSA9PlxuICAgIEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IHZhbHVlcy5tYXAoKHJvdykgPT4gdHJhbnNmb3JtVmFsdWVzKHJvdywgY29sdW1ucykpIDogdHJhbnNmb3JtVmFsdWVzKHZhbHVlcywgY29sdW1ucyk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVZhbHVlcyhcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgY29sdW1uczogVGFibGVbXCJjb2x1bW5zXCJdLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuKTogSW5zZXJ0T2JqZWN0PGFueSwgYW55PiB8IFVwZGF0ZU9iamVjdDxhbnksIGFueT4ge1xuICBpZiAoT2JqZWN0LmtleXModmFsdWVzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyBbT2JqZWN0LmtleXMoY29sdW1ucykuYXQoMCkhXTogc3FsYGRlZmF1bHRgIH07XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWVzKS5yZWR1Y2UoXG4gICAgKG9iaiwgW2tleSwgdmFsdWVdKSA9PiAoeyAuLi5vYmosIFtrZXldOiB0cmFuc2Zvcm1WYWx1ZSh2YWx1ZSwgY29sdW1uc1trZXldISkgfSksXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB7fSBhcyBJbnNlcnRPYmplY3Q8YW55LCBhbnk+IHwgVXBkYXRlT2JqZWN0PGFueSwgYW55PixcbiAgKTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1WYWx1ZSh2YWx1ZTogdW5rbm93biwgY29sdW1uOiBDb2x1bW4pOiBFeHByZXNzaW9uV3JhcHBlcjxhbnksIGFueSwgYW55PiB7XG4gIGNvbnN0IHsgZGF0YXR5cGUgfSA9IGNvbHVtbjtcblxuICBjb25zdCBlYiA9IGV4cHJlc3Npb25CdWlsZGVyKCk7XG5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGViLmxpdChudWxsKTtcbiAgfVxuXG4gIGlmICghZGF0YXR5cGUuaXNOYXRpdmUpIHtcbiAgICByZXR1cm4gZWIuY2FzdChlYi52YWwodmFsdWUpLCBzcWwuaWQoZGF0YXR5cGUuc2NoZW1hLCBkYXRhdHlwZS5uYW1lKSk7XG4gIH1cblxuICByZXR1cm4gZWIudmFsKHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24oXG4gIGZpbHRlcnM6IChDb2x1bW5GaWx0ZXIgfCBGaWx0ZXJHcm91cClbXSxcbiAgY29sdW1uczogVGFibGVbXCJjb2x1bW5zXCJdLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuKTogKGViOiBFeHByZXNzaW9uQnVpbGRlcjxhbnksIGFueT4pID0+IEV4cHJlc3Npb248U3FsQm9vbD4ge1xuICBpZiAoZmlsdGVycy5sZW5ndGggPT09IDApIHJldHVybiAoZWIpID0+IGViLmxpdCh0cnVlKTsgLy8gbm8gZmlsdGVycywgYWx3YXlzIHRydWVcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjb25zdCBvckdyb3Vwc09mQW5kQnVpbGRlcnM6ICgoZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gRXhwcmVzc2lvbjxTcWxCb29sPilbXVtdID0gW107XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGxldCBjdXJyZW50QW5kR3JvdXBCdWlsZGVyczogKChlYjogRXhwcmVzc2lvbkJ1aWxkZXI8YW55LCBhbnk+KSA9PiBFeHByZXNzaW9uPFNxbEJvb2w+KVtdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgY3VycmVudEFuZEdyb3VwQnVpbGRlcnMucHVzaChidWlsZEJhc2VFeHByZXNzaW9uQnVpbGRlcihmaWx0ZXJzW2ldISwgY29sdW1ucykpO1xuXG4gICAgLy8gJm4gQU5EIGdyb3VwIGVuZHMgaWYgaXQncyB0aGUgbGFzdCBmaWx0ZXIsIG9yIHRoZSBpdGVtIGlzIGZvbGxvd2VkIGJ5IGFuICdvcidcbiAgICBpZiAoaSA9PT0gZmlsdGVycy5sZW5ndGggLSAxIHx8IGZpbHRlcnNbaV0hLmFmdGVyID09PSBcIm9yXCIpIHtcbiAgICAgIG9yR3JvdXBzT2ZBbmRCdWlsZGVycy5wdXNoKGN1cnJlbnRBbmRHcm91cEJ1aWxkZXJzKTtcbiAgICAgIGN1cnJlbnRBbmRHcm91cEJ1aWxkZXJzID0gW107IC8vIHN0YXJ0IGEgbmV3IGdyb3VwXG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcmV0dXJuIChlYjogRXhwcmVzc2lvbkJ1aWxkZXI8YW55LCBhbnk+KSA9PiB7XG4gICAgY29uc3QgYW5kRXhwcmVzc2lvbnMgPSBvckdyb3Vwc09mQW5kQnVpbGRlcnMubWFwKChncm91cCkgPT4ge1xuICAgICAgcmV0dXJuIGViLmFuZChncm91cC5tYXAoKGJ1aWxkZXIpID0+IGJ1aWxkZXIoZWIpKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZWIub3IoYW5kRXhwcmVzc2lvbnMpO1xuICB9O1xufVxuXG4vLyBIZWxwZXIgdG8gYnVpbGQgYW4gZXhwcmVzc2lvbiBidWlsZGVyIGZvciBhIHNpbmdsZSBmaWx0ZXIgb3IgYSBncm91cFxuZnVuY3Rpb24gYnVpbGRCYXNlRXhwcmVzc2lvbkJ1aWxkZXIoXG4gIHNwZWM6IENvbHVtbkZpbHRlciB8IEZpbHRlckdyb3VwLFxuICBjb2x1bW5zOiBUYWJsZVtcImNvbHVtbnNcIl0sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4pOiAoZWI6IEV4cHJlc3Npb25CdWlsZGVyPGFueSwgYW55PikgPT4gRXhwcmVzc2lvbjxTcWxCb29sPiB7XG4gIGlmIChzcGVjLmtpbmQgPT09IFwiQ29sdW1uRmlsdGVyXCIpIHtcbiAgICByZXR1cm4gKGViKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbHVtbiwgb3BlcmF0b3IsIHZhbHVlIH0gPSBzcGVjO1xuXG4gICAgICBjb25zdCBjb2x1bW5NZXRhID0gY29sdW1uc1tjb2x1bW5dITtcblxuICAgICAgcmV0dXJuIGViKFxuICAgICAgICBjb2x1bW5NZXRhLmRhdGF0eXBlLmdyb3VwID09PSBcInJhd1wiID8gZWIuY2FzdChjb2x1bW4sIFwidGV4dFwiKSA6IGNvbHVtbixcbiAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgIHRyYW5zZm9ybVZhbHVlKHZhbHVlLCBjb2x1bW5NZXRhKSxcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBnZXRTZWxlY3RGaWx0ZXJFeHByZXNzaW9uKHNwZWMuZmlsdGVycywgY29sdW1ucyk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2luZGV4LmQudHNcIiAvPlxuZXhwb3J0ICogZnJvbSAnLi9reXNlbHkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1jcmVhdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZXhwcmVzc2lvbi9leHByZXNzaW9uLmpzJztcbmV4cG9ydCB7IGV4cHJlc3Npb25CdWlsZGVyLCB9IGZyb20gJy4vZXhwcmVzc2lvbi9leHByZXNzaW9uLWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9leHByZXNzaW9uL2V4cHJlc3Npb24td3JhcHBlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIvd2hlcmUtaW50ZXJmYWNlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci9yZXR1cm5pbmctaW50ZXJmYWNlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci9vdXRwdXQtaW50ZXJmYWNlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci9oYXZpbmctaW50ZXJmYWNlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci9vcmRlci1ieS1pbnRlcmZhY2UuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1idWlsZGVyL3NlbGVjdC1xdWVyeS1idWlsZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci9pbnNlcnQtcXVlcnktYnVpbGRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIvdXBkYXRlLXF1ZXJ5LWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1idWlsZGVyL2RlbGV0ZS1xdWVyeS1idWlsZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci9uby1yZXN1bHQtZXJyb3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1idWlsZGVyL2pvaW4tYnVpbGRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIvZnVuY3Rpb24tbW9kdWxlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci9pbnNlcnQtcmVzdWx0LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci9kZWxldGUtcmVzdWx0LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci91cGRhdGUtcmVzdWx0LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci9vbi1jb25mbGljdC1idWlsZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci9hZ2dyZWdhdGUtZnVuY3Rpb24tYnVpbGRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIvY2FzZS1idWlsZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci9qc29uLXBhdGgtYnVpbGRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIvbWVyZ2UtcXVlcnktYnVpbGRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIvbWVyZ2UtcmVzdWx0LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktYnVpbGRlci9vcmRlci1ieS1pdGVtLWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9yYXctYnVpbGRlci9yYXctYnVpbGRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Jhdy1idWlsZGVyL3NxbC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWV4ZWN1dG9yL3F1ZXJ5LWV4ZWN1dG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnktZXhlY3V0b3IvZGVmYXVsdC1xdWVyeS1leGVjdXRvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWV4ZWN1dG9yL25vb3AtcXVlcnktZXhlY3V0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1leGVjdXRvci9xdWVyeS1leGVjdXRvci1wcm92aWRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWNvbXBpbGVyL2RlZmF1bHQtcXVlcnktY29tcGlsZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1jb21waWxlci9jb21waWxlZC1xdWVyeS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9zY2hlbWEuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEvY3JlYXRlLXRhYmxlLWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEvY3JlYXRlLXR5cGUtYnVpbGRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9kcm9wLXRhYmxlLWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEvZHJvcC10eXBlLWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEvY3JlYXRlLWluZGV4LWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEvZHJvcC1pbmRleC1idWlsZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL2NyZWF0ZS1zY2hlbWEtYnVpbGRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9kcm9wLXNjaGVtYS1idWlsZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL2NvbHVtbi1kZWZpbml0aW9uLWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEvZm9yZWlnbi1rZXktY29uc3RyYWludC1idWlsZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL2FsdGVyLXRhYmxlLWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEvY3JlYXRlLXZpZXctYnVpbGRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9yZWZyZXNoLW1hdGVyaWFsaXplZC12aWV3LWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEvZHJvcC12aWV3LWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEvYWx0ZXItY29sdW1uLWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9keW5hbWljL2R5bmFtaWMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9keW5hbWljL2R5bmFtaWMtcmVmZXJlbmNlLWJ1aWxkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9keW5hbWljL2R5bmFtaWMtdGFibGUtYnVpbGRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RyaXZlci9kcml2ZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kcml2ZXIvZGF0YWJhc2UtY29ubmVjdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RyaXZlci9jb25uZWN0aW9uLXByb3ZpZGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZHJpdmVyL2RlZmF1bHQtY29ubmVjdGlvbi1wcm92aWRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RyaXZlci9zaW5nbGUtY29ubmVjdGlvbi1wcm92aWRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RyaXZlci9kdW1teS1kcml2ZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kaWFsZWN0L2RpYWxlY3QuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kaWFsZWN0L2RpYWxlY3QtYWRhcHRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxlY3QvZGlhbGVjdC1hZGFwdGVyLWJhc2UuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kaWFsZWN0L2RhdGFiYXNlLWludHJvc3BlY3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxlY3Qvc3FsaXRlL3NxbGl0ZS1kaWFsZWN0LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGlhbGVjdC9zcWxpdGUvc3FsaXRlLWRpYWxlY3QtY29uZmlnLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGlhbGVjdC9zcWxpdGUvc3FsaXRlLWRyaXZlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxlY3QvcG9zdGdyZXMvcG9zdGdyZXMtcXVlcnktY29tcGlsZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kaWFsZWN0L3Bvc3RncmVzL3Bvc3RncmVzLWludHJvc3BlY3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxlY3QvcG9zdGdyZXMvcG9zdGdyZXMtYWRhcHRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxlY3QvbXlzcWwvbXlzcWwtZGlhbGVjdC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxlY3QvbXlzcWwvbXlzcWwtZGlhbGVjdC1jb25maWcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kaWFsZWN0L215c3FsL215c3FsLWRyaXZlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxlY3QvbXlzcWwvbXlzcWwtcXVlcnktY29tcGlsZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kaWFsZWN0L215c3FsL215c3FsLWludHJvc3BlY3Rvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxlY3QvbXlzcWwvbXlzcWwtYWRhcHRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxlY3QvcG9zdGdyZXMvcG9zdGdyZXMtZHJpdmVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGlhbGVjdC9wb3N0Z3Jlcy9wb3N0Z3Jlcy1kaWFsZWN0LWNvbmZpZy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxlY3QvcG9zdGdyZXMvcG9zdGdyZXMtZGlhbGVjdC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxlY3Qvc3FsaXRlL3NxbGl0ZS1xdWVyeS1jb21waWxlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxlY3Qvc3FsaXRlL3NxbGl0ZS1pbnRyb3NwZWN0b3IuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kaWFsZWN0L3NxbGl0ZS9zcWxpdGUtYWRhcHRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxlY3QvbXNzcWwvbXNzcWwtYWRhcHRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxlY3QvbXNzcWwvbXNzcWwtZGlhbGVjdC1jb25maWcuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kaWFsZWN0L21zc3FsL21zc3FsLWRpYWxlY3QuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9kaWFsZWN0L21zc3FsL21zc3FsLWRyaXZlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxlY3QvbXNzcWwvbXNzcWwtaW50cm9zcGVjdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGlhbGVjdC9tc3NxbC9tc3NxbC1xdWVyeS1jb21waWxlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJ5LWNvbXBpbGVyL2RlZmF1bHQtcXVlcnktY29tcGlsZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1jb21waWxlci9xdWVyeS1jb21waWxlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21pZ3JhdGlvbi9taWdyYXRvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21pZ3JhdGlvbi9maWxlLW1pZ3JhdGlvbi1wcm92aWRlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbi9reXNlbHktcGx1Z2luLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2luL2NhbWVsLWNhc2UvY2FtZWwtY2FzZS1wbHVnaW4uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9wbHVnaW4vZGVkdXBsaWNhdGUtam9pbnMvZGVkdXBsaWNhdGUtam9pbnMtcGx1Z2luLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2luL3dpdGgtc2NoZW1hL3dpdGgtc2NoZW1hLXBsdWdpbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbi9wYXJzZS1qc29uLXJlc3VsdHMvcGFyc2UtanNvbi1yZXN1bHRzLXBsdWdpbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbi9oYW5kbGUtZW1wdHktaW4tbGlzdHMvaGFuZGxlLWVtcHR5LWluLWxpc3RzLXBsdWdpbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbi9oYW5kbGUtZW1wdHktaW4tbGlzdHMvaGFuZGxlLWVtcHR5LWluLWxpc3RzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvYWRkLWNvbHVtbi1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvYWRkLWNvbnN0cmFpbnQtbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL2FkZC1pbmRleC1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvYWdncmVnYXRlLWZ1bmN0aW9uLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9hbGlhcy1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvYWx0ZXItY29sdW1uLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9hbHRlci10YWJsZS1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvYW5kLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9iaW5hcnktb3BlcmF0aW9uLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9jYXNlLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9jYXN0LW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9jaGVjay1jb25zdHJhaW50LW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9jb2xsYXRlLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9jb2x1bW4tZGVmaW5pdGlvbi1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvY29sdW1uLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9jb2x1bW4tdXBkYXRlLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9jb21tb24tdGFibGUtZXhwcmVzc2lvbi1uYW1lLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9jb21tb24tdGFibGUtZXhwcmVzc2lvbi1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvY29uc3RyYWludC1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLWluZGV4LW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9jcmVhdGUtc2NoZW1hLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9jcmVhdGUtdGFibGUtbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL2NyZWF0ZS10eXBlLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9jcmVhdGUtdmlldy1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvcmVmcmVzaC1tYXRlcmlhbGl6ZWQtdmlldy1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvZGF0YS10eXBlLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9kZWZhdWx0LWluc2VydC12YWx1ZS1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvZGVmYXVsdC12YWx1ZS1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvZGVsZXRlLXF1ZXJ5LW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9kcm9wLWNvbHVtbi1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvZHJvcC1jb25zdHJhaW50LW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9kcm9wLWluZGV4LW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9kcm9wLXNjaGVtYS1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvZHJvcC10YWJsZS1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvZHJvcC10eXBlLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9kcm9wLXZpZXctbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL2V4cGxhaW4tbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL2ZldGNoLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9mb3JlaWduLWtleS1jb25zdHJhaW50LW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9mcm9tLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9mdW5jdGlvbi1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvZ2VuZXJhdGVkLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9ncm91cC1ieS1pdGVtLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9ncm91cC1ieS1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvaGF2aW5nLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9pZGVudGlmaWVyLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9pbnNlcnQtcXVlcnktbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL2pvaW4tbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL2pzb24tb3BlcmF0b3ItY2hhaW4tbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL2pzb24tcGF0aC1sZWctbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL2pzb24tcGF0aC1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvanNvbi1yZWZlcmVuY2Utbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL2xpbWl0LW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9saXN0LW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9tYXRjaGVkLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9tZXJnZS1xdWVyeS1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvbW9kaWZ5LWNvbHVtbi1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvb2Zmc2V0LW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9vbi1jb25mbGljdC1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvb24tZHVwbGljYXRlLWtleS1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvb24tbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXNvdXJjZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXRyYW5zZm9ybWVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtdmlzaXRvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0b3Itbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL29yLWFjdGlvbi1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvb3Itbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL29yZGVyLWJ5LWl0ZW0tbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL29yZGVyLWJ5LW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9vdXRwdXQtbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL292ZXItbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3BhcmVucy1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvcGFydGl0aW9uLWJ5LWl0ZW0tbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3BhcnRpdGlvbi1ieS1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvcHJpbWFyeS1rZXktY29uc3RyYWludC1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvcHJpbWl0aXZlLXZhbHVlLWxpc3Qtbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3F1ZXJ5LW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9yYXctbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3JlZmVyZW5jZS1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvcmVmZXJlbmNlcy1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvcmVuYW1lLWNvbHVtbi1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvcmVuYW1lLWNvbnN0cmFpbnQtbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3JldHVybmluZy1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvc2NoZW1hYmxlLWlkZW50aWZpZXItbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3NlbGVjdC1hbGwtbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3NlbGVjdC1tb2RpZmllci1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvc2VsZWN0LXF1ZXJ5LW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9zZWxlY3Rpb24tbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3NldC1vcGVyYXRpb24tbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3NpbXBsZS1yZWZlcmVuY2UtZXhwcmVzc2lvbi1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvdGFibGUtbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3RvcC1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvdHVwbGUtbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3VuYXJ5LW9wZXJhdGlvbi1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvdW5pcXVlLWNvbnN0cmFpbnQtbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3VwZGF0ZS1xdWVyeS1ub2RlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvdXNpbmctbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3ZhbHVlLWxpc3Qtbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3ZhbHVlLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS92YWx1ZXMtbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3doZW4tbm9kZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3doZXJlLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcGVyYXRpb24tbm9kZS93aXRoLW5vZGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlsL2NvbHVtbi10eXBlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbC9jb21waWxhYmxlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbC9leHBsYWluYWJsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWwvc3RyZWFtYWJsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWwvbG9nLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbC9pbmZlci1yZXN1bHQuanMnO1xuZXhwb3J0IHsgbG9nT25jZSB9IGZyb20gJy4vdXRpbC9sb2ctb25jZS5qcyc7XG5leHBvcnQgeyBjcmVhdGVRdWVyeUlkIH0gZnJvbSAnLi91dGlsL3F1ZXJ5LWlkLmpzJztcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4va3lzZWx5LmQudHNcIiAvPlxuaW1wb3J0IHsgU2NoZW1hTW9kdWxlIH0gZnJvbSAnLi9zY2hlbWEvc2NoZW1hLmpzJztcbmltcG9ydCB7IER5bmFtaWNNb2R1bGUgfSBmcm9tICcuL2R5bmFtaWMvZHluYW1pYy5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0Q29ubmVjdGlvblByb3ZpZGVyIH0gZnJvbSAnLi9kcml2ZXIvZGVmYXVsdC1jb25uZWN0aW9uLXByb3ZpZGVyLmpzJztcbmltcG9ydCB7IFF1ZXJ5Q3JlYXRvciB9IGZyb20gJy4vcXVlcnktY3JlYXRvci5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0UXVlcnlFeGVjdXRvciB9IGZyb20gJy4vcXVlcnktZXhlY3V0b3IvZGVmYXVsdC1xdWVyeS1leGVjdXRvci5qcyc7XG5pbXBvcnQgeyBmcmVlemUsIGlzT2JqZWN0LCBpc1VuZGVmaW5lZCB9IGZyb20gJy4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgUnVudGltZURyaXZlciB9IGZyb20gJy4vZHJpdmVyL3J1bnRpbWUtZHJpdmVyLmpzJztcbmltcG9ydCB7IFNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlciB9IGZyb20gJy4vZHJpdmVyL3NpbmdsZS1jb25uZWN0aW9uLXByb3ZpZGVyLmpzJztcbmltcG9ydCB7IHZhbGlkYXRlVHJhbnNhY3Rpb25TZXR0aW5ncywgfSBmcm9tICcuL2RyaXZlci9kcml2ZXIuanMnO1xuaW1wb3J0IHsgY3JlYXRlRnVuY3Rpb25Nb2R1bGUsIH0gZnJvbSAnLi9xdWVyeS1idWlsZGVyL2Z1bmN0aW9uLW1vZHVsZS5qcyc7XG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL3V0aWwvbG9nLmpzJztcbmltcG9ydCB7IGNyZWF0ZVF1ZXJ5SWQgfSBmcm9tICcuL3V0aWwvcXVlcnktaWQuanMnO1xuaW1wb3J0IHsgaXNDb21waWxhYmxlIH0gZnJvbSAnLi91dGlsL2NvbXBpbGFibGUuanMnO1xuaW1wb3J0IHsgQ2FzZUJ1aWxkZXIgfSBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIvY2FzZS1idWlsZGVyLmpzJztcbmltcG9ydCB7IENhc2VOb2RlIH0gZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9jYXNlLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VFeHByZXNzaW9uIH0gZnJvbSAnLi9wYXJzZXIvZXhwcmVzc2lvbi1wYXJzZXIuanMnO1xuaW1wb3J0IHsgV2l0aFNjaGVtYVBsdWdpbiB9IGZyb20gJy4vcGx1Z2luL3dpdGgtc2NoZW1hL3dpdGgtc2NoZW1hLXBsdWdpbi5qcyc7XG5pbXBvcnQgeyBwcm92aWRlQ29udHJvbGxlZENvbm5lY3Rpb24sIH0gZnJvbSAnLi91dGlsL3Byb3ZpZGUtY29udHJvbGxlZC1jb25uZWN0aW9uLmpzJztcbmltcG9ydCB7IGxvZ09uY2UgfSBmcm9tICcuL3V0aWwvbG9nLW9uY2UuanMnO1xuLy8gQHRzLWlnbm9yZVxuU3ltYm9sLmFzeW5jRGlzcG9zZSA/Pz0gU3ltYm9sKCdTeW1ib2wuYXN5bmNEaXNwb3NlJyk7XG4vKipcbiAqIFRoZSBtYWluIEt5c2VseSBjbGFzcy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGNyZWF0ZSBvbmUgaW5zdGFuY2Ugb2YgYEt5c2VseWAgcGVyIGRhdGFiYXNlIHVzaW5nIHRoZSB7QGxpbmsgS3lzZWx5fVxuICogY29uc3RydWN0b3IuIEVhY2ggYEt5c2VseWAgaW5zdGFuY2UgbWFpbnRhaW5zIGl0cyBvd24gY29ubmVjdGlvbiBwb29sLlxuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIFRoaXMgZXhhbXBsZSBhc3N1bWVzIHlvdXIgZGF0YWJhc2UgaGFzIGEgXCJwZXJzb25cIiB0YWJsZTpcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0ICogYXMgU3FsaXRlIGZyb20gJ2JldHRlci1zcWxpdGUzJ1xuICogaW1wb3J0IHtcdTAwQTB0eXBlIEdlbmVyYXRlZCwgS3lzZWx5LCBTcWxpdGVEaWFsZWN0IH0gZnJvbSAna3lzZWx5J1xuICpcbiAqIGludGVyZmFjZSBEYXRhYmFzZSB7XG4gKiAgIHBlcnNvbjoge1xuICogICAgIGlkOiBHZW5lcmF0ZWQ8bnVtYmVyPlxuICogICAgIGZpcnN0X25hbWU6IHN0cmluZ1xuICogICAgIGxhc3RfbmFtZTogc3RyaW5nIHwgbnVsbFxuICogICB9XG4gKiB9XG4gKlxuICogY29uc3QgZGIgPSBuZXcgS3lzZWx5PERhdGFiYXNlPih7XG4gKiAgIGRpYWxlY3Q6IG5ldyBTcWxpdGVEaWFsZWN0KHtcbiAqICAgICBkYXRhYmFzZTogbmV3IFNxbGl0ZSgnOm1lbW9yeTonKSxcbiAqICAgfSlcbiAqIH0pXG4gKiBgYGBcbiAqXG4gKiBAdHlwZVBhcmFtIERCIC0gVGhlIGRhdGFiYXNlIGludGVyZmFjZSB0eXBlLiBLZXlzIG9mIHRoaXMgdHlwZSBtdXN0IGJlIHRhYmxlIG5hbWVzXG4gKiAgICBpbiB0aGUgZGF0YWJhc2UgYW5kIHZhbHVlcyBtdXN0IGJlIGludGVyZmFjZXMgdGhhdCBkZXNjcmliZSB0aGUgcm93cyBpbiB0aG9zZVxuICogICAgdGFibGVzLiBTZWUgdGhlIGV4YW1wbGVzIGFib3ZlLlxuICovXG5leHBvcnQgY2xhc3MgS3lzZWx5IGV4dGVuZHMgUXVlcnlDcmVhdG9yIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IoYXJncykge1xuICAgICAgICBsZXQgc3VwZXJQcm9wcztcbiAgICAgICAgbGV0IHByb3BzO1xuICAgICAgICBpZiAoaXNLeXNlbHlQcm9wcyhhcmdzKSkge1xuICAgICAgICAgICAgc3VwZXJQcm9wcyA9IHsgZXhlY3V0b3I6IGFyZ3MuZXhlY3V0b3IgfTtcbiAgICAgICAgICAgIHByb3BzID0geyAuLi5hcmdzIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkaWFsZWN0ID0gYXJncy5kaWFsZWN0O1xuICAgICAgICAgICAgY29uc3QgZHJpdmVyID0gZGlhbGVjdC5jcmVhdGVEcml2ZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBpbGVyID0gZGlhbGVjdC5jcmVhdGVRdWVyeUNvbXBpbGVyKCk7XG4gICAgICAgICAgICBjb25zdCBhZGFwdGVyID0gZGlhbGVjdC5jcmVhdGVBZGFwdGVyKCk7XG4gICAgICAgICAgICBjb25zdCBsb2cgPSBuZXcgTG9nKGFyZ3MubG9nID8/IFtdKTtcbiAgICAgICAgICAgIGNvbnN0IHJ1bnRpbWVEcml2ZXIgPSBuZXcgUnVudGltZURyaXZlcihkcml2ZXIsIGxvZyk7XG4gICAgICAgICAgICBjb25zdCBjb25uZWN0aW9uUHJvdmlkZXIgPSBuZXcgRGVmYXVsdENvbm5lY3Rpb25Qcm92aWRlcihydW50aW1lRHJpdmVyKTtcbiAgICAgICAgICAgIGNvbnN0IGV4ZWN1dG9yID0gbmV3IERlZmF1bHRRdWVyeUV4ZWN1dG9yKGNvbXBpbGVyLCBhZGFwdGVyLCBjb25uZWN0aW9uUHJvdmlkZXIsIGFyZ3MucGx1Z2lucyA/PyBbXSk7XG4gICAgICAgICAgICBzdXBlclByb3BzID0geyBleGVjdXRvciB9O1xuICAgICAgICAgICAgcHJvcHMgPSB7XG4gICAgICAgICAgICAgICAgY29uZmlnOiBhcmdzLFxuICAgICAgICAgICAgICAgIGV4ZWN1dG9yLFxuICAgICAgICAgICAgICAgIGRpYWxlY3QsXG4gICAgICAgICAgICAgICAgZHJpdmVyOiBydW50aW1lRHJpdmVyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihzdXBlclByb3BzKTtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB7QGxpbmsgU2NoZW1hTW9kdWxlfSBtb2R1bGUgZm9yIGJ1aWxkaW5nIGRhdGFiYXNlIHNjaGVtYS5cbiAgICAgKi9cbiAgICBnZXQgc2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gbmV3IFNjaGVtYU1vZHVsZSh0aGlzLiNwcm9wcy5leGVjdXRvcik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB0aGUge0BsaW5rIER5bmFtaWNNb2R1bGV9IG1vZHVsZS5cbiAgICAgKlxuICAgICAqIFRoZSB7QGxpbmsgRHluYW1pY01vZHVsZX0gbW9kdWxlIGNhbiBiZSB1c2VkIHRvIGJ5cGFzcyBzdHJpY3QgdHlwaW5nIGFuZFxuICAgICAqIHBhc3NpbmcgaW4gZHluYW1pYyB2YWx1ZXMgZm9yIHRoZSBxdWVyaWVzLlxuICAgICAqL1xuICAgIGdldCBkeW5hbWljKCkge1xuICAgICAgICByZXR1cm4gbmV3IER5bmFtaWNNb2R1bGUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHtAbGluayBEYXRhYmFzZUludHJvc3BlY3RvciB8IGRhdGFiYXNlIGludHJvc3BlY3Rvcn0uXG4gICAgICovXG4gICAgZ2V0IGludHJvc3BlY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5kaWFsZWN0LmNyZWF0ZUludHJvc3BlY3Rvcih0aGlzLndpdGhvdXRQbHVnaW5zKCkpO1xuICAgIH1cbiAgICBjYXNlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FzZUJ1aWxkZXIoe1xuICAgICAgICAgICAgbm9kZTogQ2FzZU5vZGUuY3JlYXRlKGlzVW5kZWZpbmVkKHZhbHVlKSA/IHVuZGVmaW5lZCA6IHBhcnNlRXhwcmVzc2lvbih2YWx1ZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHtAbGluayBGdW5jdGlvbk1vZHVsZX0gdGhhdCBjYW4gYmUgdXNlZCB0byB3cml0ZSBzb21ld2hhdCB0eXBlLXNhZmUgZnVuY3Rpb25cbiAgICAgKiBjYWxscy5cbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgeyBjb3VudCB9ID0gZGIuZm5cbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gICAgICogICAuaW5uZXJKb2luKCdwZXQnLCAncGV0Lm93bmVyX2lkJywgJ3BlcnNvbi5pZCcpXG4gICAgICogICAuc2VsZWN0KFtcbiAgICAgKiAgICAgJ2lkJyxcbiAgICAgKiAgICAgY291bnQoJ3BldC5pZCcpLmFzKCdwZXJzb25fY291bnQnKSxcbiAgICAgKiAgIF0pXG4gICAgICogICAuZ3JvdXBCeSgncGVyc29uLmlkJylcbiAgICAgKiAgIC5oYXZpbmcoY291bnQoJ3BldC5pZCcpLCAnPicsIDEwKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IFwicGVyc29uXCIuXCJpZFwiLCBjb3VudChcInBldFwiLlwiaWRcIikgYXMgXCJwZXJzb25fY291bnRcIlxuICAgICAqIGZyb20gXCJwZXJzb25cIlxuICAgICAqIGlubmVyIGpvaW4gXCJwZXRcIiBvbiBcInBldFwiLlwib3duZXJfaWRcIiA9IFwicGVyc29uXCIuXCJpZFwiXG4gICAgICogZ3JvdXAgYnkgXCJwZXJzb25cIi5cImlkXCJcbiAgICAgKiBoYXZpbmcgY291bnQoXCJwZXRcIi5cImlkXCIpID4gJDFcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFdoeSBcInNvbWV3aGF0XCIgdHlwZS1zYWZlPyBCZWNhdXNlIHRoZSBmdW5jdGlvbiBjYWxscyBhcmUgbm90IGJvdW5kIHRvIHRoZVxuICAgICAqIGN1cnJlbnQgcXVlcnkgY29udGV4dC4gVGhleSBhbGxvdyB5b3UgdG8gcmVmZXJlbmNlIGNvbHVtbnMgYW5kIHRhYmxlcyB0aGF0XG4gICAgICogYXJlIG5vdCBpbiB0aGUgY3VycmVudCBxdWVyeS4gRS5nLiByZW1vdmUgdGhlIGBpbm5lckpvaW5gIGZyb20gdGhlIHByZXZpb3VzXG4gICAgICogcXVlcnkgYW5kIFR5cGVTY3JpcHQgd29uJ3QgZXZlbiBjb21wbGFpbi5cbiAgICAgKlxuICAgICAqIElmIHlvdSB3YW50IHRvIG1ha2UgdGhlIGZ1bmN0aW9uIGNhbGxzIGZ1bGx5IHR5cGUtc2FmZSwgeW91IGNhbiB1c2UgdGhlXG4gICAgICoge0BsaW5rIEV4cHJlc3Npb25CdWlsZGVyLmZufSBnZXR0ZXIgZm9yIGEgcXVlcnkgY29udGV4dC1hd2FyZSwgc3RyaWN0ZXIge0BsaW5rIEZ1bmN0aW9uTW9kdWxlfS5cbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2VsZWN0RnJvbSgncGVyc29uJylcbiAgICAgKiAgIC5pbm5lckpvaW4oJ3BldCcsICdwZXQub3duZXJfaWQnLCAncGVyc29uLmlkJylcbiAgICAgKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICogICAgICdwZXJzb24uaWQnLFxuICAgICAqICAgICBlYi5mbi5jb3VudCgncGV0LmlkJykuYXMoJ3BldF9jb3VudCcpXG4gICAgICogICBdKVxuICAgICAqICAgLmdyb3VwQnkoJ3BlcnNvbi5pZCcpXG4gICAgICogICAuaGF2aW5nKChlYikgPT4gZWIuZm4uY291bnQoJ3BldC5pZCcpLCAnPicsIDEwKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdldCBmbigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZ1bmN0aW9uTW9kdWxlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSB7QGxpbmsgVHJhbnNhY3Rpb25CdWlsZGVyfSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJ1biBxdWVyaWVzIGluc2lkZSBhIHRyYW5zYWN0aW9uLlxuICAgICAqXG4gICAgICogVGhlIHJldHVybmVkIHtAbGluayBUcmFuc2FjdGlvbkJ1aWxkZXJ9IGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgdHJhbnNhY3Rpb24uIFRoZVxuICAgICAqIHtAbGluayBUcmFuc2FjdGlvbkJ1aWxkZXIuZXhlY3V0ZX0gbWV0aG9kIGNhbiB0aGVuIGJlIGNhbGxlZCB0byBydW4gdGhlIHRyYW5zYWN0aW9uLlxuICAgICAqIHtAbGluayBUcmFuc2FjdGlvbkJ1aWxkZXIuZXhlY3V0ZX0gdGFrZXMgYSBmdW5jdGlvbiB0aGF0IGlzIHJ1biBpbnNpZGUgdGhlXG4gICAgICogdHJhbnNhY3Rpb24uIElmIHRoZSBmdW5jdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uLFxuICAgICAqIDEuIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LFxuICAgICAqIDIuIHRoZSB0cmFuc2FjdGlvbiBpcyByb2xsZWQgYmFjaywgYW5kXG4gICAgICogMy4gdGhlIGV4Y2VwdGlvbiBpcyB0aHJvd24gYWdhaW4uXG4gICAgICogT3RoZXJ3aXNlIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuXG4gICAgICpcbiAgICAgKiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gcGFzc2VkIHRvIHRoZSB7QGxpbmsgVHJhbnNhY3Rpb25CdWlsZGVyLmV4ZWN1dGUgfCBleGVjdXRlfVxuICAgICAqIG1ldGhvZCBnZXRzIHRoZSB0cmFuc2FjdGlvbiBvYmplY3QgYXMgaXRzIG9ubHkgYXJndW1lbnQuIFRoZSB0cmFuc2FjdGlvbiBpc1xuICAgICAqIG9mIHR5cGUge0BsaW5rIFRyYW5zYWN0aW9ufSB3aGljaCBpbmhlcml0cyB7QGxpbmsgS3lzZWx5fS4gQW55IHF1ZXJ5XG4gICAgICogc3RhcnRlZCB0aHJvdWdoIHRoZSB0cmFuc2FjdGlvbiBvYmplY3QgaXMgZXhlY3V0ZWQgaW5zaWRlIHRoZSB0cmFuc2FjdGlvbi5cbiAgICAgKlxuICAgICAqIFRvIHJ1biBhIGNvbnRyb2xsZWQgdHJhbnNhY3Rpb24sIGFsbG93aW5nIHlvdSB0byBjb21taXQgYW5kIHJvbGxiYWNrIG1hbnVhbGx5LFxuICAgICAqIHVzZSB7QGxpbmsgc3RhcnRUcmFuc2FjdGlvbn0gaW5zdGVhZC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogPCEtLSBzaXRlRXhhbXBsZShcInRyYW5zYWN0aW9uc1wiLCBcIlNpbXBsZSB0cmFuc2FjdGlvblwiLCAxMCkgLS0+XG4gICAgICpcbiAgICAgKiBUaGlzIGV4YW1wbGUgaW5zZXJ0cyB0d28gcm93cyBpbiBhIHRyYW5zYWN0aW9uLiBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGluc2lkZVxuICAgICAqIHRoZSBjYWxsYmFjayBwYXNzZWQgdG8gdGhlIGBleGVjdXRlYCBtZXRob2QsXG4gICAgICogMS4gdGhlIGV4Y2VwdGlvbiBpcyBjYXVnaHQsXG4gICAgICogMi4gdGhlIHRyYW5zYWN0aW9uIGlzIHJvbGxlZCBiYWNrLCBhbmRcbiAgICAgKiAzLiB0aGUgZXhjZXB0aW9uIGlzIHRocm93biBhZ2Fpbi5cbiAgICAgKiBPdGhlcndpc2UgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC5cbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgY2F0dG8gPSBhd2FpdCBkYi50cmFuc2FjdGlvbigpLmV4ZWN1dGUoYXN5bmMgKHRyeCkgPT4ge1xuICAgICAqICAgY29uc3QgamVubmlmZXIgPSBhd2FpdCB0cnguaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgICAgLnZhbHVlcyh7XG4gICAgICogICAgICAgZmlyc3RfbmFtZTogJ0plbm5pZmVyJyxcbiAgICAgKiAgICAgICBsYXN0X25hbWU6ICdBbmlzdG9uJyxcbiAgICAgKiAgICAgICBhZ2U6IDQwLFxuICAgICAqICAgICB9KVxuICAgICAqICAgICAucmV0dXJuaW5nKCdpZCcpXG4gICAgICogICAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICpcbiAgICAgKiAgIHJldHVybiBhd2FpdCB0cnguaW5zZXJ0SW50bygncGV0JylcbiAgICAgKiAgICAgLnZhbHVlcyh7XG4gICAgICogICAgICAgb3duZXJfaWQ6IGplbm5pZmVyLmlkLFxuICAgICAqICAgICAgIG5hbWU6ICdDYXR0bycsXG4gICAgICogICAgICAgc3BlY2llczogJ2NhdCcsXG4gICAgICogICAgICAgaXNfZmF2b3JpdGU6IGZhbHNlLFxuICAgICAqICAgICB9KVxuICAgICAqICAgICAucmV0dXJuaW5nQWxsKClcbiAgICAgKiAgICAgLmV4ZWN1dGVUYWtlRmlyc3QoKVxuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBTZXR0aW5nIHRoZSBpc29sYXRpb24gbGV2ZWw6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgS3lzZWx5IH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC50cmFuc2FjdGlvbigpXG4gICAgICogICAuc2V0SXNvbGF0aW9uTGV2ZWwoJ3NlcmlhbGl6YWJsZScpXG4gICAgICogICAuZXhlY3V0ZShhc3luYyAodHJ4KSA9PiB7XG4gICAgICogICAgIGF3YWl0IGRvU3R1ZmYodHJ4KVxuICAgICAqICAgfSlcbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIGRvU3R1ZmYoa3lzZWx5OiB0eXBlb2YgZGIpIHtcbiAgICAgKiAgIC8vIC4uLlxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB0cmFuc2FjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoeyAuLi50aGlzLiNwcm9wcyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHtAbGluayBDb250cm9sbGVkVHJhbnNhY3Rpb25CdWlsZGVyfSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJ1biBxdWVyaWVzIGluc2lkZSBhIGNvbnRyb2xsZWQgdHJhbnNhY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGUgcmV0dXJuZWQge0BsaW5rIENvbnRyb2xsZWRUcmFuc2FjdGlvbkJ1aWxkZXJ9IGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgdHJhbnNhY3Rpb24uXG4gICAgICogVGhlIHtAbGluayBDb250cm9sbGVkVHJhbnNhY3Rpb25CdWlsZGVyLmV4ZWN1dGV9IG1ldGhvZCBjYW4gdGhlbiBiZSBjYWxsZWRcbiAgICAgKiB0byBzdGFydCB0aGUgdHJhbnNhY3Rpb24gYW5kIHJldHVybiBhIHtAbGluayBDb250cm9sbGVkVHJhbnNhY3Rpb259LlxuICAgICAqXG4gICAgICogQSB7QGxpbmsgQ29udHJvbGxlZFRyYW5zYWN0aW9ufSBhbGxvd3MgeW91IHRvIGNvbW1pdCBhbmQgcm9sbGJhY2sgbWFudWFsbHksXG4gICAgICogZXhlY3V0ZSBzYXZlcG9pbnQgY29tbWFuZHMuIEl0IGV4dGVuZHMge0BsaW5rIFRyYW5zYWN0aW9ufSB3aGljaCBleHRlbmRzIHtAbGluayBLeXNlbHl9LFxuICAgICAqIHNvIHlvdSBjYW4gcnVuIHF1ZXJpZXMgaW5zaWRlIHRoZSB0cmFuc2FjdGlvbi4gT25jZSB0aGUgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLFxuICAgICAqIG9yIHJvbGxlZCBiYWNrLCBpdCBjYW4ndCBiZSB1c2VkIGFueW1vcmUgLSBhbGwgcXVlcmllcyB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgICAqIFRoaXMgaXMgdG8gcHJldmVudCBhY2NpZGVudGFsbHkgcnVubmluZyBxdWVyaWVzIG91dHNpZGUgdGhlIHRyYW5zYWN0aW9uIC0gd2hlcmVcbiAgICAgKiBhdG9taWNpdHkgaXMgbm90IGd1YXJhbnRlZWQgYW55bW9yZS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogPCEtLSBzaXRlRXhhbXBsZShcInRyYW5zYWN0aW9uc1wiLCBcIkNvbnRyb2xsZWQgdHJhbnNhY3Rpb25cIiwgMTEpIC0tPlxuICAgICAqXG4gICAgICogQSBjb250cm9sbGVkIHRyYW5zYWN0aW9uIGFsbG93cyB5b3UgdG8gY29tbWl0IGFuZCByb2xsYmFjayBtYW51YWxseSwgZXhlY3V0ZVxuICAgICAqIHNhdmVwb2ludCBjb21tYW5kcywgYW5kIHF1ZXJpZXMgaW4gZ2VuZXJhbC5cbiAgICAgKlxuICAgICAqIEluIHRoaXMgZXhhbXBsZSB3ZSBzdGFydCBhIHRyYW5zYWN0aW9uLCB1c2UgaXQgdG8gaW5zZXJ0IHR3byByb3dzIGFuZCB0aGVuIGNvbW1pdFxuICAgICAqIHRoZSB0cmFuc2FjdGlvbi4gSWYgYW4gZXJyb3IgaXMgdGhyb3duLCB3ZSBjYXRjaCBpdCBhbmQgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uLlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCB0cnggPSBhd2FpdCBkYi5zdGFydFRyYW5zYWN0aW9uKCkuZXhlY3V0ZSgpXG4gICAgICpcbiAgICAgKiB0cnkge1xuICAgICAqICAgY29uc3QgamVubmlmZXIgPSBhd2FpdCB0cnguaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgICAgLnZhbHVlcyh7XG4gICAgICogICAgICAgZmlyc3RfbmFtZTogJ0plbm5pZmVyJyxcbiAgICAgKiAgICAgICBsYXN0X25hbWU6ICdBbmlzdG9uJyxcbiAgICAgKiAgICAgICBhZ2U6IDQwLFxuICAgICAqICAgICB9KVxuICAgICAqICAgICAucmV0dXJuaW5nKCdpZCcpXG4gICAgICogICAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICpcbiAgICAgKiAgIGNvbnN0IGNhdHRvID0gYXdhaXQgdHJ4Lmluc2VydEludG8oJ3BldCcpXG4gICAgICogICAgIC52YWx1ZXMoe1xuICAgICAqICAgICAgIG93bmVyX2lkOiBqZW5uaWZlci5pZCxcbiAgICAgKiAgICAgICBuYW1lOiAnQ2F0dG8nLFxuICAgICAqICAgICAgIHNwZWNpZXM6ICdjYXQnLFxuICAgICAqICAgICAgIGlzX2Zhdm9yaXRlOiBmYWxzZSxcbiAgICAgKiAgICAgfSlcbiAgICAgKiAgICAgLnJldHVybmluZ0FsbCgpXG4gICAgICogICAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICpcbiAgICAgKiAgIGF3YWl0IHRyeC5jb21taXQoKS5leGVjdXRlKClcbiAgICAgKlxuICAgICAqICAgLy8gLi4uXG4gICAgICogfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgKiAgIGF3YWl0IHRyeC5yb2xsYmFjaygpLmV4ZWN1dGUoKVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJ0cmFuc2FjdGlvbnNcIiwgXCJDb250cm9sbGVkIHRyYW5zYWN0aW9uIC93IHNhdmVwb2ludHNcIiwgMTIpIC0tPlxuICAgICAqXG4gICAgICogQSBjb250cm9sbGVkIHRyYW5zYWN0aW9uIGFsbG93cyB5b3UgdG8gY29tbWl0IGFuZCByb2xsYmFjayBtYW51YWxseSwgZXhlY3V0ZVxuICAgICAqIHNhdmVwb2ludCBjb21tYW5kcywgYW5kIHF1ZXJpZXMgaW4gZ2VuZXJhbC5cbiAgICAgKlxuICAgICAqIEluIHRoaXMgZXhhbXBsZSB3ZSBzdGFydCBhIHRyYW5zYWN0aW9uLCBpbnNlcnQgYSBwZXJzb24sIGNyZWF0ZSBhIHNhdmVwb2ludCxcbiAgICAgKiB0cnkgaW5zZXJ0aW5nIGEgdG95IGFuZCBhIHBldCwgYW5kIGlmIGFuIGVycm9yIGlzIHRocm93biwgd2Ugcm9sbGJhY2sgdG8gdGhlXG4gICAgICogc2F2ZXBvaW50LiBFdmVudHVhbGx5IHdlIHJlbGVhc2UgdGhlIHNhdmVwb2ludCwgaW5zZXJ0IGFuIGF1ZGl0IHJlY29yZCBhbmRcbiAgICAgKiBjb21taXQgdGhlIHRyYW5zYWN0aW9uLiBJZiBhbiBlcnJvciBpcyB0aHJvd24sIHdlIGNhdGNoIGl0IGFuZCByb2xsYmFjayB0aGVcbiAgICAgKiB0cmFuc2FjdGlvbi5cbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgdHJ4ID0gYXdhaXQgZGIuc3RhcnRUcmFuc2FjdGlvbigpLmV4ZWN1dGUoKVxuICAgICAqXG4gICAgICogdHJ5IHtcbiAgICAgKiAgIGNvbnN0IGplbm5pZmVyID0gYXdhaXQgdHJ4XG4gICAgICogICAgIC5pbnNlcnRJbnRvKCdwZXJzb24nKVxuICAgICAqICAgICAudmFsdWVzKHtcbiAgICAgKiAgICAgICBmaXJzdF9uYW1lOiAnSmVubmlmZXInLFxuICAgICAqICAgICAgIGxhc3RfbmFtZTogJ0FuaXN0b24nLFxuICAgICAqICAgICAgIGFnZTogNDAsXG4gICAgICogICAgIH0pXG4gICAgICogICAgIC5yZXR1cm5pbmcoJ2lkJylcbiAgICAgKiAgICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKlxuICAgICAqICAgY29uc3QgdHJ4QWZ0ZXJKZW5uaWZlciA9IGF3YWl0IHRyeC5zYXZlcG9pbnQoJ2FmdGVyX2plbm5pZmVyJykuZXhlY3V0ZSgpXG4gICAgICpcbiAgICAgKiAgIHRyeSB7XG4gICAgICogICAgIGNvbnN0IGNhdHRvID0gYXdhaXQgdHJ4QWZ0ZXJKZW5uaWZlclxuICAgICAqICAgICAgIC5pbnNlcnRJbnRvKCdwZXQnKVxuICAgICAqICAgICAgIC52YWx1ZXMoe1xuICAgICAqICAgICAgICAgb3duZXJfaWQ6IGplbm5pZmVyLmlkLFxuICAgICAqICAgICAgICAgbmFtZTogJ0NhdHRvJyxcbiAgICAgKiAgICAgICAgIHNwZWNpZXM6ICdjYXQnLFxuICAgICAqICAgICAgIH0pXG4gICAgICogICAgICAgLnJldHVybmluZygnaWQnKVxuICAgICAqICAgICAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICpcbiAgICAgKiAgICAgYXdhaXQgdHJ4QWZ0ZXJKZW5uaWZlclxuICAgICAqICAgICAgIC5pbnNlcnRJbnRvKCd0b3knKVxuICAgICAqICAgICAgIC52YWx1ZXMoeyBuYW1lOiAnQm9uZScsIHByaWNlOiAxLjk5LCBwZXRfaWQ6IGNhdHRvLmlkIH0pXG4gICAgICogICAgICAgLmV4ZWN1dGUoKVxuICAgICAqICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgKiAgICAgYXdhaXQgdHJ4QWZ0ZXJKZW5uaWZlci5yb2xsYmFja1RvU2F2ZXBvaW50KCdhZnRlcl9qZW5uaWZlcicpLmV4ZWN1dGUoKVxuICAgICAqICAgfVxuICAgICAqXG4gICAgICogICBhd2FpdCB0cnhBZnRlckplbm5pZmVyLnJlbGVhc2VTYXZlcG9pbnQoJ2FmdGVyX2plbm5pZmVyJykuZXhlY3V0ZSgpXG4gICAgICpcbiAgICAgKiAgIGF3YWl0IHRyeC5pbnNlcnRJbnRvKCdhdWRpdCcpLnZhbHVlcyh7IGFjdGlvbjogJ2FkZGVkIEplbm5pZmVyJyB9KS5leGVjdXRlKClcbiAgICAgKlxuICAgICAqICAgYXdhaXQgdHJ4LmNvbW1pdCgpLmV4ZWN1dGUoKVxuICAgICAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICogICBhd2FpdCB0cngucm9sbGJhY2soKS5leGVjdXRlKClcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgc3RhcnRUcmFuc2FjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb250cm9sbGVkVHJhbnNhY3Rpb25CdWlsZGVyKHsgLi4udGhpcy4jcHJvcHMgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByb3ZpZGVzIGEga3lzZWx5IGluc3RhbmNlIGJvdW5kIHRvIGEgc2luZ2xlIGRhdGFiYXNlIGNvbm5lY3Rpb24uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC5jb25uZWN0aW9uKClcbiAgICAgKiAgIC5leGVjdXRlKGFzeW5jIChkYikgPT4ge1xuICAgICAqICAgICAvLyBgZGJgIGlzIGFuIGluc3RhbmNlIG9mIGBLeXNlbHlgIHRoYXQncyBib3VuZCB0byBhIHNpbmdsZVxuICAgICAqICAgICAvLyBkYXRhYmFzZSBjb25uZWN0aW9uLiBBbGwgcXVlcmllcyBleGVjdXRlZCB0aHJvdWdoIGBkYmAgdXNlXG4gICAgICogICAgIC8vIHRoZSBzYW1lIGNvbm5lY3Rpb24uXG4gICAgICogICAgIGF3YWl0IGRvU3R1ZmYoZGIpXG4gICAgICogICB9KVxuICAgICAqXG4gICAgICogYXN5bmMgZnVuY3Rpb24gZG9TdHVmZihreXNlbHk6IHR5cGVvZiBkYikge1xuICAgICAqICAgLy8gLi4uXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbm5lY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29ubmVjdGlvbkJ1aWxkZXIoeyAuLi50aGlzLiNwcm9wcyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBLeXNlbHkgaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gcGx1Z2luIGluc3RhbGxlZC5cbiAgICAgKi9cbiAgICB3aXRoUGx1Z2luKHBsdWdpbikge1xuICAgICAgICByZXR1cm4gbmV3IEt5c2VseSh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNwcm9wcy5leGVjdXRvci53aXRoUGx1Z2luKHBsdWdpbiksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29weSBvZiB0aGlzIEt5c2VseSBpbnN0YW5jZSB3aXRob3V0IGFueSBwbHVnaW5zLlxuICAgICAqL1xuICAgIHdpdGhvdXRQbHVnaW5zKCkge1xuICAgICAgICByZXR1cm4gbmV3IEt5c2VseSh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNwcm9wcy5leGVjdXRvci53aXRob3V0UGx1Z2lucygpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQG92ZXJyaWRlXG4gICAgICovXG4gICAgd2l0aFNjaGVtYShzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBLeXNlbHkoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jcHJvcHMuZXhlY3V0b3Iud2l0aFBsdWdpbkF0RnJvbnQobmV3IFdpdGhTY2hlbWFQbHVnaW4oc2NoZW1hKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29weSBvZiB0aGlzIEt5c2VseSBpbnN0YW5jZSB3aXRoIHRhYmxlcyBhZGRlZCB0byBpdHNcbiAgICAgKiBkYXRhYmFzZSB0eXBlLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2Qgb25seSBtb2RpZmllcyB0aGUgdHlwZXMgYW5kIGRvZXNuJ3QgYWZmZWN0IGFueSBvZiB0aGVcbiAgICAgKiBleGVjdXRlZCBxdWVyaWVzIGluIGFueSB3YXkuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBhZGRzIGFuZCB1c2VzIGEgdGVtcG9yYXJ5IHRhYmxlOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgndGVtcF90YWJsZScpXG4gICAgICogICAudGVtcG9yYXJ5KClcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ3NvbWVfY29sdW1uJywgJ2ludGVnZXInKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqXG4gICAgICogY29uc3QgdGVtcERiID0gZGIud2l0aFRhYmxlczx7XG4gICAgICogICB0ZW1wX3RhYmxlOiB7XG4gICAgICogICAgIHNvbWVfY29sdW1uOiBudW1iZXJcbiAgICAgKiAgIH1cbiAgICAgKiB9PigpXG4gICAgICpcbiAgICAgKiBhd2FpdCB0ZW1wRGJcbiAgICAgKiAgIC5pbnNlcnRJbnRvKCd0ZW1wX3RhYmxlJylcbiAgICAgKiAgIC52YWx1ZXMoeyBzb21lX2NvbHVtbjogMTAwIH0pXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgd2l0aFRhYmxlcygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBLeXNlbHkoeyAuLi50aGlzLiNwcm9wcyB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVsZWFzZXMgYWxsIHJlc291cmNlcyBhbmQgZGlzY29ubmVjdHMgZnJvbSB0aGUgZGF0YWJhc2UuXG4gICAgICpcbiAgICAgKiBZb3UgbmVlZCB0byBjYWxsIHRoaXMgd2hlbiB5b3UgYXJlIGRvbmUgdXNpbmcgdGhlIGBLeXNlbHlgIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGFzeW5jIGRlc3Ryb3koKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmRyaXZlci5kZXN0cm95KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGBLeXNlbHlgIGluc3RhbmNlIGlzIGEgdHJhbnNhY3Rpb24uXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIGFsc28gdXNlIGBkYiBpbnN0YW5jZW9mIFRyYW5zYWN0aW9uYC5cbiAgICAgKi9cbiAgICBnZXQgaXNUcmFuc2FjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldEV4ZWN1dG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIGEgZ2l2ZW4gY29tcGlsZWQgcXVlcnkgb3IgcXVlcnkgYnVpbGRlci5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2t5c2VseS1vcmcva3lzZWx5L2Jsb2IvbWFzdGVyL3NpdGUvZG9jcy9yZWNpcGVzLzAwMDQtc3BsaXR0aW5nLXF1ZXJ5LWJ1aWxkaW5nLWFuZC1leGVjdXRpb24ubWQjZXhlY3V0ZS1jb21waWxlZC1xdWVyaWVzIHNwbGl0dGluZyBidWlsZCwgY29tcGlsZSBhbmQgZXhlY3V0ZSBjb2RlIHJlY2lwZX0gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgZXhlY3V0ZVF1ZXJ5KHF1ZXJ5LCBcbiAgICAvLyBUT0RPOiByZW1vdmUgdGhpcyBpbiB0aGUgZnV0dXJlLiBkZXByZWNhdGVkIGluICAwLjI4LnhcbiAgICBxdWVyeUlkKSB7XG4gICAgICAgIGlmIChxdWVyeUlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvZ09uY2UoJ1Bhc3NpbmcgYHF1ZXJ5SWRgIGluIGBkYi5leGVjdXRlUXVlcnlgIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgcmVzdWx0IGluIGEgY29tcGlsZS10aW1lIGVycm9yIGluIHRoZSBmdXR1cmUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcGlsZWRRdWVyeSA9IGlzQ29tcGlsYWJsZShxdWVyeSkgPyBxdWVyeS5jb21waWxlKCkgOiBxdWVyeTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RXhlY3V0b3IoKS5leGVjdXRlUXVlcnkoY29tcGlsZWRRdWVyeSk7XG4gICAgfVxuICAgIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZXN0cm95KCk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgS3lzZWx5IHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgICAgICB0aGlzLiNwcm9wcyA9IHByb3BzO1xuICAgIH1cbiAgICAvLyBUaGUgcmV0dXJuIHR5cGUgaXMgYHRydWVgIGluc3RlYWQgb2YgYGJvb2xlYW5gIHRvIG1ha2UgS3lzZWx5PERCPlxuICAgIC8vIHVuYXNzaWduYWJsZSB0byBUcmFuc2FjdGlvbjxEQj4gd2hpbGUgYWxsb3dpbmcgYXNzaWdubWVudCB0aGVcbiAgICAvLyBvdGhlciB3YXkgYXJvdW5kLlxuICAgIGdldCBpc1RyYW5zYWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgdHJhbnNhY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2FsbGluZyB0aGUgdHJhbnNhY3Rpb24gbWV0aG9kIGZvciBhIFRyYW5zYWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICB9XG4gICAgY29ubmVjdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYWxsaW5nIHRoZSBjb25uZWN0aW9uIG1ldGhvZCBmb3IgYSBUcmFuc2FjdGlvbiBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuICAgIGFzeW5jIGRlc3Ryb3koKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2FsbGluZyB0aGUgZGVzdHJveSBtZXRob2QgZm9yIGEgVHJhbnNhY3Rpb24gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgIH1cbiAgICB3aXRoUGx1Z2luKHBsdWdpbikge1xuICAgICAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhQbHVnaW4ocGx1Z2luKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdpdGhvdXRQbHVnaW5zKCkge1xuICAgICAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhvdXRQbHVnaW5zKCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3aXRoU2NoZW1hKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhQbHVnaW5BdEZyb250KG5ldyBXaXRoU2NoZW1hUGx1Z2luKHNjaGVtYSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgd2l0aFRhYmxlcygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbih7IC4uLnRoaXMuI3Byb3BzIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0t5c2VseVByb3BzKG9iaikge1xuICAgIHJldHVybiAoaXNPYmplY3Qob2JqKSAmJlxuICAgICAgICBpc09iamVjdChvYmouY29uZmlnKSAmJlxuICAgICAgICBpc09iamVjdChvYmouZHJpdmVyKSAmJlxuICAgICAgICBpc09iamVjdChvYmouZXhlY3V0b3IpICYmXG4gICAgICAgIGlzT2JqZWN0KG9iai5kaWFsZWN0KSk7XG59XG5leHBvcnQgY2xhc3MgQ29ubmVjdGlvbkJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGUoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnByb3ZpZGVDb25uZWN0aW9uKGFzeW5jIChjb25uZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGVjdXRvciA9IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhDb25uZWN0aW9uUHJvdmlkZXIobmV3IFNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlcihjb25uZWN0aW9uKSk7XG4gICAgICAgICAgICBjb25zdCBkYiA9IG5ldyBLeXNlbHkoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgICAgIGV4ZWN1dG9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgY2FsbGJhY2soZGIpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBzZXRBY2Nlc3NNb2RlKGFjY2Vzc01vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBhY2Nlc3NNb2RlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2V0SXNvbGF0aW9uTGV2ZWwoaXNvbGF0aW9uTGV2ZWwpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBpc29sYXRpb25MZXZlbCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGUoY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgeyBpc29sYXRpb25MZXZlbCwgYWNjZXNzTW9kZSwgLi4ua3lzZWx5UHJvcHMgfSA9IHRoaXMuI3Byb3BzO1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHsgaXNvbGF0aW9uTGV2ZWwsIGFjY2Vzc01vZGUgfTtcbiAgICAgICAgdmFsaWRhdGVUcmFuc2FjdGlvblNldHRpbmdzKHNldHRpbmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnByb3ZpZGVDb25uZWN0aW9uKGFzeW5jIChjb25uZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBleGVjdXRvciA9IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhDb25uZWN0aW9uUHJvdmlkZXIobmV3IFNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlcihjb25uZWN0aW9uKSk7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IG5ldyBUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICAgICAgLi4ua3lzZWx5UHJvcHMsXG4gICAgICAgICAgICAgICAgZXhlY3V0b3IsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxldCB0cmFuc2FjdGlvbkJlZ3VuID0gZmFsc2U7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmRyaXZlci5iZWdpblRyYW5zYWN0aW9uKGNvbm5lY3Rpb24sIHNldHRpbmdzKTtcbiAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbkJlZ3VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWxsYmFjayh0cmFuc2FjdGlvbik7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZHJpdmVyLmNvbW1pdFRyYW5zYWN0aW9uKGNvbm5lY3Rpb24pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAodHJhbnNhY3Rpb25CZWd1bikge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLiNwcm9wcy5kcml2ZXIucm9sbGJhY2tUcmFuc2FjdGlvbihjb25uZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBDb250cm9sbGVkVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBzZXRBY2Nlc3NNb2RlKGFjY2Vzc01vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb250cm9sbGVkVHJhbnNhY3Rpb25CdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgYWNjZXNzTW9kZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNldElzb2xhdGlvbkxldmVsKGlzb2xhdGlvbkxldmVsKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29udHJvbGxlZFRyYW5zYWN0aW9uQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGlzb2xhdGlvbkxldmVsLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgY29uc3QgeyBpc29sYXRpb25MZXZlbCwgYWNjZXNzTW9kZSwgLi4ucHJvcHMgfSA9IHRoaXMuI3Byb3BzO1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHsgaXNvbGF0aW9uTGV2ZWwsIGFjY2Vzc01vZGUgfTtcbiAgICAgICAgdmFsaWRhdGVUcmFuc2FjdGlvblNldHRpbmdzKHNldHRpbmdzKTtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IHByb3ZpZGVDb250cm9sbGVkQ29ubmVjdGlvbih0aGlzLiNwcm9wcy5leGVjdXRvcik7XG4gICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmRyaXZlci5iZWdpblRyYW5zYWN0aW9uKGNvbm5lY3Rpb24uY29ubmVjdGlvbiwgc2V0dGluZ3MpO1xuICAgICAgICByZXR1cm4gbmV3IENvbnRyb2xsZWRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIGNvbm5lY3Rpb24sXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jcHJvcHMuZXhlY3V0b3Iud2l0aENvbm5lY3Rpb25Qcm92aWRlcihuZXcgU2luZ2xlQ29ubmVjdGlvblByb3ZpZGVyKGNvbm5lY3Rpb24uY29ubmVjdGlvbikpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQ29udHJvbGxlZFRyYW5zYWN0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb24ge1xuICAgICNwcm9wcztcbiAgICAjY29tcGlsZVF1ZXJ5O1xuICAgICNzdGF0ZTtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHsgaXNDb21taXR0ZWQ6IGZhbHNlLCBpc1JvbGxlZEJhY2s6IGZhbHNlIH07XG4gICAgICAgIHByb3BzID0ge1xuICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgICAgICBleGVjdXRvcjogbmV3IE5vdENvbW1pdHRlZE9yUm9sbGVkQmFja0Fzc2VydGluZ0V4ZWN1dG9yKHByb3BzLmV4ZWN1dG9yLCBzdGF0ZSksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHsgY29ubmVjdGlvbiwgLi4udHJhbnNhY3Rpb25Qcm9wcyB9ID0gcHJvcHM7XG4gICAgICAgIHN1cGVyKHRyYW5zYWN0aW9uUHJvcHMpO1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgICAgIHRoaXMuI3N0YXRlID0gc3RhdGU7XG4gICAgICAgIGNvbnN0IHF1ZXJ5SWQgPSBjcmVhdGVRdWVyeUlkKCk7XG4gICAgICAgIHRoaXMuI2NvbXBpbGVRdWVyeSA9IChub2RlKSA9PiBwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkobm9kZSwgcXVlcnlJZCk7XG4gICAgfVxuICAgIGdldCBpc0NvbW1pdHRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3N0YXRlLmlzQ29tbWl0dGVkO1xuICAgIH1cbiAgICBnZXQgaXNSb2xsZWRCYWNrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jc3RhdGUuaXNSb2xsZWRCYWNrO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21taXRzIHRoZSB0cmFuc2FjdGlvbi5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgcm9sbGJhY2t9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgS3lzZWx5IH0gZnJvbSAna3lzZWx5J1xuICAgICAqIGltcG9ydCB0eXBlIHsgRGF0YWJhc2UgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICAgICAqXG4gICAgICogY29uc3QgdHJ4ID0gYXdhaXQgZGIuc3RhcnRUcmFuc2FjdGlvbigpLmV4ZWN1dGUoKVxuICAgICAqXG4gICAgICogdHJ5IHtcbiAgICAgKiAgIGF3YWl0IGRvU29tZXRoaW5nKHRyeClcbiAgICAgKlxuICAgICAqICAgYXdhaXQgdHJ4LmNvbW1pdCgpLmV4ZWN1dGUoKVxuICAgICAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICogICBhd2FpdCB0cngucm9sbGJhY2soKS5leGVjdXRlKClcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBhc3luYyBmdW5jdGlvbiBkb1NvbWV0aGluZyhreXNlbHk6IEt5c2VseTxEYXRhYmFzZT4pIHt9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgY29tbWl0KCkge1xuICAgICAgICBhc3NlcnROb3RDb21taXR0ZWRPclJvbGxlZEJhY2sodGhpcy4jc3RhdGUpO1xuICAgICAgICByZXR1cm4gbmV3IENvbW1hbmQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZHJpdmVyLmNvbW1pdFRyYW5zYWN0aW9uKHRoaXMuI3Byb3BzLmNvbm5lY3Rpb24uY29ubmVjdGlvbik7XG4gICAgICAgICAgICB0aGlzLiNzdGF0ZS5pc0NvbW1pdHRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLiNwcm9wcy5jb25uZWN0aW9uLnJlbGVhc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJvbGxzIGJhY2sgdGhlIHRyYW5zYWN0aW9uLlxuICAgICAqXG4gICAgICogU2VlIHtAbGluayBjb21taXR9IGFuZCB7QGxpbmsgcm9sbGJhY2tUb1NhdmVwb2ludH0uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHR5cGUgeyBLeXNlbHkgfSBmcm9tICdreXNlbHknXG4gICAgICogaW1wb3J0IHR5cGUgeyBEYXRhYmFzZSB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gICAgICpcbiAgICAgKiBjb25zdCB0cnggPSBhd2FpdCBkYi5zdGFydFRyYW5zYWN0aW9uKCkuZXhlY3V0ZSgpXG4gICAgICpcbiAgICAgKiB0cnkge1xuICAgICAqICAgYXdhaXQgZG9Tb21ldGhpbmcodHJ4KVxuICAgICAqXG4gICAgICogICBhd2FpdCB0cnguY29tbWl0KCkuZXhlY3V0ZSgpXG4gICAgICogfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgKiAgIGF3YWl0IHRyeC5yb2xsYmFjaygpLmV4ZWN1dGUoKVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIGRvU29tZXRoaW5nKGt5c2VseTogS3lzZWx5PERhdGFiYXNlPikge31cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByb2xsYmFjaygpIHtcbiAgICAgICAgYXNzZXJ0Tm90Q29tbWl0dGVkT3JSb2xsZWRCYWNrKHRoaXMuI3N0YXRlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmRyaXZlci5yb2xsYmFja1RyYW5zYWN0aW9uKHRoaXMuI3Byb3BzLmNvbm5lY3Rpb24uY29ubmVjdGlvbik7XG4gICAgICAgICAgICB0aGlzLiNzdGF0ZS5pc1JvbGxlZEJhY2sgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy4jcHJvcHMuY29ubmVjdGlvbi5yZWxlYXNlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc2F2ZXBvaW50IHdpdGggYSBnaXZlbiBuYW1lLlxuICAgICAqXG4gICAgICogU2VlIHtAbGluayByb2xsYmFja1RvU2F2ZXBvaW50fSBhbmQge0BsaW5rIHJlbGVhc2VTYXZlcG9pbnR9LlxuICAgICAqXG4gICAgICogRm9yIGEgdHlwZS1zYWZlIGV4cGVyaWVuY2UsIHlvdSBzaG91bGQgdXNlIHRoZSByZXR1cm5lZCBpbnN0YW5jZSBmcm9tIG5vdyBvbi5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgdHlwZSB7IEt5c2VseSB9IGZyb20gJ2t5c2VseSdcbiAgICAgKiBpbXBvcnQgdHlwZSB7IERhdGFiYXNlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAgICAgKlxuICAgICAqIGNvbnN0IHRyeCA9IGF3YWl0IGRiLnN0YXJ0VHJhbnNhY3Rpb24oKS5leGVjdXRlKClcbiAgICAgKlxuICAgICAqIGF3YWl0IGluc2VydEplbm5pZmVyKHRyeClcbiAgICAgKlxuICAgICAqIGNvbnN0IHRyeEFmdGVySmVubmlmZXIgPSBhd2FpdCB0cnguc2F2ZXBvaW50KCdhZnRlcl9qZW5uaWZlcicpLmV4ZWN1dGUoKVxuICAgICAqXG4gICAgICogdHJ5IHtcbiAgICAgKiAgIGF3YWl0IGRvU29tZXRoaW5nKHRyeEFmdGVySmVubmlmZXIpXG4gICAgICogfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgKiAgIGF3YWl0IHRyeEFmdGVySmVubmlmZXIucm9sbGJhY2tUb1NhdmVwb2ludCgnYWZ0ZXJfamVubmlmZXInKS5leGVjdXRlKClcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBhc3luYyBmdW5jdGlvbiBpbnNlcnRKZW5uaWZlcihreXNlbHk6IEt5c2VseTxEYXRhYmFzZT4pIHt9XG4gICAgICogYXN5bmMgZnVuY3Rpb24gZG9Tb21ldGhpbmcoa3lzZWx5OiBLeXNlbHk8RGF0YWJhc2U+KSB7fVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHNhdmVwb2ludChzYXZlcG9pbnROYW1lKSB7XG4gICAgICAgIGFzc2VydE5vdENvbW1pdHRlZE9yUm9sbGVkQmFjayh0aGlzLiNzdGF0ZSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbWFuZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNwcm9wcy5kcml2ZXIuc2F2ZXBvaW50Py4odGhpcy4jcHJvcHMuY29ubmVjdGlvbi5jb25uZWN0aW9uLCBzYXZlcG9pbnROYW1lLCB0aGlzLiNjb21waWxlUXVlcnkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb250cm9sbGVkVHJhbnNhY3Rpb24oeyAuLi50aGlzLiNwcm9wcyB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJvbGxzIGJhY2sgdG8gYSBzYXZlcG9pbnQgd2l0aCBhIGdpdmVuIG5hbWUuXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIHNhdmVwb2ludH0gYW5kIHtAbGluayByZWxlYXNlU2F2ZXBvaW50fS5cbiAgICAgKlxuICAgICAqIFlvdSBtdXN0IHVzZSB0aGUgc2FtZSBpbnN0YW5jZSByZXR1cm5lZCBieSB7QGxpbmsgc2F2ZXBvaW50fSwgb3JcbiAgICAgKiBlc2NhcGUgdGhlIHR5cGUtY2hlY2sgYnkgdXNpbmcgYGFzIGFueWAuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHR5cGUgeyBLeXNlbHkgfSBmcm9tICdreXNlbHknXG4gICAgICogaW1wb3J0IHR5cGUgeyBEYXRhYmFzZSB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gICAgICpcbiAgICAgKiBjb25zdCB0cnggPSBhd2FpdCBkYi5zdGFydFRyYW5zYWN0aW9uKCkuZXhlY3V0ZSgpXG4gICAgICpcbiAgICAgKiBhd2FpdCBpbnNlcnRKZW5uaWZlcih0cngpXG4gICAgICpcbiAgICAgKiBjb25zdCB0cnhBZnRlckplbm5pZmVyID0gYXdhaXQgdHJ4LnNhdmVwb2ludCgnYWZ0ZXJfamVubmlmZXInKS5leGVjdXRlKClcbiAgICAgKlxuICAgICAqIHRyeSB7XG4gICAgICogICBhd2FpdCBkb1NvbWV0aGluZyh0cnhBZnRlckplbm5pZmVyKVxuICAgICAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICogICBhd2FpdCB0cnhBZnRlckplbm5pZmVyLnJvbGxiYWNrVG9TYXZlcG9pbnQoJ2FmdGVyX2plbm5pZmVyJykuZXhlY3V0ZSgpXG4gICAgICogfVxuICAgICAqXG4gICAgICogYXN5bmMgZnVuY3Rpb24gaW5zZXJ0SmVubmlmZXIoa3lzZWx5OiBLeXNlbHk8RGF0YWJhc2U+KSB7fVxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIGRvU29tZXRoaW5nKGt5c2VseTogS3lzZWx5PERhdGFiYXNlPikge31cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByb2xsYmFja1RvU2F2ZXBvaW50KHNhdmVwb2ludE5hbWUpIHtcbiAgICAgICAgYXNzZXJ0Tm90Q29tbWl0dGVkT3JSb2xsZWRCYWNrKHRoaXMuI3N0YXRlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tYW5kKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmRyaXZlci5yb2xsYmFja1RvU2F2ZXBvaW50Py4odGhpcy4jcHJvcHMuY29ubmVjdGlvbi5jb25uZWN0aW9uLCBzYXZlcG9pbnROYW1lLCB0aGlzLiNjb21waWxlUXVlcnkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb250cm9sbGVkVHJhbnNhY3Rpb24oeyAuLi50aGlzLiNwcm9wcyB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbGVhc2VzIGEgc2F2ZXBvaW50IHdpdGggYSBnaXZlbiBuYW1lLlxuICAgICAqXG4gICAgICogU2VlIHtAbGluayBzYXZlcG9pbnR9IGFuZCB7QGxpbmsgcm9sbGJhY2tUb1NhdmVwb2ludH0uXG4gICAgICpcbiAgICAgKiBZb3UgbXVzdCB1c2UgdGhlIHNhbWUgaW5zdGFuY2UgcmV0dXJuZWQgYnkge0BsaW5rIHNhdmVwb2ludH0sIG9yXG4gICAgICogZXNjYXBlIHRoZSB0eXBlLWNoZWNrIGJ5IHVzaW5nIGBhcyBhbnlgLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgS3lzZWx5IH0gZnJvbSAna3lzZWx5J1xuICAgICAqIGltcG9ydCB0eXBlIHsgRGF0YWJhc2UgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICAgICAqXG4gICAgICogY29uc3QgdHJ4ID0gYXdhaXQgZGIuc3RhcnRUcmFuc2FjdGlvbigpLmV4ZWN1dGUoKVxuICAgICAqXG4gICAgICogYXdhaXQgaW5zZXJ0SmVubmlmZXIodHJ4KVxuICAgICAqXG4gICAgICogY29uc3QgdHJ4QWZ0ZXJKZW5uaWZlciA9IGF3YWl0IHRyeC5zYXZlcG9pbnQoJ2FmdGVyX2plbm5pZmVyJykuZXhlY3V0ZSgpXG4gICAgICpcbiAgICAgKiB0cnkge1xuICAgICAqICAgYXdhaXQgZG9Tb21ldGhpbmcodHJ4QWZ0ZXJKZW5uaWZlcilcbiAgICAgKiB9IGNhdGNoIChlcnJvcikge1xuICAgICAqICAgYXdhaXQgdHJ4QWZ0ZXJKZW5uaWZlci5yb2xsYmFja1RvU2F2ZXBvaW50KCdhZnRlcl9qZW5uaWZlcicpLmV4ZWN1dGUoKVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGF3YWl0IHRyeEFmdGVySmVubmlmZXIucmVsZWFzZVNhdmVwb2ludCgnYWZ0ZXJfamVubmlmZXInKS5leGVjdXRlKClcbiAgICAgKlxuICAgICAqIGF3YWl0IGRvU29tZXRoaW5nRWxzZSh0cngpXG4gICAgICpcbiAgICAgKiBhc3luYyBmdW5jdGlvbiBpbnNlcnRKZW5uaWZlcihreXNlbHk6IEt5c2VseTxEYXRhYmFzZT4pIHt9XG4gICAgICogYXN5bmMgZnVuY3Rpb24gZG9Tb21ldGhpbmcoa3lzZWx5OiBLeXNlbHk8RGF0YWJhc2U+KSB7fVxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIGRvU29tZXRoaW5nRWxzZShreXNlbHk6IEt5c2VseTxEYXRhYmFzZT4pIHt9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcmVsZWFzZVNhdmVwb2ludChzYXZlcG9pbnROYW1lKSB7XG4gICAgICAgIGFzc2VydE5vdENvbW1pdHRlZE9yUm9sbGVkQmFjayh0aGlzLiNzdGF0ZSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbWFuZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNwcm9wcy5kcml2ZXIucmVsZWFzZVNhdmVwb2ludD8uKHRoaXMuI3Byb3BzLmNvbm5lY3Rpb24uY29ubmVjdGlvbiwgc2F2ZXBvaW50TmFtZSwgdGhpcy4jY29tcGlsZVF1ZXJ5KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29udHJvbGxlZFRyYW5zYWN0aW9uKHsgLi4udGhpcy4jcHJvcHMgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3aXRoUGx1Z2luKHBsdWdpbikge1xuICAgICAgICByZXR1cm4gbmV3IENvbnRyb2xsZWRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNwcm9wcy5leGVjdXRvci53aXRoUGx1Z2luKHBsdWdpbiksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3aXRob3V0UGx1Z2lucygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb250cm9sbGVkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jcHJvcHMuZXhlY3V0b3Iud2l0aG91dFBsdWdpbnMoKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdpdGhTY2hlbWEoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29udHJvbGxlZFRyYW5zYWN0aW9uKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhQbHVnaW5BdEZyb250KG5ldyBXaXRoU2NoZW1hUGx1Z2luKHNjaGVtYSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgd2l0aFRhYmxlcygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb250cm9sbGVkVHJhbnNhY3Rpb24oeyAuLi50aGlzLiNwcm9wcyB9KTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQ29tbWFuZCB7XG4gICAgI2NiO1xuICAgIGNvbnN0cnVjdG9yKGNiKSB7XG4gICAgICAgIHRoaXMuI2NiID0gY2I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBjb21tYW5kLlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLiNjYigpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGFzc2VydE5vdENvbW1pdHRlZE9yUm9sbGVkQmFjayhzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS5pc0NvbW1pdHRlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zYWN0aW9uIGlzIGFscmVhZHkgY29tbWl0dGVkJyk7XG4gICAgfVxuICAgIGlmIChzdGF0ZS5pc1JvbGxlZEJhY2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc2FjdGlvbiBpcyBhbHJlYWR5IHJvbGxlZCBiYWNrJyk7XG4gICAgfVxufVxuLyoqXG4gKiBBbiBleGVjdXRvciB3cmFwcGVyIHRoYXQgYXNzZXJ0cyB0aGF0IHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBub3QgY29tbWl0dGVkXG4gKiBvciByb2xsZWQgYmFjayB3aGVuIGEgcXVlcnkgaXMgZXhlY3V0ZWQuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmNsYXNzIE5vdENvbW1pdHRlZE9yUm9sbGVkQmFja0Fzc2VydGluZ0V4ZWN1dG9yIHtcbiAgICAjZXhlY3V0b3I7XG4gICAgI3N0YXRlO1xuICAgIGNvbnN0cnVjdG9yKGV4ZWN1dG9yLCBzdGF0ZSkge1xuICAgICAgICBpZiAoZXhlY3V0b3IgaW5zdGFuY2VvZiBOb3RDb21taXR0ZWRPclJvbGxlZEJhY2tBc3NlcnRpbmdFeGVjdXRvcikge1xuICAgICAgICAgICAgdGhpcy4jZXhlY3V0b3IgPSBleGVjdXRvci4jZXhlY3V0b3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNleGVjdXRvciA9IGV4ZWN1dG9yO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI3N0YXRlID0gc3RhdGU7XG4gICAgfVxuICAgIGdldCBhZGFwdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jZXhlY3V0b3IuYWRhcHRlcjtcbiAgICB9XG4gICAgZ2V0IHBsdWdpbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNleGVjdXRvci5wbHVnaW5zO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1RdWVyeShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNleGVjdXRvci50cmFuc2Zvcm1RdWVyeShub2RlLCBxdWVyeUlkKTtcbiAgICB9XG4gICAgY29tcGlsZVF1ZXJ5KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2V4ZWN1dG9yLmNvbXBpbGVRdWVyeShub2RlLCBxdWVyeUlkKTtcbiAgICB9XG4gICAgcHJvdmlkZUNvbm5lY3Rpb24oY29uc3VtZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2V4ZWN1dG9yLnByb3ZpZGVDb25uZWN0aW9uKGNvbnN1bWVyKTtcbiAgICB9XG4gICAgZXhlY3V0ZVF1ZXJ5KGNvbXBpbGVkUXVlcnkpIHtcbiAgICAgICAgYXNzZXJ0Tm90Q29tbWl0dGVkT3JSb2xsZWRCYWNrKHRoaXMuI3N0YXRlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2V4ZWN1dG9yLmV4ZWN1dGVRdWVyeShjb21waWxlZFF1ZXJ5KTtcbiAgICB9XG4gICAgc3RyZWFtKGNvbXBpbGVkUXVlcnksIGNodW5rU2l6ZSkge1xuICAgICAgICBhc3NlcnROb3RDb21taXR0ZWRPclJvbGxlZEJhY2sodGhpcy4jc3RhdGUpO1xuICAgICAgICByZXR1cm4gdGhpcy4jZXhlY3V0b3Iuc3RyZWFtKGNvbXBpbGVkUXVlcnksIGNodW5rU2l6ZSk7XG4gICAgfVxuICAgIHdpdGhDb25uZWN0aW9uUHJvdmlkZXIoY29ubmVjdGlvblByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgTm90Q29tbWl0dGVkT3JSb2xsZWRCYWNrQXNzZXJ0aW5nRXhlY3V0b3IodGhpcy4jZXhlY3V0b3Iud2l0aENvbm5lY3Rpb25Qcm92aWRlcihjb25uZWN0aW9uUHJvdmlkZXIpLCB0aGlzLiNzdGF0ZSk7XG4gICAgfVxuICAgIHdpdGhQbHVnaW4ocGx1Z2luKSB7XG4gICAgICAgIHJldHVybiBuZXcgTm90Q29tbWl0dGVkT3JSb2xsZWRCYWNrQXNzZXJ0aW5nRXhlY3V0b3IodGhpcy4jZXhlY3V0b3Iud2l0aFBsdWdpbihwbHVnaW4pLCB0aGlzLiNzdGF0ZSk7XG4gICAgfVxuICAgIHdpdGhQbHVnaW5zKHBsdWdpbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RDb21taXR0ZWRPclJvbGxlZEJhY2tBc3NlcnRpbmdFeGVjdXRvcih0aGlzLiNleGVjdXRvci53aXRoUGx1Z2lucyhwbHVnaW5zKSwgdGhpcy4jc3RhdGUpO1xuICAgIH1cbiAgICB3aXRoUGx1Z2luQXRGcm9udChwbHVnaW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RDb21taXR0ZWRPclJvbGxlZEJhY2tBc3NlcnRpbmdFeGVjdXRvcih0aGlzLiNleGVjdXRvci53aXRoUGx1Z2luQXRGcm9udChwbHVnaW4pLCB0aGlzLiNzdGF0ZSk7XG4gICAgfVxuICAgIHdpdGhvdXRQbHVnaW5zKCkge1xuICAgICAgICByZXR1cm4gbmV3IE5vdENvbW1pdHRlZE9yUm9sbGVkQmFja0Fzc2VydGluZ0V4ZWN1dG9yKHRoaXMuI2V4ZWN1dG9yLndpdGhvdXRQbHVnaW5zKCksIHRoaXMuI3N0YXRlKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3NjaGVtYS5kLnRzXCIgLz5cbmltcG9ydCB7IEFsdGVyVGFibGVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWx0ZXItdGFibGUtbm9kZS5qcyc7XG5pbXBvcnQgeyBDcmVhdGVJbmRleE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jcmVhdGUtaW5kZXgtbm9kZS5qcyc7XG5pbXBvcnQgeyBDcmVhdGVTY2hlbWFOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXNjaGVtYS1ub2RlLmpzJztcbmltcG9ydCB7IENyZWF0ZVRhYmxlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NyZWF0ZS10YWJsZS1ub2RlLmpzJztcbmltcG9ydCB7IERyb3BJbmRleE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9kcm9wLWluZGV4LW5vZGUuanMnO1xuaW1wb3J0IHsgRHJvcFNjaGVtYU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9kcm9wLXNjaGVtYS1ub2RlLmpzJztcbmltcG9ydCB7IERyb3BUYWJsZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9kcm9wLXRhYmxlLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VUYWJsZSB9IGZyb20gJy4uL3BhcnNlci90YWJsZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgQWx0ZXJUYWJsZUJ1aWxkZXIgfSBmcm9tICcuL2FsdGVyLXRhYmxlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgQ3JlYXRlSW5kZXhCdWlsZGVyIH0gZnJvbSAnLi9jcmVhdGUtaW5kZXgtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBDcmVhdGVTY2hlbWFCdWlsZGVyIH0gZnJvbSAnLi9jcmVhdGUtc2NoZW1hLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgQ3JlYXRlVGFibGVCdWlsZGVyIH0gZnJvbSAnLi9jcmVhdGUtdGFibGUtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBEcm9wSW5kZXhCdWlsZGVyIH0gZnJvbSAnLi9kcm9wLWluZGV4LWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgRHJvcFNjaGVtYUJ1aWxkZXIgfSBmcm9tICcuL2Ryb3Atc2NoZW1hLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgRHJvcFRhYmxlQnVpbGRlciB9IGZyb20gJy4vZHJvcC10YWJsZS1idWlsZGVyLmpzJztcbmltcG9ydCB7IGNyZWF0ZVF1ZXJ5SWQgfSBmcm9tICcuLi91dGlsL3F1ZXJ5LWlkLmpzJztcbmltcG9ydCB7IFdpdGhTY2hlbWFQbHVnaW4gfSBmcm9tICcuLi9wbHVnaW4vd2l0aC1zY2hlbWEvd2l0aC1zY2hlbWEtcGx1Z2luLmpzJztcbmltcG9ydCB7IENyZWF0ZVZpZXdCdWlsZGVyIH0gZnJvbSAnLi9jcmVhdGUtdmlldy1idWlsZGVyLmpzJztcbmltcG9ydCB7IENyZWF0ZVZpZXdOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXZpZXctbm9kZS5qcyc7XG5pbXBvcnQgeyBEcm9wVmlld0J1aWxkZXIgfSBmcm9tICcuL2Ryb3Atdmlldy1idWlsZGVyLmpzJztcbmltcG9ydCB7IERyb3BWaWV3Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2Ryb3Atdmlldy1ub2RlLmpzJztcbmltcG9ydCB7IENyZWF0ZVR5cGVCdWlsZGVyIH0gZnJvbSAnLi9jcmVhdGUtdHlwZS1idWlsZGVyLmpzJztcbmltcG9ydCB7IERyb3BUeXBlQnVpbGRlciB9IGZyb20gJy4vZHJvcC10eXBlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgQ3JlYXRlVHlwZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jcmVhdGUtdHlwZS1ub2RlLmpzJztcbmltcG9ydCB7IERyb3BUeXBlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2Ryb3AtdHlwZS1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlU2NoZW1hYmxlSWRlbnRpZmllciB9IGZyb20gJy4uL3BhcnNlci9pZGVudGlmaWVyLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBSZWZyZXNoTWF0ZXJpYWxpemVkVmlld0J1aWxkZXIgfSBmcm9tICcuL3JlZnJlc2gtbWF0ZXJpYWxpemVkLXZpZXctYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBSZWZyZXNoTWF0ZXJpYWxpemVkVmlld05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9yZWZyZXNoLW1hdGVyaWFsaXplZC12aWV3LW5vZGUuanMnO1xuLyoqXG4gKiBQcm92aWRlcyBtZXRob2RzIGZvciBidWlsZGluZyBkYXRhYmFzZSBzY2hlbWEuXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFNb2R1bGUge1xuICAgICNleGVjdXRvcjtcbiAgICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgICAgICB0aGlzLiNleGVjdXRvciA9IGV4ZWN1dG9yO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgdGFibGUuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIFRoaXMgZXhhbXBsZSBjcmVhdGVzIGEgbmV3IHRhYmxlIHdpdGggY29sdW1ucyBgaWRgLCBgZmlyc3RfbmFtZWAsXG4gICAgICogYGxhc3RfbmFtZWAgYW5kIGBnZW5kZXJgOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2lkJywgJ2ludGVnZXInLCBjb2wgPT4gY29sLnByaW1hcnlLZXkoKS5hdXRvSW5jcmVtZW50KCkpXG4gICAgICogICAuYWRkQ29sdW1uKCdmaXJzdF9uYW1lJywgJ3ZhcmNoYXInLCBjb2wgPT4gY29sLm5vdE51bGwoKSlcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2xhc3RfbmFtZScsICd2YXJjaGFyJywgY29sID0+IGNvbC5ub3ROdWxsKCkpXG4gICAgICogICAuYWRkQ29sdW1uKCdnZW5kZXInLCAndmFyY2hhcicpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGlzIGV4YW1wbGUgY3JlYXRlcyBhIHRhYmxlIHdpdGggYSBmb3JlaWduIGtleS4gTm90IGFsbCBkYXRhYmFzZVxuICAgICAqIGVuZ2luZXMgc3VwcG9ydCBjb2x1bW4tbGV2ZWwgZm9yZWlnbiBrZXkgY29uc3RyYWludCBkZWZpbml0aW9ucy5cbiAgICAgKiBGb3IgZXhhbXBsZSBpZiB5b3UgYXJlIHVzaW5nIE15U1FMIDUuWCBzZWUgdGhlIG5leHQgZXhhbXBsZSBhZnRlclxuICAgICAqIHRoaXMgb25lLlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGV0JylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2lkJywgJ2ludGVnZXInLCBjb2wgPT4gY29sLnByaW1hcnlLZXkoKS5hdXRvSW5jcmVtZW50KCkpXG4gICAgICogICAuYWRkQ29sdW1uKCdvd25lcl9pZCcsICdpbnRlZ2VyJywgY29sID0+IGNvbFxuICAgICAqICAgICAucmVmZXJlbmNlcygncGVyc29uLmlkJylcbiAgICAgKiAgICAgLm9uRGVsZXRlKCdjYXNjYWRlJylcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoaXMgZXhhbXBsZSBhZGRzIGEgZm9yZWlnbiBrZXkgY29uc3RyYWludCBmb3IgYSBjb2x1bW5zIGp1c3RcbiAgICAgKiBsaWtlIHRoZSBwcmV2aW91cyBleGFtcGxlLCBidXQgdXNpbmcgYSB0YWJsZS1sZXZlbCBzdGF0ZW1lbnQuXG4gICAgICogT24gTXlTUUwgNS5YIHlvdSBuZWVkIHRvIGRlZmluZSBmb3JlaWduIGtleSBjb25zdHJhaW50cyBsaWtlXG4gICAgICogdGhpczpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BldCcpXG4gICAgICogICAuYWRkQ29sdW1uKCdpZCcsICdpbnRlZ2VyJywgY29sID0+IGNvbC5wcmltYXJ5S2V5KCkuYXV0b0luY3JlbWVudCgpKVxuICAgICAqICAgLmFkZENvbHVtbignb3duZXJfaWQnLCAnaW50ZWdlcicpXG4gICAgICogICAuYWRkRm9yZWlnbktleUNvbnN0cmFpbnQoXG4gICAgICogICAgICdwZXRfb3duZXJfaWRfZm9yZWlnbicsIFsnb3duZXJfaWQnXSwgJ3BlcnNvbicsIFsnaWQnXSxcbiAgICAgKiAgICAgKGNvbnN0cmFpbnQpID0+IGNvbnN0cmFpbnQub25EZWxldGUoJ2Nhc2NhZGUnKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNyZWF0ZVRhYmxlKHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlVGFibGVCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNleGVjdXRvcixcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZVRhYmxlTm9kZS5jcmVhdGUocGFyc2VUYWJsZSh0YWJsZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRHJvcCBhIHRhYmxlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmRyb3BUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkcm9wVGFibGUodGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wVGFibGVCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNleGVjdXRvcixcbiAgICAgICAgICAgIG5vZGU6IERyb3BUYWJsZU5vZGUuY3JlYXRlKHBhcnNlVGFibGUodGFibGUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBpbmRleC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVJbmRleCgncGVyc29uX2Z1bGxfbmFtZV91bmlxdWVfaW5kZXgnKVxuICAgICAqICAgLm9uKCdwZXJzb24nKVxuICAgICAqICAgLmNvbHVtbnMoWydmaXJzdF9uYW1lJywgJ2xhc3RfbmFtZSddKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNyZWF0ZUluZGV4KGluZGV4TmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZUluZGV4QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jZXhlY3V0b3IsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVJbmRleE5vZGUuY3JlYXRlKGluZGV4TmFtZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEcm9wIGFuIGluZGV4LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmRyb3BJbmRleCgncGVyc29uX2Z1bGxfbmFtZV91bmlxdWVfaW5kZXgnKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGRyb3BJbmRleChpbmRleE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wSW5kZXhCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNleGVjdXRvcixcbiAgICAgICAgICAgIG5vZGU6IERyb3BJbmRleE5vZGUuY3JlYXRlKGluZGV4TmFtZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgc2NoZW1hLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVNjaGVtYSgnc29tZV9zY2hlbWEnKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNyZWF0ZVNjaGVtYShzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVTY2hlbWFCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNleGVjdXRvcixcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZVNjaGVtYU5vZGUuY3JlYXRlKHNjaGVtYSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEcm9wIGEgc2NoZW1hLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmRyb3BTY2hlbWEoJ3NvbWVfc2NoZW1hJylcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkcm9wU2NoZW1hKHNjaGVtYSkge1xuICAgICAgICByZXR1cm4gbmV3IERyb3BTY2hlbWFCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNleGVjdXRvcixcbiAgICAgICAgICAgIG5vZGU6IERyb3BTY2hlbWFOb2RlLmNyZWF0ZShzY2hlbWEpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWx0ZXIgYSB0YWJsZS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5hbHRlclRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFsdGVyQ29sdW1uKCdmaXJzdF9uYW1lJywgKGFjKSA9PiBhYy5zZXREYXRhVHlwZSgndGV4dCcpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFsdGVyVGFibGUodGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jZXhlY3V0b3IsXG4gICAgICAgICAgICBub2RlOiBBbHRlclRhYmxlTm9kZS5jcmVhdGUocGFyc2VUYWJsZSh0YWJsZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgbmV3IHZpZXcuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVmlldygnZG9ncycpXG4gICAgICogICAub3JSZXBsYWNlKClcbiAgICAgKiAgIC5hcyhkYi5zZWxlY3RGcm9tKCdwZXQnKS5zZWxlY3RBbGwoKS53aGVyZSgnc3BlY2llcycsICc9JywgJ2RvZycpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNyZWF0ZVZpZXcodmlld05hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVWaWV3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jZXhlY3V0b3IsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVWaWV3Tm9kZS5jcmVhdGUodmlld05hbWUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVmcmVzaCBhIG1hdGVyaWFsaXplZCB2aWV3LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLnJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3KCdteV92aWV3JylcbiAgICAgKiAgIC5jb25jdXJyZW50bHkoKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3KHZpZXdOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNleGVjdXRvcixcbiAgICAgICAgICAgIG5vZGU6IFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3Tm9kZS5jcmVhdGUodmlld05hbWUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRHJvcCBhIHZpZXcuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuZHJvcFZpZXcoJ2RvZ3MnKVxuICAgICAqICAgLmlmRXhpc3RzKClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkcm9wVmlldyh2aWV3TmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IERyb3BWaWV3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jZXhlY3V0b3IsXG4gICAgICAgICAgICBub2RlOiBEcm9wVmlld05vZGUuY3JlYXRlKHZpZXdOYW1lKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyB0eXBlLlxuICAgICAqXG4gICAgICogT25seSBzb21lIGRpYWxlY3RzIGxpa2UgUG9zdGdyZVNRTCBoYXZlIHVzZXItZGVmaW5lZCB0eXBlcy5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUeXBlKCdzcGVjaWVzJylcbiAgICAgKiAgIC5hc0VudW0oWydkb2cnLCAnY2F0JywgJ2Zyb2cnXSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjcmVhdGVUeXBlKHR5cGVOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlVHlwZUJ1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI2V4ZWN1dG9yLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlVHlwZU5vZGUuY3JlYXRlKHBhcnNlU2NoZW1hYmxlSWRlbnRpZmllcih0eXBlTmFtZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRHJvcCBhIHR5cGUuXG4gICAgICpcbiAgICAgKiBPbmx5IHNvbWUgZGlhbGVjdHMgbGlrZSBQb3N0Z3JlU1FMIGhhdmUgdXNlci1kZWZpbmVkIHR5cGVzLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmRyb3BUeXBlKCdzcGVjaWVzJylcbiAgICAgKiAgIC5pZkV4aXN0cygpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgZHJvcFR5cGUodHlwZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wVHlwZUJ1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI2V4ZWN1dG9yLFxuICAgICAgICAgICAgbm9kZTogRHJvcFR5cGVOb2RlLmNyZWF0ZShwYXJzZVNjaGVtYWJsZUlkZW50aWZpZXIodHlwZU5hbWUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgc2NoZW1hIG1vZHVsZSB3aXRoIHRoZSBnaXZlbiBwbHVnaW4gaW5zdGFsbGVkLlxuICAgICAqL1xuICAgIHdpdGhQbHVnaW4ocGx1Z2luKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2NoZW1hTW9kdWxlKHRoaXMuI2V4ZWN1dG9yLndpdGhQbHVnaW4ocGx1Z2luKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgc2NoZW1hIG1vZHVsZSAgd2l0aG91dCBhbnkgcGx1Z2lucy5cbiAgICAgKi9cbiAgICB3aXRob3V0UGx1Z2lucygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTY2hlbWFNb2R1bGUodGhpcy4jZXhlY3V0b3Iud2l0aG91dFBsdWdpbnMoKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlZSB7QGxpbmsgUXVlcnlDcmVhdG9yLndpdGhTY2hlbWF9XG4gICAgICovXG4gICAgd2l0aFNjaGVtYShzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTY2hlbWFNb2R1bGUodGhpcy4jZXhlY3V0b3Iud2l0aFBsdWdpbkF0RnJvbnQobmV3IFdpdGhTY2hlbWFQbHVnaW4oc2NoZW1hKSkpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vYWx0ZXItdGFibGUtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBbHRlclRhYmxlTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnQWx0ZXJUYWJsZU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0FsdGVyVGFibGVOb2RlJyxcbiAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFRhYmxlUHJvcHMobm9kZSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoQ29sdW1uQWx0ZXJhdGlvbihub2RlLCBjb2x1bW5BbHRlcmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIGNvbHVtbkFsdGVyYXRpb25zOiBub2RlLmNvbHVtbkFsdGVyYXRpb25zXG4gICAgICAgICAgICAgICAgPyBbLi4ubm9kZS5jb2x1bW5BbHRlcmF0aW9ucywgY29sdW1uQWx0ZXJhdGlvbl1cbiAgICAgICAgICAgICAgICA6IFtjb2x1bW5BbHRlcmF0aW9uXSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vYmplY3QtdXRpbHMuZC50c1wiIC8+XG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShvYmopIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopIHx8IGlzU3RyaW5nKG9iaikgfHwgaXNCdWZmZXIob2JqKSkge1xuICAgICAgICByZXR1cm4gb2JqLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgZWxzZSBpZiAob2JqKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iaikge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJyB8fCBvYmogPT09IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1N0cmluZyhvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ3N0cmluZyc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXIob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdudW1iZXInO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhbihvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ2Jvb2xlYW4nO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbChvYmopIHtcbiAgICByZXR1cm4gb2JqID09PSBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZShvYmopIHtcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRGF0ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JpZ0ludChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ2JpZ2ludCc7XG59XG4vLyBEb24ndCBjaGFuZ2UgdGhlIHJldHVybmQgdHlwZSB0byBgb2JqIGlzIEJ1ZmZlcmAgdG8gbm90IGNyZWF0ZSBhXG4vLyBoYXJkIGRlcGVuZGVuY3kgdG8gbm9kZS5cbmV4cG9ydCBmdW5jdGlvbiBpc0J1ZmZlcihvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgQnVmZmVyLmlzQnVmZmVyKG9iaik7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgb2JqICE9PSBudWxsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJPclZpZXcob2JqKSB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhvYmopO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqKSB7XG4gICAgaWYgKCFpc09iamVjdChvYmopIHx8IGdldFRhZyhvYmopICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbGV0IHByb3RvID0gb2JqO1xuICAgIHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2YocHJvdG8pICE9PSBudWxsKSB7XG4gICAgICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopID09PSBwcm90bztcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0KGFycikge1xuICAgIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZyZWV6ZShvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShvYmopO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFzQXJyYXkoYXJnKSB7XG4gICAgaWYgKGlzUmVhZG9ubHlBcnJheShhcmcpKSB7XG4gICAgICAgIHJldHVybiBhcmc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gW2FyZ107XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGFzUmVhZG9ubHlBcnJheShhcmcpIHtcbiAgICBpZiAoaXNSZWFkb25seUFycmF5KGFyZykpIHtcbiAgICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoW2FyZ10pO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1JlYWRvbmx5QXJyYXkoYXJnKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJnKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBub29wKG9iaikge1xuICAgIHJldHVybiBvYmo7XG59XG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZShvYmoxLCBvYmoyKSB7XG4gICAgaWYgKGlzUmVhZG9ubHlBcnJheShvYmoxKSAmJiBpc1JlYWRvbmx5QXJyYXkob2JqMikpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVBcnJheXMob2JqMSwgb2JqMik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KG9iajEpICYmIGlzT2JqZWN0KG9iajIpKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlT2JqZWN0cyhvYmoxLCBvYmoyKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajEgPT09IG9iajI7XG59XG5mdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycjEsIGFycjIpIHtcbiAgICBpZiAoYXJyMS5sZW5ndGggIT09IGFycjIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIxLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICghY29tcGFyZShhcnIxW2ldLCBhcnIyW2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gY29tcGFyZU9iamVjdHMob2JqMSwgb2JqMikge1xuICAgIGlmIChpc0J1ZmZlcihvYmoxKSAmJiBpc0J1ZmZlcihvYmoyKSkge1xuICAgICAgICByZXR1cm4gY29tcGFyZUJ1ZmZlcnMob2JqMSwgb2JqMik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRGF0ZShvYmoxKSAmJiBpc0RhdGUob2JqMikpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVEYXRlcyhvYmoxLCBvYmoyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBhcmVHZW5lcmljT2JqZWN0cyhvYmoxLCBvYmoyKTtcbn1cbmZ1bmN0aW9uIGNvbXBhcmVCdWZmZXJzKGJ1ZjEsIGJ1ZjIpIHtcbiAgICByZXR1cm4gQnVmZmVyLmNvbXBhcmUoYnVmMSwgYnVmMikgPT09IDA7XG59XG5mdW5jdGlvbiBjb21wYXJlRGF0ZXMoZGF0ZTEsIGRhdGUyKSB7XG4gICAgcmV0dXJuIGRhdGUxLmdldFRpbWUoKSA9PT0gZGF0ZTIuZ2V0VGltZSgpO1xufVxuZnVuY3Rpb24gY29tcGFyZUdlbmVyaWNPYmplY3RzKG9iajEsIG9iajIpIHtcbiAgICBjb25zdCBrZXlzMSA9IE9iamVjdC5rZXlzKG9iajEpO1xuICAgIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXMob2JqMik7XG4gICAgaWYgKGtleXMxLmxlbmd0aCAhPT0ga2V5czIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5czEpIHtcbiAgICAgICAgaWYgKCFjb21wYXJlKG9iajFba2V5XSwgb2JqMltrZXldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuZnVuY3Rpb24gZ2V0VGFnKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyAnW29iamVjdCBVbmRlZmluZWRdJyA6ICdbb2JqZWN0IE51bGxdJztcbiAgICB9XG4gICAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jcmVhdGUtaW5kZXgtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi9pZGVudGlmaWVyLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENyZWF0ZUluZGV4Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnQ3JlYXRlSW5kZXhOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShuYW1lKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0NyZWF0ZUluZGV4Tm9kZScsXG4gICAgICAgICAgICBuYW1lOiBJZGVudGlmaWVyTm9kZS5jcmVhdGUobmFtZSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoKG5vZGUsIHByb3BzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aENvbHVtbnMobm9kZSwgY29sdW1ucykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICBjb2x1bW5zOiBbLi4uKG5vZGUuY29sdW1ucyB8fCBbXSksIC4uLmNvbHVtbnNdLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2lkZW50aWZpZXItbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBJZGVudGlmaWVyTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnSWRlbnRpZmllck5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnSWRlbnRpZmllck5vZGUnLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jcmVhdGUtc2NoZW1hLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4vaWRlbnRpZmllci1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDcmVhdGVTY2hlbWFOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdDcmVhdGVTY2hlbWFOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShzY2hlbWEsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDcmVhdGVTY2hlbWFOb2RlJyxcbiAgICAgICAgICAgIHNjaGVtYTogSWRlbnRpZmllck5vZGUuY3JlYXRlKHNjaGVtYSksXG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoKGNyZWF0ZVNjaGVtYSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uY3JlYXRlU2NoZW1hLFxuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NyZWF0ZS10YWJsZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNvbnN0IE9OX0NPTU1JVF9BQ1RJT05TID0gWydwcmVzZXJ2ZSByb3dzJywgJ2RlbGV0ZSByb3dzJywgJ2Ryb3AnXTtcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDcmVhdGVUYWJsZU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0NyZWF0ZVRhYmxlTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUodGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQ3JlYXRlVGFibGVOb2RlJyxcbiAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgY29sdW1uczogZnJlZXplKFtdKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhDb2x1bW4oY3JlYXRlVGFibGUsIGNvbHVtbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmNyZWF0ZVRhYmxlLFxuICAgICAgICAgICAgY29sdW1uczogZnJlZXplKFsuLi5jcmVhdGVUYWJsZS5jb2x1bW5zLCBjb2x1bW5dKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhDb25zdHJhaW50KGNyZWF0ZVRhYmxlLCBjb25zdHJhaW50KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uY3JlYXRlVGFibGUsXG4gICAgICAgICAgICBjb25zdHJhaW50czogY3JlYXRlVGFibGUuY29uc3RyYWludHNcbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbLi4uY3JlYXRlVGFibGUuY29uc3RyYWludHMsIGNvbnN0cmFpbnRdKVxuICAgICAgICAgICAgICAgIDogZnJlZXplKFtjb25zdHJhaW50XSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoRnJvbnRNb2RpZmllcihjcmVhdGVUYWJsZSwgbW9kaWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5jcmVhdGVUYWJsZSxcbiAgICAgICAgICAgIGZyb250TW9kaWZpZXJzOiBjcmVhdGVUYWJsZS5mcm9udE1vZGlmaWVyc1xuICAgICAgICAgICAgICAgID8gZnJlZXplKFsuLi5jcmVhdGVUYWJsZS5mcm9udE1vZGlmaWVycywgbW9kaWZpZXJdKVxuICAgICAgICAgICAgICAgIDogZnJlZXplKFttb2RpZmllcl0pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aEVuZE1vZGlmaWVyKGNyZWF0ZVRhYmxlLCBtb2RpZmllcikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmNyZWF0ZVRhYmxlLFxuICAgICAgICAgICAgZW5kTW9kaWZpZXJzOiBjcmVhdGVUYWJsZS5lbmRNb2RpZmllcnNcbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbLi4uY3JlYXRlVGFibGUuZW5kTW9kaWZpZXJzLCBtb2RpZmllcl0pXG4gICAgICAgICAgICAgICAgOiBmcmVlemUoW21vZGlmaWVyXSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoKGNyZWF0ZVRhYmxlLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5jcmVhdGVUYWJsZSxcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kcm9wLWluZGV4LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBTY2hlbWFibGVJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4vc2NoZW1hYmxlLWlkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgRHJvcEluZGV4Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnRHJvcEluZGV4Tm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUobmFtZSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0Ryb3BJbmRleE5vZGUnLFxuICAgICAgICAgICAgbmFtZTogU2NoZW1hYmxlSWRlbnRpZmllck5vZGUuY3JlYXRlKG5hbWUpLFxuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aChkcm9wSW5kZXgsIHByb3BzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uZHJvcEluZGV4LFxuICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vc2NoZW1hYmxlLWlkZW50aWZpZXItbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi9pZGVudGlmaWVyLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFNjaGVtYWJsZUlkZW50aWZpZXJOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdTY2hlbWFibGVJZGVudGlmaWVyTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoaWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdTY2hlbWFibGVJZGVudGlmaWVyTm9kZScsXG4gICAgICAgICAgICBpZGVudGlmaWVyOiBJZGVudGlmaWVyTm9kZS5jcmVhdGUoaWRlbnRpZmllciksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY3JlYXRlV2l0aFNjaGVtYShzY2hlbWEsIGlkZW50aWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnU2NoZW1hYmxlSWRlbnRpZmllck5vZGUnLFxuICAgICAgICAgICAgc2NoZW1hOiBJZGVudGlmaWVyTm9kZS5jcmVhdGUoc2NoZW1hKSxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IElkZW50aWZpZXJOb2RlLmNyZWF0ZShpZGVudGlmaWVyKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kcm9wLXNjaGVtYS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL2lkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgRHJvcFNjaGVtYU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0Ryb3BTY2hlbWFOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShzY2hlbWEsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdEcm9wU2NoZW1hTm9kZScsXG4gICAgICAgICAgICBzY2hlbWE6IElkZW50aWZpZXJOb2RlLmNyZWF0ZShzY2hlbWEpLFxuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aChkcm9wU2NoZW1hLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5kcm9wU2NoZW1hLFxuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Ryb3AtdGFibGUtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBEcm9wVGFibGVOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdEcm9wVGFibGVOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZSh0YWJsZSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0Ryb3BUYWJsZU5vZGUnLFxuICAgICAgICAgICAgdGFibGUsXG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoKGRyb3BJbmRleCwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uZHJvcEluZGV4LFxuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3RhYmxlLXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IGlzUmVhZG9ubHlBcnJheSwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBBbGlhc05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hbGlhcy1ub2RlLmpzJztcbmltcG9ydCB7IFRhYmxlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3RhYmxlLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VBbGlhc2VkRXhwcmVzc2lvbiwgfSBmcm9tICcuL2V4cHJlc3Npb24tcGFyc2VyLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IGlzQWxpYXNlZER5bmFtaWNUYWJsZUJ1aWxkZXIsIH0gZnJvbSAnLi4vZHluYW1pYy9keW5hbWljLXRhYmxlLWJ1aWxkZXIuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGFibGVFeHByZXNzaW9uT3JMaXN0KHRhYmxlKSB7XG4gICAgaWYgKGlzUmVhZG9ubHlBcnJheSh0YWJsZSkpIHtcbiAgICAgICAgcmV0dXJuIHRhYmxlLm1hcCgoaXQpID0+IHBhcnNlVGFibGVFeHByZXNzaW9uKGl0KSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gW3BhcnNlVGFibGVFeHByZXNzaW9uKHRhYmxlKV07XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVGFibGVFeHByZXNzaW9uKHRhYmxlKSB7XG4gICAgaWYgKGlzU3RyaW5nKHRhYmxlKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VBbGlhc2VkVGFibGUodGFibGUpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc0FsaWFzZWREeW5hbWljVGFibGVCdWlsZGVyKHRhYmxlKSkge1xuICAgICAgICByZXR1cm4gdGFibGUudG9PcGVyYXRpb25Ob2RlKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gcGFyc2VBbGlhc2VkRXhwcmVzc2lvbih0YWJsZSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQWxpYXNlZFRhYmxlKGZyb20pIHtcbiAgICBjb25zdCBBTElBU19TRVBBUkFUT1IgPSAnIGFzICc7XG4gICAgaWYgKGZyb20uaW5jbHVkZXMoQUxJQVNfU0VQQVJBVE9SKSkge1xuICAgICAgICBjb25zdCBbdGFibGUsIGFsaWFzXSA9IGZyb20uc3BsaXQoQUxJQVNfU0VQQVJBVE9SKS5tYXAodHJpbSk7XG4gICAgICAgIHJldHVybiBBbGlhc05vZGUuY3JlYXRlKHBhcnNlVGFibGUodGFibGUpLCBJZGVudGlmaWVyTm9kZS5jcmVhdGUoYWxpYXMpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBwYXJzZVRhYmxlKGZyb20pO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRhYmxlKGZyb20pIHtcbiAgICBjb25zdCBTQ0hFTUFfU0VQQVJBVE9SID0gJy4nO1xuICAgIGlmIChmcm9tLmluY2x1ZGVzKFNDSEVNQV9TRVBBUkFUT1IpKSB7XG4gICAgICAgIGNvbnN0IFtzY2hlbWEsIHRhYmxlXSA9IGZyb20uc3BsaXQoU0NIRU1BX1NFUEFSQVRPUikubWFwKHRyaW0pO1xuICAgICAgICByZXR1cm4gVGFibGVOb2RlLmNyZWF0ZVdpdGhTY2hlbWEoc2NoZW1hLCB0YWJsZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gVGFibGVOb2RlLmNyZWF0ZShmcm9tKTtcbiAgICB9XG59XG5mdW5jdGlvbiB0cmltKHN0cikge1xuICAgIHJldHVybiBzdHIudHJpbSgpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9hbGlhcy1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEFsaWFzTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnQWxpYXNOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShub2RlLCBhbGlhcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdBbGlhc05vZGUnLFxuICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgIGFsaWFzLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3RhYmxlLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBTY2hlbWFibGVJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4vc2NoZW1hYmxlLWlkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVGFibGVOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdUYWJsZU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1RhYmxlTm9kZScsXG4gICAgICAgICAgICB0YWJsZTogU2NoZW1hYmxlSWRlbnRpZmllck5vZGUuY3JlYXRlKHRhYmxlKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjcmVhdGVXaXRoU2NoZW1hKHNjaGVtYSwgdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnVGFibGVOb2RlJyxcbiAgICAgICAgICAgIHRhYmxlOiBTY2hlbWFibGVJZGVudGlmaWVyTm9kZS5jcmVhdGVXaXRoU2NoZW1hKHNjaGVtYSwgdGFibGUpLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2V4cHJlc3Npb24tcGFyc2VyLmQudHNcIiAvPlxuaW1wb3J0IHsgaXNBbGlhc2VkRXhwcmVzc2lvbiwgaXNFeHByZXNzaW9uLCB9IGZyb20gJy4uL2V4cHJlc3Npb24vZXhwcmVzc2lvbi5qcyc7XG5pbXBvcnQgeyBpc09wZXJhdGlvbk5vZGVTb3VyY2UgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vcGVyYXRpb24tbm9kZS1zb3VyY2UuanMnO1xuaW1wb3J0IHsgZXhwcmVzc2lvbkJ1aWxkZXIsIH0gZnJvbSAnLi4vZXhwcmVzc2lvbi9leHByZXNzaW9uLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oZXhwKSB7XG4gICAgaWYgKGlzT3BlcmF0aW9uTm9kZVNvdXJjZShleHApKSB7XG4gICAgICAgIHJldHVybiBleHAudG9PcGVyYXRpb25Ob2RlKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24oZXhwKSkge1xuICAgICAgICByZXR1cm4gZXhwKGV4cHJlc3Npb25CdWlsZGVyKCkpLnRvT3BlcmF0aW9uTm9kZSgpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZXhwcmVzc2lvbjogJHtKU09OLnN0cmluZ2lmeShleHApfWApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQWxpYXNlZEV4cHJlc3Npb24oZXhwKSB7XG4gICAgaWYgKGlzT3BlcmF0aW9uTm9kZVNvdXJjZShleHApKSB7XG4gICAgICAgIHJldHVybiBleHAudG9PcGVyYXRpb25Ob2RlKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRnVuY3Rpb24oZXhwKSkge1xuICAgICAgICByZXR1cm4gZXhwKGV4cHJlc3Npb25CdWlsZGVyKCkpLnRvT3BlcmF0aW9uTm9kZSgpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYWxpYXNlZCBleHByZXNzaW9uOiAke0pTT04uc3RyaW5naWZ5KGV4cCl9YCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFeHByZXNzaW9uT3JGYWN0b3J5KG9iaikge1xuICAgIHJldHVybiBpc0V4cHJlc3Npb24ob2JqKSB8fCBpc0FsaWFzZWRFeHByZXNzaW9uKG9iaikgfHwgaXNGdW5jdGlvbihvYmopO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9leHByZXNzaW9uLmQudHNcIiAvPlxuaW1wb3J0IHsgaXNPcGVyYXRpb25Ob2RlU291cmNlLCB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXNvdXJjZS5qcyc7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gaXNFeHByZXNzaW9uKG9iaikge1xuICAgIHJldHVybiBpc09iamVjdChvYmopICYmICdleHByZXNzaW9uVHlwZScgaW4gb2JqICYmIGlzT3BlcmF0aW9uTm9kZVNvdXJjZShvYmopO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQWxpYXNlZEV4cHJlc3Npb24ob2JqKSB7XG4gICAgcmV0dXJuIChpc09iamVjdChvYmopICYmXG4gICAgICAgICdleHByZXNzaW9uJyBpbiBvYmogJiZcbiAgICAgICAgaXNTdHJpbmcob2JqLmFsaWFzKSAmJlxuICAgICAgICBpc09wZXJhdGlvbk5vZGVTb3VyY2Uob2JqKSk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL29wZXJhdGlvbi1ub2RlLXNvdXJjZS5kLnRzXCIgLz5cbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0IH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzT3BlcmF0aW9uTm9kZVNvdXJjZShvYmopIHtcbiAgICByZXR1cm4gaXNPYmplY3Qob2JqKSAmJiBpc0Z1bmN0aW9uKG9iai50b09wZXJhdGlvbk5vZGUpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9leHByZXNzaW9uLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RRdWVyeUJ1aWxkZXIsIH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci9zZWxlY3QtcXVlcnktYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBTZWxlY3RRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9zZWxlY3QtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVRhYmxlRXhwcmVzc2lvbk9yTGlzdCwgcGFyc2VUYWJsZSwgfSBmcm9tICcuLi9wYXJzZXIvdGFibGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IFdpdGhTY2hlbWFQbHVnaW4gfSBmcm9tICcuLi9wbHVnaW4vd2l0aC1zY2hlbWEvd2l0aC1zY2hlbWEtcGx1Z2luLmpzJztcbmltcG9ydCB7IGNyZWF0ZVF1ZXJ5SWQgfSBmcm9tICcuLi91dGlsL3F1ZXJ5LWlkLmpzJztcbmltcG9ydCB7IGNyZWF0ZUZ1bmN0aW9uTW9kdWxlLCB9IGZyb20gJy4uL3F1ZXJ5LWJ1aWxkZXIvZnVuY3Rpb24tbW9kdWxlLmpzJztcbmltcG9ydCB7IHBhcnNlSlNPTlJlZmVyZW5jZSwgcGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uLCBwYXJzZVN0cmluZ1JlZmVyZW5jZSwgfSBmcm9tICcuLi9wYXJzZXIvcmVmZXJlbmNlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUZpbHRlckxpc3QsIHBhcnNlRmlsdGVyT2JqZWN0LCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uLCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uLCB9IGZyb20gJy4uL3BhcnNlci9iaW5hcnktb3BlcmF0aW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBQYXJlbnNOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcGFyZW5zLW5vZGUuanMnO1xuaW1wb3J0IHsgRXhwcmVzc2lvbldyYXBwZXIgfSBmcm9tICcuL2V4cHJlc3Npb24td3JhcHBlci5qcyc7XG5pbXBvcnQgeyBPcGVyYXRvck5vZGUsIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0b3Itbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVVuYXJ5T3BlcmF0aW9uIH0gZnJvbSAnLi4vcGFyc2VyL3VuYXJ5LW9wZXJhdGlvbi1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VTYWZlSW1tZWRpYXRlVmFsdWUsIHBhcnNlVmFsdWVFeHByZXNzaW9uLCB9IGZyb20gJy4uL3BhcnNlci92YWx1ZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgTk9PUF9RVUVSWV9FWEVDVVRPUiB9IGZyb20gJy4uL3F1ZXJ5LWV4ZWN1dG9yL25vb3AtcXVlcnktZXhlY3V0b3IuanMnO1xuaW1wb3J0IHsgQ2FzZUJ1aWxkZXIgfSBmcm9tICcuLi9xdWVyeS1idWlsZGVyL2Nhc2UtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBDYXNlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2Nhc2Utbm9kZS5qcyc7XG5pbXBvcnQgeyBpc1JlYWRvbmx5QXJyYXksIGlzVW5kZWZpbmVkIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgSlNPTlBhdGhCdWlsZGVyIH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci9qc29uLXBhdGgtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBCaW5hcnlPcGVyYXRpb25Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYmluYXJ5LW9wZXJhdGlvbi1ub2RlLmpzJztcbmltcG9ydCB7IEFuZE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hbmQtbm9kZS5qcyc7XG5pbXBvcnQgeyBUdXBsZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS90dXBsZS1ub2RlLmpzJztcbmltcG9ydCB7IEpTT05QYXRoTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2pzb24tcGF0aC1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlRGF0YVR5cGVFeHByZXNzaW9uLCB9IGZyb20gJy4uL3BhcnNlci9kYXRhLXR5cGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IENhc3ROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY2FzdC1ub2RlLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFeHByZXNzaW9uQnVpbGRlcihleGVjdXRvciA9IE5PT1BfUVVFUllfRVhFQ1VUT1IpIHtcbiAgICBmdW5jdGlvbiBiaW5hcnkobGhzLCBvcCwgcmhzKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIocGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbihsaHMsIG9wLCByaHMpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdW5hcnkob3AsIGV4cHIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihwYXJzZVVuYXJ5T3BlcmF0aW9uKG9wLCBleHByKSk7XG4gICAgfVxuICAgIGNvbnN0IGViID0gT2JqZWN0LmFzc2lnbihiaW5hcnksIHtcbiAgICAgICAgZm46IHVuZGVmaW5lZCxcbiAgICAgICAgZWI6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VsZWN0RnJvbSh0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVNlbGVjdFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgICAgIGV4ZWN1dG9yLFxuICAgICAgICAgICAgICAgIHF1ZXJ5Tm9kZTogU2VsZWN0UXVlcnlOb2RlLmNyZWF0ZUZyb20ocGFyc2VUYWJsZUV4cHJlc3Npb25Pckxpc3QodGFibGUpKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBjYXNlKHJlZmVyZW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDYXNlQnVpbGRlcih7XG4gICAgICAgICAgICAgICAgbm9kZTogQ2FzZU5vZGUuY3JlYXRlKGlzVW5kZWZpbmVkKHJlZmVyZW5jZSlcbiAgICAgICAgICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgOiBwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb24ocmVmZXJlbmNlKSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVmKHJlZmVyZW5jZSwgb3ApIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChvcCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKHBhcnNlU3RyaW5nUmVmZXJlbmNlKHJlZmVyZW5jZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBKU09OUGF0aEJ1aWxkZXIocGFyc2VKU09OUmVmZXJlbmNlKHJlZmVyZW5jZSwgb3ApKTtcbiAgICAgICAgfSxcbiAgICAgICAganNvblBhdGgoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEpTT05QYXRoQnVpbGRlcihKU09OUGF0aE5vZGUuY3JlYXRlKCkpO1xuICAgICAgICB9LFxuICAgICAgICB0YWJsZSh0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihwYXJzZVRhYmxlKHRhYmxlKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHZhbCh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihwYXJzZVZhbHVlRXhwcmVzc2lvbih2YWx1ZSkpO1xuICAgICAgICB9LFxuICAgICAgICByZWZUdXBsZSguLi52YWx1ZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIoVHVwbGVOb2RlLmNyZWF0ZSh2YWx1ZXMubWFwKHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbikpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHVwbGUoLi4udmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKFR1cGxlTm9kZS5jcmVhdGUodmFsdWVzLm1hcChwYXJzZVZhbHVlRXhwcmVzc2lvbikpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbGl0KHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKHBhcnNlU2FmZUltbWVkaWF0ZVZhbHVlKHZhbHVlKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHVuYXJ5LFxuICAgICAgICBub3QoZXhwcikge1xuICAgICAgICAgICAgcmV0dXJuIHVuYXJ5KCdub3QnLCBleHByKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXhpc3RzKGV4cHIpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmFyeSgnZXhpc3RzJywgZXhwcik7XG4gICAgICAgIH0sXG4gICAgICAgIG5lZyhleHByKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5hcnkoJy0nLCBleHByKTtcbiAgICAgICAgfSxcbiAgICAgICAgYmV0d2VlbihleHByLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKEJpbmFyeU9wZXJhdGlvbk5vZGUuY3JlYXRlKHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbihleHByKSwgT3BlcmF0b3JOb2RlLmNyZWF0ZSgnYmV0d2VlbicpLCBBbmROb2RlLmNyZWF0ZShwYXJzZVZhbHVlRXhwcmVzc2lvbihzdGFydCksIHBhcnNlVmFsdWVFeHByZXNzaW9uKGVuZCkpKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGJldHdlZW5TeW1tZXRyaWMoZXhwciwgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihCaW5hcnlPcGVyYXRpb25Ob2RlLmNyZWF0ZShwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb24oZXhwciksIE9wZXJhdG9yTm9kZS5jcmVhdGUoJ2JldHdlZW4gc3ltbWV0cmljJyksIEFuZE5vZGUuY3JlYXRlKHBhcnNlVmFsdWVFeHByZXNzaW9uKHN0YXJ0KSwgcGFyc2VWYWx1ZUV4cHJlc3Npb24oZW5kKSkpKTtcbiAgICAgICAgfSxcbiAgICAgICAgYW5kKGV4cHJzKSB7XG4gICAgICAgICAgICBpZiAoaXNSZWFkb25seUFycmF5KGV4cHJzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIocGFyc2VGaWx0ZXJMaXN0KGV4cHJzLCAnYW5kJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihwYXJzZUZpbHRlck9iamVjdChleHBycywgJ2FuZCcpKTtcbiAgICAgICAgfSxcbiAgICAgICAgb3IoZXhwcnMpIHtcbiAgICAgICAgICAgIGlmIChpc1JlYWRvbmx5QXJyYXkoZXhwcnMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihwYXJzZUZpbHRlckxpc3QoZXhwcnMsICdvcicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIocGFyc2VGaWx0ZXJPYmplY3QoZXhwcnMsICdvcicpKTtcbiAgICAgICAgfSxcbiAgICAgICAgcGFyZW5zKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uKGFyZ3MpO1xuICAgICAgICAgICAgaWYgKFBhcmVuc05vZGUuaXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBObyBkb3VibGUgd3JhcHBpbmcuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIoUGFyZW5zTm9kZS5jcmVhdGUobm9kZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjYXN0KGV4cHIsIGRhdGFUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKENhc3ROb2RlLmNyZWF0ZShwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb24oZXhwciksIHBhcnNlRGF0YVR5cGVFeHByZXNzaW9uKGRhdGFUeXBlKSkpO1xuICAgICAgICB9LFxuICAgICAgICB3aXRoU2NoZW1hKHNjaGVtYSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUV4cHJlc3Npb25CdWlsZGVyKGV4ZWN1dG9yLndpdGhQbHVnaW5BdEZyb250KG5ldyBXaXRoU2NoZW1hUGx1Z2luKHNjaGVtYSkpKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICBlYi5mbiA9IGNyZWF0ZUZ1bmN0aW9uTW9kdWxlKCk7XG4gICAgZWIuZWIgPSBlYjtcbiAgICByZXR1cm4gZWI7XG59XG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvbkJ1aWxkZXIoXykge1xuICAgIHJldHVybiBjcmVhdGVFeHByZXNzaW9uQnVpbGRlcigpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9zZWxlY3QtcXVlcnktYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IEFsaWFzTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2FsaWFzLW5vZGUuanMnO1xuaW1wb3J0IHsgU2VsZWN0TW9kaWZpZXJOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvc2VsZWN0LW1vZGlmaWVyLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VKb2luLCB9IGZyb20gJy4uL3BhcnNlci9qb2luLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVRhYmxlIH0gZnJvbSAnLi4vcGFyc2VyL3RhYmxlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVNlbGVjdEFyZywgcGFyc2VTZWxlY3RBbGwsIH0gZnJvbSAnLi4vcGFyc2VyL3NlbGVjdC1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uT3JMaXN0LCB9IGZyb20gJy4uL3BhcnNlci9yZWZlcmVuY2UtcGFyc2VyLmpzJztcbmltcG9ydCB7IFNlbGVjdFF1ZXJ5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3NlbGVjdC1xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IFF1ZXJ5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3F1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VPcmRlckJ5LCB9IGZyb20gJy4uL3BhcnNlci9vcmRlci1ieS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgTGltaXROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvbGltaXQtbm9kZS5qcyc7XG5pbXBvcnQgeyBPZmZzZXROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb2Zmc2V0LW5vZGUuanMnO1xuaW1wb3J0IHsgYXNBcnJheSwgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgcGFyc2VHcm91cEJ5IH0gZnJvbSAnLi4vcGFyc2VyL2dyb3VwLWJ5LXBhcnNlci5qcyc7XG5pbXBvcnQgeyBpc05vUmVzdWx0RXJyb3JDb25zdHJ1Y3RvciwgTm9SZXN1bHRFcnJvciwgfSBmcm9tICcuL25vLXJlc3VsdC1lcnJvci5qcyc7XG5pbXBvcnQgeyBJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2lkZW50aWZpZXItbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVNldE9wZXJhdGlvbnMsIH0gZnJvbSAnLi4vcGFyc2VyL3NldC1vcGVyYXRpb24tcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24sIHBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24sIH0gZnJvbSAnLi4vcGFyc2VyL2JpbmFyeS1vcGVyYXRpb24tcGFyc2VyLmpzJztcbmltcG9ydCB7IEV4cHJlc3Npb25XcmFwcGVyIH0gZnJvbSAnLi4vZXhwcmVzc2lvbi9leHByZXNzaW9uLXdyYXBwZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VWYWx1ZUV4cHJlc3Npb24sIH0gZnJvbSAnLi4vcGFyc2VyL3ZhbHVlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUZldGNoIH0gZnJvbSAnLi4vcGFyc2VyL2ZldGNoLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVRvcCB9IGZyb20gJy4uL3BhcnNlci90b3AtcGFyc2VyLmpzJztcbmNsYXNzIFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIGdldCBleHByZXNzaW9uVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IGlzU2VsZWN0UXVlcnlCdWlsZGVyKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgd2hlcmUoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhXaGVyZSh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24oYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgd2hlcmVSZWYobGhzLCBvcCwgcmhzKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFdoZXJlKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VSZWZlcmVudGlhbEJpbmFyeU9wZXJhdGlvbihsaHMsIG9wLCByaHMpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhhdmluZyguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogU2VsZWN0UXVlcnlOb2RlLmNsb25lV2l0aEhhdmluZyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24oYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaGF2aW5nUmVmKGxocywgb3AsIHJocykge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jbG9uZVdpdGhIYXZpbmcodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uKGxocywgb3AsIHJocykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2VsZWN0KHNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jbG9uZVdpdGhTZWxlY3Rpb25zKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VTZWxlY3RBcmcoc2VsZWN0aW9uKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkaXN0aW5jdE9uKHNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jbG9uZVdpdGhEaXN0aW5jdE9uKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uT3JMaXN0KHNlbGVjdGlvbikpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbW9kaWZ5RnJvbnQobW9kaWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoRnJvbnRNb2RpZmllcih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIFNlbGVjdE1vZGlmaWVyTm9kZS5jcmVhdGVXaXRoRXhwcmVzc2lvbihtb2RpZmllci50b09wZXJhdGlvbk5vZGUoKSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbW9kaWZ5RW5kKG1vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEVuZE1vZGlmaWVyKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgU2VsZWN0TW9kaWZpZXJOb2RlLmNyZWF0ZVdpdGhFeHByZXNzaW9uKG1vZGlmaWVyLnRvT3BlcmF0aW9uTm9kZSgpKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkaXN0aW5jdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoRnJvbnRNb2RpZmllcih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIFNlbGVjdE1vZGlmaWVyTm9kZS5jcmVhdGUoJ0Rpc3RpbmN0JykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZm9yVXBkYXRlKG9mKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEVuZE1vZGlmaWVyKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgU2VsZWN0TW9kaWZpZXJOb2RlLmNyZWF0ZSgnRm9yVXBkYXRlJywgb2YgPyBhc0FycmF5KG9mKS5tYXAocGFyc2VUYWJsZSkgOiB1bmRlZmluZWQpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZvclNoYXJlKG9mKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEVuZE1vZGlmaWVyKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgU2VsZWN0TW9kaWZpZXJOb2RlLmNyZWF0ZSgnRm9yU2hhcmUnLCBvZiA/IGFzQXJyYXkob2YpLm1hcChwYXJzZVRhYmxlKSA6IHVuZGVmaW5lZCkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZm9yS2V5U2hhcmUob2YpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoRW5kTW9kaWZpZXIodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBTZWxlY3RNb2RpZmllck5vZGUuY3JlYXRlKCdGb3JLZXlTaGFyZScsIG9mID8gYXNBcnJheShvZikubWFwKHBhcnNlVGFibGUpIDogdW5kZWZpbmVkKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmb3JOb0tleVVwZGF0ZShvZikge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhFbmRNb2RpZmllcih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIFNlbGVjdE1vZGlmaWVyTm9kZS5jcmVhdGUoJ0Zvck5vS2V5VXBkYXRlJywgb2YgPyBhc0FycmF5KG9mKS5tYXAocGFyc2VUYWJsZSkgOiB1bmRlZmluZWQpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNraXBMb2NrZWQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEVuZE1vZGlmaWVyKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgU2VsZWN0TW9kaWZpZXJOb2RlLmNyZWF0ZSgnU2tpcExvY2tlZCcpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vV2FpdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoRW5kTW9kaWZpZXIodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBTZWxlY3RNb2RpZmllck5vZGUuY3JlYXRlKCdOb1dhaXQnKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZWxlY3RBbGwodGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoU2VsZWN0aW9ucyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QWxsKHRhYmxlKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpbm5lckpvaW4oLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jam9pbignSW5uZXJKb2luJywgYXJncyk7XG4gICAgfVxuICAgIGxlZnRKb2luKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2pvaW4oJ0xlZnRKb2luJywgYXJncyk7XG4gICAgfVxuICAgIHJpZ2h0Sm9pbiguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNqb2luKCdSaWdodEpvaW4nLCBhcmdzKTtcbiAgICB9XG4gICAgZnVsbEpvaW4oLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jam9pbignRnVsbEpvaW4nLCBhcmdzKTtcbiAgICB9XG4gICAgY3Jvc3NKb2luKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2pvaW4oJ0Nyb3NzSm9pbicsIGFyZ3MpO1xuICAgIH1cbiAgICBpbm5lckpvaW5MYXRlcmFsKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2pvaW4oJ0xhdGVyYWxJbm5lckpvaW4nLCBhcmdzKTtcbiAgICB9XG4gICAgbGVmdEpvaW5MYXRlcmFsKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2pvaW4oJ0xhdGVyYWxMZWZ0Sm9pbicsIGFyZ3MpO1xuICAgIH1cbiAgICBjcm9zc0pvaW5MYXRlcmFsKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2pvaW4oJ0xhdGVyYWxDcm9zc0pvaW4nLCBhcmdzKTtcbiAgICB9XG4gICAgY3Jvc3NBcHBseSguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNqb2luKCdDcm9zc0FwcGx5JywgYXJncyk7XG4gICAgfVxuICAgIG91dGVyQXBwbHkoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jam9pbignT3V0ZXJBcHBseScsIGFyZ3MpO1xuICAgIH1cbiAgICAjam9pbihqb2luVHlwZSwgYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhKb2luKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VKb2luKGpvaW5UeXBlLCBhcmdzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvcmRlckJ5KC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoT3JkZXJCeUl0ZW1zKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VPcmRlckJ5KGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdyb3VwQnkoZ3JvdXBCeSkge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jbG9uZVdpdGhHcm91cEJ5SXRlbXModGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZUdyb3VwQnkoZ3JvdXBCeSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGltaXQobGltaXQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoTGltaXQodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBMaW1pdE5vZGUuY3JlYXRlKHBhcnNlVmFsdWVFeHByZXNzaW9uKGxpbWl0KSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb2Zmc2V0KG9mZnNldCkge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jbG9uZVdpdGhPZmZzZXQodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBPZmZzZXROb2RlLmNyZWF0ZShwYXJzZVZhbHVlRXhwcmVzc2lvbihvZmZzZXQpKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmZXRjaChyb3dDb3VudCwgbW9kaWZpZXIgPSAnb25seScpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoRmV0Y2godGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZUZldGNoKHJvd0NvdW50LCBtb2RpZmllcikpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9wKGV4cHJlc3Npb24sIG1vZGlmaWVycykge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhUb3AodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVRvcChleHByZXNzaW9uLCBtb2RpZmllcnMpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVuaW9uKGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoU2V0T3BlcmF0aW9ucyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2V0T3BlcmF0aW9ucygndW5pb24nLCBleHByZXNzaW9uLCBmYWxzZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdW5pb25BbGwoZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jbG9uZVdpdGhTZXRPcGVyYXRpb25zKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VTZXRPcGVyYXRpb25zKCd1bmlvbicsIGV4cHJlc3Npb24sIHRydWUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGludGVyc2VjdChleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogU2VsZWN0UXVlcnlOb2RlLmNsb25lV2l0aFNldE9wZXJhdGlvbnModGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVNldE9wZXJhdGlvbnMoJ2ludGVyc2VjdCcsIGV4cHJlc3Npb24sIGZhbHNlKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpbnRlcnNlY3RBbGwoZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jbG9uZVdpdGhTZXRPcGVyYXRpb25zKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VTZXRPcGVyYXRpb25zKCdpbnRlcnNlY3QnLCBleHByZXNzaW9uLCB0cnVlKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBleGNlcHQoZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jbG9uZVdpdGhTZXRPcGVyYXRpb25zKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VTZXRPcGVyYXRpb25zKCdleGNlcHQnLCBleHByZXNzaW9uLCBmYWxzZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZXhjZXB0QWxsKGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoU2V0T3BlcmF0aW9ucyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2V0T3BlcmF0aW9ucygnZXhjZXB0JywgZXhwcmVzc2lvbiwgdHJ1ZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXMoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbGlhc2VkU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh0aGlzLCBhbGlhcyk7XG4gICAgfVxuICAgIGNsZWFyU2VsZWN0KCkge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jbG9uZVdpdGhvdXRTZWxlY3Rpb25zKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjbGVhcldoZXJlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhvdXRXaGVyZSh0aGlzLiNwcm9wcy5xdWVyeU5vZGUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xlYXJMaW1pdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRob3V0TGltaXQodGhpcy4jcHJvcHMucXVlcnlOb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFyT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jbG9uZVdpdGhvdXRPZmZzZXQodGhpcy4jcHJvcHMucXVlcnlOb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFyT3JkZXJCeSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRob3V0T3JkZXJCeSh0aGlzLiNwcm9wcy5xdWVyeU5vZGUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xlYXJHcm91cEJ5KCkge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jbG9uZVdpdGhvdXRHcm91cEJ5KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICAkaWYoY29uZGl0aW9uLCBmdW5jKSB7XG4gICAgICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgICRjYXN0VG8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2VsZWN0UXVlcnlCdWlsZGVySW1wbCh0aGlzLiNwcm9wcyk7XG4gICAgfVxuICAgICRuYXJyb3dUeXBlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwodGhpcy4jcHJvcHMpO1xuICAgIH1cbiAgICAkYXNzZXJ0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHRoaXMuI3Byb3BzKTtcbiAgICB9XG4gICAgJGFzVHVwbGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIodGhpcy50b09wZXJhdGlvbk5vZGUoKSk7XG4gICAgfVxuICAgICRhc1NjYWxhcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcih0aGlzLnRvT3BlcmF0aW9uTm9kZSgpKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbihwbHVnaW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhQbHVnaW4ocGx1Z2luKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBpbGVkUXVlcnkgPSB0aGlzLmNvbXBpbGUoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KGNvbXBpbGVkUXVlcnkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGVUYWtlRmlyc3QoKSB7XG4gICAgICAgIGNvbnN0IFtyZXN1bHRdID0gYXdhaXQgdGhpcy5leGVjdXRlKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGVUYWtlRmlyc3RPclRocm93KGVycm9yQ29uc3RydWN0b3IgPSBOb1Jlc3VsdEVycm9yKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZVRha2VGaXJzdCgpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNOb1Jlc3VsdEVycm9yQ29uc3RydWN0b3IoZXJyb3JDb25zdHJ1Y3RvcilcbiAgICAgICAgICAgICAgICA/IG5ldyBlcnJvckNvbnN0cnVjdG9yKHRoaXMudG9PcGVyYXRpb25Ob2RlKCkpXG4gICAgICAgICAgICAgICAgOiBlcnJvckNvbnN0cnVjdG9yKHRoaXMudG9PcGVyYXRpb25Ob2RlKCkpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgKnN0cmVhbShjaHVua1NpemUgPSAxMDApIHtcbiAgICAgICAgY29uc3QgY29tcGlsZWRRdWVyeSA9IHRoaXMuY29tcGlsZSgpO1xuICAgICAgICBjb25zdCBzdHJlYW0gPSB0aGlzLiNwcm9wcy5leGVjdXRvci5zdHJlYW0oY29tcGlsZWRRdWVyeSwgY2h1bmtTaXplKTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIHN0cmVhbSkge1xuICAgICAgICAgICAgeWllbGQqIGl0ZW0ucm93cztcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBleHBsYWluKGZvcm1hdCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gbmV3IFNlbGVjdFF1ZXJ5QnVpbGRlckltcGwoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhFeHBsYWluKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgZm9ybWF0LCBvcHRpb25zKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhd2FpdCBidWlsZGVyLmV4ZWN1dGUoKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VsZWN0UXVlcnlCdWlsZGVyKHByb3BzKSB7XG4gICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsKHByb3BzKTtcbn1cbi8qKlxuICoge0BsaW5rIFNlbGVjdFF1ZXJ5QnVpbGRlcn0gd2l0aCBhbiBhbGlhcy4gVGhlIHJlc3VsdCBvZiBjYWxsaW5nIHtAbGluayBTZWxlY3RRdWVyeUJ1aWxkZXIuYXN9LlxuICovXG5jbGFzcyBBbGlhc2VkU2VsZWN0UXVlcnlCdWlsZGVySW1wbCB7XG4gICAgI3F1ZXJ5QnVpbGRlcjtcbiAgICAjYWxpYXM7XG4gICAgY29uc3RydWN0b3IocXVlcnlCdWlsZGVyLCBhbGlhcykge1xuICAgICAgICB0aGlzLiNxdWVyeUJ1aWxkZXIgPSBxdWVyeUJ1aWxkZXI7XG4gICAgICAgIHRoaXMuI2FsaWFzID0gYWxpYXM7XG4gICAgfVxuICAgIGdldCBleHByZXNzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcXVlcnlCdWlsZGVyO1xuICAgIH1cbiAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhbGlhcztcbiAgICB9XG4gICAgZ2V0IGlzQWxpYXNlZFNlbGVjdFF1ZXJ5QnVpbGRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIEFsaWFzTm9kZS5jcmVhdGUodGhpcy4jcXVlcnlCdWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpLCBJZGVudGlmaWVyTm9kZS5jcmVhdGUodGhpcy4jYWxpYXMpKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3NlbGVjdC1tb2RpZmllci1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFNlbGVjdE1vZGlmaWVyTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnU2VsZWN0TW9kaWZpZXJOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShtb2RpZmllciwgb2YpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnU2VsZWN0TW9kaWZpZXJOb2RlJyxcbiAgICAgICAgICAgIG1vZGlmaWVyLFxuICAgICAgICAgICAgb2YsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY3JlYXRlV2l0aEV4cHJlc3Npb24obW9kaWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnU2VsZWN0TW9kaWZpZXJOb2RlJyxcbiAgICAgICAgICAgIHJhd01vZGlmaWVyOiBtb2RpZmllcixcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9qb2luLXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IEpvaW5Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvam9pbi1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24gfSBmcm9tICcuL2JpbmFyeS1vcGVyYXRpb24tcGFyc2VyLmpzJztcbmltcG9ydCB7IGNyZWF0ZUpvaW5CdWlsZGVyIH0gZnJvbSAnLi9wYXJzZS11dGlscy5qcyc7XG5pbXBvcnQgeyBwYXJzZVRhYmxlRXhwcmVzc2lvbiwgfSBmcm9tICcuL3RhYmxlLXBhcnNlci5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VKb2luKGpvaW5UeXBlLCBhcmdzKSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVNpbmdsZU9uSm9pbihqb2luVHlwZSwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUNhbGxiYWNrSm9pbihqb2luVHlwZSwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBwYXJzZU9ubGVzc0pvaW4oam9pblR5cGUsIGFyZ3NbMF0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZUNhbGxiYWNrSm9pbihqb2luVHlwZSwgZnJvbSwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gY2FsbGJhY2soY3JlYXRlSm9pbkJ1aWxkZXIoam9pblR5cGUsIGZyb20pKS50b09wZXJhdGlvbk5vZGUoKTtcbn1cbmZ1bmN0aW9uIHBhcnNlU2luZ2xlT25Kb2luKGpvaW5UeXBlLCBmcm9tLCBsaHNDb2x1bW4sIHJoc0NvbHVtbikge1xuICAgIHJldHVybiBKb2luTm9kZS5jcmVhdGVXaXRoT24oam9pblR5cGUsIHBhcnNlVGFibGVFeHByZXNzaW9uKGZyb20pLCBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uKGxoc0NvbHVtbiwgJz0nLCByaHNDb2x1bW4pKTtcbn1cbmZ1bmN0aW9uIHBhcnNlT25sZXNzSm9pbihqb2luVHlwZSwgZnJvbSkge1xuICAgIHJldHVybiBKb2luTm9kZS5jcmVhdGUoam9pblR5cGUsIHBhcnNlVGFibGVFeHByZXNzaW9uKGZyb20pKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vam9pbi1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgT25Ob2RlIH0gZnJvbSAnLi9vbi1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBKb2luTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnSm9pbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGpvaW5UeXBlLCB0YWJsZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdKb2luTm9kZScsXG4gICAgICAgICAgICBqb2luVHlwZSxcbiAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgb246IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjcmVhdGVXaXRoT24oam9pblR5cGUsIHRhYmxlLCBvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdKb2luTm9kZScsXG4gICAgICAgICAgICBqb2luVHlwZSxcbiAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgb246IE9uTm9kZS5jcmVhdGUob24pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aE9uKGpvaW5Ob2RlLCBvcGVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5qb2luTm9kZSxcbiAgICAgICAgICAgIG9uOiBqb2luTm9kZS5vblxuICAgICAgICAgICAgICAgID8gT25Ob2RlLmNsb25lV2l0aE9wZXJhdGlvbihqb2luTm9kZS5vbiwgJ0FuZCcsIG9wZXJhdGlvbilcbiAgICAgICAgICAgICAgICA6IE9uTm9kZS5jcmVhdGUob3BlcmF0aW9uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vbi1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQW5kTm9kZSB9IGZyb20gJy4vYW5kLW5vZGUuanMnO1xuaW1wb3J0IHsgT3JOb2RlIH0gZnJvbSAnLi9vci1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBPbk5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ09uTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoZmlsdGVyKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ09uTm9kZScsXG4gICAgICAgICAgICBvbjogZmlsdGVyLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aE9wZXJhdGlvbihvbk5vZGUsIG9wZXJhdG9yLCBvcGVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5vbk5vZGUsXG4gICAgICAgICAgICBvbjogb3BlcmF0b3IgPT09ICdBbmQnXG4gICAgICAgICAgICAgICAgPyBBbmROb2RlLmNyZWF0ZShvbk5vZGUub24sIG9wZXJhdGlvbilcbiAgICAgICAgICAgICAgICA6IE9yTm9kZS5jcmVhdGUob25Ob2RlLm9uLCBvcGVyYXRpb24pLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2FuZC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEFuZE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0FuZE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0FuZE5vZGUnLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL29yLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgT3JOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdPck5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ09yTm9kZScsXG4gICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vYmluYXJ5LW9wZXJhdGlvbi1wYXJzZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBCaW5hcnlPcGVyYXRpb25Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYmluYXJ5LW9wZXJhdGlvbi1ub2RlLmpzJztcbmltcG9ydCB7IGlzQm9vbGVhbiwgaXNOdWxsLCBpc1N0cmluZywgaXNVbmRlZmluZWQsIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgaXNPcGVyYXRpb25Ob2RlU291cmNlLCB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXNvdXJjZS5qcyc7XG5pbXBvcnQgeyBPcGVyYXRvck5vZGUsIE9QRVJBVE9SUywgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vcGVyYXRvci1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbiwgfSBmcm9tICcuL3JlZmVyZW5jZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VWYWx1ZUV4cHJlc3Npb24sIHBhcnNlVmFsdWVFeHByZXNzaW9uT3JMaXN0LCB9IGZyb20gJy4vdmFsdWUtcGFyc2VyLmpzJztcbmltcG9ydCB7IFZhbHVlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3ZhbHVlLW5vZGUuanMnO1xuaW1wb3J0IHsgQW5kTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2FuZC1ub2RlLmpzJztcbmltcG9ydCB7IFBhcmVuc05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9wYXJlbnMtbm9kZS5qcyc7XG5pbXBvcnQgeyBPck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vci1ub2RlLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uKGFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb24oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVZhbHVlRXhwcmVzc2lvbihhcmdzWzBdKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFyZ3VtZW50czogJHtKU09OLnN0cmluZ2lmeShhcmdzKX1gKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uKGxlZnQsIG9wZXJhdG9yLCByaWdodCkge1xuICAgIGlmIChpc0lzT3BlcmF0b3Iob3BlcmF0b3IpICYmIG5lZWRzSXNPcGVyYXRvcihyaWdodCkpIHtcbiAgICAgICAgcmV0dXJuIEJpbmFyeU9wZXJhdGlvbk5vZGUuY3JlYXRlKHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbihsZWZ0KSwgcGFyc2VPcGVyYXRvcihvcGVyYXRvciksIFZhbHVlTm9kZS5jcmVhdGVJbW1lZGlhdGUocmlnaHQpKTtcbiAgICB9XG4gICAgcmV0dXJuIEJpbmFyeU9wZXJhdGlvbk5vZGUuY3JlYXRlKHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbihsZWZ0KSwgcGFyc2VPcGVyYXRvcihvcGVyYXRvciksIHBhcnNlVmFsdWVFeHByZXNzaW9uT3JMaXN0KHJpZ2h0KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZWZlcmVudGlhbEJpbmFyeU9wZXJhdGlvbihsZWZ0LCBvcGVyYXRvciwgcmlnaHQpIHtcbiAgICByZXR1cm4gQmluYXJ5T3BlcmF0aW9uTm9kZS5jcmVhdGUocGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uKGxlZnQpLCBwYXJzZU9wZXJhdG9yKG9wZXJhdG9yKSwgcGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uKHJpZ2h0KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGaWx0ZXJPYmplY3Qob2JqLCBjb21iaW5hdG9yKSB7XG4gICAgcmV0dXJuIHBhcnNlRmlsdGVyTGlzdChPYmplY3QuZW50cmllcyhvYmopXG4gICAgICAgIC5maWx0ZXIoKFssIHZdKSA9PiAhaXNVbmRlZmluZWQodikpXG4gICAgICAgIC5tYXAoKFtrLCB2XSkgPT4gcGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbihrLCBuZWVkc0lzT3BlcmF0b3IodikgPyAnaXMnIDogJz0nLCB2KSksIGNvbWJpbmF0b3IpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmlsdGVyTGlzdChsaXN0LCBjb21iaW5hdG9yLCB3aXRoUGFyZW5zID0gdHJ1ZSkge1xuICAgIGNvbnN0IGNvbWJpbmUgPSBjb21iaW5hdG9yID09PSAnYW5kJyA/IEFuZE5vZGUuY3JlYXRlIDogT3JOb2RlLmNyZWF0ZTtcbiAgICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEJpbmFyeU9wZXJhdGlvbk5vZGUuY3JlYXRlKFZhbHVlTm9kZS5jcmVhdGVJbW1lZGlhdGUoMSksIE9wZXJhdG9yTm9kZS5jcmVhdGUoJz0nKSwgVmFsdWVOb2RlLmNyZWF0ZUltbWVkaWF0ZShjb21iaW5hdG9yID09PSAnYW5kJyA/IDEgOiAwKSk7XG4gICAgfVxuICAgIGxldCBub2RlID0gdG9PcGVyYXRpb25Ob2RlKGxpc3RbMF0pO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgICBub2RlID0gY29tYmluZShub2RlLCB0b09wZXJhdGlvbk5vZGUobGlzdFtpXSkpO1xuICAgIH1cbiAgICBpZiAobGlzdC5sZW5ndGggPiAxICYmIHdpdGhQYXJlbnMpIHtcbiAgICAgICAgcmV0dXJuIFBhcmVuc05vZGUuY3JlYXRlKG5vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn1cbmZ1bmN0aW9uIGlzSXNPcGVyYXRvcihvcGVyYXRvcikge1xuICAgIHJldHVybiBvcGVyYXRvciA9PT0gJ2lzJyB8fCBvcGVyYXRvciA9PT0gJ2lzIG5vdCc7XG59XG5mdW5jdGlvbiBuZWVkc0lzT3BlcmF0b3IodmFsdWUpIHtcbiAgICByZXR1cm4gaXNOdWxsKHZhbHVlKSB8fCBpc0Jvb2xlYW4odmFsdWUpO1xufVxuZnVuY3Rpb24gcGFyc2VPcGVyYXRvcihvcGVyYXRvcikge1xuICAgIGlmIChpc1N0cmluZyhvcGVyYXRvcikgJiYgT1BFUkFUT1JTLmluY2x1ZGVzKG9wZXJhdG9yKSkge1xuICAgICAgICByZXR1cm4gT3BlcmF0b3JOb2RlLmNyZWF0ZShvcGVyYXRvcik7XG4gICAgfVxuICAgIGlmIChpc09wZXJhdGlvbk5vZGVTb3VyY2Uob3BlcmF0b3IpKSB7XG4gICAgICAgIHJldHVybiBvcGVyYXRvci50b09wZXJhdGlvbk5vZGUoKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG9wZXJhdG9yICR7SlNPTi5zdHJpbmdpZnkob3BlcmF0b3IpfWApO1xufVxuZnVuY3Rpb24gdG9PcGVyYXRpb25Ob2RlKG5vZGVPclNvdXJjZSkge1xuICAgIHJldHVybiBpc09wZXJhdGlvbk5vZGVTb3VyY2Uobm9kZU9yU291cmNlKVxuICAgICAgICA/IG5vZGVPclNvdXJjZS50b09wZXJhdGlvbk5vZGUoKVxuICAgICAgICA6IG5vZGVPclNvdXJjZTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vYmluYXJ5LW9wZXJhdGlvbi1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEJpbmFyeU9wZXJhdGlvbk5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0JpbmFyeU9wZXJhdGlvbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGxlZnRPcGVyYW5kLCBvcGVyYXRvciwgcmlnaHRPcGVyYW5kKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0JpbmFyeU9wZXJhdGlvbk5vZGUnLFxuICAgICAgICAgICAgbGVmdE9wZXJhbmQsXG4gICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgIHJpZ2h0T3BlcmFuZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vcGVyYXRvci1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplLCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjb25zdCBDT01QQVJJU09OX09QRVJBVE9SUyA9IFtcbiAgICAnPScsXG4gICAgJz09JyxcbiAgICAnIT0nLFxuICAgICc8PicsXG4gICAgJz4nLFxuICAgICc+PScsXG4gICAgJzwnLFxuICAgICc8PScsXG4gICAgJ2luJyxcbiAgICAnbm90IGluJyxcbiAgICAnaXMnLFxuICAgICdpcyBub3QnLFxuICAgICdsaWtlJyxcbiAgICAnbm90IGxpa2UnLFxuICAgICdtYXRjaCcsXG4gICAgJ2lsaWtlJyxcbiAgICAnbm90IGlsaWtlJyxcbiAgICAnQD4nLFxuICAgICc8QCcsXG4gICAgJ15AJyxcbiAgICAnJiYnLFxuICAgICc/JyxcbiAgICAnPyYnLFxuICAgICc/fCcsXG4gICAgJyE8JyxcbiAgICAnIT4nLFxuICAgICc8PT4nLFxuICAgICchficsXG4gICAgJ34nLFxuICAgICd+KicsXG4gICAgJyF+KicsXG4gICAgJ0BAJyxcbiAgICAnQEBAJyxcbiAgICAnISEnLFxuICAgICc8LT4nLFxuICAgICdyZWdleHAnLFxuICAgICdpcyBkaXN0aW5jdCBmcm9tJyxcbiAgICAnaXMgbm90IGRpc3RpbmN0IGZyb20nLFxuXTtcbmV4cG9ydCBjb25zdCBBUklUSE1FVElDX09QRVJBVE9SUyA9IFtcbiAgICAnKycsXG4gICAgJy0nLFxuICAgICcqJyxcbiAgICAnLycsXG4gICAgJyUnLFxuICAgICdeJyxcbiAgICAnJicsXG4gICAgJ3wnLFxuICAgICcjJyxcbiAgICAnPDwnLFxuICAgICc+PicsXG5dO1xuZXhwb3J0IGNvbnN0IEpTT05fT1BFUkFUT1JTID0gWyctPicsICctPj4nXTtcbmV4cG9ydCBjb25zdCBCSU5BUllfT1BFUkFUT1JTID0gW1xuICAgIC4uLkNPTVBBUklTT05fT1BFUkFUT1JTLFxuICAgIC4uLkFSSVRITUVUSUNfT1BFUkFUT1JTLFxuICAgICcmJicsXG4gICAgJ3x8Jyxcbl07XG5leHBvcnQgY29uc3QgVU5BUllfRklMVEVSX09QRVJBVE9SUyA9IFsnZXhpc3RzJywgJ25vdCBleGlzdHMnXTtcbmV4cG9ydCBjb25zdCBVTkFSWV9PUEVSQVRPUlMgPSBbJ25vdCcsICctJywgLi4uVU5BUllfRklMVEVSX09QRVJBVE9SU107XG5leHBvcnQgY29uc3QgT1BFUkFUT1JTID0gW1xuICAgIC4uLkJJTkFSWV9PUEVSQVRPUlMsXG4gICAgLi4uSlNPTl9PUEVSQVRPUlMsXG4gICAgLi4uVU5BUllfT1BFUkFUT1JTLFxuICAgICdiZXR3ZWVuJyxcbiAgICAnYmV0d2VlbiBzeW1tZXRyaWMnLFxuXTtcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBPcGVyYXRvck5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ09wZXJhdG9yTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUob3BlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnT3BlcmF0b3JOb2RlJyxcbiAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG5leHBvcnQgZnVuY3Rpb24gaXNPcGVyYXRvcihvcCkge1xuICAgIHJldHVybiBpc1N0cmluZyhvcCkgJiYgT1BFUkFUT1JTLmluY2x1ZGVzKG9wKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0JpbmFyeU9wZXJhdG9yKG9wKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKG9wKSAmJiBCSU5BUllfT1BFUkFUT1JTLmluY2x1ZGVzKG9wKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhcmlzb25PcGVyYXRvcihvcCkge1xuICAgIHJldHVybiBpc1N0cmluZyhvcCkgJiYgQ09NUEFSSVNPTl9PUEVSQVRPUlMuaW5jbHVkZXMob3ApO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJpdGhtZXRpY09wZXJhdG9yKG9wKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKG9wKSAmJiBBUklUSE1FVElDX09QRVJBVE9SUy5pbmNsdWRlcyhvcCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNKU09OT3BlcmF0b3Iob3ApIHtcbiAgICByZXR1cm4gaXNTdHJpbmcob3ApICYmIEpTT05fT1BFUkFUT1JTLmluY2x1ZGVzKG9wKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcmVmZXJlbmNlLXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IEFsaWFzTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2FsaWFzLW5vZGUuanMnO1xuaW1wb3J0IHsgQ29sdW1uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NvbHVtbi1ub2RlLmpzJztcbmltcG9ydCB7IFJlZmVyZW5jZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9yZWZlcmVuY2Utbm9kZS5qcyc7XG5pbXBvcnQgeyBUYWJsZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS90YWJsZS1ub2RlLmpzJztcbmltcG9ydCB7IGlzUmVhZG9ubHlBcnJheSwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBwYXJzZUV4cHJlc3Npb24sIGlzRXhwcmVzc2lvbk9yRmFjdG9yeSwgfSBmcm9tICcuL2V4cHJlc3Npb24tcGFyc2VyLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IGlzT3JkZXJCeURpcmVjdGlvbiwgcGFyc2VPcmRlckJ5LCB9IGZyb20gJy4vb3JkZXItYnktcGFyc2VyLmpzJztcbmltcG9ydCB7IE9wZXJhdG9yTm9kZSwgaXNKU09OT3BlcmF0b3IsIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0b3Itbm9kZS5qcyc7XG5pbXBvcnQgeyBKU09OUmVmZXJlbmNlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2pzb24tcmVmZXJlbmNlLW5vZGUuanMnO1xuaW1wb3J0IHsgSlNPTk9wZXJhdG9yQ2hhaW5Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvanNvbi1vcGVyYXRvci1jaGFpbi1ub2RlLmpzJztcbmltcG9ydCB7IEpTT05QYXRoTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2pzb24tcGF0aC1ub2RlLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNpbXBsZVJlZmVyZW5jZUV4cHJlc3Npb24oZXhwKSB7XG4gICAgaWYgKGlzU3RyaW5nKGV4cCkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nUmVmZXJlbmNlKGV4cCk7XG4gICAgfVxuICAgIHJldHVybiBleHAudG9PcGVyYXRpb25Ob2RlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uT3JMaXN0KGFyZykge1xuICAgIGlmIChpc1JlYWRvbmx5QXJyYXkoYXJnKSkge1xuICAgICAgICByZXR1cm4gYXJnLm1hcCgoaXQpID0+IHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbihpdCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb24oYXJnKV07XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbihleHApIHtcbiAgICBpZiAoaXNFeHByZXNzaW9uT3JGYWN0b3J5KGV4cCkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvbihleHApO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VTaW1wbGVSZWZlcmVuY2VFeHByZXNzaW9uKGV4cCk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VKU09OUmVmZXJlbmNlKHJlZiwgb3ApIHtcbiAgICBjb25zdCByZWZlcmVuY2VOb2RlID0gcGFyc2VTdHJpbmdSZWZlcmVuY2UocmVmKTtcbiAgICBpZiAoaXNKU09OT3BlcmF0b3Iob3ApKSB7XG4gICAgICAgIHJldHVybiBKU09OUmVmZXJlbmNlTm9kZS5jcmVhdGUocmVmZXJlbmNlTm9kZSwgSlNPTk9wZXJhdG9yQ2hhaW5Ob2RlLmNyZWF0ZShPcGVyYXRvck5vZGUuY3JlYXRlKG9wKSkpO1xuICAgIH1cbiAgICBjb25zdCBvcFdpdGhvdXRMYXN0Q2hhciA9IG9wLnNsaWNlKDAsIC0xKTtcbiAgICBpZiAoaXNKU09OT3BlcmF0b3Iob3BXaXRob3V0TGFzdENoYXIpKSB7XG4gICAgICAgIHJldHVybiBKU09OUmVmZXJlbmNlTm9kZS5jcmVhdGUocmVmZXJlbmNlTm9kZSwgSlNPTlBhdGhOb2RlLmNyZWF0ZShPcGVyYXRvck5vZGUuY3JlYXRlKG9wV2l0aG91dExhc3RDaGFyKSkpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgSlNPTiBvcGVyYXRvcjogJHtvcH1gKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cmluZ1JlZmVyZW5jZShyZWYpIHtcbiAgICBjb25zdCBDT0xVTU5fU0VQQVJBVE9SID0gJy4nO1xuICAgIGlmICghcmVmLmluY2x1ZGVzKENPTFVNTl9TRVBBUkFUT1IpKSB7XG4gICAgICAgIHJldHVybiBSZWZlcmVuY2VOb2RlLmNyZWF0ZShDb2x1bW5Ob2RlLmNyZWF0ZShyZWYpKTtcbiAgICB9XG4gICAgY29uc3QgcGFydHMgPSByZWYuc3BsaXQoQ09MVU1OX1NFUEFSQVRPUikubWFwKHRyaW0pO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nUmVmZXJlbmNlV2l0aFRhYmxlQW5kU2NoZW1hKHBhcnRzKTtcbiAgICB9XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmdSZWZlcmVuY2VXaXRoVGFibGUocGFydHMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgY29sdW1uIHJlZmVyZW5jZSAke3JlZn1gKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFsaWFzZWRTdHJpbmdSZWZlcmVuY2UocmVmKSB7XG4gICAgY29uc3QgQUxJQVNfU0VQQVJBVE9SID0gJyBhcyAnO1xuICAgIGlmIChyZWYuaW5jbHVkZXMoQUxJQVNfU0VQQVJBVE9SKSkge1xuICAgICAgICBjb25zdCBbY29sdW1uUmVmLCBhbGlhc10gPSByZWYuc3BsaXQoQUxJQVNfU0VQQVJBVE9SKS5tYXAodHJpbSk7XG4gICAgICAgIHJldHVybiBBbGlhc05vZGUuY3JlYXRlKHBhcnNlU3RyaW5nUmVmZXJlbmNlKGNvbHVtblJlZiksIElkZW50aWZpZXJOb2RlLmNyZWF0ZShhbGlhcykpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nUmVmZXJlbmNlKHJlZik7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29sdW1uTmFtZShjb2x1bW4pIHtcbiAgICByZXR1cm4gQ29sdW1uTm9kZS5jcmVhdGUoY29sdW1uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGVyZWRDb2x1bW5OYW1lKGNvbHVtbikge1xuICAgIGNvbnN0IE9SREVSX1NFUEFSQVRPUiA9ICcgJztcbiAgICBpZiAoY29sdW1uLmluY2x1ZGVzKE9SREVSX1NFUEFSQVRPUikpIHtcbiAgICAgICAgY29uc3QgW2NvbHVtbk5hbWUsIG9yZGVyXSA9IGNvbHVtbi5zcGxpdChPUkRFUl9TRVBBUkFUT1IpLm1hcCh0cmltKTtcbiAgICAgICAgaWYgKCFpc09yZGVyQnlEaXJlY3Rpb24ob3JkZXIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgb3JkZXIgZGlyZWN0aW9uIFwiJHtvcmRlcn1cIiBuZXh0IHRvIFwiJHtjb2x1bW5OYW1lfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlT3JkZXJCeShbY29sdW1uTmFtZSwgb3JkZXJdKVswXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBwYXJzZUNvbHVtbk5hbWUoY29sdW1uKTtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZVN0cmluZ1JlZmVyZW5jZVdpdGhUYWJsZUFuZFNjaGVtYShwYXJ0cykge1xuICAgIGNvbnN0IFtzY2hlbWEsIHRhYmxlLCBjb2x1bW5dID0gcGFydHM7XG4gICAgcmV0dXJuIFJlZmVyZW5jZU5vZGUuY3JlYXRlKENvbHVtbk5vZGUuY3JlYXRlKGNvbHVtbiksIFRhYmxlTm9kZS5jcmVhdGVXaXRoU2NoZW1hKHNjaGVtYSwgdGFibGUpKTtcbn1cbmZ1bmN0aW9uIHBhcnNlU3RyaW5nUmVmZXJlbmNlV2l0aFRhYmxlKHBhcnRzKSB7XG4gICAgY29uc3QgW3RhYmxlLCBjb2x1bW5dID0gcGFydHM7XG4gICAgcmV0dXJuIFJlZmVyZW5jZU5vZGUuY3JlYXRlKENvbHVtbk5vZGUuY3JlYXRlKGNvbHVtbiksIFRhYmxlTm9kZS5jcmVhdGUodGFibGUpKTtcbn1cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gICAgcmV0dXJuIHN0ci50cmltKCk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NvbHVtbi1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL2lkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ29sdW1uTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnQ29sdW1uTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0NvbHVtbk5vZGUnLFxuICAgICAgICAgICAgY29sdW1uOiBJZGVudGlmaWVyTm9kZS5jcmVhdGUoY29sdW1uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9yZWZlcmVuY2Utbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IFNlbGVjdEFsbE5vZGUgfSBmcm9tICcuL3NlbGVjdC1hbGwtbm9kZS5qcyc7XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUmVmZXJlbmNlTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnUmVmZXJlbmNlTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoY29sdW1uLCB0YWJsZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdSZWZlcmVuY2VOb2RlJyxcbiAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNyZWF0ZVNlbGVjdEFsbCh0YWJsZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdSZWZlcmVuY2VOb2RlJyxcbiAgICAgICAgICAgIHRhYmxlLFxuICAgICAgICAgICAgY29sdW1uOiBTZWxlY3RBbGxOb2RlLmNyZWF0ZSgpLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3NlbGVjdC1hbGwtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBTZWxlY3RBbGxOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdTZWxlY3RBbGxOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnU2VsZWN0QWxsTm9kZScsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vb3JkZXItYnktcGFyc2VyLmQudHNcIiAvPlxuaW1wb3J0IHsgaXNEeW5hbWljUmVmZXJlbmNlQnVpbGRlciwgfSBmcm9tICcuLi9keW5hbWljL2R5bmFtaWMtcmVmZXJlbmNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgaXNFeHByZXNzaW9uIH0gZnJvbSAnLi4vZXhwcmVzc2lvbi9leHByZXNzaW9uLmpzJztcbmltcG9ydCB7IE9yZGVyQnlJdGVtTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29yZGVyLWJ5LWl0ZW0tbm9kZS5qcyc7XG5pbXBvcnQgeyBSYXdOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcmF3LW5vZGUuanMnO1xuaW1wb3J0IHsgT3JkZXJCeUl0ZW1CdWlsZGVyIH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci9vcmRlci1ieS1pdGVtLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgbG9nT25jZSB9IGZyb20gJy4uL3V0aWwvbG9nLW9uY2UuanMnO1xuaW1wb3J0IHsgaXNFeHByZXNzaW9uT3JGYWN0b3J5LCBwYXJzZUV4cHJlc3Npb24sIH0gZnJvbSAnLi9leHByZXNzaW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVN0cmluZ1JlZmVyZW5jZSwgfSBmcm9tICcuL3JlZmVyZW5jZS1wYXJzZXIuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzT3JkZXJCeURpcmVjdGlvbih0aGluZykge1xuICAgIHJldHVybiB0aGluZyA9PT0gJ2FzYycgfHwgdGhpbmcgPT09ICdkZXNjJztcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGVyQnkoYXJncykge1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICByZXR1cm4gW3BhcnNlT3JkZXJCeUl0ZW0oYXJnc1swXSwgYXJnc1sxXSldO1xuICAgIH1cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgW29yZGVyQnldID0gYXJncztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3JkZXJCeSkpIHtcbiAgICAgICAgICAgIGxvZ09uY2UoJ29yZGVyQnkoYXJyYXkpIGlzIGRlcHJlY2F0ZWQsIHVzZSBtdWx0aXBsZSBvcmRlckJ5IGNhbGxzIGluc3RlYWQuJyk7XG4gICAgICAgICAgICByZXR1cm4gb3JkZXJCeS5tYXAoKGl0ZW0pID0+IHBhcnNlT3JkZXJCeUl0ZW0oaXRlbSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcGFyc2VPcmRlckJ5SXRlbShvcmRlckJ5KV07XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIGF0IG9yZGVyIGJ5ISBleHBlY3RlZCAxLTIsIHJlY2VpdmVkICR7YXJncy5sZW5ndGh9YCk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRlckJ5SXRlbShleHByLCBtb2RpZmllcnMpIHtcbiAgICBjb25zdCBwYXJzZWRSZWYgPSBwYXJzZU9yZGVyQnlFeHByZXNzaW9uKGV4cHIpO1xuICAgIGlmIChPcmRlckJ5SXRlbU5vZGUuaXMocGFyc2VkUmVmKSkge1xuICAgICAgICBpZiAobW9kaWZpZXJzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzcGVjaWZ5IGRpcmVjdGlvbiB0d2ljZSEnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkUmVmO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VPcmRlckJ5V2l0aE1vZGlmaWVycyhwYXJzZWRSZWYsIG1vZGlmaWVycyk7XG59XG5mdW5jdGlvbiBwYXJzZU9yZGVyQnlFeHByZXNzaW9uKGV4cHIpIHtcbiAgICBpZiAoaXNFeHByZXNzaW9uT3JGYWN0b3J5KGV4cHIpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb24oZXhwcik7XG4gICAgfVxuICAgIGlmIChpc0R5bmFtaWNSZWZlcmVuY2VCdWlsZGVyKGV4cHIpKSB7XG4gICAgICAgIHJldHVybiBleHByLnRvT3BlcmF0aW9uTm9kZSgpO1xuICAgIH1cbiAgICBjb25zdCBbcmVmLCBkaXJlY3Rpb25dID0gZXhwci5zcGxpdCgnICcpO1xuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgICAgbG9nT25jZShcImBvcmRlckJ5KCdjb2x1bW4gYXNjJylgIGlzIGRlcHJlY2F0ZWQuIFVzZSBgb3JkZXJCeSgnY29sdW1uJywgJ2FzYycpYCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlT3JkZXJCeVdpdGhNb2RpZmllcnMocGFyc2VTdHJpbmdSZWZlcmVuY2UocmVmKSwgZGlyZWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlU3RyaW5nUmVmZXJlbmNlKGV4cHIpO1xufVxuZnVuY3Rpb24gcGFyc2VPcmRlckJ5V2l0aE1vZGlmaWVycyhleHByLCBtb2RpZmllcnMpIHtcbiAgICBpZiAodHlwZW9mIG1vZGlmaWVycyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKCFpc09yZGVyQnlEaXJlY3Rpb24obW9kaWZpZXJzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9yZGVyIGJ5IGRpcmVjdGlvbjogJHttb2RpZmllcnN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9yZGVyQnlJdGVtTm9kZS5jcmVhdGUoZXhwciwgUmF3Tm9kZS5jcmVhdGVXaXRoU3FsKG1vZGlmaWVycykpO1xuICAgIH1cbiAgICBpZiAoaXNFeHByZXNzaW9uKG1vZGlmaWVycykpIHtcbiAgICAgICAgbG9nT25jZShcImBvcmRlckJ5KC4uLiwgZXhwcilgIGlzIGRlcHJlY2F0ZWQuIFVzZSBgb3JkZXJCeSguLi4sICdhc2MnKWAgb3IgYG9yZGVyQnkoLi4uLCAob2IpID0+IC4uLilgIGluc3RlYWQuXCIpO1xuICAgICAgICByZXR1cm4gT3JkZXJCeUl0ZW1Ob2RlLmNyZWF0ZShleHByLCBtb2RpZmllcnMudG9PcGVyYXRpb25Ob2RlKCkpO1xuICAgIH1cbiAgICBjb25zdCBub2RlID0gT3JkZXJCeUl0ZW1Ob2RlLmNyZWF0ZShleHByKTtcbiAgICBpZiAoIW1vZGlmaWVycykge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZGlmaWVycyhuZXcgT3JkZXJCeUl0ZW1CdWlsZGVyKHsgbm9kZSB9KSkudG9PcGVyYXRpb25Ob2RlKCk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2R5bmFtaWMtcmVmZXJlbmNlLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBpc09wZXJhdGlvbk5vZGVTb3VyY2UsIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmltcG9ydCB7IHBhcnNlU2ltcGxlUmVmZXJlbmNlRXhwcmVzc2lvbiB9IGZyb20gJy4uL3BhcnNlci9yZWZlcmVuY2UtcGFyc2VyLmpzJztcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBEeW5hbWljUmVmZXJlbmNlQnVpbGRlciB7XG4gICAgI2R5bmFtaWNSZWZlcmVuY2U7XG4gICAgZ2V0IGR5bmFtaWNSZWZlcmVuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNkeW5hbWljUmVmZXJlbmNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqXG4gICAgICogVGhpcyBuZWVkcyB0byBiZSBoZXJlIGp1c3Qgc28gdGhhdCB0aGUgdHlwaW5ncyB3b3JrLiBXaXRob3V0IHRoaXNcbiAgICAgKiB0aGUgZ2VuZXJhdGVkIC5kLnRzIGZpbGUgY29udGFpbnMgbm8gcmVmZXJlbmNlIHRvIHRoZSB0eXBlIHBhcmFtIFJcbiAgICAgKiB3aGljaCBjYXVzZXMgdGhpcyB0eXBlIHRvIGJlIGVxdWFsIHRvIER5bmFtaWNSZWZlcmVuY2VCdWlsZGVyIHdpdGhcbiAgICAgKiBhbnkgUi5cbiAgICAgKi9cbiAgICBnZXQgcmVmVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3RydWN0b3IocmVmZXJlbmNlKSB7XG4gICAgICAgIHRoaXMuI2R5bmFtaWNSZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlU2ltcGxlUmVmZXJlbmNlRXhwcmVzc2lvbih0aGlzLiNkeW5hbWljUmVmZXJlbmNlKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaXNEeW5hbWljUmVmZXJlbmNlQnVpbGRlcihvYmopIHtcbiAgICByZXR1cm4gKGlzT2JqZWN0KG9iaikgJiZcbiAgICAgICAgaXNPcGVyYXRpb25Ob2RlU291cmNlKG9iaikgJiZcbiAgICAgICAgaXNTdHJpbmcob2JqLmR5bmFtaWNSZWZlcmVuY2UpKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vb3JkZXItYnktaXRlbS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9yZGVyQnlJdGVtTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnT3JkZXJCeUl0ZW1Ob2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShvcmRlckJ5LCBkaXJlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnT3JkZXJCeUl0ZW1Ob2RlJyxcbiAgICAgICAgICAgIG9yZGVyQnksXG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoKG5vZGUsIHByb3BzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3Jhdy1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFJhd05vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1Jhd05vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHNxbEZyYWdtZW50cywgcGFyYW1ldGVycykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdSYXdOb2RlJyxcbiAgICAgICAgICAgIHNxbEZyYWdtZW50czogZnJlZXplKHNxbEZyYWdtZW50cyksXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiBmcmVlemUocGFyYW1ldGVycyksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY3JlYXRlV2l0aFNxbChzcWwpIHtcbiAgICAgICAgcmV0dXJuIFJhd05vZGUuY3JlYXRlKFtzcWxdLCBbXSk7XG4gICAgfSxcbiAgICBjcmVhdGVXaXRoQ2hpbGQoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIFJhd05vZGUuY3JlYXRlKFsnJywgJyddLCBbY2hpbGRdKTtcbiAgICB9LFxuICAgIGNyZWF0ZVdpdGhDaGlsZHJlbihjaGlsZHJlbikge1xuICAgICAgICByZXR1cm4gUmF3Tm9kZS5jcmVhdGUobmV3IEFycmF5KGNoaWxkcmVuLmxlbmd0aCArIDEpLmZpbGwoJycpLCBjaGlsZHJlbik7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vcmRlci1ieS1pdGVtLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBDb2xsYXRlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NvbGxhdGUtbm9kZS5qcyc7XG5pbXBvcnQgeyBPcmRlckJ5SXRlbU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vcmRlci1ieS1pdGVtLW5vZGUuanMnO1xuaW1wb3J0IHsgUmF3Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3Jhdy1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBPcmRlckJ5SXRlbUJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYGRlc2NgIHRvIHRoZSBgb3JkZXIgYnlgIGl0ZW0uXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIGFzY30gZm9yIHRoZSBvcHBvc2l0ZS5cbiAgICAgKi9cbiAgICBkZXNjKCkge1xuICAgICAgICByZXR1cm4gbmV3IE9yZGVyQnlJdGVtQnVpbGRlcih7XG4gICAgICAgICAgICBub2RlOiBPcmRlckJ5SXRlbU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IFJhd05vZGUuY3JlYXRlV2l0aFNxbCgnZGVzYycpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGBhc2NgIHRvIHRoZSBgb3JkZXIgYnlgIGl0ZW0uXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIGRlc2N9IGZvciB0aGUgb3Bwb3NpdGUuXG4gICAgICovXG4gICAgYXNjKCkge1xuICAgICAgICByZXR1cm4gbmV3IE9yZGVyQnlJdGVtQnVpbGRlcih7XG4gICAgICAgICAgICBub2RlOiBPcmRlckJ5SXRlbU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb246IFJhd05vZGUuY3JlYXRlV2l0aFNxbCgnYXNjJyksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYG51bGxzIGxhc3RgIHRvIHRoZSBgb3JkZXIgYnlgIGl0ZW0uXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHNvbWUgZGlhbGVjdHMgbGlrZSBQb3N0Z3JlU1FMIGFuZCBTUUxpdGUuXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIG51bGxzRmlyc3R9IGZvciB0aGUgb3Bwb3NpdGUuXG4gICAgICovXG4gICAgbnVsbHNMYXN0KCkge1xuICAgICAgICByZXR1cm4gbmV3IE9yZGVyQnlJdGVtQnVpbGRlcih7XG4gICAgICAgICAgICBub2RlOiBPcmRlckJ5SXRlbU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHsgbnVsbHM6ICdsYXN0JyB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYG51bGxzIGZpcnN0YCB0byB0aGUgYG9yZGVyIGJ5YCBpdGVtLlxuICAgICAqXG4gICAgICogVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIGRpYWxlY3RzIGxpa2UgUG9zdGdyZVNRTCBhbmQgU1FMaXRlLlxuICAgICAqXG4gICAgICogU2VlIHtAbGluayBudWxsc0xhc3R9IGZvciB0aGUgb3Bwb3NpdGUuXG4gICAgICovXG4gICAgbnVsbHNGaXJzdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPcmRlckJ5SXRlbUJ1aWxkZXIoe1xuICAgICAgICAgICAgbm9kZTogT3JkZXJCeUl0ZW1Ob2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7IG51bGxzOiAnZmlyc3QnIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBgY29sbGF0ZSA8Y29sbGF0aW9uTmFtZT5gIHRvIHRoZSBgb3JkZXIgYnlgIGl0ZW0uXG4gICAgICovXG4gICAgY29sbGF0ZShjb2xsYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPcmRlckJ5SXRlbUJ1aWxkZXIoe1xuICAgICAgICAgICAgbm9kZTogT3JkZXJCeUl0ZW1Ob2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgY29sbGF0aW9uOiBDb2xsYXRlTm9kZS5jcmVhdGUoY29sbGF0aW9uKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMubm9kZTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NvbGxhdGUtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi9pZGVudGlmaWVyLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENvbGxhdGVOb2RlID0ge1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0NvbGxhdGVOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShjb2xsYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQ29sbGF0ZU5vZGUnLFxuICAgICAgICAgICAgY29sbGF0aW9uOiBJZGVudGlmaWVyTm9kZS5jcmVhdGUoY29sbGF0aW9uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn07XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2xvZy1vbmNlLmQudHNcIiAvPlxuY29uc3QgTE9HR0VEX01FU1NBR0VTID0gbmV3IFNldCgpO1xuLyoqXG4gKiBVc2UgZm9yIHN5c3RlbS1sZXZlbCBsb2dnaW5nLCBzdWNoIGFzIGRlcHJlY2F0aW9uIG1lc3NhZ2VzLlxuICogTG9ncyBhIG1lc3NhZ2UgYW5kIGVuc3VyZXMgaXQgd29uJ3QgYmUgbG9nZ2VkIGFnYWluLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9nT25jZShtZXNzYWdlKSB7XG4gICAgaWYgKExPR0dFRF9NRVNTQUdFUy5oYXMobWVzc2FnZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBMT0dHRURfTUVTU0FHRVMuYWRkKG1lc3NhZ2UpO1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9qc29uLXJlZmVyZW5jZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEpTT05SZWZlcmVuY2VOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdKU09OUmVmZXJlbmNlTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUocmVmZXJlbmNlLCB0cmF2ZXJzYWwpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnSlNPTlJlZmVyZW5jZU5vZGUnLFxuICAgICAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICAgICAgdHJhdmVyc2FsLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFRyYXZlcnNhbChub2RlLCB0cmF2ZXJzYWwpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgdHJhdmVyc2FsLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2pzb24tb3BlcmF0b3ItY2hhaW4tbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBKU09OT3BlcmF0b3JDaGFpbk5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0pTT05PcGVyYXRvckNoYWluTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUob3BlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnSlNPTk9wZXJhdG9yQ2hhaW5Ob2RlJyxcbiAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWVzOiBmcmVlemUoW10pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFZhbHVlKG5vZGUsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIHZhbHVlczogZnJlZXplKFsuLi5ub2RlLnZhbHVlcywgdmFsdWVdKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9qc29uLXBhdGgtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBKU09OUGF0aE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0pTT05QYXRoTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoaW5PcGVyYXRvcikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdKU09OUGF0aE5vZGUnLFxuICAgICAgICAgICAgaW5PcGVyYXRvcixcbiAgICAgICAgICAgIHBhdGhMZWdzOiBmcmVlemUoW10pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aExlZyhqc29uUGF0aE5vZGUsIHBhdGhMZWcpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5qc29uUGF0aE5vZGUsXG4gICAgICAgICAgICBwYXRoTGVnczogZnJlZXplKFsuLi5qc29uUGF0aE5vZGUucGF0aExlZ3MsIHBhdGhMZWddKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi92YWx1ZS1wYXJzZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBQcmltaXRpdmVWYWx1ZUxpc3ROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcHJpbWl0aXZlLXZhbHVlLWxpc3Qtbm9kZS5qcyc7XG5pbXBvcnQgeyBWYWx1ZUxpc3ROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvdmFsdWUtbGlzdC1ub2RlLmpzJztcbmltcG9ydCB7IFZhbHVlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3ZhbHVlLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNCb29sZWFuLCBpc051bGwsIGlzTnVtYmVyLCBpc1JlYWRvbmx5QXJyYXksIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgcGFyc2VFeHByZXNzaW9uLCBpc0V4cHJlc3Npb25PckZhY3RvcnksIH0gZnJvbSAnLi9leHByZXNzaW9uLXBhcnNlci5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VWYWx1ZUV4cHJlc3Npb25Pckxpc3QoYXJnKSB7XG4gICAgaWYgKGlzUmVhZG9ubHlBcnJheShhcmcpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZVZhbHVlRXhwcmVzc2lvbkxpc3QoYXJnKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlVmFsdWVFeHByZXNzaW9uKGFyZyk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VWYWx1ZUV4cHJlc3Npb24oZXhwKSB7XG4gICAgaWYgKGlzRXhwcmVzc2lvbk9yRmFjdG9yeShleHApKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb24oZXhwKTtcbiAgICB9XG4gICAgcmV0dXJuIFZhbHVlTm9kZS5jcmVhdGUoZXhwKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1NhZmVJbW1lZGlhdGVWYWx1ZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc051bWJlcih2YWx1ZSkgfHwgaXNCb29sZWFuKHZhbHVlKSB8fCBpc051bGwodmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2FmZUltbWVkaWF0ZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKCFpc1NhZmVJbW1lZGlhdGVWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnNhZmUgaW1tZWRpYXRlIHZhbHVlICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgIH1cbiAgICByZXR1cm4gVmFsdWVOb2RlLmNyZWF0ZUltbWVkaWF0ZSh2YWx1ZSk7XG59XG5mdW5jdGlvbiBwYXJzZVZhbHVlRXhwcmVzc2lvbkxpc3QoYXJnKSB7XG4gICAgaWYgKGFyZy5zb21lKGlzRXhwcmVzc2lvbk9yRmFjdG9yeSkpIHtcbiAgICAgICAgcmV0dXJuIFZhbHVlTGlzdE5vZGUuY3JlYXRlKGFyZy5tYXAoKGl0KSA9PiBwYXJzZVZhbHVlRXhwcmVzc2lvbihpdCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIFByaW1pdGl2ZVZhbHVlTGlzdE5vZGUuY3JlYXRlKGFyZyk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3ByaW1pdGl2ZS12YWx1ZS1saXN0LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUHJpbWl0aXZlVmFsdWVMaXN0Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnUHJpbWl0aXZlVmFsdWVMaXN0Tm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUodmFsdWVzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1ByaW1pdGl2ZVZhbHVlTGlzdE5vZGUnLFxuICAgICAgICAgICAgdmFsdWVzOiBmcmVlemUoWy4uLnZhbHVlc10pLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3ZhbHVlLWxpc3Qtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBWYWx1ZUxpc3ROb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdWYWx1ZUxpc3ROb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZSh2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnVmFsdWVMaXN0Tm9kZScsXG4gICAgICAgICAgICB2YWx1ZXM6IGZyZWV6ZSh2YWx1ZXMpLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3ZhbHVlLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVmFsdWVOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdWYWx1ZU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1ZhbHVlTm9kZScsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjcmVhdGVJbW1lZGlhdGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnVmFsdWVOb2RlJyxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3BhcmVucy1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFBhcmVuc05vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1BhcmVuc05vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnUGFyZW5zTm9kZScsXG4gICAgICAgICAgICBub2RlLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3BhcnNlLXV0aWxzLmQudHNcIiAvPlxuaW1wb3J0IHsgSm9pbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9qb2luLW5vZGUuanMnO1xuaW1wb3J0IHsgT3Zlck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vdmVyLW5vZGUuanMnO1xuaW1wb3J0IHsgU2VsZWN0UXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvc2VsZWN0LXF1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgSm9pbkJ1aWxkZXIgfSBmcm9tICcuLi9xdWVyeS1idWlsZGVyL2pvaW4tYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBPdmVyQnVpbGRlciB9IGZyb20gJy4uL3F1ZXJ5LWJ1aWxkZXIvb3Zlci1idWlsZGVyLmpzJztcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdFF1ZXJ5QnVpbGRlciBhcyBuZXdTZWxlY3RRdWVyeUJ1aWxkZXIsIH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci9zZWxlY3QtcXVlcnktYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBRdWVyeUNyZWF0b3IgfSBmcm9tICcuLi9xdWVyeS1jcmVhdG9yLmpzJztcbmltcG9ydCB7IE5PT1BfUVVFUllfRVhFQ1VUT1IgfSBmcm9tICcuLi9xdWVyeS1leGVjdXRvci9ub29wLXF1ZXJ5LWV4ZWN1dG9yLmpzJztcbmltcG9ydCB7IGNyZWF0ZVF1ZXJ5SWQgfSBmcm9tICcuLi91dGlsL3F1ZXJ5LWlkLmpzJztcbmltcG9ydCB7IHBhcnNlVGFibGVFeHByZXNzaW9uLCBwYXJzZVRhYmxlRXhwcmVzc2lvbk9yTGlzdCwgfSBmcm9tICcuL3RhYmxlLXBhcnNlci5qcyc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VsZWN0UXVlcnlCdWlsZGVyKCkge1xuICAgIHJldHVybiBuZXdTZWxlY3RRdWVyeUJ1aWxkZXIoe1xuICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgIGV4ZWN1dG9yOiBOT09QX1FVRVJZX0VYRUNVVE9SLFxuICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jcmVhdGVGcm9tKHBhcnNlVGFibGVFeHByZXNzaW9uT3JMaXN0KFtdKSksXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUXVlcnlDcmVhdG9yKCkge1xuICAgIHJldHVybiBuZXcgUXVlcnlDcmVhdG9yKHtcbiAgICAgICAgZXhlY3V0b3I6IE5PT1BfUVVFUllfRVhFQ1VUT1IsXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSm9pbkJ1aWxkZXIoam9pblR5cGUsIHRhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBKb2luQnVpbGRlcih7XG4gICAgICAgIGpvaW5Ob2RlOiBKb2luTm9kZS5jcmVhdGUoam9pblR5cGUsIHBhcnNlVGFibGVFeHByZXNzaW9uKHRhYmxlKSksXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT3ZlckJ1aWxkZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBPdmVyQnVpbGRlcih7XG4gICAgICAgIG92ZXJOb2RlOiBPdmVyTm9kZS5jcmVhdGUoKSxcbiAgICB9KTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vb3Zlci1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgT3JkZXJCeU5vZGUgfSBmcm9tICcuL29yZGVyLWJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgUGFydGl0aW9uQnlOb2RlIH0gZnJvbSAnLi9wYXJ0aXRpb24tYnktbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgT3Zlck5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ092ZXJOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnT3Zlck5vZGUnLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aE9yZGVyQnlJdGVtcyhvdmVyTm9kZSwgaXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5vdmVyTm9kZSxcbiAgICAgICAgICAgIG9yZGVyQnk6IG92ZXJOb2RlLm9yZGVyQnlcbiAgICAgICAgICAgICAgICA/IE9yZGVyQnlOb2RlLmNsb25lV2l0aEl0ZW1zKG92ZXJOb2RlLm9yZGVyQnksIGl0ZW1zKVxuICAgICAgICAgICAgICAgIDogT3JkZXJCeU5vZGUuY3JlYXRlKGl0ZW1zKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhQYXJ0aXRpb25CeUl0ZW1zKG92ZXJOb2RlLCBpdGVtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm92ZXJOb2RlLFxuICAgICAgICAgICAgcGFydGl0aW9uQnk6IG92ZXJOb2RlLnBhcnRpdGlvbkJ5XG4gICAgICAgICAgICAgICAgPyBQYXJ0aXRpb25CeU5vZGUuY2xvbmVXaXRoSXRlbXMob3Zlck5vZGUucGFydGl0aW9uQnksIGl0ZW1zKVxuICAgICAgICAgICAgICAgIDogUGFydGl0aW9uQnlOb2RlLmNyZWF0ZShpdGVtcyksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vb3JkZXItYnktbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBPcmRlckJ5Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnT3JkZXJCeU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGl0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ09yZGVyQnlOb2RlJyxcbiAgICAgICAgICAgIGl0ZW1zOiBmcmVlemUoWy4uLml0ZW1zXSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoSXRlbXMob3JkZXJCeSwgaXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5vcmRlckJ5LFxuICAgICAgICAgICAgaXRlbXM6IGZyZWV6ZShbLi4ub3JkZXJCeS5pdGVtcywgLi4uaXRlbXNdKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9wYXJ0aXRpb24tYnktbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQYXJ0aXRpb25CeU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1BhcnRpdGlvbkJ5Tm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoaXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnUGFydGl0aW9uQnlOb2RlJyxcbiAgICAgICAgICAgIGl0ZW1zOiBmcmVlemUoaXRlbXMpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aEl0ZW1zKHBhcnRpdGlvbkJ5LCBpdGVtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLnBhcnRpdGlvbkJ5LFxuICAgICAgICAgICAgaXRlbXM6IGZyZWV6ZShbLi4ucGFydGl0aW9uQnkuaXRlbXMsIC4uLml0ZW1zXSksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vc2VsZWN0LXF1ZXJ5LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBGcm9tTm9kZSB9IGZyb20gJy4vZnJvbS1ub2RlLmpzJztcbmltcG9ydCB7IEdyb3VwQnlOb2RlIH0gZnJvbSAnLi9ncm91cC1ieS1ub2RlLmpzJztcbmltcG9ydCB7IEhhdmluZ05vZGUgfSBmcm9tICcuL2hhdmluZy1ub2RlLmpzJztcbmltcG9ydCB7IFF1ZXJ5Tm9kZSB9IGZyb20gJy4vcXVlcnktbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgU2VsZWN0UXVlcnlOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdTZWxlY3RRdWVyeU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHdpdGhOb2RlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1NlbGVjdFF1ZXJ5Tm9kZScsXG4gICAgICAgICAgICAuLi4od2l0aE5vZGUgJiYgeyB3aXRoOiB3aXRoTm9kZSB9KSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjcmVhdGVGcm9tKGZyb21JdGVtcywgd2l0aE5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnU2VsZWN0UXVlcnlOb2RlJyxcbiAgICAgICAgICAgIGZyb206IEZyb21Ob2RlLmNyZWF0ZShmcm9tSXRlbXMpLFxuICAgICAgICAgICAgLi4uKHdpdGhOb2RlICYmIHsgd2l0aDogd2l0aE5vZGUgfSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoU2VsZWN0aW9ucyhzZWxlY3QsIHNlbGVjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5zZWxlY3QsXG4gICAgICAgICAgICBzZWxlY3Rpb25zOiBzZWxlY3Quc2VsZWN0aW9uc1xuICAgICAgICAgICAgICAgID8gZnJlZXplKFsuLi5zZWxlY3Quc2VsZWN0aW9ucywgLi4uc2VsZWN0aW9uc10pXG4gICAgICAgICAgICAgICAgOiBmcmVlemUoc2VsZWN0aW9ucyksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoRGlzdGluY3RPbihzZWxlY3QsIGV4cHJlc3Npb25zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uc2VsZWN0LFxuICAgICAgICAgICAgZGlzdGluY3RPbjogc2VsZWN0LmRpc3RpbmN0T25cbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbLi4uc2VsZWN0LmRpc3RpbmN0T24sIC4uLmV4cHJlc3Npb25zXSlcbiAgICAgICAgICAgICAgICA6IGZyZWV6ZShleHByZXNzaW9ucyksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoRnJvbnRNb2RpZmllcihzZWxlY3QsIG1vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uc2VsZWN0LFxuICAgICAgICAgICAgZnJvbnRNb2RpZmllcnM6IHNlbGVjdC5mcm9udE1vZGlmaWVyc1xuICAgICAgICAgICAgICAgID8gZnJlZXplKFsuLi5zZWxlY3QuZnJvbnRNb2RpZmllcnMsIG1vZGlmaWVyXSlcbiAgICAgICAgICAgICAgICA6IGZyZWV6ZShbbW9kaWZpZXJdKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICAvLyBUT0RPOiByZW1vdmUgaW4gdjAuMjlcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYFF1ZXJ5Tm9kZS5jbG9uZVdpdGhvdXRPcmRlckJ5YCBpbnN0ZWFkLlxuICAgICAqL1xuICAgIGNsb25lV2l0aE9yZGVyQnlJdGVtczogKG5vZGUsIGl0ZW1zKSA9PiBRdWVyeU5vZGUuY2xvbmVXaXRoT3JkZXJCeUl0ZW1zKG5vZGUsIGl0ZW1zKSxcbiAgICBjbG9uZVdpdGhHcm91cEJ5SXRlbXMoc2VsZWN0Tm9kZSwgaXRlbXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5zZWxlY3ROb2RlLFxuICAgICAgICAgICAgZ3JvdXBCeTogc2VsZWN0Tm9kZS5ncm91cEJ5XG4gICAgICAgICAgICAgICAgPyBHcm91cEJ5Tm9kZS5jbG9uZVdpdGhJdGVtcyhzZWxlY3ROb2RlLmdyb3VwQnksIGl0ZW1zKVxuICAgICAgICAgICAgICAgIDogR3JvdXBCeU5vZGUuY3JlYXRlKGl0ZW1zKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhMaW1pdChzZWxlY3ROb2RlLCBsaW1pdCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLnNlbGVjdE5vZGUsXG4gICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhPZmZzZXQoc2VsZWN0Tm9kZSwgb2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uc2VsZWN0Tm9kZSxcbiAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhGZXRjaChzZWxlY3ROb2RlLCBmZXRjaCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLnNlbGVjdE5vZGUsXG4gICAgICAgICAgICBmZXRjaCxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhIYXZpbmcoc2VsZWN0Tm9kZSwgb3BlcmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uc2VsZWN0Tm9kZSxcbiAgICAgICAgICAgIGhhdmluZzogc2VsZWN0Tm9kZS5oYXZpbmdcbiAgICAgICAgICAgICAgICA/IEhhdmluZ05vZGUuY2xvbmVXaXRoT3BlcmF0aW9uKHNlbGVjdE5vZGUuaGF2aW5nLCAnQW5kJywgb3BlcmF0aW9uKVxuICAgICAgICAgICAgICAgIDogSGF2aW5nTm9kZS5jcmVhdGUob3BlcmF0aW9uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhTZXRPcGVyYXRpb25zKHNlbGVjdE5vZGUsIHNldE9wZXJhdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5zZWxlY3ROb2RlLFxuICAgICAgICAgICAgc2V0T3BlcmF0aW9uczogc2VsZWN0Tm9kZS5zZXRPcGVyYXRpb25zXG4gICAgICAgICAgICAgICAgPyBmcmVlemUoWy4uLnNlbGVjdE5vZGUuc2V0T3BlcmF0aW9ucywgLi4uc2V0T3BlcmF0aW9uc10pXG4gICAgICAgICAgICAgICAgOiBmcmVlemUoWy4uLnNldE9wZXJhdGlvbnNdKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhvdXRTZWxlY3Rpb25zKHNlbGVjdCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLnNlbGVjdCxcbiAgICAgICAgICAgIHNlbGVjdGlvbnM6IFtdLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aG91dExpbWl0KHNlbGVjdCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLnNlbGVjdCxcbiAgICAgICAgICAgIGxpbWl0OiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRob3V0T2Zmc2V0KHNlbGVjdCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLnNlbGVjdCxcbiAgICAgICAgICAgIG9mZnNldDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIC8vIFRPRE86IHJlbW92ZSBpbiB2MC4yOVxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBgUXVlcnlOb2RlLmNsb25lV2l0aG91dE9yZGVyQnlgIGluc3RlYWQuXG4gICAgICovXG4gICAgY2xvbmVXaXRob3V0T3JkZXJCeTogKG5vZGUpID0+IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhvdXRPcmRlckJ5KG5vZGUpLFxuICAgIGNsb25lV2l0aG91dEdyb3VwQnkoc2VsZWN0KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uc2VsZWN0LFxuICAgICAgICAgICAgZ3JvdXBCeTogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Zyb20tbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBGcm9tTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnRnJvbU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGZyb21zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0Zyb21Ob2RlJyxcbiAgICAgICAgICAgIGZyb21zOiBmcmVlemUoZnJvbXMpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aEZyb21zKGZyb20sIGZyb21zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uZnJvbSxcbiAgICAgICAgICAgIGZyb21zOiBmcmVlemUoWy4uLmZyb20uZnJvbXMsIC4uLmZyb21zXSksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZ3JvdXAtYnktbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBHcm91cEJ5Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnR3JvdXBCeU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGl0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0dyb3VwQnlOb2RlJyxcbiAgICAgICAgICAgIGl0ZW1zOiBmcmVlemUoaXRlbXMpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aEl0ZW1zKGdyb3VwQnksIGl0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uZ3JvdXBCeSxcbiAgICAgICAgICAgIGl0ZW1zOiBmcmVlemUoWy4uLmdyb3VwQnkuaXRlbXMsIC4uLml0ZW1zXSksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vaGF2aW5nLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBBbmROb2RlIH0gZnJvbSAnLi9hbmQtbm9kZS5qcyc7XG5pbXBvcnQgeyBPck5vZGUgfSBmcm9tICcuL29yLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEhhdmluZ05vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0hhdmluZ05vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGZpbHRlcikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdIYXZpbmdOb2RlJyxcbiAgICAgICAgICAgIGhhdmluZzogZmlsdGVyLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aE9wZXJhdGlvbihoYXZpbmdOb2RlLCBvcGVyYXRvciwgb3BlcmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uaGF2aW5nTm9kZSxcbiAgICAgICAgICAgIGhhdmluZzogb3BlcmF0b3IgPT09ICdBbmQnXG4gICAgICAgICAgICAgICAgPyBBbmROb2RlLmNyZWF0ZShoYXZpbmdOb2RlLmhhdmluZywgb3BlcmF0aW9uKVxuICAgICAgICAgICAgICAgIDogT3JOb2RlLmNyZWF0ZShoYXZpbmdOb2RlLmhhdmluZywgb3BlcmF0aW9uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9xdWVyeS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgSW5zZXJ0UXVlcnlOb2RlIH0gZnJvbSAnLi9pbnNlcnQtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBTZWxlY3RRdWVyeU5vZGUgfSBmcm9tICcuL3NlbGVjdC1xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IFVwZGF0ZVF1ZXJ5Tm9kZSB9IGZyb20gJy4vdXBkYXRlLXF1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgRGVsZXRlUXVlcnlOb2RlIH0gZnJvbSAnLi9kZWxldGUtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBXaGVyZU5vZGUgfSBmcm9tICcuL3doZXJlLW5vZGUuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgUmV0dXJuaW5nTm9kZSB9IGZyb20gJy4vcmV0dXJuaW5nLW5vZGUuanMnO1xuaW1wb3J0IHsgRXhwbGFpbk5vZGUgfSBmcm9tICcuL2V4cGxhaW4tbm9kZS5qcyc7XG5pbXBvcnQgeyBNZXJnZVF1ZXJ5Tm9kZSB9IGZyb20gJy4vbWVyZ2UtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBPdXRwdXROb2RlIH0gZnJvbSAnLi9vdXRwdXQtbm9kZS5qcyc7XG5pbXBvcnQgeyBPcmRlckJ5Tm9kZSB9IGZyb20gJy4vb3JkZXItYnktbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUXVlcnlOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiAoU2VsZWN0UXVlcnlOb2RlLmlzKG5vZGUpIHx8XG4gICAgICAgICAgICBJbnNlcnRRdWVyeU5vZGUuaXMobm9kZSkgfHxcbiAgICAgICAgICAgIFVwZGF0ZVF1ZXJ5Tm9kZS5pcyhub2RlKSB8fFxuICAgICAgICAgICAgRGVsZXRlUXVlcnlOb2RlLmlzKG5vZGUpIHx8XG4gICAgICAgICAgICBNZXJnZVF1ZXJ5Tm9kZS5pcyhub2RlKSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhFbmRNb2RpZmllcihub2RlLCBtb2RpZmllcikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICBlbmRNb2RpZmllcnM6IG5vZGUuZW5kTW9kaWZpZXJzXG4gICAgICAgICAgICAgICAgPyBmcmVlemUoWy4uLm5vZGUuZW5kTW9kaWZpZXJzLCBtb2RpZmllcl0pXG4gICAgICAgICAgICAgICAgOiBmcmVlemUoW21vZGlmaWVyXSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoV2hlcmUobm9kZSwgb3BlcmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIHdoZXJlOiBub2RlLndoZXJlXG4gICAgICAgICAgICAgICAgPyBXaGVyZU5vZGUuY2xvbmVXaXRoT3BlcmF0aW9uKG5vZGUud2hlcmUsICdBbmQnLCBvcGVyYXRpb24pXG4gICAgICAgICAgICAgICAgOiBXaGVyZU5vZGUuY3JlYXRlKG9wZXJhdGlvbiksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoSm9pbihub2RlLCBqb2luKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIGpvaW5zOiBub2RlLmpvaW5zID8gZnJlZXplKFsuLi5ub2RlLmpvaW5zLCBqb2luXSkgOiBmcmVlemUoW2pvaW5dKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhSZXR1cm5pbmcobm9kZSwgc2VsZWN0aW9ucykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICByZXR1cm5pbmc6IG5vZGUucmV0dXJuaW5nXG4gICAgICAgICAgICAgICAgPyBSZXR1cm5pbmdOb2RlLmNsb25lV2l0aFNlbGVjdGlvbnMobm9kZS5yZXR1cm5pbmcsIHNlbGVjdGlvbnMpXG4gICAgICAgICAgICAgICAgOiBSZXR1cm5pbmdOb2RlLmNyZWF0ZShzZWxlY3Rpb25zKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhvdXRSZXR1cm5pbmcobm9kZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICByZXR1cm5pbmc6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhvdXRXaGVyZShub2RlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIHdoZXJlOiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoRXhwbGFpbihub2RlLCBmb3JtYXQsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgZXhwbGFpbjogRXhwbGFpbk5vZGUuY3JlYXRlKGZvcm1hdCwgb3B0aW9ucz8udG9PcGVyYXRpb25Ob2RlKCkpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFRvcChub2RlLCB0b3ApIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgdG9wLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aE91dHB1dChub2RlLCBzZWxlY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIG91dHB1dDogbm9kZS5vdXRwdXRcbiAgICAgICAgICAgICAgICA/IE91dHB1dE5vZGUuY2xvbmVXaXRoU2VsZWN0aW9ucyhub2RlLm91dHB1dCwgc2VsZWN0aW9ucylcbiAgICAgICAgICAgICAgICA6IE91dHB1dE5vZGUuY3JlYXRlKHNlbGVjdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aE9yZGVyQnlJdGVtcyhub2RlLCBpdGVtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICBvcmRlckJ5OiBub2RlLm9yZGVyQnlcbiAgICAgICAgICAgICAgICA/IE9yZGVyQnlOb2RlLmNsb25lV2l0aEl0ZW1zKG5vZGUub3JkZXJCeSwgaXRlbXMpXG4gICAgICAgICAgICAgICAgOiBPcmRlckJ5Tm9kZS5jcmVhdGUoaXRlbXMpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aG91dE9yZGVyQnkobm9kZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICBvcmRlckJ5OiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vaW5zZXJ0LXF1ZXJ5LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgSW5zZXJ0UXVlcnlOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdJbnNlcnRRdWVyeU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGludG8sIHdpdGhOb2RlLCByZXBsYWNlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0luc2VydFF1ZXJ5Tm9kZScsXG4gICAgICAgICAgICBpbnRvLFxuICAgICAgICAgICAgLi4uKHdpdGhOb2RlICYmIHsgd2l0aDogd2l0aE5vZGUgfSksXG4gICAgICAgICAgICByZXBsYWNlLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNyZWF0ZVdpdGhvdXRJbnRvKCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdJbnNlcnRRdWVyeU5vZGUnLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aChpbnNlcnRRdWVyeSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5pbnNlcnRRdWVyeSxcbiAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3VwZGF0ZS1xdWVyeS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgRnJvbU5vZGUgfSBmcm9tICcuL2Zyb20tbm9kZS5qcyc7XG5pbXBvcnQgeyBMaXN0Tm9kZSB9IGZyb20gJy4vbGlzdC1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBVcGRhdGVRdWVyeU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1VwZGF0ZVF1ZXJ5Tm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUodGFibGVzLCB3aXRoTm9kZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdVcGRhdGVRdWVyeU5vZGUnLFxuICAgICAgICAgICAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB1c2UgdGhlIHJhdyB0YWJsZSBub2RlIHdoZW4gdGhlcmUncyBvbmx5IG9uZSB0YWJsZVxuICAgICAgICAgICAgLy8gYW5kIGRvbid0IHJlbmFtZSB0aGUgcHJvcGVydHkgdG8gc29tZXRoaW5nIGxpa2UgYHRhYmxlc2AuXG4gICAgICAgICAgICB0YWJsZTogdGFibGVzLmxlbmd0aCA9PT0gMSA/IHRhYmxlc1swXSA6IExpc3ROb2RlLmNyZWF0ZSh0YWJsZXMpLFxuICAgICAgICAgICAgLi4uKHdpdGhOb2RlICYmIHsgd2l0aDogd2l0aE5vZGUgfSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY3JlYXRlV2l0aG91dFRhYmxlKCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdVcGRhdGVRdWVyeU5vZGUnLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aEZyb21JdGVtcyh1cGRhdGVRdWVyeSwgZnJvbUl0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4udXBkYXRlUXVlcnksXG4gICAgICAgICAgICBmcm9tOiB1cGRhdGVRdWVyeS5mcm9tXG4gICAgICAgICAgICAgICAgPyBGcm9tTm9kZS5jbG9uZVdpdGhGcm9tcyh1cGRhdGVRdWVyeS5mcm9tLCBmcm9tSXRlbXMpXG4gICAgICAgICAgICAgICAgOiBGcm9tTm9kZS5jcmVhdGUoZnJvbUl0ZW1zKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhVcGRhdGVzKHVwZGF0ZVF1ZXJ5LCB1cGRhdGVzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4udXBkYXRlUXVlcnksXG4gICAgICAgICAgICB1cGRhdGVzOiB1cGRhdGVRdWVyeS51cGRhdGVzXG4gICAgICAgICAgICAgICAgPyBmcmVlemUoWy4uLnVwZGF0ZVF1ZXJ5LnVwZGF0ZXMsIC4uLnVwZGF0ZXNdKVxuICAgICAgICAgICAgICAgIDogdXBkYXRlcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhMaW1pdCh1cGRhdGVRdWVyeSwgbGltaXQpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi51cGRhdGVRdWVyeSxcbiAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2xpc3Qtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBMaXN0Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnTGlzdE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGl0ZW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0xpc3ROb2RlJyxcbiAgICAgICAgICAgIGl0ZW1zOiBmcmVlemUoaXRlbXMpLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2RlbGV0ZS1xdWVyeS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgRnJvbU5vZGUgfSBmcm9tICcuL2Zyb20tbm9kZS5qcyc7XG5pbXBvcnQgeyBVc2luZ05vZGUgfSBmcm9tICcuL3VzaW5nLW5vZGUuanMnO1xuaW1wb3J0IHsgUXVlcnlOb2RlIH0gZnJvbSAnLi9xdWVyeS1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBEZWxldGVRdWVyeU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0RlbGV0ZVF1ZXJ5Tm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoZnJvbUl0ZW1zLCB3aXRoTm9kZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdEZWxldGVRdWVyeU5vZGUnLFxuICAgICAgICAgICAgZnJvbTogRnJvbU5vZGUuY3JlYXRlKGZyb21JdGVtcyksXG4gICAgICAgICAgICAuLi4od2l0aE5vZGUgJiYgeyB3aXRoOiB3aXRoTm9kZSB9KSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICAvLyBUT0RPOiByZW1vdmUgaW4gdjAuMjlcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYFF1ZXJ5Tm9kZS5jbG9uZVdpdGhvdXRPcmRlckJ5YCBpbnN0ZWFkLlxuICAgICAqL1xuICAgIGNsb25lV2l0aE9yZGVyQnlJdGVtczogKG5vZGUsIGl0ZW1zKSA9PiBRdWVyeU5vZGUuY2xvbmVXaXRoT3JkZXJCeUl0ZW1zKG5vZGUsIGl0ZW1zKSxcbiAgICAvLyBUT0RPOiByZW1vdmUgaW4gdjAuMjlcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYFF1ZXJ5Tm9kZS5jbG9uZVdpdGhvdXRPcmRlckJ5YCBpbnN0ZWFkLlxuICAgICAqL1xuICAgIGNsb25lV2l0aG91dE9yZGVyQnk6IChub2RlKSA9PiBRdWVyeU5vZGUuY2xvbmVXaXRob3V0T3JkZXJCeShub2RlKSxcbiAgICBjbG9uZVdpdGhMaW1pdChkZWxldGVOb2RlLCBsaW1pdCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmRlbGV0ZU5vZGUsXG4gICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhvdXRMaW1pdChkZWxldGVOb2RlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uZGVsZXRlTm9kZSxcbiAgICAgICAgICAgIGxpbWl0OiB1bmRlZmluZWQsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoVXNpbmcoZGVsZXRlTm9kZSwgdGFibGVzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uZGVsZXRlTm9kZSxcbiAgICAgICAgICAgIHVzaW5nOiBkZWxldGVOb2RlLnVzaW5nICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IFVzaW5nTm9kZS5jbG9uZVdpdGhUYWJsZXMoZGVsZXRlTm9kZS51c2luZywgdGFibGVzKVxuICAgICAgICAgICAgICAgIDogVXNpbmdOb2RlLmNyZWF0ZSh0YWJsZXMpLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3VzaW5nLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVXNpbmdOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdVc2luZ05vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHRhYmxlcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdVc2luZ05vZGUnLFxuICAgICAgICAgICAgdGFibGVzOiBmcmVlemUodGFibGVzKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhUYWJsZXModXNpbmcsIHRhYmxlcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLnVzaW5nLFxuICAgICAgICAgICAgdGFibGVzOiBmcmVlemUoWy4uLnVzaW5nLnRhYmxlcywgLi4udGFibGVzXSksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vd2hlcmUtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IEFuZE5vZGUgfSBmcm9tICcuL2FuZC1ub2RlLmpzJztcbmltcG9ydCB7IE9yTm9kZSB9IGZyb20gJy4vb3Itbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgV2hlcmVOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdXaGVyZU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGZpbHRlcikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdXaGVyZU5vZGUnLFxuICAgICAgICAgICAgd2hlcmU6IGZpbHRlcixcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhPcGVyYXRpb24od2hlcmVOb2RlLCBvcGVyYXRvciwgb3BlcmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ud2hlcmVOb2RlLFxuICAgICAgICAgICAgd2hlcmU6IG9wZXJhdG9yID09PSAnQW5kJ1xuICAgICAgICAgICAgICAgID8gQW5kTm9kZS5jcmVhdGUod2hlcmVOb2RlLndoZXJlLCBvcGVyYXRpb24pXG4gICAgICAgICAgICAgICAgOiBPck5vZGUuY3JlYXRlKHdoZXJlTm9kZS53aGVyZSwgb3BlcmF0aW9uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9yZXR1cm5pbmctbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBSZXR1cm5pbmdOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdSZXR1cm5pbmdOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShzZWxlY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1JldHVybmluZ05vZGUnLFxuICAgICAgICAgICAgc2VsZWN0aW9uczogZnJlZXplKHNlbGVjdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFNlbGVjdGlvbnMocmV0dXJuaW5nLCBzZWxlY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ucmV0dXJuaW5nLFxuICAgICAgICAgICAgc2VsZWN0aW9uczogcmV0dXJuaW5nLnNlbGVjdGlvbnNcbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbLi4ucmV0dXJuaW5nLnNlbGVjdGlvbnMsIC4uLnNlbGVjdGlvbnNdKVxuICAgICAgICAgICAgICAgIDogZnJlZXplKHNlbGVjdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2V4cGxhaW4tbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBFeHBsYWluTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnRXhwbGFpbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGZvcm1hdCwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdFeHBsYWluTm9kZScsXG4gICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL21lcmdlLXF1ZXJ5LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBXaGVuTm9kZSB9IGZyb20gJy4vd2hlbi1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBNZXJnZVF1ZXJ5Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnTWVyZ2VRdWVyeU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGludG8sIHdpdGhOb2RlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ01lcmdlUXVlcnlOb2RlJyxcbiAgICAgICAgICAgIGludG8sXG4gICAgICAgICAgICAuLi4od2l0aE5vZGUgJiYgeyB3aXRoOiB3aXRoTm9kZSB9KSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhVc2luZyhtZXJnZU5vZGUsIHVzaW5nKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubWVyZ2VOb2RlLFxuICAgICAgICAgICAgdXNpbmcsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoV2hlbihtZXJnZU5vZGUsIHdoZW4pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5tZXJnZU5vZGUsXG4gICAgICAgICAgICB3aGVuczogbWVyZ2VOb2RlLndoZW5zXG4gICAgICAgICAgICAgICAgPyBmcmVlemUoWy4uLm1lcmdlTm9kZS53aGVucywgd2hlbl0pXG4gICAgICAgICAgICAgICAgOiBmcmVlemUoW3doZW5dKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhUaGVuKG1lcmdlTm9kZSwgdGhlbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm1lcmdlTm9kZSxcbiAgICAgICAgICAgIHdoZW5zOiBtZXJnZU5vZGUud2hlbnNcbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbXG4gICAgICAgICAgICAgICAgICAgIC4uLm1lcmdlTm9kZS53aGVucy5zbGljZSgwLCAtMSksXG4gICAgICAgICAgICAgICAgICAgIFdoZW5Ob2RlLmNsb25lV2l0aFJlc3VsdChtZXJnZU5vZGUud2hlbnNbbWVyZ2VOb2RlLndoZW5zLmxlbmd0aCAtIDFdLCB0aGVuKSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3doZW4tbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBXaGVuTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnV2hlbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdXaGVuTm9kZScsXG4gICAgICAgICAgICBjb25kaXRpb24sXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoUmVzdWx0KHdoZW5Ob2RlLCByZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi53aGVuTm9kZSxcbiAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vdXRwdXQtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBPdXRwdXROb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdPdXRwdXROb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShzZWxlY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ091dHB1dE5vZGUnLFxuICAgICAgICAgICAgc2VsZWN0aW9uczogZnJlZXplKHNlbGVjdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFNlbGVjdGlvbnMob3V0cHV0LCBzZWxlY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ub3V0cHV0LFxuICAgICAgICAgICAgc2VsZWN0aW9uczogb3V0cHV0LnNlbGVjdGlvbnNcbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbLi4ub3V0cHV0LnNlbGVjdGlvbnMsIC4uLnNlbGVjdGlvbnNdKVxuICAgICAgICAgICAgICAgIDogZnJlZXplKHNlbGVjdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2pvaW4tYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IEpvaW5Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvam9pbi1ub2RlLmpzJztcbmltcG9ydCB7IFJhd05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9yYXctbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uLCBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uLCB9IGZyb20gJy4uL3BhcnNlci9iaW5hcnktb3BlcmF0aW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgY2xhc3MgSm9pbkJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIG9uKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBKb2luQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGpvaW5Ob2RlOiBKb2luTm9kZS5jbG9uZVdpdGhPbih0aGlzLiNwcm9wcy5qb2luTm9kZSwgcGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbihhcmdzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBKdXN0IGxpa2Uge0BsaW5rIFdoZXJlSW50ZXJmYWNlLndoZXJlUmVmfSBidXQgYWRkcyBhbiBpdGVtIHRvIHRoZSBqb2luJ3NcbiAgICAgKiBgb25gIGNsYXVzZSBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogU2VlIHtAbGluayBXaGVyZUludGVyZmFjZS53aGVyZVJlZn0gZm9yIGRvY3VtZW50YXRpb24gYW5kIGV4YW1wbGVzLlxuICAgICAqL1xuICAgIG9uUmVmKGxocywgb3AsIHJocykge1xuICAgICAgICByZXR1cm4gbmV3IEpvaW5CdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgam9pbk5vZGU6IEpvaW5Ob2RlLmNsb25lV2l0aE9uKHRoaXMuI3Byb3BzLmpvaW5Ob2RlLCBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uKGxocywgb3AsIHJocykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBgb24gdHJ1ZWAuXG4gICAgICovXG4gICAgb25UcnVlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEpvaW5CdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgam9pbk5vZGU6IEpvaW5Ob2RlLmNsb25lV2l0aE9uKHRoaXMuI3Byb3BzLmpvaW5Ob2RlLCBSYXdOb2RlLmNyZWF0ZVdpdGhTcWwoJ3RydWUnKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmpvaW5Ob2RlO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vb3Zlci1idWlsZGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgT3Zlck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vdmVyLW5vZGUuanMnO1xuaW1wb3J0IHsgUXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZU9yZGVyQnksIH0gZnJvbSAnLi4vcGFyc2VyL29yZGVyLWJ5LXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVBhcnRpdGlvbkJ5LCB9IGZyb20gJy4uL3BhcnNlci9wYXJ0aXRpb24tYnktcGFyc2VyLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBPdmVyQnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgb3JkZXJCeSguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgT3ZlckJ1aWxkZXIoe1xuICAgICAgICAgICAgb3Zlck5vZGU6IE92ZXJOb2RlLmNsb25lV2l0aE9yZGVyQnlJdGVtcyh0aGlzLiNwcm9wcy5vdmVyTm9kZSwgcGFyc2VPcmRlckJ5KGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFyT3JkZXJCeSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPdmVyQnVpbGRlcih7XG4gICAgICAgICAgICBvdmVyTm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aG91dE9yZGVyQnkodGhpcy4jcHJvcHMub3Zlck5vZGUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcGFydGl0aW9uQnkocGFydGl0aW9uQnkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPdmVyQnVpbGRlcih7XG4gICAgICAgICAgICBvdmVyTm9kZTogT3Zlck5vZGUuY2xvbmVXaXRoUGFydGl0aW9uQnlJdGVtcyh0aGlzLiNwcm9wcy5vdmVyTm9kZSwgcGFyc2VQYXJ0aXRpb25CeShwYXJ0aXRpb25CeSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5vdmVyTm9kZTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3BhcnRpdGlvbi1ieS1wYXJzZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBQYXJ0aXRpb25CeUl0ZW1Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcGFydGl0aW9uLWJ5LWl0ZW0tbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb25Pckxpc3QsIH0gZnJvbSAnLi9yZWZlcmVuY2UtcGFyc2VyLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcnRpdGlvbkJ5KHBhcnRpdGlvbkJ5KSB7XG4gICAgcmV0dXJuIHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbk9yTGlzdChwYXJ0aXRpb25CeSkubWFwKFBhcnRpdGlvbkJ5SXRlbU5vZGUuY3JlYXRlKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcGFydGl0aW9uLWJ5LWl0ZW0tbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBQYXJ0aXRpb25CeUl0ZW1Ob2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdQYXJ0aXRpb25CeUl0ZW1Ob2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShwYXJ0aXRpb25CeSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdQYXJ0aXRpb25CeUl0ZW1Ob2RlJyxcbiAgICAgICAgICAgIHBhcnRpdGlvbkJ5LFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3F1ZXJ5LWNyZWF0b3IuZC50c1wiIC8+XG5pbXBvcnQgeyBjcmVhdGVTZWxlY3RRdWVyeUJ1aWxkZXIsIH0gZnJvbSAnLi9xdWVyeS1idWlsZGVyL3NlbGVjdC1xdWVyeS1idWlsZGVyLmpzJztcbmltcG9ydCB7IEluc2VydFF1ZXJ5QnVpbGRlciB9IGZyb20gJy4vcXVlcnktYnVpbGRlci9pbnNlcnQtcXVlcnktYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBEZWxldGVRdWVyeUJ1aWxkZXIgfSBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIvZGVsZXRlLXF1ZXJ5LWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgVXBkYXRlUXVlcnlCdWlsZGVyIH0gZnJvbSAnLi9xdWVyeS1idWlsZGVyL3VwZGF0ZS1xdWVyeS1idWlsZGVyLmpzJztcbmltcG9ydCB7IERlbGV0ZVF1ZXJ5Tm9kZSB9IGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvZGVsZXRlLXF1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgSW5zZXJ0UXVlcnlOb2RlIH0gZnJvbSAnLi9vcGVyYXRpb24tbm9kZS9pbnNlcnQtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBTZWxlY3RRdWVyeU5vZGUgfSBmcm9tICcuL29wZXJhdGlvbi1ub2RlL3NlbGVjdC1xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IFVwZGF0ZVF1ZXJ5Tm9kZSB9IGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvdXBkYXRlLXF1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VUYWJsZSwgcGFyc2VUYWJsZUV4cHJlc3Npb25Pckxpc3QsIHBhcnNlQWxpYXNlZFRhYmxlLCB9IGZyb20gJy4vcGFyc2VyL3RhYmxlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZUNvbW1vblRhYmxlRXhwcmVzc2lvbiwgfSBmcm9tICcuL3BhcnNlci93aXRoLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBXaXRoTm9kZSB9IGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvd2l0aC1ub2RlLmpzJztcbmltcG9ydCB7IGNyZWF0ZVF1ZXJ5SWQgfSBmcm9tICcuL3V0aWwvcXVlcnktaWQuanMnO1xuaW1wb3J0IHsgV2l0aFNjaGVtYVBsdWdpbiB9IGZyb20gJy4vcGx1Z2luL3dpdGgtc2NoZW1hL3dpdGgtc2NoZW1hLXBsdWdpbi5qcyc7XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IHBhcnNlU2VsZWN0QXJnLCB9IGZyb20gJy4vcGFyc2VyL3NlbGVjdC1wYXJzZXIuanMnO1xuaW1wb3J0IHsgTWVyZ2VRdWVyeUJ1aWxkZXIgfSBmcm9tICcuL3F1ZXJ5LWJ1aWxkZXIvbWVyZ2UtcXVlcnktYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBNZXJnZVF1ZXJ5Tm9kZSB9IGZyb20gJy4vb3BlcmF0aW9uLW5vZGUvbWVyZ2UtcXVlcnktbm9kZS5qcyc7XG5leHBvcnQgY2xhc3MgUXVlcnlDcmVhdG9yIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgYHNlbGVjdGAgcXVlcnkgYnVpbGRlciBmb3IgdGhlIGdpdmVuIHRhYmxlIG9yIHRhYmxlcy5cbiAgICAgKlxuICAgICAqIFRoZSB0YWJsZXMgcGFzc2VkIHRvIHRoaXMgbWV0aG9kIGFyZSBidWlsdCBhcyB0aGUgcXVlcnkncyBgZnJvbWAgY2xhdXNlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBDcmVhdGUgYSBzZWxlY3QgcXVlcnkgZm9yIG9uZSB0YWJsZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZGIuc2VsZWN0RnJvbSgncGVyc29uJykuc2VsZWN0QWxsKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHNlbGVjdCAqIGZyb20gXCJwZXJzb25cIlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQ3JlYXRlIGEgc2VsZWN0IHF1ZXJ5IGZvciBvbmUgdGFibGUgd2l0aCBhbiBhbGlhczpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcGVyc29ucyA9IGF3YWl0IGRiLnNlbGVjdEZyb20oJ3BlcnNvbiBhcyBwJylcbiAgICAgKiAgIC5zZWxlY3QoWydwLmlkJywgJ2ZpcnN0X25hbWUnXSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKHBlcnNvbnNbMF0uaWQpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBzZWxlY3QgXCJwXCIuXCJpZFwiLCBcImZpcnN0X25hbWVcIiBmcm9tIFwicGVyc29uXCIgYXMgXCJwXCJcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIENyZWF0ZSBhIHNlbGVjdCBxdWVyeSBmcm9tIGEgc3VicXVlcnk6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHBlcnNvbnMgPSBhd2FpdCBkYi5zZWxlY3RGcm9tKFxuICAgICAqICAgICAoZWIpID0+IGViLnNlbGVjdEZyb20oJ3BlcnNvbicpLnNlbGVjdCgncGVyc29uLmlkIGFzIGlkZW50aWZpZXInKS5hcygncCcpXG4gICAgICogICApXG4gICAgICogICAuc2VsZWN0KCdwLmlkZW50aWZpZXInKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqXG4gICAgICogY29uc29sZS5sb2cocGVyc29uc1swXS5pZGVudGlmaWVyKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IFwicFwiLlwiaWRlbnRpZmllclwiLFxuICAgICAqIGZyb20gKFxuICAgICAqICAgc2VsZWN0IFwicGVyc29uXCIuXCJpZFwiIGFzIFwiaWRlbnRpZmllclwiIGZyb20gXCJwZXJzb25cIlxuICAgICAqICkgYXMgcFxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQ3JlYXRlIGEgc2VsZWN0IHF1ZXJ5IGZyb20gcmF3IHNxbDpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHtcdTAwQTBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBjb25zdCBpdGVtcyA9IGF3YWl0IGRiXG4gICAgICogICAuc2VsZWN0RnJvbShzcWw8eyBvbmU6IG51bWJlciB9PmAoc2VsZWN0IDEgYXMgb25lKWAuYXMoJ3EnKSlcbiAgICAgKiAgIC5zZWxlY3QoJ3Eub25lJylcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKGl0ZW1zWzBdLm9uZSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHNlbGVjdCBcInFcIi5cIm9uZVwiLFxuICAgICAqIGZyb20gKFxuICAgICAqICAgc2VsZWN0IDEgYXMgb25lXG4gICAgICogKSBhcyBxXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBXaGVuIHlvdSB1c2UgdGhlIGBzcWxgIHRhZyB5b3UgbmVlZCB0byBhbHNvIHByb3ZpZGUgdGhlIHJlc3VsdCB0eXBlIG9mIHRoZVxuICAgICAqIHJhdyBzbmlwcGV0IC8gcXVlcnkgc28gdGhhdCBLeXNlbHkgY2FuIGZpZ3VyZSBvdXQgd2hhdCBjb2x1bW5zIGFyZVxuICAgICAqIGF2YWlsYWJsZSBmb3IgdGhlIHJlc3Qgb2YgdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogVGhlIGBzZWxlY3RGcm9tYCBtZXRob2QgYWxzbyBhY2NlcHRzIGFuIGFycmF5IGZvciBtdWx0aXBsZSB0YWJsZXMuIEFsbFxuICAgICAqIHRoZSBhYm92ZSBleGFtcGxlcyBjYW4gYWxzbyBiZSB1c2VkIGluIGFuIGFycmF5LlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQge1x1MDBBMHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGNvbnN0IGl0ZW1zID0gYXdhaXQgZGIuc2VsZWN0RnJvbShbXG4gICAgICogICAgICdwZXJzb24gYXMgcCcsXG4gICAgICogICAgIGRiLnNlbGVjdEZyb20oJ3BldCcpLnNlbGVjdCgncGV0LnNwZWNpZXMnKS5hcygnYScpLFxuICAgICAqICAgICBzcWw8eyBvbmU6IG51bWJlciB9PmAoc2VsZWN0IDEgYXMgb25lKWAuYXMoJ3EnKVxuICAgICAqICAgXSlcbiAgICAgKiAgIC5zZWxlY3QoWydwLmlkJywgJ2Euc3BlY2llcycsICdxLm9uZSddKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IFwicFwiLmlkLCBcImFcIi5cInNwZWNpZXNcIiwgXCJxXCIuXCJvbmVcIlxuICAgICAqIGZyb21cbiAgICAgKiAgIFwicGVyc29uXCIgYXMgXCJwXCIsXG4gICAgICogICAoc2VsZWN0IFwicGV0XCIuXCJzcGVjaWVzXCIgZnJvbSBcInBldFwiKSBhcyBhLFxuICAgICAqICAgKHNlbGVjdCAxIGFzIG9uZSkgYXMgXCJxXCJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzZWxlY3RGcm9tKGZyb20pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVNlbGVjdFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jcHJvcHMuZXhlY3V0b3IsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFNlbGVjdFF1ZXJ5Tm9kZS5jcmVhdGVGcm9tKHBhcnNlVGFibGVFeHByZXNzaW9uT3JMaXN0KGZyb20pLCB0aGlzLiNwcm9wcy53aXRoTm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzZWxlY3ROb0Zyb20oc2VsZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVTZWxlY3RRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBTZWxlY3RRdWVyeU5vZGUuY2xvbmVXaXRoU2VsZWN0aW9ucyhTZWxlY3RRdWVyeU5vZGUuY3JlYXRlKHRoaXMuI3Byb3BzLndpdGhOb2RlKSwgcGFyc2VTZWxlY3RBcmcoc2VsZWN0aW9uKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc2VydCBxdWVyeS5cbiAgICAgKlxuICAgICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBxdWVyeSBpcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgSW5zZXJ0UmVzdWx0fS4ge0BsaW5rIEluc2VydFJlc3VsdH1cbiAgICAgKiBoYXMgdGhlIHtAbGluayBJbnNlcnRSZXN1bHQuaW5zZXJ0SWQgfCBpbnNlcnRJZH0gZmllbGQgdGhhdCBob2xkcyB0aGUgYXV0byBpbmNyZW1lbnRlZCBpZCBvZlxuICAgICAqIHRoZSBpbnNlcnRlZCByb3cgaWYgdGhlIGRiIHJldHVybmVkIG9uZS5cbiAgICAgKlxuICAgICAqIFNlZSB0aGUge0BsaW5rIEluc2VydFF1ZXJ5QnVpbGRlci52YWx1ZXMgfCB2YWx1ZXN9IG1ldGhvZCBmb3IgbW9yZSBpbmZvIGFuZCBleGFtcGxlcy4gQWxzbyBzZWVcbiAgICAgKiB0aGUge0BsaW5rIFJldHVybmluZ0ludGVyZmFjZS5yZXR1cm5pbmcgfCByZXR1cm5pbmd9IG1ldGhvZCBmb3IgYSB3YXkgdG8gcmV0dXJuIGNvbHVtbnNcbiAgICAgKiBvbiBzdXBwb3J0ZWQgZGF0YWJhc2VzIGxpa2UgUG9zdGdyZVNRTC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICAgICAqICAgLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAudmFsdWVzKHtcbiAgICAgKiAgICAgZmlyc3RfbmFtZTogJ0plbm5pZmVyJyxcbiAgICAgKiAgICAgbGFzdF9uYW1lOiAnQW5pc3RvbidcbiAgICAgKiAgIH0pXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdCgpXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhyZXN1bHQuaW5zZXJ0SWQpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBTb21lIGRhdGFiYXNlcyBsaWtlIFBvc3RncmVTUUwgc3VwcG9ydCB0aGUgYHJldHVybmluZ2AgbWV0aG9kOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCB7IGlkIH0gPSBhd2FpdCBkYlxuICAgICAqICAgLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAudmFsdWVzKHtcbiAgICAgKiAgICAgZmlyc3RfbmFtZTogJ0plbm5pZmVyJyxcbiAgICAgKiAgICAgbGFzdF9uYW1lOiAnQW5pc3RvbidcbiAgICAgKiAgIH0pXG4gICAgICogICAucmV0dXJuaW5nKCdpZCcpXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGluc2VydEludG8odGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBJbnNlcnRRdWVyeU5vZGUuY3JlYXRlKHBhcnNlVGFibGUodGFibGUpLCB0aGlzLiNwcm9wcy53aXRoTm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgXCJyZXBsYWNlIGludG9cIiBxdWVyeS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgYnkgc29tZSBkaWFsZWN0cyBsaWtlIE15U1FMIG9yIFNRTGl0ZS5cbiAgICAgKlxuICAgICAqIFNpbWlsYXIgdG8gTXlTUUwncyB7QGxpbmsgSW5zZXJ0UXVlcnlCdWlsZGVyLm9uRHVwbGljYXRlS2V5VXBkYXRlfSB0aGF0IGRlbGV0ZXNcbiAgICAgKiBhbmQgaW5zZXJ0cyB2YWx1ZXMgb24gY29sbGlzaW9uIGluc3RlYWQgb2YgdXBkYXRpbmcgZXhpc3Rpbmcgcm93cy5cbiAgICAgKlxuICAgICAqIEFuIGFsaWFzIG9mIFNRTGl0ZSdzIHtAbGluayBJbnNlcnRRdWVyeUJ1aWxkZXIub3JSZXBsYWNlfS5cbiAgICAgKlxuICAgICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBxdWVyeSBpcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgSW5zZXJ0UmVzdWx0fS4ge0BsaW5rIEluc2VydFJlc3VsdH1cbiAgICAgKiBoYXMgdGhlIHtAbGluayBJbnNlcnRSZXN1bHQuaW5zZXJ0SWQgfCBpbnNlcnRJZH0gZmllbGQgdGhhdCBob2xkcyB0aGUgYXV0byBpbmNyZW1lbnRlZCBpZCBvZlxuICAgICAqIHRoZSBpbnNlcnRlZCByb3cgaWYgdGhlIGRiIHJldHVybmVkIG9uZS5cbiAgICAgKlxuICAgICAqIFNlZSB0aGUge0BsaW5rIEluc2VydFF1ZXJ5QnVpbGRlci52YWx1ZXMgfCB2YWx1ZXN9IG1ldGhvZCBmb3IgbW9yZSBpbmZvIGFuZCBleGFtcGxlcy5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICAgICAqICAgLnJlcGxhY2VJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnZhbHVlcyh7XG4gICAgICogICAgIGZpcnN0X25hbWU6ICdKZW5uaWZlcicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0FuaXN0b24nXG4gICAgICogICB9KVxuICAgICAqICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKHJlc3VsdC5pbnNlcnRJZClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiByZXBsYWNlIGludG8gYHBlcnNvbmAgKGBmaXJzdF9uYW1lYCwgYGxhc3RfbmFtZWApIHZhbHVlcyAoPywgPylcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZXBsYWNlSW50byh0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jcHJvcHMuZXhlY3V0b3IsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IEluc2VydFF1ZXJ5Tm9kZS5jcmVhdGUocGFyc2VUYWJsZSh0YWJsZSksIHRoaXMuI3Byb3BzLndpdGhOb2RlLCB0cnVlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkZWxldGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiBTZWUgdGhlIHtAbGluayBEZWxldGVRdWVyeUJ1aWxkZXIud2hlcmV9IG1ldGhvZCBmb3IgZXhhbXBsZXMgb24gaG93IHRvIHNwZWNpZnlcbiAgICAgKiBhIHdoZXJlIGNsYXVzZSBmb3IgdGhlIGRlbGV0ZSBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBxdWVyeSBpcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGVsZXRlUmVzdWx0fS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogPCEtLSBzaXRlRXhhbXBsZShcImRlbGV0ZVwiLCBcIlNpbmdsZSByb3dcIiwgMTApIC0tPlxuICAgICAqXG4gICAgICogRGVsZXRlIGEgc2luZ2xlIHJvdzpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAgICAgKiAgIC5kZWxldGVGcm9tKCdwZXJzb24nKVxuICAgICAqICAgLndoZXJlKCdwZXJzb24uaWQnLCAnPScsIDEpXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdCgpXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhyZXN1bHQubnVtRGVsZXRlZFJvd3MpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBkZWxldGUgZnJvbSBcInBlcnNvblwiIHdoZXJlIFwicGVyc29uXCIuXCJpZFwiID0gJDFcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFNvbWUgZGF0YWJhc2VzIHN1Y2ggYXMgTXlTUUwgc3VwcG9ydCBkZWxldGluZyBmcm9tIG11bHRpcGxlIHRhYmxlczpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAgICAgKiAgIC5kZWxldGVGcm9tKFsncGVyc29uJywgJ3BldCddKVxuICAgICAqICAgLnVzaW5nKCdwZXJzb24nKVxuICAgICAqICAgLmlubmVySm9pbigncGV0JywgJ3BldC5vd25lcl9pZCcsICdwZXJzb24uaWQnKVxuICAgICAqICAgLndoZXJlKCdwZXJzb24uaWQnLCAnPScsIDEpXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdCgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogZGVsZXRlIGZyb20gYHBlcnNvbmAsIGBwZXRgXG4gICAgICogdXNpbmcgYHBlcnNvbmBcbiAgICAgKiBpbm5lciBqb2luIGBwZXRgIG9uIGBwZXRgLmBvd25lcl9pZGAgPSBgcGVyc29uYC5gaWRgXG4gICAgICogd2hlcmUgYHBlcnNvbmAuYGlkYCA9ID9cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkZWxldGVGcm9tKGZyb20pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWxldGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgcXVlcnlJZDogY3JlYXRlUXVlcnlJZCgpLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBEZWxldGVRdWVyeU5vZGUuY3JlYXRlKHBhcnNlVGFibGVFeHByZXNzaW9uT3JMaXN0KGZyb20pLCB0aGlzLiNwcm9wcy53aXRoTm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIHVwZGF0ZSBxdWVyeS5cbiAgICAgKlxuICAgICAqIFNlZSB0aGUge0BsaW5rIFVwZGF0ZVF1ZXJ5QnVpbGRlci53aGVyZX0gbWV0aG9kIGZvciBleGFtcGxlcyBvbiBob3cgdG8gc3BlY2lmeVxuICAgICAqIGEgd2hlcmUgY2xhdXNlIGZvciB0aGUgdXBkYXRlIG9wZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIFNlZSB0aGUge0BsaW5rIFVwZGF0ZVF1ZXJ5QnVpbGRlci5zZXR9IG1ldGhvZCBmb3IgZXhhbXBsZXMgb24gaG93IHRvXG4gICAgICogc3BlY2lmeSB0aGUgdXBkYXRlcy5cbiAgICAgKlxuICAgICAqIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIHF1ZXJ5IGlzIGFuIHtAbGluayBVcGRhdGVSZXN1bHR9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gICAgICogICAudXBkYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuc2V0KHsgZmlyc3RfbmFtZTogJ0plbm5pZmVyJyB9KVxuICAgICAqICAgLndoZXJlKCdwZXJzb24uaWQnLCAnPScsIDEpXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdCgpXG4gICAgICpcbiAgICAgKiBjb25zb2xlLmxvZyhyZXN1bHQubnVtVXBkYXRlZFJvd3MpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgdXBkYXRlVGFibGUodGFibGVzKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIGV4ZWN1dG9yOiB0aGlzLiNwcm9wcy5leGVjdXRvcixcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogVXBkYXRlUXVlcnlOb2RlLmNyZWF0ZShwYXJzZVRhYmxlRXhwcmVzc2lvbk9yTGlzdCh0YWJsZXMpLCB0aGlzLiNwcm9wcy53aXRoTm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbWVyZ2UgcXVlcnkuXG4gICAgICpcbiAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBxdWVyeSBpcyBhIHtAbGluayBNZXJnZVJlc3VsdH0uXG4gICAgICpcbiAgICAgKiBTZWUgdGhlIHtAbGluayBNZXJnZVF1ZXJ5QnVpbGRlci51c2luZ30gbWV0aG9kIGZvciBleGFtcGxlcyBvbiBob3cgdG8gc3BlY2lmeVxuICAgICAqIHRoZSBvdGhlciB0YWJsZS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogPCEtLSBzaXRlRXhhbXBsZShcIm1lcmdlXCIsIFwiU291cmNlIHJvdyBleGlzdGVuY2VcIiwgMTApIC0tPlxuICAgICAqXG4gICAgICogVXBkYXRlIGEgdGFyZ2V0IGNvbHVtbiBiYXNlZCBvbiB0aGUgZXhpc3RlbmNlIG9mIGEgc291cmNlIHJvdzpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAgICAgKiAgIC5tZXJnZUludG8oJ3BlcnNvbiBhcyB0YXJnZXQnKVxuICAgICAqICAgLnVzaW5nKCdwZXQgYXMgc291cmNlJywgJ3NvdXJjZS5vd25lcl9pZCcsICd0YXJnZXQuaWQnKVxuICAgICAqICAgLndoZW5NYXRjaGVkQW5kKCd0YXJnZXQuaGFzX3BldHMnLCAnIT0nLCAnWScpXG4gICAgICogICAudGhlblVwZGF0ZVNldCh7IGhhc19wZXRzOiAnWScgfSlcbiAgICAgKiAgIC53aGVuTm90TWF0Y2hlZEJ5U291cmNlQW5kKCd0YXJnZXQuaGFzX3BldHMnLCAnPScsICdZJylcbiAgICAgKiAgIC50aGVuVXBkYXRlU2V0KHsgaGFzX3BldHM6ICdOJyB9KVxuICAgICAqICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKlxuICAgICAqIGNvbnNvbGUubG9nKHJlc3VsdC5udW1DaGFuZ2VkUm93cylcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIG1lcmdlIGludG8gXCJwZXJzb25cIlxuICAgICAqIHVzaW5nIFwicGV0XCJcbiAgICAgKiBvbiBcInBldFwiLlwib3duZXJfaWRcIiA9IFwicGVyc29uXCIuXCJpZFwiXG4gICAgICogd2hlbiBtYXRjaGVkIGFuZCBcImhhc19wZXRzXCIgIT0gJDFcbiAgICAgKiB0aGVuIHVwZGF0ZSBzZXQgXCJoYXNfcGV0c1wiID0gJDJcbiAgICAgKiB3aGVuIG5vdCBtYXRjaGVkIGJ5IHNvdXJjZSBhbmQgXCJoYXNfcGV0c1wiID0gJDNcbiAgICAgKiB0aGVuIHVwZGF0ZSBzZXQgXCJoYXNfcGV0c1wiID0gJDRcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJtZXJnZVwiLCBcIlRlbXBvcmFyeSBjaGFuZ2VzIHRhYmxlXCIsIDIwKSAtLT5cbiAgICAgKlxuICAgICAqIE1lcmdlIG5ldyBlbnRyaWVzIGZyb20gYSB0ZW1wb3JhcnkgY2hhbmdlcyB0YWJsZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAgICAgKiAgIC5tZXJnZUludG8oJ3dpbmUgYXMgdGFyZ2V0JylcbiAgICAgKiAgIC51c2luZyhcbiAgICAgKiAgICAgJ3dpbmVfc3RvY2tfY2hhbmdlIGFzIHNvdXJjZScsXG4gICAgICogICAgICdzb3VyY2Uud2luZV9uYW1lJyxcbiAgICAgKiAgICAgJ3RhcmdldC5uYW1lJyxcbiAgICAgKiAgIClcbiAgICAgKiAgIC53aGVuTm90TWF0Y2hlZEFuZCgnc291cmNlLnN0b2NrX2RlbHRhJywgJz4nLCAwKVxuICAgICAqICAgLnRoZW5JbnNlcnRWYWx1ZXMoKHsgcmVmIH0pID0+ICh7XG4gICAgICogICAgIG5hbWU6IHJlZignc291cmNlLndpbmVfbmFtZScpLFxuICAgICAqICAgICBzdG9jazogcmVmKCdzb3VyY2Uuc3RvY2tfZGVsdGEnKSxcbiAgICAgKiAgIH0pKVxuICAgICAqICAgLndoZW5NYXRjaGVkQW5kKFxuICAgICAqICAgICAoZWIpID0+IGViKCd0YXJnZXQuc3RvY2snLCAnKycsIGViLnJlZignc291cmNlLnN0b2NrX2RlbHRhJykpLFxuICAgICAqICAgICAnPicsXG4gICAgICogICAgIDAsXG4gICAgICogICApXG4gICAgICogICAudGhlblVwZGF0ZVNldCgnc3RvY2snLCAoZWIpID0+XG4gICAgICogICAgIGViKCd0YXJnZXQuc3RvY2snLCAnKycsIGViLnJlZignc291cmNlLnN0b2NrX2RlbHRhJykpLFxuICAgICAqICAgKVxuICAgICAqICAgLndoZW5NYXRjaGVkKClcbiAgICAgKiAgIC50aGVuRGVsZXRlKClcbiAgICAgKiAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBtZXJnZSBpbnRvIFwid2luZVwiIGFzIFwidGFyZ2V0XCJcbiAgICAgKiB1c2luZyBcIndpbmVfc3RvY2tfY2hhbmdlXCIgYXMgXCJzb3VyY2VcIlxuICAgICAqIG9uIFwic291cmNlXCIuXCJ3aW5lX25hbWVcIiA9IFwidGFyZ2V0XCIuXCJuYW1lXCJcbiAgICAgKiB3aGVuIG5vdCBtYXRjaGVkIGFuZCBcInNvdXJjZVwiLlwic3RvY2tfZGVsdGFcIiA+ICQxXG4gICAgICogdGhlbiBpbnNlcnQgKFwibmFtZVwiLCBcInN0b2NrXCIpIHZhbHVlcyAoXCJzb3VyY2VcIi5cIndpbmVfbmFtZVwiLCBcInNvdXJjZVwiLlwic3RvY2tfZGVsdGFcIilcbiAgICAgKiB3aGVuIG1hdGNoZWQgYW5kIFwidGFyZ2V0XCIuXCJzdG9ja1wiICsgXCJzb3VyY2VcIi5cInN0b2NrX2RlbHRhXCIgPiAkMlxuICAgICAqIHRoZW4gdXBkYXRlIHNldCBcInN0b2NrXCIgPSBcInRhcmdldFwiLlwic3RvY2tcIiArIFwic291cmNlXCIuXCJzdG9ja19kZWx0YVwiXG4gICAgICogd2hlbiBtYXRjaGVkXG4gICAgICogdGhlbiBkZWxldGVcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBtZXJnZUludG8odGFyZ2V0VGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jcHJvcHMuZXhlY3V0b3IsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IE1lcmdlUXVlcnlOb2RlLmNyZWF0ZShwYXJzZUFsaWFzZWRUYWJsZSh0YXJnZXRUYWJsZSksIHRoaXMuI3Byb3BzLndpdGhOb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBgd2l0aGAgcXVlcnkgKENvbW1vbiBUYWJsZSBFeHByZXNzaW9uKS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogPCEtLSBzaXRlRXhhbXBsZShcImN0ZVwiLCBcIlNpbXBsZSBzZWxlY3RzXCIsIDEwKSAtLT5cbiAgICAgKlxuICAgICAqIENvbW1vbiB0YWJsZSBleHByZXNzaW9ucyAoQ1RFKSBhcmUgYSBncmVhdCB3YXkgdG8gbW9kdWxhcml6ZSBjb21wbGV4IHF1ZXJpZXMuXG4gICAgICogRXNzZW50aWFsbHkgdGhleSBhbGxvdyB5b3UgdG8gcnVuIG11bHRpcGxlIHNlcGFyYXRlIHF1ZXJpZXMgd2l0aGluIGFcbiAgICAgKiBzaW5nbGUgcm91bmR0cmlwIHRvIHRoZSBEQi5cbiAgICAgKlxuICAgICAqIFNpbmNlIENURXMgYXJlIGEgcGFydCBvZiB0aGUgbWFpbiBxdWVyeSwgcXVlcnkgb3B0aW1pemVycyBpbnNpZGUgREJcbiAgICAgKiBlbmdpbmVzIGFyZSBhYmxlIHRvIG9wdGltaXplIHRoZSBvdmVyYWxsIHF1ZXJ5LiBGb3IgZXhhbXBsZSwgcG9zdGdyZXNcbiAgICAgKiBpcyBhYmxlIHRvIGlubGluZSB0aGUgQ1RFcyBpbnNpZGUgdGhlIHVzaW5nIHF1ZXJpZXMgaWYgaXQgZGVjaWRlcyBpdCdzXG4gICAgICogZmFzdGVyLlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYlxuICAgICAqICAgLy8gQ3JlYXRlIGEgQ1RFIGNhbGxlZCBgamVubmlmZXJzYCB0aGF0IHNlbGVjdHMgYWxsXG4gICAgICogICAvLyBwZXJzb25zIG5hbWVkICdKZW5uaWZlcicuXG4gICAgICogICAud2l0aCgnamVubmlmZXJzJywgKGRiKSA9PiBkYlxuICAgICAqICAgICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAgICAgKiAgICAgLndoZXJlKCdmaXJzdF9uYW1lJywgJz0nLCAnSmVubmlmZXInKVxuICAgICAqICAgICAuc2VsZWN0KFsnaWQnLCAnYWdlJ10pXG4gICAgICogICApXG4gICAgICogICAvLyBTZWxlY3QgYWxsIHJvd3MgZnJvbSB0aGUgYGplbm5pZmVyc2AgQ1RFIGFuZFxuICAgICAqICAgLy8gZnVydGhlciBmaWx0ZXIgaXQuXG4gICAgICogICAud2l0aCgnYWR1bHRfamVubmlmZXJzJywgKGRiKSA9PiBkYlxuICAgICAqICAgICAuc2VsZWN0RnJvbSgnamVubmlmZXJzJylcbiAgICAgKiAgICAgLndoZXJlKCdhZ2UnLCAnPicsIDE4KVxuICAgICAqICAgICAuc2VsZWN0KFsnaWQnLCAnYWdlJ10pXG4gICAgICogICApXG4gICAgICogICAvLyBGaW5hbGx5IHNlbGVjdCBhbGwgYWR1bHQgamVubmlmZXJzIHRoYXQgYXJlXG4gICAgICogICAvLyBhbHNvIHlvdW5nZXIgdGhhbiA2MC5cbiAgICAgKiAgIC5zZWxlY3RGcm9tKCdhZHVsdF9qZW5uaWZlcnMnKVxuICAgICAqICAgLndoZXJlKCdhZ2UnLCAnPCcsIDYwKVxuICAgICAqICAgLnNlbGVjdEFsbCgpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiA8IS0tIHNpdGVFeGFtcGxlKFwiY3RlXCIsIFwiSW5zZXJ0cywgdXBkYXRlcyBhbmQgZGVsZXRpb25zXCIsIDIwKSAtLT5cbiAgICAgKlxuICAgICAqIFNvbWUgZGF0YWJhc2VzIGxpa2UgcG9zdGdyZXMgYWxzbyBhbGxvdyB5b3UgdG8gcnVuIG90aGVyIHF1ZXJpZXMgdGhhbiBzZWxlY3RzXG4gICAgICogaW4gQ1RFcy4gT24gdGhlc2UgZGF0YWJhc2VzIENURXMgYXJlIGV4dHJlbWVseSBwb3dlcmZ1bDpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAgICAgKiAgIC53aXRoKCduZXdfcGVyc29uJywgKGRiKSA9PiBkYlxuICAgICAqICAgICAuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgICAgLnZhbHVlcyh7XG4gICAgICogICAgICAgZmlyc3RfbmFtZTogJ0plbm5pZmVyJyxcbiAgICAgKiAgICAgICBhZ2U6IDM1LFxuICAgICAqICAgICB9KVxuICAgICAqICAgICAucmV0dXJuaW5nKCdpZCcpXG4gICAgICogICApXG4gICAgICogICAud2l0aCgnbmV3X3BldCcsIChkYikgPT4gZGJcbiAgICAgKiAgICAgLmluc2VydEludG8oJ3BldCcpXG4gICAgICogICAgIC52YWx1ZXMoe1xuICAgICAqICAgICAgIG5hbWU6ICdEb2dnbycsXG4gICAgICogICAgICAgc3BlY2llczogJ2RvZycsXG4gICAgICogICAgICAgaXNfZmF2b3JpdGU6IHRydWUsXG4gICAgICogICAgICAgLy8gVXNlIHRoZSBpZCBvZiB0aGUgcGVyc29uIHdlIGp1c3QgaW5zZXJ0ZWQuXG4gICAgICogICAgICAgb3duZXJfaWQ6IGRiXG4gICAgICogICAgICAgICAuc2VsZWN0RnJvbSgnbmV3X3BlcnNvbicpXG4gICAgICogICAgICAgICAuc2VsZWN0KCdpZCcpXG4gICAgICogICAgIH0pXG4gICAgICogICAgIC5yZXR1cm5pbmcoJ2lkJylcbiAgICAgKiAgIClcbiAgICAgKiAgIC5zZWxlY3RGcm9tKFsnbmV3X3BlcnNvbicsICduZXdfcGV0J10pXG4gICAgICogICAuc2VsZWN0KFtcbiAgICAgKiAgICAgJ25ld19wZXJzb24uaWQgYXMgcGVyc29uX2lkJyxcbiAgICAgKiAgICAgJ25ld19wZXQuaWQgYXMgcGV0X2lkJ1xuICAgICAqICAgXSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBDVEUgbmFtZSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGNvbHVtbiBuYW1lcyBpbiBhZGRpdGlvbiB0b1xuICAgICAqIGEgbmFtZS4gSW4gdGhhdCBjYXNlIEt5c2VseSByZXF1aXJlcyB0aGUgZXhwcmVzc2lvbiB0byByZXR1blxuICAgICAqIHJvd3Mgd2l0aCB0aGUgc2FtZSBjb2x1bW5zLlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLndpdGgoJ2plbm5pZmVycyhpZCwgYWdlKScsIChkYikgPT4gZGJcbiAgICAgKiAgICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gICAgICogICAgIC53aGVyZSgnZmlyc3RfbmFtZScsICc9JywgJ0plbm5pZmVyJylcbiAgICAgKiAgICAgLy8gVGhpcyBpcyBvayBzaW5jZSB3ZSByZXR1cm4gY29sdW1ucyB3aXRoIHRoZSBzYW1lXG4gICAgICogICAgIC8vIG5hbWVzIGFzIHNwZWNpZmllZCBieSBgamVubmlmZXJzKGlkLCBhZ2UpYC5cbiAgICAgKiAgICAgLnNlbGVjdChbJ2lkJywgJ2FnZSddKVxuICAgICAqICAgKVxuICAgICAqICAgLnNlbGVjdEZyb20oJ2plbm5pZmVycycpXG4gICAgICogICAuc2VsZWN0QWxsKClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBmaXJzdCBhcmd1bWVudCBjYW4gYWxzbyBiZSBhIGNhbGxiYWNrLiBUaGUgY2FsbGJhY2sgaXMgcGFzc2VkXG4gICAgICogYSBgQ1RFQnVpbGRlcmAgaW5zdGFuY2UgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIENURTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC53aXRoKFxuICAgICAqICAgICAoY3RlKSA9PiBjdGUoJ2plbm5pZmVycycpLm1hdGVyaWFsaXplZCgpLFxuICAgICAqICAgICAoZGIpID0+IGRiXG4gICAgICogICAgICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gICAgICogICAgICAgLndoZXJlKCdmaXJzdF9uYW1lJywgJz0nLCAnSmVubmlmZXInKVxuICAgICAqICAgICAgIC5zZWxlY3QoWydpZCcsICdhZ2UnXSlcbiAgICAgKiAgIClcbiAgICAgKiAgIC5zZWxlY3RGcm9tKCdqZW5uaWZlcnMnKVxuICAgICAqICAgLnNlbGVjdEFsbCgpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgd2l0aChuYW1lT3JCdWlsZGVyLCBleHByZXNzaW9uKSB7XG4gICAgICAgIGNvbnN0IGN0ZSA9IHBhcnNlQ29tbW9uVGFibGVFeHByZXNzaW9uKG5hbWVPckJ1aWxkZXIsIGV4cHJlc3Npb24pO1xuICAgICAgICByZXR1cm4gbmV3IFF1ZXJ5Q3JlYXRvcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHdpdGhOb2RlOiB0aGlzLiNwcm9wcy53aXRoTm9kZVxuICAgICAgICAgICAgICAgID8gV2l0aE5vZGUuY2xvbmVXaXRoRXhwcmVzc2lvbih0aGlzLiNwcm9wcy53aXRoTm9kZSwgY3RlKVxuICAgICAgICAgICAgICAgIDogV2l0aE5vZGUuY3JlYXRlKGN0ZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgcmVjdXJzaXZlIGB3aXRoYCBxdWVyeSAoQ29tbW9uIFRhYmxlIEV4cHJlc3Npb24pLlxuICAgICAqXG4gICAgICogTm90ZSB0aGF0IHJlY3Vyc2l2ZW5lc3MgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgd2hvbGUgYHdpdGhgIHN0YXRlbWVudC5cbiAgICAgKiBZb3UgY2Fubm90IGhhdmUgcmVjdXJzaXZlIGFuZCBub24tcmVjdXJzaXZlIENURXMgaW4gYSBzYW1lIGB3aXRoYCBzdGF0ZW1lbnQuXG4gICAgICogVGhlcmVmb3JlIHRoZSByZWN1cnNpdmVuZXNzIGlzIGRldGVybWluZWQgYnkgdGhlICoqZmlyc3QqKiBgd2l0aGAgb3JcbiAgICAgKiBgd2l0aFJlY3VzaXZlYCBjYWxsIHlvdSBtYWtlLlxuICAgICAqXG4gICAgICogU2VlIHRoZSB7QGxpbmsgd2l0aH0gbWV0aG9kIGZvciBleGFtcGxlcyBhbmQgbW9yZSBkb2N1bWVudGF0aW9uLlxuICAgICAqL1xuICAgIHdpdGhSZWN1cnNpdmUobmFtZU9yQnVpbGRlciwgZXhwcmVzc2lvbikge1xuICAgICAgICBjb25zdCBjdGUgPSBwYXJzZUNvbW1vblRhYmxlRXhwcmVzc2lvbihuYW1lT3JCdWlsZGVyLCBleHByZXNzaW9uKTtcbiAgICAgICAgcmV0dXJuIG5ldyBRdWVyeUNyZWF0b3Ioe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICB3aXRoTm9kZTogdGhpcy4jcHJvcHMud2l0aE5vZGVcbiAgICAgICAgICAgICAgICA/IFdpdGhOb2RlLmNsb25lV2l0aEV4cHJlc3Npb24odGhpcy4jcHJvcHMud2l0aE5vZGUsIGN0ZSlcbiAgICAgICAgICAgICAgICA6IFdpdGhOb2RlLmNyZWF0ZShjdGUsIHsgcmVjdXJzaXZlOiB0cnVlIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBxdWVyeSBjcmVhdG9yIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIHBsdWdpbiBpbnN0YWxsZWQuXG4gICAgICovXG4gICAgd2l0aFBsdWdpbihwbHVnaW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBRdWVyeUNyZWF0b3Ioe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jcHJvcHMuZXhlY3V0b3Iud2l0aFBsdWdpbihwbHVnaW4pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBxdWVyeSBjcmVhdG9yIGluc3RhbmNlIHdpdGhvdXQgYW55IHBsdWdpbnMuXG4gICAgICovXG4gICAgd2l0aG91dFBsdWdpbnMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUXVlcnlDcmVhdG9yKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhvdXRQbHVnaW5zKCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzY2hlbWEgdG8gYmUgdXNlZCBmb3IgYWxsIHRhYmxlIHJlZmVyZW5jZXMgdGhhdCBkb24ndCBleHBsaWNpdGx5XG4gICAgICogc3BlY2lmeSBhIHNjaGVtYS5cbiAgICAgKlxuICAgICAqIFRoaXMgb25seSBhZmZlY3RzIHRoZSBxdWVyeSBjcmVhdGVkIHRocm91Z2ggdGhlIGJ1aWxkZXIgcmV0dXJuZWQgZnJvbVxuICAgICAqIHRoaXMgbWV0aG9kIGFuZCBkb2Vzbid0IG1vZGlmeSB0aGUgYGRiYCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIFNlZSBbdGhpcyByZWNpcGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9reXNlbHktb3JnL2t5c2VseS9ibG9iL21hc3Rlci9zaXRlL2RvY3MvcmVjaXBlcy8wMDA3LXNjaGVtYXMubWQpXG4gICAgICogZm9yIGEgbW9yZSBkZXRhaWxlZCBleHBsYW5hdGlvbi5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC53aXRoU2NoZW1hKCdtYW1tYWxzJylcbiAgICAgKiAgIC5zZWxlY3RGcm9tKCdwZXQnKVxuICAgICAqICAgLnNlbGVjdEFsbCgpXG4gICAgICogICAuaW5uZXJKb2luKCdwdWJsaWMucGVyc29uJywgJ3B1YmxpYy5wZXJzb24uaWQnLCAncGV0Lm93bmVyX2lkJylcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHNlbGVjdCAqIGZyb20gXCJtYW1tYWxzXCIuXCJwZXRcIlxuICAgICAqIGlubmVyIGpvaW4gXCJwdWJsaWNcIi5cInBlcnNvblwiXG4gICAgICogb24gXCJwdWJsaWNcIi5cInBlcnNvblwiLlwiaWRcIiA9IFwibWFtbWFsc1wiLlwicGV0XCIuXCJvd25lcl9pZFwiXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgd2l0aFNjaGVtYWAgaXMgc21hcnQgZW5vdWdoIHRvIG5vdCBhZGQgc2NoZW1hIGZvciBhbGlhc2VzLFxuICAgICAqIGNvbW1vbiB0YWJsZSBleHByZXNzaW9ucyBvciBvdGhlciBwbGFjZXMgd2hlcmUgdGhlIHNjaGVtYVxuICAgICAqIGRvZXNuJ3QgYmVsb25nIHRvOlxuICAgICAqXG4gICAgICogYGBgXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC53aXRoU2NoZW1hKCdtYW1tYWxzJylcbiAgICAgKiAgIC5zZWxlY3RGcm9tKCdwZXQgYXMgcCcpXG4gICAgICogICAuc2VsZWN0KCdwLm5hbWUnKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IFwicFwiLlwibmFtZVwiIGZyb20gXCJtYW1tYWxzXCIuXCJwZXRcIiBhcyBcInBcIlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHdpdGhTY2hlbWEoc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBuZXcgUXVlcnlDcmVhdG9yKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhQbHVnaW5BdEZyb250KG5ldyBXaXRoU2NoZW1hUGx1Z2luKHNjaGVtYSkpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2luc2VydC1xdWVyeS1idWlsZGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgcGFyc2VTZWxlY3RBcmcsIHBhcnNlU2VsZWN0QWxsLCB9IGZyb20gJy4uL3BhcnNlci9zZWxlY3QtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlSW5zZXJ0RXhwcmVzc2lvbiwgfSBmcm9tICcuLi9wYXJzZXIvaW5zZXJ0LXZhbHVlcy1wYXJzZXIuanMnO1xuaW1wb3J0IHsgSW5zZXJ0UXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaW5zZXJ0LXF1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgUXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVVwZGF0ZU9iamVjdEV4cHJlc3Npb24sIH0gZnJvbSAnLi4vcGFyc2VyL3VwZGF0ZS1zZXQtcGFyc2VyLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IE9uRHVwbGljYXRlS2V5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29uLWR1cGxpY2F0ZS1rZXktbm9kZS5qcyc7XG5pbXBvcnQgeyBJbnNlcnRSZXN1bHQgfSBmcm9tICcuL2luc2VydC1yZXN1bHQuanMnO1xuaW1wb3J0IHsgaXNOb1Jlc3VsdEVycm9yQ29uc3RydWN0b3IsIE5vUmVzdWx0RXJyb3IsIH0gZnJvbSAnLi9uby1yZXN1bHQtZXJyb3IuanMnO1xuaW1wb3J0IHsgcGFyc2VFeHByZXNzaW9uLCB9IGZyb20gJy4uL3BhcnNlci9leHByZXNzaW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBDb2x1bW5Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgT25Db25mbGljdEJ1aWxkZXIsIH0gZnJvbSAnLi9vbi1jb25mbGljdC1idWlsZGVyLmpzJztcbmltcG9ydCB7IE9uQ29uZmxpY3ROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb24tY29uZmxpY3Qtbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVRvcCB9IGZyb20gJy4uL3BhcnNlci90b3AtcGFyc2VyLmpzJztcbmltcG9ydCB7IE9yQWN0aW9uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29yLWFjdGlvbi1ub2RlLmpzJztcbmV4cG9ydCBjbGFzcyBJbnNlcnRRdWVyeUJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbHVlcyB0byBpbnNlcnQgZm9yIGFuIHtAbGluayBLeXNlbHkuaW5zZXJ0SW50byB8IGluc2VydH0gcXVlcnkuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCB0YWtlcyBhbiBvYmplY3Qgd2hvc2Uga2V5cyBhcmUgY29sdW1uIG5hbWVzIGFuZCB2YWx1ZXMgYXJlXG4gICAgICogdmFsdWVzIHRvIGluc2VydC4gSW4gYWRkaXRpb24gdG8gdGhlIGNvbHVtbidzIHR5cGUsIHRoZSB2YWx1ZXMgY2FuIGJlXG4gICAgICogcmF3IHtAbGluayBzcWx9IHNuaXBwZXRzIG9yIHNlbGVjdCBxdWVyaWVzLlxuICAgICAqXG4gICAgICogWW91IG11c3QgcHJvdmlkZSBhbGwgZmllbGRzIHlvdSBoYXZlbid0IGV4cGxpY2l0bHkgbWFya2VkIGFzIG51bGxhYmxlXG4gICAgICogb3Igb3B0aW9uYWwgdXNpbmcge0BsaW5rIEdlbmVyYXRlZH0gb3Ige0BsaW5rIENvbHVtblR5cGV9LlxuICAgICAqXG4gICAgICogVGhlIHJldHVybiB2YWx1ZSBvZiBhbiBgaW5zZXJ0YCBxdWVyeSBpcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgSW5zZXJ0UmVzdWx0fS4gVGhlXG4gICAgICoge0BsaW5rIEluc2VydFJlc3VsdC5pbnNlcnRJZCB8IGluc2VydElkfSBmaWVsZCBob2xkcyB0aGUgYXV0byBpbmNyZW1lbnRlZCBwcmltYXJ5XG4gICAgICoga2V5IGlmIHRoZSBkYXRhYmFzZSByZXR1cm5lZCBvbmUuXG4gICAgICpcbiAgICAgKiBPbiBQb3N0Z3JlU1FMIGFuZCBzb21lIG90aGVyIGRpYWxlY3RzLCB5b3UgbmVlZCB0byBjYWxsIGByZXR1cm5pbmdgIHRvIGdldFxuICAgICAqIHNvbWV0aGluZyBvdXQgb2YgdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogQWxzbyBzZWUgdGhlIHtAbGluayBleHByZXNzaW9ufSBtZXRob2QgZm9yIGluc2VydGluZyB0aGUgcmVzdWx0IG9mIGEgc2VsZWN0XG4gICAgICogcXVlcnkgb3IgYW55IG90aGVyIGV4cHJlc3Npb24uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJpbnNlcnRcIiwgXCJTaW5nbGUgcm93XCIsIDEwKSAtLT5cbiAgICAgKlxuICAgICAqIEluc2VydCBhIHNpbmdsZSByb3c6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gICAgICogICAuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSmVubmlmZXInLFxuICAgICAqICAgICBsYXN0X25hbWU6ICdBbmlzdG9uJyxcbiAgICAgKiAgICAgYWdlOiA0MFxuICAgICAqICAgfSlcbiAgICAgKiAgIC5leGVjdXRlVGFrZUZpcnN0KClcbiAgICAgKlxuICAgICAqIC8vIGBpbnNlcnRJZGAgaXMgb25seSBhdmFpbGFibGUgb24gZGlhbGVjdHMgdGhhdFxuICAgICAqIC8vIGF1dG9tYXRpY2FsbHkgcmV0dXJuIHRoZSBpZCBvZiB0aGUgaW5zZXJ0ZWQgcm93XG4gICAgICogLy8gc3VjaCBhcyBNeVNRTCBhbmQgU1FMaXRlLiBPbiBQb3N0Z3JlU1FMLCBmb3IgZXhhbXBsZSxcbiAgICAgKiAvLyB5b3UgbmVlZCB0byBhZGQgYSBgcmV0dXJuaW5nYCBjbGF1c2UgdG8gdGhlIHF1ZXJ5IHRvXG4gICAgICogLy8gZ2V0IGFueXRoaW5nIG91dC4gU2VlIHRoZSBcInJldHVybmluZyBkYXRhXCIgZXhhbXBsZS5cbiAgICAgKiBjb25zb2xlLmxvZyhyZXN1bHQuaW5zZXJ0SWQpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IGludG8gYHBlcnNvbmAgKGBmaXJzdF9uYW1lYCwgYGxhc3RfbmFtZWAsIGBhZ2VgKSB2YWx1ZXMgKD8sID8sID8pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiA8IS0tIHNpdGVFeGFtcGxlKFwiaW5zZXJ0XCIsIFwiTXVsdGlwbGUgcm93c1wiLCAyMCkgLS0+XG4gICAgICpcbiAgICAgKiBPbiBkaWFsZWN0cyB0aGF0IHN1cHBvcnQgaXQgKGZvciBleGFtcGxlIFBvc3RncmVTUUwpIHlvdSBjYW4gaW5zZXJ0IG11bHRpcGxlXG4gICAgICogcm93cyBieSBwcm92aWRpbmcgYW4gYXJyYXkuIE5vdGUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIGlzIG9uY2UgYWdhaW4gdmVyeVxuICAgICAqIGRpYWxlY3Qtc3BlY2lmaWMuIFNvbWUgZGF0YWJhc2VzIG1heSBvbmx5IHJldHVybiB0aGUgaWQgb2YgdGhlICpsYXN0KiBpbnNlcnRlZFxuICAgICAqIHJvdyBhbmQgc29tZSByZXR1cm4gbm90aGluZyBhdCBhbGwgdW5sZXNzIHlvdSBjYWxsIGByZXR1cm5pbmdgLlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAudmFsdWVzKFt7XG4gICAgICogICAgIGZpcnN0X25hbWU6ICdKZW5uaWZlcicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0FuaXN0b24nLFxuICAgICAqICAgICBhZ2U6IDQwLFxuICAgICAqICAgfSwge1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnQXJub2xkJyxcbiAgICAgKiAgICAgbGFzdF9uYW1lOiAnU2Nod2FyemVuZWdnZXInLFxuICAgICAqICAgICBhZ2U6IDcwLFxuICAgICAqICAgfV0pXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgaW50byBcInBlcnNvblwiIChcImZpcnN0X25hbWVcIiwgXCJsYXN0X25hbWVcIiwgXCJhZ2VcIikgdmFsdWVzICgoJDEsICQyLCAkMyksICgkNCwgJDUsICQ2KSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJpbnNlcnRcIiwgXCJSZXR1cm5pbmcgZGF0YVwiLCAzMCkgLS0+XG4gICAgICpcbiAgICAgKiBPbiBzdXBwb3J0ZWQgZGlhbGVjdHMgbGlrZSBQb3N0Z3JlU1FMIHlvdSBuZWVkIHRvIGNoYWluIGByZXR1cm5pbmdgIHRvIHRoZSBxdWVyeSB0byBnZXRcbiAgICAgKiB0aGUgaW5zZXJ0ZWQgcm93J3MgY29sdW1ucyAob3IgYW55IG90aGVyIGV4cHJlc3Npb24pIGFzIHRoZSByZXR1cm4gdmFsdWUuIGByZXR1cm5pbmdgXG4gICAgICogd29ya3MganVzdCBsaWtlIGBzZWxlY3RgLiBSZWZlciB0byBgc2VsZWN0YCBtZXRob2QncyBleGFtcGxlcyBhbmQgZG9jdW1lbnRhdGlvbiBmb3JcbiAgICAgKiBtb3JlIGluZm8uXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gICAgICogICAuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSmVubmlmZXInLFxuICAgICAqICAgICBsYXN0X25hbWU6ICdBbmlzdG9uJyxcbiAgICAgKiAgICAgYWdlOiA0MCxcbiAgICAgKiAgIH0pXG4gICAgICogICAucmV0dXJuaW5nKFsnaWQnLCAnZmlyc3RfbmFtZSBhcyBuYW1lJ10pXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IGludG8gXCJwZXJzb25cIiAoXCJmaXJzdF9uYW1lXCIsIFwibGFzdF9uYW1lXCIsIFwiYWdlXCIpIHZhbHVlcyAoJDEsICQyLCAkMykgcmV0dXJuaW5nIFwiaWRcIiwgXCJmaXJzdF9uYW1lXCIgYXMgXCJuYW1lXCJcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIDwhLS0gc2l0ZUV4YW1wbGUoXCJpbnNlcnRcIiwgXCJDb21wbGV4IHZhbHVlc1wiLCA0MCkgLS0+XG4gICAgICpcbiAgICAgKiBJbiBhZGRpdGlvbiB0byBwcmltaXRpdmVzLCB0aGUgdmFsdWVzIGNhbiBhbHNvIGJlIGFyYml0cmFyeSBleHByZXNzaW9ucy5cbiAgICAgKiBZb3UgY2FuIGJ1aWxkIHRoZSBleHByZXNzaW9ucyBieSB1c2luZyBhIGNhbGxiYWNrIGFuZCBjYWxsaW5nIHRoZSBtZXRob2RzXG4gICAgICogb24gdGhlIGV4cHJlc3Npb24gYnVpbGRlciBwYXNzZWQgdG8gaXQ6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGNvbnN0IGFuaSA9IFwiQW5pXCJcbiAgICAgKiBjb25zdCBzdG9uID0gXCJzdG9uXCJcbiAgICAgKlxuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gICAgICogICAuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC52YWx1ZXMoKHsgcmVmLCBzZWxlY3RGcm9tLCBmbiB9KSA9PiAoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSmVubmlmZXInLFxuICAgICAqICAgICBsYXN0X25hbWU6IHNxbDxzdHJpbmc+YGNvbmNhdCgke2FuaX0sICR7c3Rvbn0pYCxcbiAgICAgKiAgICAgbWlkZGxlX25hbWU6IHJlZignZmlyc3RfbmFtZScpLFxuICAgICAqICAgICBhZ2U6IHNlbGVjdEZyb20oJ3BlcnNvbicpXG4gICAgICogICAgICAgLnNlbGVjdChmbi5hdmc8bnVtYmVyPignYWdlJykuYXMoJ2F2Z19hZ2UnKSksXG4gICAgICogICB9KSlcbiAgICAgKiAgIC5leGVjdXRlVGFrZUZpcnN0KClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGVyc29uXCIgKFxuICAgICAqICAgXCJmaXJzdF9uYW1lXCIsXG4gICAgICogICBcImxhc3RfbmFtZVwiLFxuICAgICAqICAgXCJtaWRkbGVfbmFtZVwiLFxuICAgICAqICAgXCJhZ2VcIlxuICAgICAqIClcbiAgICAgKiB2YWx1ZXMgKFxuICAgICAqICAgJDEsXG4gICAgICogICBjb25jYXQoJDIsICQzKSxcbiAgICAgKiAgIFwiZmlyc3RfbmFtZVwiLFxuICAgICAqICAgKHNlbGVjdCBhdmcoXCJhZ2VcIikgYXMgXCJhdmdfYWdlXCIgZnJvbSBcInBlcnNvblwiKVxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFlvdSBjYW4gYWxzbyB1c2UgdGhlIGNhbGxiYWNrIHZlcnNpb24gb2Ygc3VicXVlcmllcyBvciByYXcgZXhwcmVzc2lvbnM6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLndpdGgoJ2plbm5pZmVyJywgKGRiKSA9PiBkYlxuICAgICAqICAgLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gICAgICogICAud2hlcmUoJ2ZpcnN0X25hbWUnLCAnPScsICdKZW5uaWZlcicpXG4gICAgICogICAuc2VsZWN0KFsnaWQnLCAnZmlyc3RfbmFtZScsICdnZW5kZXInXSlcbiAgICAgKiAgIC5saW1pdCgxKVxuICAgICAqICkuaW5zZXJ0SW50bygncGV0JykudmFsdWVzKChlYikgPT4gKHtcbiAgICAgKiAgIG93bmVyX2lkOiBlYi5zZWxlY3RGcm9tKCdqZW5uaWZlcicpLnNlbGVjdCgnaWQnKSxcbiAgICAgKiAgIG5hbWU6IGViLnNlbGVjdEZyb20oJ2plbm5pZmVyJykuc2VsZWN0KCdmaXJzdF9uYW1lJyksXG4gICAgICogICBzcGVjaWVzOiAnY2F0JyxcbiAgICAgKiB9KSlcbiAgICAgKiAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiB3aXRoIFwiamVubmlmZXJcIiBhcyAoXG4gICAgICogICBzZWxlY3QgXCJpZFwiLCBcImZpcnN0X25hbWVcIiwgXCJnZW5kZXJcIlxuICAgICAqICAgZnJvbSBcInBlcnNvblwiXG4gICAgICogICB3aGVyZSBcImZpcnN0X25hbWVcIiA9ICQxXG4gICAgICogICBsaW1pdCAkMlxuICAgICAqIClcbiAgICAgKiBpbnNlcnQgaW50byBcInBldFwiIChcIm93bmVyX2lkXCIsIFwibmFtZVwiLCBcInNwZWNpZXNcIilcbiAgICAgKiB2YWx1ZXMgKFxuICAgICAqICAoc2VsZWN0IFwiaWRcIiBmcm9tIFwiamVubmlmZXJcIiksXG4gICAgICogIChzZWxlY3QgXCJmaXJzdF9uYW1lXCIgZnJvbSBcImplbm5pZmVyXCIpLFxuICAgICAqICAkM1xuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB2YWx1ZXMoaW5zZXJ0KSB7XG4gICAgICAgIGNvbnN0IFtjb2x1bW5zLCB2YWx1ZXNdID0gcGFyc2VJbnNlcnRFeHByZXNzaW9uKGluc2VydCk7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBJbnNlcnRRdWVyeU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgdmFsdWVzLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb2x1bW5zIHRvIGluc2VydC5cbiAgICAgKlxuICAgICAqIFRoZSB7QGxpbmsgdmFsdWVzfSBtZXRob2Qgc2V0cyBib3RoIHRoZSBjb2x1bW5zIGFuZCB0aGUgdmFsdWVzIGFuZCB0aGlzIG1ldGhvZFxuICAgICAqIGlzIG5vdCBuZWVkZWQuIEJ1dCBpZiB5b3UgYXJlIHVzaW5nIHRoZSB7QGxpbmsgZXhwcmVzc2lvbn0gbWV0aG9kLCB5b3UgY2FuIHVzZVxuICAgICAqIHRoaXMgbWV0aG9kIHRvIHNldCB0aGUgY29sdW1ucyB0byBpbnNlcnQuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC5jb2x1bW5zKFsnZmlyc3RfbmFtZSddKVxuICAgICAqICAgLmV4cHJlc3Npb24oKGViKSA9PiBlYi5zZWxlY3RGcm9tKCdwZXQnKS5zZWxlY3QoJ3BldC5uYW1lJykpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgaW50byBcInBlcnNvblwiIChcImZpcnN0X25hbWVcIilcbiAgICAgKiBzZWxlY3QgXCJwZXRcIi5cIm5hbWVcIiBmcm9tIFwicGV0XCJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb2x1bW5zKGNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IEluc2VydFF1ZXJ5Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMucXVlcnlOb2RlLCB7XG4gICAgICAgICAgICAgICAgY29sdW1uczogZnJlZXplKGNvbHVtbnMubWFwKENvbHVtbk5vZGUuY3JlYXRlKSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluc2VydCBhbiBhcmJpdHJhcnkgZXhwcmVzc2lvbi4gRm9yIGV4YW1wbGUgdGhlIHJlc3VsdCBvZiBhIHNlbGVjdCBxdWVyeS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogPCEtLSBzaXRlRXhhbXBsZShcImluc2VydFwiLCBcIkluc2VydCBzdWJxdWVyeVwiLCA1MCkgLS0+XG4gICAgICpcbiAgICAgKiBZb3UgY2FuIGNyZWF0ZSBhbiBgSU5TRVJUIElOVE8gU0VMRUNUIEZST01gIHF1ZXJ5IHVzaW5nIHRoZSBgZXhwcmVzc2lvbmAgbWV0aG9kLlxuICAgICAqIFRoaXMgQVBJIGRvZXNuJ3QgZm9sbG93IG91ciBXWVNJV1lHIHByaW5jaXBsZXMgYW5kIG1pZ2h0IGJlIGEgYml0IGRpZmZpY3VsdCB0b1xuICAgICAqIHJlbWVtYmVyLiBUaGUgcmVhc29ucyBmb3IgdGhpcyBkZXNpZ24gc3RlbSBmcm9tIGltcGxlbWVudGF0aW9uIGRpZmZpY3VsdGllcy5cbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC5jb2x1bW5zKFsnZmlyc3RfbmFtZScsICdsYXN0X25hbWUnLCAnYWdlJ10pXG4gICAgICogICAuZXhwcmVzc2lvbigoZWIpID0+IGViXG4gICAgICogICAgIC5zZWxlY3RGcm9tKCdwZXQnKVxuICAgICAqICAgICAuc2VsZWN0KChlYikgPT4gW1xuICAgICAqICAgICAgICdwZXQubmFtZScsXG4gICAgICogICAgICAgZWIudmFsKCdQZXRzb24nKS5hcygnbGFzdF9uYW1lJyksXG4gICAgICogICAgICAgZWIubGl0KDcpLmFzKCdhZ2UnKSxcbiAgICAgKiAgICAgXSlcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGVyc29uXCIgKFwiZmlyc3RfbmFtZVwiLCBcImxhc3RfbmFtZVwiLCBcImFnZVwiKVxuICAgICAqIHNlbGVjdCBcInBldFwiLlwibmFtZVwiLCAkMSBhcyBcImxhc3RfbmFtZVwiLCA3IGFzIFwiYWdlIGZyb20gXCJwZXRcIlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGV4cHJlc3Npb24oZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogSW5zZXJ0UXVlcnlOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHBhcnNlRXhwcmVzc2lvbihleHByZXNzaW9uKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBgaW5zZXJ0IGludG8gXCJwZXJzb25cIiBkZWZhdWx0IHZhbHVlc2AgcXVlcnkuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC5kZWZhdWx0VmFsdWVzKClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGVyc29uXCIgZGVmYXVsdCB2YWx1ZXNcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkZWZhdWx0VmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogSW5zZXJ0UXVlcnlOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVzOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZCBhbnkgYWRkaXRpb25hbCBTUUwgdG8gdGhlIGVuZCBvZiB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSm9obicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0RvZScsXG4gICAgICogICAgIGdlbmRlcjogJ21hbGUnLFxuICAgICAqICAgfSlcbiAgICAgKiAgIC5tb2RpZnlFbmQoc3FsYC0tIFRoaXMgaXMgYSBjb21tZW50YClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgaW50byBgcGVyc29uYCAoXCJmaXJzdF9uYW1lXCIsIFwibGFzdF9uYW1lXCIsIFwiZ2VuZGVyXCIpXG4gICAgICogdmFsdWVzICg/LCA/LCA/KSAtLSBUaGlzIGlzIGEgY29tbWVudFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG1vZGlmeUVuZChtb2RpZmllcikge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEVuZE1vZGlmaWVyKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgbW9kaWZpZXIudG9PcGVyYXRpb25Ob2RlKCkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBhbiBgaW5zZXJ0IGludG9gIHF1ZXJ5IHRvIGFuIGBpbnNlcnQgaWdub3JlIGludG9gIHF1ZXJ5LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIGRpYWxlY3RzIGxpa2UgTXlTUUwuXG4gICAgICpcbiAgICAgKiBUbyBhdm9pZCBhIGZvb3RndW4sIHdoZW4gaW52b2tlZCB3aXRoIHRoZSBTUUxpdGUgZGlhbGVjdCwgdGhpcyBtZXRob2Qgd2lsbFxuICAgICAqIGJlIGhhbmRsZWQgbGlrZSB7QGxpbmsgb3JJZ25vcmV9LiBTZWUgYWxzbywge0BsaW5rIG9yQWJvcnR9LCB7QGxpbmsgb3JGYWlsfSxcbiAgICAgKiB7QGxpbmsgb3JSZXBsYWNlfSwgYW5kIHtAbGluayBvclJvbGxiYWNrfS5cbiAgICAgKlxuICAgICAqIElmIHlvdSB1c2UgdGhlIGlnbm9yZSBtb2RpZmllciwgaWdub3JhYmxlIGVycm9ycyB0aGF0IG9jY3VyIHdoaWxlIGV4ZWN1dGluZyB0aGVcbiAgICAgKiBpbnNlcnQgc3RhdGVtZW50IGFyZSBpZ25vcmVkLiBGb3IgZXhhbXBsZSwgd2l0aG91dCBpZ25vcmUsIGEgcm93IHRoYXQgZHVwbGljYXRlc1xuICAgICAqIGFuIGV4aXN0aW5nIHVuaXF1ZSBpbmRleCBvciBwcmltYXJ5IGtleSB2YWx1ZSBpbiB0aGUgdGFibGUgY2F1c2VzIGEgZHVwbGljYXRlLWtleVxuICAgICAqIGVycm9yIGFuZCB0aGUgc3RhdGVtZW50IGlzIGFib3J0ZWQuIFdpdGggaWdub3JlLCB0aGUgcm93IGlzIGRpc2NhcmRlZCBhbmQgbm8gZXJyb3JcbiAgICAgKiBvY2N1cnMuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC5pZ25vcmUoKVxuICAgICAqICAgLnZhbHVlcyh7XG4gICAgICogICAgIGZpcnN0X25hbWU6ICdKb2huJyxcbiAgICAgKiAgICAgbGFzdF9uYW1lOiAnRG9lJyxcbiAgICAgKiAgICAgZ2VuZGVyOiAnZmVtYWxlJyxcbiAgICAgKiAgIH0pXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IGlnbm9yZSBpbnRvIGBwZXJzb25gIChgZmlyc3RfbmFtZWAsIGBsYXN0X25hbWVgLCBgZ2VuZGVyYCkgdmFsdWVzICg/LCA/LCA/KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgb3IgaWdub3JlIGludG8gXCJwZXJzb25cIiAoXCJmaXJzdF9uYW1lXCIsIFwibGFzdF9uYW1lXCIsIFwiZ2VuZGVyXCIpIHZhbHVlcyAoPywgPywgPylcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBpZ25vcmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBJbnNlcnRRdWVyeU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwge1xuICAgICAgICAgICAgICAgIG9yQWN0aW9uOiBPckFjdGlvbk5vZGUuY3JlYXRlKCdpZ25vcmUnKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBhbiBgaW5zZXJ0IGludG9gIHF1ZXJ5IHRvIGFuIGBpbnNlcnQgb3IgaWdub3JlIGludG9gIHF1ZXJ5LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIGRpYWxlY3RzIGxpa2UgU1FMaXRlLlxuICAgICAqXG4gICAgICogVG8gYXZvaWQgYSBmb290Z3VuLCB3aGVuIGludm9rZWQgd2l0aCB0aGUgTXlTUUwgZGlhbGVjdCwgdGhpcyBtZXRob2Qgd2lsbFxuICAgICAqIGJlIGhhbmRsZWQgbGlrZSB7QGxpbmsgaWdub3JlfS5cbiAgICAgKlxuICAgICAqIFNlZSBhbHNvLCB7QGxpbmsgb3JBYm9ydH0sIHtAbGluayBvckZhaWx9LCB7QGxpbmsgb3JSZXBsYWNlfSwgYW5kIHtAbGluayBvclJvbGxiYWNrfS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5pbnNlcnRJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLm9ySWdub3JlKClcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSm9obicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0RvZScsXG4gICAgICogICAgIGdlbmRlcjogJ2ZlbWFsZScsXG4gICAgICogICB9KVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgb3IgaWdub3JlIGludG8gXCJwZXJzb25cIiAoXCJmaXJzdF9uYW1lXCIsIFwibGFzdF9uYW1lXCIsIFwiZ2VuZGVyXCIpIHZhbHVlcyAoPywgPywgPylcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgaWdub3JlIGludG8gYHBlcnNvbmAgKGBmaXJzdF9uYW1lYCwgYGxhc3RfbmFtZWAsIGBnZW5kZXJgKSB2YWx1ZXMgKD8sID8sID8pXG4gICAgICogYGBgXG4gICAgICovXG4gICAgb3JJZ25vcmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBJbnNlcnRRdWVyeU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwge1xuICAgICAgICAgICAgICAgIG9yQWN0aW9uOiBPckFjdGlvbk5vZGUuY3JlYXRlKCdpZ25vcmUnKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBhbiBgaW5zZXJ0IGludG9gIHF1ZXJ5IHRvIGFuIGBpbnNlcnQgb3IgYWJvcnQgaW50b2AgcXVlcnkuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHNvbWUgZGlhbGVjdHMgbGlrZSBTUUxpdGUuXG4gICAgICpcbiAgICAgKiBTZWUgYWxzbywge0BsaW5rIG9ySWdub3JlfSwge0BsaW5rIG9yRmFpbH0sIHtAbGluayBvclJlcGxhY2V9LCBhbmQge0BsaW5rIG9yUm9sbGJhY2t9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAub3JBYm9ydCgpXG4gICAgICogICAudmFsdWVzKHtcbiAgICAgKiAgICAgZmlyc3RfbmFtZTogJ0pvaG4nLFxuICAgICAqICAgICBsYXN0X25hbWU6ICdEb2UnLFxuICAgICAqICAgICBnZW5kZXI6ICdmZW1hbGUnLFxuICAgICAqICAgfSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChTUUxpdGUpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IG9yIGFib3J0IGludG8gXCJwZXJzb25cIiAoXCJmaXJzdF9uYW1lXCIsIFwibGFzdF9uYW1lXCIsIFwiZ2VuZGVyXCIpIHZhbHVlcyAoPywgPywgPylcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBvckFib3J0KCkge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogSW5zZXJ0UXVlcnlOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHtcbiAgICAgICAgICAgICAgICBvckFjdGlvbjogT3JBY3Rpb25Ob2RlLmNyZWF0ZSgnYWJvcnQnKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBhbiBgaW5zZXJ0IGludG9gIHF1ZXJ5IHRvIGFuIGBpbnNlcnQgb3IgZmFpbCBpbnRvYCBxdWVyeS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgYnkgc29tZSBkaWFsZWN0cyBsaWtlIFNRTGl0ZS5cbiAgICAgKlxuICAgICAqIFNlZSBhbHNvLCB7QGxpbmsgb3JJZ25vcmV9LCB7QGxpbmsgb3JBYm9ydH0sIHtAbGluayBvclJlcGxhY2V9LCBhbmQge0BsaW5rIG9yUm9sbGJhY2t9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAub3JGYWlsKClcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSm9obicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0RvZScsXG4gICAgICogICAgIGdlbmRlcjogJ2ZlbWFsZScsXG4gICAgICogICB9KVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgb3IgZmFpbCBpbnRvIFwicGVyc29uXCIgKFwiZmlyc3RfbmFtZVwiLCBcImxhc3RfbmFtZVwiLCBcImdlbmRlclwiKSB2YWx1ZXMgKD8sID8sID8pXG4gICAgICogYGBgXG4gICAgICovXG4gICAgb3JGYWlsKCkge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogSW5zZXJ0UXVlcnlOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHtcbiAgICAgICAgICAgICAgICBvckFjdGlvbjogT3JBY3Rpb25Ob2RlLmNyZWF0ZSgnZmFpbCcpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGFuIGBpbnNlcnQgaW50b2AgcXVlcnkgdG8gYW4gYGluc2VydCBvciByZXBsYWNlIGludG9gIHF1ZXJ5LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIGRpYWxlY3RzIGxpa2UgU1FMaXRlLlxuICAgICAqXG4gICAgICogWW91IGNhbiBhbHNvIHVzZSB7QGxpbmsgS3lzZWx5LnJlcGxhY2VJbnRvfSB0byBhY2hpZXZlIHRoZSBzYW1lIHJlc3VsdC5cbiAgICAgKlxuICAgICAqIFNlZSBhbHNvLCB7QGxpbmsgb3JJZ25vcmV9LCB7QGxpbmsgb3JBYm9ydH0sIHtAbGluayBvckZhaWx9LCBhbmQge0BsaW5rIG9yUm9sbGJhY2t9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAub3JSZXBsYWNlKClcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSm9obicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0RvZScsXG4gICAgICogICAgIGdlbmRlcjogJ2ZlbWFsZScsXG4gICAgICogICB9KVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgb3IgcmVwbGFjZSBpbnRvIFwicGVyc29uXCIgKFwiZmlyc3RfbmFtZVwiLCBcImxhc3RfbmFtZVwiLCBcImdlbmRlclwiKSB2YWx1ZXMgKD8sID8sID8pXG4gICAgICogYGBgXG4gICAgICovXG4gICAgb3JSZXBsYWNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogSW5zZXJ0UXVlcnlOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHtcbiAgICAgICAgICAgICAgICBvckFjdGlvbjogT3JBY3Rpb25Ob2RlLmNyZWF0ZSgncmVwbGFjZScpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGFuIGBpbnNlcnQgaW50b2AgcXVlcnkgdG8gYW4gYGluc2VydCBvciByb2xsYmFjayBpbnRvYCBxdWVyeS5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgYnkgc29tZSBkaWFsZWN0cyBsaWtlIFNRTGl0ZS5cbiAgICAgKlxuICAgICAqIFNlZSBhbHNvLCB7QGxpbmsgb3JJZ25vcmV9LCB7QGxpbmsgb3JBYm9ydH0sIHtAbGluayBvckZhaWx9LCBhbmQge0BsaW5rIG9yUmVwbGFjZX0uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC5vclJvbGxiYWNrKClcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSm9obicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0RvZScsXG4gICAgICogICAgIGdlbmRlcjogJ2ZlbWFsZScsXG4gICAgICogICB9KVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFNRTGl0ZSk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgb3Igcm9sbGJhY2sgaW50byBcInBlcnNvblwiIChcImZpcnN0X25hbWVcIiwgXCJsYXN0X25hbWVcIiwgXCJnZW5kZXJcIikgdmFsdWVzICg/LCA/LCA/KVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG9yUm9sbGJhY2soKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBJbnNlcnRRdWVyeU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwge1xuICAgICAgICAgICAgICAgIG9yQWN0aW9uOiBPckFjdGlvbk5vZGUuY3JlYXRlKCdyb2xsYmFjaycpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIGFuIGBpbnNlcnQgaW50b2AgcXVlcnkgdG8gYW4gYGluc2VydCB0b3AgaW50b2AgcXVlcnkuXG4gICAgICpcbiAgICAgKiBgdG9wYCBjbGF1c2UgaXMgb25seSBzdXBwb3J0ZWQgYnkgc29tZSBkaWFsZWN0cyBsaWtlIE1TIFNRTCBTZXJ2ZXIuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIEluc2VydCB0aGUgZmlyc3QgNSByb3dzOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYi5pbnNlcnRJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnRvcCg1KVxuICAgICAqICAgLmNvbHVtbnMoWydmaXJzdF9uYW1lJywgJ2dlbmRlciddKVxuICAgICAqICAgLmV4cHJlc3Npb24oXG4gICAgICogICAgIChlYikgPT4gZWIuc2VsZWN0RnJvbSgncGV0Jykuc2VsZWN0KFsnbmFtZScsIHNxbC5saXQoJ290aGVyJykuYXMoJ2dlbmRlcicpXSlcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNUyBTUUwgU2VydmVyKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCB0b3AoNSkgaW50byBcInBlcnNvblwiIChcImZpcnN0X25hbWVcIiwgXCJnZW5kZXJcIikgc2VsZWN0IFwibmFtZVwiLCAnb3RoZXInIGFzIFwiZ2VuZGVyXCIgZnJvbSBcInBldFwiXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBJbnNlcnQgdGhlIGZpcnN0IDUwIHBlcmNlbnQgb2Ygcm93czpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC50b3AoNTAsICdwZXJjZW50JylcbiAgICAgKiAgIC5jb2x1bW5zKFsnZmlyc3RfbmFtZScsICdnZW5kZXInXSlcbiAgICAgKiAgIC5leHByZXNzaW9uKFxuICAgICAqICAgICAoZWIpID0+IGViLnNlbGVjdEZyb20oJ3BldCcpLnNlbGVjdChbJ25hbWUnLCBzcWwubGl0KCdvdGhlcicpLmFzKCdnZW5kZXInKV0pXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTVMgU1FMIFNlcnZlcik6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgdG9wKDUwKSBwZXJjZW50IGludG8gXCJwZXJzb25cIiAoXCJmaXJzdF9uYW1lXCIsIFwiZ2VuZGVyXCIpIHNlbGVjdCBcIm5hbWVcIiwgJ290aGVyJyBhcyBcImdlbmRlclwiIGZyb20gXCJwZXRcIlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRvcChleHByZXNzaW9uLCBtb2RpZmllcnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhUb3AodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVRvcChleHByZXNzaW9uLCBtb2RpZmllcnMpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gYG9uIGNvbmZsaWN0YCBjbGF1c2UgdG8gdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogYG9uIGNvbmZsaWN0YCBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIGRpYWxlY3RzIGxpa2UgUG9zdGdyZVNRTCBhbmQgU1FMaXRlLiBPbiBNeVNRTFxuICAgICAqIHlvdSBjYW4gdXNlIHtAbGluayBpZ25vcmV9IGFuZCB7QGxpbmsgb25EdXBsaWNhdGVLZXlVcGRhdGV9IHRvIGFjaGlldmUgc2ltaWxhciByZXN1bHRzLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiXG4gICAgICogICAuaW5zZXJ0SW50bygncGV0JylcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBuYW1lOiAnQ2F0dG8nLFxuICAgICAqICAgICBzcGVjaWVzOiAnY2F0JyxcbiAgICAgKiAgICAgb3duZXJfaWQ6IDMsXG4gICAgICogICB9KVxuICAgICAqICAgLm9uQ29uZmxpY3QoKG9jKSA9PiBvY1xuICAgICAqICAgICAuY29sdW1uKCduYW1lJylcbiAgICAgKiAgICAgLmRvVXBkYXRlU2V0KHsgc3BlY2llczogJ2hhbXN0ZXInIH0pXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgaW50byBcInBldFwiIChcIm5hbWVcIiwgXCJzcGVjaWVzXCIsIFwib3duZXJfaWRcIilcbiAgICAgKiB2YWx1ZXMgKCQxLCAkMiwgJDMpXG4gICAgICogb24gY29uZmxpY3QgKFwibmFtZVwiKVxuICAgICAqIGRvIHVwZGF0ZSBzZXQgXCJzcGVjaWVzXCIgPSAkNFxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogWW91IGNhbiBwcm92aWRlIHRoZSBuYW1lIG9mIHRoZSBjb25zdHJhaW50IGluc3RlYWQgb2YgYSBjb2x1bW4gbmFtZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC5pbnNlcnRJbnRvKCdwZXQnKVxuICAgICAqICAgLnZhbHVlcyh7XG4gICAgICogICAgIG5hbWU6ICdDYXR0bycsXG4gICAgICogICAgIHNwZWNpZXM6ICdjYXQnLFxuICAgICAqICAgICBvd25lcl9pZDogMyxcbiAgICAgKiAgIH0pXG4gICAgICogICAub25Db25mbGljdCgob2MpID0+IG9jXG4gICAgICogICAgIC5jb25zdHJhaW50KCdwZXRfbmFtZV9rZXknKVxuICAgICAqICAgICAuZG9VcGRhdGVTZXQoeyBzcGVjaWVzOiAnaGFtc3RlcicgfSlcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGV0XCIgKFwibmFtZVwiLCBcInNwZWNpZXNcIiwgXCJvd25lcl9pZFwiKVxuICAgICAqIHZhbHVlcyAoJDEsICQyLCAkMylcbiAgICAgKiBvbiBjb25mbGljdCBvbiBjb25zdHJhaW50IFwicGV0X25hbWVfa2V5XCJcbiAgICAgKiBkbyB1cGRhdGUgc2V0IFwic3BlY2llc1wiID0gJDRcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGFuIGV4cHJlc3Npb24gYXMgdGhlIGNvbmZsaWN0IHRhcmdldCBpbiBjYXNlXG4gICAgICogdGhlIHVuaXF1ZSBpbmRleCBpcyBhbiBleHByZXNzaW9uIGluZGV4OlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLmluc2VydEludG8oJ3BldCcpXG4gICAgICogICAudmFsdWVzKHtcbiAgICAgKiAgICAgbmFtZTogJ0NhdHRvJyxcbiAgICAgKiAgICAgc3BlY2llczogJ2NhdCcsXG4gICAgICogICAgIG93bmVyX2lkOiAzLFxuICAgICAqICAgfSlcbiAgICAgKiAgIC5vbkNvbmZsaWN0KChvYykgPT4gb2NcbiAgICAgKiAgICAgLmV4cHJlc3Npb24oc3FsPHN0cmluZz5gbG93ZXIobmFtZSlgKVxuICAgICAqICAgICAuZG9VcGRhdGVTZXQoeyBzcGVjaWVzOiAnaGFtc3RlcicgfSlcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGV0XCIgKFwibmFtZVwiLCBcInNwZWNpZXNcIiwgXCJvd25lcl9pZFwiKVxuICAgICAqIHZhbHVlcyAoJDEsICQyLCAkMylcbiAgICAgKiBvbiBjb25mbGljdCAobG93ZXIobmFtZSkpXG4gICAgICogZG8gdXBkYXRlIHNldCBcInNwZWNpZXNcIiA9ICQ0XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIGFkZCBhIGZpbHRlciBmb3IgdGhlIHVwZGF0ZSBzdGF0ZW1lbnQgbGlrZSB0aGlzOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLmluc2VydEludG8oJ3BldCcpXG4gICAgICogICAudmFsdWVzKHtcbiAgICAgKiAgICAgbmFtZTogJ0NhdHRvJyxcbiAgICAgKiAgICAgc3BlY2llczogJ2NhdCcsXG4gICAgICogICAgIG93bmVyX2lkOiAzLFxuICAgICAqICAgfSlcbiAgICAgKiAgIC5vbkNvbmZsaWN0KChvYykgPT4gb2NcbiAgICAgKiAgICAgLmNvbHVtbignbmFtZScpXG4gICAgICogICAgIC5kb1VwZGF0ZVNldCh7IHNwZWNpZXM6ICdoYW1zdGVyJyB9KVxuICAgICAqICAgICAud2hlcmUoJ2V4Y2x1ZGVkLm5hbWUnLCAnIT0nLCAnQ2F0dG8nKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IGludG8gXCJwZXRcIiAoXCJuYW1lXCIsIFwic3BlY2llc1wiLCBcIm93bmVyX2lkXCIpXG4gICAgICogdmFsdWVzICgkMSwgJDIsICQzKVxuICAgICAqIG9uIGNvbmZsaWN0IChcIm5hbWVcIilcbiAgICAgKiBkbyB1cGRhdGUgc2V0IFwic3BlY2llc1wiID0gJDRcbiAgICAgKiB3aGVyZSBcImV4Y2x1ZGVkXCIuXCJuYW1lXCIgIT0gJDVcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFlvdSBjYW4gY3JlYXRlIGFuIGBvbiBjb25mbGljdCBkbyBub3RoaW5nYCBjbGF1c2VzIGxpa2UgdGhpczpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC5pbnNlcnRJbnRvKCdwZXQnKVxuICAgICAqICAgLnZhbHVlcyh7XG4gICAgICogICAgIG5hbWU6ICdDYXR0bycsXG4gICAgICogICAgIHNwZWNpZXM6ICdjYXQnLFxuICAgICAqICAgICBvd25lcl9pZDogMyxcbiAgICAgKiAgIH0pXG4gICAgICogICAub25Db25mbGljdCgob2MpID0+IG9jXG4gICAgICogICAgIC5jb2x1bW4oJ25hbWUnKVxuICAgICAqICAgICAuZG9Ob3RoaW5nKClcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGV0XCIgKFwibmFtZVwiLCBcInNwZWNpZXNcIiwgXCJvd25lcl9pZFwiKVxuICAgICAqIHZhbHVlcyAoJDEsICQyLCAkMylcbiAgICAgKiBvbiBjb25mbGljdCAoXCJuYW1lXCIpIGRvIG5vdGhpbmdcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFlvdSBjYW4gcmVmZXIgdG8gdGhlIGNvbHVtbnMgb2YgdGhlIHZpcnR1YWwgYGV4Y2x1ZGVkYCB0YWJsZVxuICAgICAqIGluIGEgdHlwZS1zYWZlIHdheSB1c2luZyBhIGNhbGxiYWNrIGFuZCB0aGUgYHJlZmAgbWV0aG9kIG9mXG4gICAgICogYEV4cHJlc3Npb25CdWlsZGVyYDpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuaW5zZXJ0SW50bygncGVyc29uJylcbiAgICAgKiAgIC52YWx1ZXMoe1xuICAgICAqICAgICBpZDogMSxcbiAgICAgKiAgICAgZmlyc3RfbmFtZTogJ0pvaG4nLFxuICAgICAqICAgICBsYXN0X25hbWU6ICdEb2UnLFxuICAgICAqICAgICBnZW5kZXI6ICdtYWxlJyxcbiAgICAgKiAgIH0pXG4gICAgICogICAub25Db25mbGljdChvYyA9PiBvY1xuICAgICAqICAgICAuY29sdW1uKCdpZCcpXG4gICAgICogICAgIC5kb1VwZGF0ZVNldCh7XG4gICAgICogICAgICAgZmlyc3RfbmFtZTogKGViKSA9PiBlYi5yZWYoJ2V4Y2x1ZGVkLmZpcnN0X25hbWUnKSxcbiAgICAgKiAgICAgICBsYXN0X25hbWU6IChlYikgPT4gZWIucmVmKCdleGNsdWRlZC5sYXN0X25hbWUnKVxuICAgICAqICAgICB9KVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IGludG8gXCJwZXJzb25cIiAoXCJpZFwiLCBcImZpcnN0X25hbWVcIiwgXCJsYXN0X25hbWVcIiwgXCJnZW5kZXJcIilcbiAgICAgKiB2YWx1ZXMgKCQxLCAkMiwgJDMsICQ0KVxuICAgICAqIG9uIGNvbmZsaWN0IChcImlkXCIpXG4gICAgICogZG8gdXBkYXRlIHNldFxuICAgICAqICBcImZpcnN0X25hbWVcIiA9IFwiZXhjbHVkZWRcIi5cImZpcnN0X25hbWVcIixcbiAgICAgKiAgXCJsYXN0X25hbWVcIiA9IFwiZXhjbHVkZWRcIi5cImxhc3RfbmFtZVwiXG4gICAgICogYGBgXG4gICAgICovXG4gICAgb25Db25mbGljdChjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogSW5zZXJ0UXVlcnlOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHtcbiAgICAgICAgICAgICAgICBvbkNvbmZsaWN0OiBjYWxsYmFjayhuZXcgT25Db25mbGljdEJ1aWxkZXIoe1xuICAgICAgICAgICAgICAgICAgICBvbkNvbmZsaWN0Tm9kZTogT25Db25mbGljdE5vZGUuY3JlYXRlKCksXG4gICAgICAgICAgICAgICAgfSkpLnRvT3BlcmF0aW9uTm9kZSgpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGBvbiBkdXBsaWNhdGUga2V5IHVwZGF0ZWAgdG8gdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogSWYgeW91IHNwZWNpZnkgYG9uIGR1cGxpY2F0ZSBrZXkgdXBkYXRlYCwgYW5kIGEgcm93IGlzIGluc2VydGVkIHRoYXQgd291bGQgY2F1c2VcbiAgICAgKiBhIGR1cGxpY2F0ZSB2YWx1ZSBpbiBhIHVuaXF1ZSBpbmRleCBvciBwcmltYXJ5IGtleSwgYW4gdXBkYXRlIG9mIHRoZSBvbGQgcm93IG9jY3Vycy5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgb25seSBpbXBsZW1lbnRlZCBieSBzb21lIGRpYWxlY3RzIGxpa2UgTXlTUUwuIE9uIG1vc3QgZGlhbGVjdHMgeW91IHNob3VsZFxuICAgICAqIHVzZSB7QGxpbmsgb25Db25mbGljdH0gaW5zdGVhZC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAudmFsdWVzKHtcbiAgICAgKiAgICAgaWQ6IDEsXG4gICAgICogICAgIGZpcnN0X25hbWU6ICdKb2huJyxcbiAgICAgKiAgICAgbGFzdF9uYW1lOiAnRG9lJyxcbiAgICAgKiAgICAgZ2VuZGVyOiAnbWFsZScsXG4gICAgICogICB9KVxuICAgICAqICAgLm9uRHVwbGljYXRlS2V5VXBkYXRlKHsgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0pXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogaW5zZXJ0IGludG8gYHBlcnNvbmAgKGBpZGAsIGBmaXJzdF9uYW1lYCwgYGxhc3RfbmFtZWAsIGBnZW5kZXJgKVxuICAgICAqIHZhbHVlcyAoPywgPywgPywgPylcbiAgICAgKiBvbiBkdXBsaWNhdGUga2V5IHVwZGF0ZSBgdXBkYXRlZF9hdGAgPSA/XG4gICAgICogYGBgXG4gICAgICovXG4gICAgb25EdXBsaWNhdGVLZXlVcGRhdGUodXBkYXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBJbnNlcnRRdWVyeU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwge1xuICAgICAgICAgICAgICAgIG9uRHVwbGljYXRlS2V5OiBPbkR1cGxpY2F0ZUtleU5vZGUuY3JlYXRlKHBhcnNlVXBkYXRlT2JqZWN0RXhwcmVzc2lvbih1cGRhdGUpKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuaW5nKHNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFJldHVybmluZyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QXJnKHNlbGVjdGlvbikpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuaW5nQWxsKCkge1xuICAgICAgICByZXR1cm4gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFJldHVybmluZyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QWxsKCkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3V0cHV0KGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhPdXRwdXQodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVNlbGVjdEFyZyhhcmdzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvdXRwdXRBbGwodGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhPdXRwdXQodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVNlbGVjdEFsbCh0YWJsZSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xlYXJzIGFsbCBgcmV0dXJuaW5nYCBjbGF1c2VzIGZyb20gdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAudmFsdWVzKHsgZmlyc3RfbmFtZTogJ0phbWVzJywgbGFzdF9uYW1lOiAnU21pdGgnLCBnZW5kZXI6ICdtYWxlJyB9KVxuICAgICAqICAgLnJldHVybmluZyhbJ2ZpcnN0X25hbWUnXSlcbiAgICAgKiAgIC5jbGVhclJldHVybmluZygpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGVyc29uXCIgKFwiZmlyc3RfbmFtZVwiLCBcImxhc3RfbmFtZVwiLCBcImdlbmRlclwiKSB2YWx1ZXMgKCQxLCAkMiwgJDMpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgY2xlYXJSZXR1cm5pbmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRob3V0UmV0dXJuaW5nKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqXG4gICAgICogSWYgeW91IHdhbnQgdG8gY29uZGl0aW9uYWxseSBjYWxsIGEgbWV0aG9kIG9uIGB0aGlzYCwgc2VlXG4gICAgICogdGhlIHtAbGluayAkaWZ9IG1ldGhvZC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogVGhlIG5leHQgZXhhbXBsZSB1c2VzIGEgaGVscGVyIGZ1bmN0aW9uIGBsb2dgIHRvIGxvZyBhIHF1ZXJ5OlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgdHlwZSB7IENvbXBpbGFibGUgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBsb2c8VCBleHRlbmRzIENvbXBpbGFibGU+KHFiOiBUKTogVCB7XG4gICAgICogICBjb25zb2xlLmxvZyhxYi5jb21waWxlKCkpXG4gICAgICogICByZXR1cm4gcWJcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBhd2FpdCBkYi5pbnNlcnRJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnZhbHVlcyh7IGZpcnN0X25hbWU6ICdKb2huJywgbGFzdF9uYW1lOiAnRG9lJywgZ2VuZGVyOiAnbWFsZScgfSlcbiAgICAgKiAgIC4kY2FsbChsb2cpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FsbCBgZnVuYyh0aGlzKWAgaWYgYGNvbmRpdGlvbmAgaXMgdHJ1ZS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGVzcGVjaWFsbHkgaGFuZHkgd2l0aCBvcHRpb25hbCBzZWxlY3RzLiBBbnkgYHJldHVybmluZ2Agb3IgYHJldHVybmluZ0FsbGBcbiAgICAgKiBtZXRob2QgY2FsbHMgYWRkIGNvbHVtbnMgYXMgb3B0aW9uYWwgZmllbGRzIHRvIHRoZSBvdXRwdXQgdHlwZSB3aGVuIGNhbGxlZCBpbnNpZGVcbiAgICAgKiB0aGUgYGZ1bmNgIGNhbGxiYWNrLiBUaGlzIGlzIGJlY2F1c2Ugd2UgY2FuJ3Qga25vdyBpZiB0aG9zZSBzZWxlY3Rpb25zIHdlcmUgYWN0dWFsbHlcbiAgICAgKiBtYWRlIGJlZm9yZSBydW5uaW5nIHRoZSBjb2RlLlxuICAgICAqXG4gICAgICogWW91IGNhbiBhbHNvIGNhbGwgYW55IG90aGVyIG1ldGhvZHMgaW5zaWRlIHRoZSBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgdHlwZSB7IE5ld1BlcnNvbiB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gICAgICpcbiAgICAgKiBhc3luYyBmdW5jdGlvbiBpbnNlcnRQZXJzb24odmFsdWVzOiBOZXdQZXJzb24sIHJldHVybkxhc3ROYW1lOiBib29sZWFuKSB7XG4gICAgICogICByZXR1cm4gYXdhaXQgZGJcbiAgICAgKiAgICAgLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAgIC52YWx1ZXModmFsdWVzKVxuICAgICAqICAgICAucmV0dXJuaW5nKFsnaWQnLCAnZmlyc3RfbmFtZSddKVxuICAgICAqICAgICAuJGlmKHJldHVybkxhc3ROYW1lLCAocWIpID0+IHFiLnJldHVybmluZygnbGFzdF9uYW1lJykpXG4gICAgICogICAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQW55IHNlbGVjdGlvbnMgYWRkZWQgaW5zaWRlIHRoZSBgaWZgIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYXMgb3B0aW9uYWwgZmllbGRzIHRvIHRoZVxuICAgICAqIG91dHB1dCB0eXBlIHNpbmNlIHdlIGNhbid0IGtub3cgaWYgdGhlIHNlbGVjdGlvbnMgd2VyZSBhY3R1YWxseSBtYWRlIGJlZm9yZSBydW5uaW5nXG4gICAgICogdGhlIGNvZGUuIEluIHRoZSBleGFtcGxlIGFib3ZlIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgYGluc2VydFBlcnNvbmAgZnVuY3Rpb24gaXM6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIFByb21pc2U8e1xuICAgICAqICAgaWQ6IG51bWJlclxuICAgICAqICAgZmlyc3RfbmFtZTogc3RyaW5nXG4gICAgICogICBsYXN0X25hbWU/OiBzdHJpbmdcbiAgICAgKiB9PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgICRpZihjb25kaXRpb24sIGZ1bmMpIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIG91dHB1dCB0eXBlIG9mIHRoZSBxdWVyeS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGNhbGwgZG9lc24ndCBjaGFuZ2UgdGhlIFNRTCBpbiBhbnkgd2F5LiBUaGlzIG1ldGhvZHMgc2ltcGx5XG4gICAgICogcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBgSW5zZXJ0UXVlcnlCdWlsZGVyYCB3aXRoIGEgbmV3IG91dHB1dCB0eXBlLlxuICAgICAqL1xuICAgICRjYXN0VG8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHRoaXMuI3Byb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTmFycm93cyAocGFydHMgb2YpIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiBLeXNlbHkgdHJpZXMgdG8gYmUgYXMgdHlwZS1zYWZlIGFzIHBvc3NpYmxlLCBidXQgaW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIG1ha2VcbiAgICAgKiBjb21wcm9taXNlcyBmb3IgYmV0dGVyIG1haW50YWluYWJpbGl0eSBhbmQgY29tcGlsYXRpb24gcGVyZm9ybWFuY2UuIEF0IHByZXNlbnQsXG4gICAgICogS3lzZWx5IGRvZXNuJ3QgbmFycm93IHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgcXVlcnkgYmFzZWQgb24ge0BsaW5rIHZhbHVlc30gaW5wdXRcbiAgICAgKiB3aGVuIHVzaW5nIHtAbGluayByZXR1cm5pbmd9IG9yIHtAbGluayByZXR1cm5pbmdBbGx9LlxuICAgICAqXG4gICAgICogVGhpcyB1dGlsaXR5IG1ldGhvZCBpcyB2ZXJ5IHVzZWZ1bCBmb3IgdGhlc2Ugc2l0dWF0aW9ucywgYXMgaXQgcmVtb3ZlcyB1bm5jZXNzYXJ5XG4gICAgICogcnVudGltZSBhc3NlcnRpb24vZ3VhcmQgY29kZS4gSXRzIGlucHV0IHR5cGUgaXMgbGltaXRlZCB0byB0aGUgb3V0cHV0IHR5cGVcbiAgICAgKiBvZiB0aGUgcXVlcnksIHNvIHlvdSBjYW4ndCBhZGQgYSBjb2x1bW4gdGhhdCBkb2Vzbid0IGV4aXN0LCBvciBjaGFuZ2UgYSBjb2x1bW4nc1xuICAgICAqIHR5cGUgdG8gc29tZXRoaW5nIHRoYXQgZG9lc24ndCBleGlzdCBpbiBpdHMgdW5pb24gdHlwZS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogVHVybiB0aGlzIGNvZGU6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgUGVyc29uIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAgICAgKlxuICAgICAqIGNvbnN0IHBlcnNvbiA9IGF3YWl0IGRiLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAudmFsdWVzKHtcbiAgICAgKiAgICAgZmlyc3RfbmFtZTogJ0pvaG4nLFxuICAgICAqICAgICBsYXN0X25hbWU6ICdEb2UnLFxuICAgICAqICAgICBnZW5kZXI6ICdtYWxlJyxcbiAgICAgKiAgICAgbnVsbGFibGVfY29sdW1uOiAnaGVsbCB5ZWFoISdcbiAgICAgKiAgIH0pXG4gICAgICogICAucmV0dXJuaW5nQWxsKClcbiAgICAgKiAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICpcbiAgICAgKiBpZiAoaXNXaXRoTm9OdWxsVmFsdWUocGVyc29uKSkge1xuICAgICAqICAgZnVuY3Rpb25UaGF0RXhwZWN0c1BlcnNvbldpdGhOb25OdWxsVmFsdWUocGVyc29uKVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGlzV2l0aE5vTnVsbFZhbHVlKHBlcnNvbjogUGVyc29uKTogcGVyc29uIGlzIFBlcnNvbiAmIHsgbnVsbGFibGVfY29sdW1uOiBzdHJpbmcgfSB7XG4gICAgICogICByZXR1cm4gcGVyc29uLm51bGxhYmxlX2NvbHVtbiAhPSBudWxsXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogSW50byB0aGlzOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgdHlwZSB7IE5vdE51bGwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBjb25zdCBwZXJzb24gPSBhd2FpdCBkYi5pbnNlcnRJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnZhbHVlcyh7XG4gICAgICogICAgIGZpcnN0X25hbWU6ICdKb2huJyxcbiAgICAgKiAgICAgbGFzdF9uYW1lOiAnRG9lJyxcbiAgICAgKiAgICAgZ2VuZGVyOiAnbWFsZScsXG4gICAgICogICAgIG51bGxhYmxlX2NvbHVtbjogJ2hlbGwgeWVhaCEnXG4gICAgICogICB9KVxuICAgICAqICAgLnJldHVybmluZ0FsbCgpXG4gICAgICogICAuJG5hcnJvd1R5cGU8eyBudWxsYWJsZV9jb2x1bW46IE5vdE51bGwgfT4oKVxuICAgICAqICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uVGhhdEV4cGVjdHNQZXJzb25XaXRoTm9uTnVsbFZhbHVlKHBlcnNvbilcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAkbmFycm93VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIodGhpcy4jcHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBc3NlcnRzIHRoYXQgcXVlcnkncyBvdXRwdXQgcm93IHR5cGUgZXF1YWxzIHRoZSBnaXZlbiB0eXBlIGBUYC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHNpbXBsaWZ5IGV4Y2Vzc2l2ZWx5IGNvbXBsZXggdHlwZXMgdG8gbWFrZSBUeXBlU2NyaXB0IGhhcHB5XG4gICAgICogYW5kIG11Y2ggZmFzdGVyLlxuICAgICAqXG4gICAgICogS3lzZWx5IHVzZXMgY29tcGxleCB0eXBlIG1hZ2ljIHRvIGFjaGlldmUgaXRzIHR5cGUgc2FmZXR5LiBUaGlzIGNvbXBsZXhpdHkgaXMgc29tZXRpbWVzIHRvbyBtdWNoXG4gICAgICogZm9yIFR5cGVTY3JpcHQgYW5kIHlvdSBnZXQgZXJyb3JzIGxpa2UgdGhpczpcbiAgICAgKlxuICAgICAqIGBgYFxuICAgICAqIGVycm9yIFRTMjU4OTogVHlwZSBpbnN0YW50aWF0aW9uIGlzIGV4Y2Vzc2l2ZWx5IGRlZXAgYW5kIHBvc3NpYmx5IGluZmluaXRlLlxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogSW4gdGhlc2UgY2FzZSB5b3UgY2FuIG9mdGVuIHVzZSB0aGlzIG1ldGhvZCB0byBoZWxwIFR5cGVTY3JpcHQgYSBsaXR0bGUgYml0LiBXaGVuIHlvdSB1c2UgdGhpc1xuICAgICAqIG1ldGhvZCB0byBhc3NlcnQgdGhlIG91dHB1dCB0eXBlIG9mIGEgcXVlcnksIEt5c2VseSBjYW4gZHJvcCB0aGUgY29tcGxleCBvdXRwdXQgdHlwZSB0aGF0XG4gICAgICogY29uc2lzdHMgb2YgbXVsdGlwbGUgbmVzdGVkIGhlbHBlciB0eXBlcyBhbmQgcmVwbGFjZSBpdCB3aXRoIHRoZSBzaW1wbGUgYXNzZXJ0ZWQgdHlwZS5cbiAgICAgKlxuICAgICAqIFVzaW5nIHRoaXMgbWV0aG9kIGRvZXNuJ3QgcmVkdWNlIHR5cGUgc2FmZXR5IGF0IGFsbC4gWW91IGhhdmUgdG8gcGFzcyBpbiBhIHR5cGUgdGhhdCBpc1xuICAgICAqIHN0cnVjdHVyYWxseSBlcXVhbCB0byB0aGUgY3VycmVudCB0eXBlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgTmV3UGVyc29uLCBOZXdQZXQsIFNwZWNpZXMgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICAgICAqXG4gICAgICogYXN5bmMgZnVuY3Rpb24gaW5zZXJ0UGVyc29uQW5kUGV0KHBlcnNvbjogTmV3UGVyc29uLCBwZXQ6IE9taXQ8TmV3UGV0LCAnb3duZXJfaWQnPikge1xuICAgICAqICAgcmV0dXJuIGF3YWl0IGRiXG4gICAgICogICAgIC53aXRoKCduZXdfcGVyc29uJywgKHFiKSA9PiBxYlxuICAgICAqICAgICAgIC5pbnNlcnRJbnRvKCdwZXJzb24nKVxuICAgICAqICAgICAgIC52YWx1ZXMocGVyc29uKVxuICAgICAqICAgICAgIC5yZXR1cm5pbmcoJ2lkJylcbiAgICAgKiAgICAgICAuJGFzc2VydFR5cGU8eyBpZDogbnVtYmVyIH0+KClcbiAgICAgKiAgICAgKVxuICAgICAqICAgICAud2l0aCgnbmV3X3BldCcsIChxYikgPT4gcWJcbiAgICAgKiAgICAgICAuaW5zZXJ0SW50bygncGV0JylcbiAgICAgKiAgICAgICAudmFsdWVzKChlYikgPT4gKHtcbiAgICAgKiAgICAgICAgIG93bmVyX2lkOiBlYi5zZWxlY3RGcm9tKCduZXdfcGVyc29uJykuc2VsZWN0KCdpZCcpLFxuICAgICAqICAgICAgICAgLi4ucGV0XG4gICAgICogICAgICAgfSkpXG4gICAgICogICAgICAgLnJldHVybmluZyhbJ25hbWUgYXMgcGV0X25hbWUnLCAnc3BlY2llcyddKVxuICAgICAqICAgICAgIC4kYXNzZXJ0VHlwZTx7IHBldF9uYW1lOiBzdHJpbmcsIHNwZWNpZXM6IFNwZWNpZXMgfT4oKVxuICAgICAqICAgICApXG4gICAgICogICAgIC5zZWxlY3RGcm9tKFsnbmV3X3BlcnNvbicsICduZXdfcGV0J10pXG4gICAgICogICAgIC5zZWxlY3RBbGwoKVxuICAgICAqICAgICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAkYXNzZXJ0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnNlcnRRdWVyeUJ1aWxkZXIodGhpcy4jcHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29weSBvZiB0aGlzIEluc2VydFF1ZXJ5QnVpbGRlciBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbiBwbHVnaW4gaW5zdGFsbGVkLlxuICAgICAqL1xuICAgIHdpdGhQbHVnaW4ocGx1Z2luKSB7XG4gICAgICAgIHJldHVybiBuZXcgSW5zZXJ0UXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhQbHVnaW4ocGx1Z2luKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBxdWVyeSBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiByb3dzLlxuICAgICAqXG4gICAgICogQWxzbyBzZWUgdGhlIHtAbGluayBleGVjdXRlVGFrZUZpcnN0fSBhbmQge0BsaW5rIGV4ZWN1dGVUYWtlRmlyc3RPclRocm93fSBtZXRob2RzLlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBpbGVkUXVlcnkgPSB0aGlzLmNvbXBpbGUoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KGNvbXBpbGVkUXVlcnkpO1xuICAgICAgICBjb25zdCB7IGFkYXB0ZXIgfSA9IHRoaXMuI3Byb3BzLmV4ZWN1dG9yO1xuICAgICAgICBjb25zdCBxdWVyeSA9IGNvbXBpbGVkUXVlcnkucXVlcnk7XG4gICAgICAgIGlmICgocXVlcnkucmV0dXJuaW5nICYmIGFkYXB0ZXIuc3VwcG9ydHNSZXR1cm5pbmcpIHx8XG4gICAgICAgICAgICAocXVlcnkub3V0cHV0ICYmIGFkYXB0ZXIuc3VwcG9ydHNPdXRwdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBJbnNlcnRSZXN1bHQocmVzdWx0Lmluc2VydElkLCByZXN1bHQubnVtQWZmZWN0ZWRSb3dzID8/IEJpZ0ludCgwKSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBxdWVyeSBhbmQgcmV0dXJucyB0aGUgZmlyc3QgcmVzdWx0IG9yIHVuZGVmaW5lZCBpZlxuICAgICAqIHRoZSBxdWVyeSByZXR1cm5lZCBubyByZXN1bHQuXG4gICAgICovXG4gICAgYXN5bmMgZXhlY3V0ZVRha2VGaXJzdCgpIHtcbiAgICAgICAgY29uc3QgW3Jlc3VsdF0gPSBhd2FpdCB0aGlzLmV4ZWN1dGUoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHF1ZXJ5IGFuZCByZXR1cm5zIHRoZSBmaXJzdCByZXN1bHQgb3IgdGhyb3dzIGlmXG4gICAgICogdGhlIHF1ZXJ5IHJldHVybmVkIG5vIHJlc3VsdC5cbiAgICAgKlxuICAgICAqIEJ5IGRlZmF1bHQgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIE5vUmVzdWx0RXJyb3J9IGlzIHRocm93biwgYnV0IHlvdSBjYW5cbiAgICAgKiBwcm92aWRlIGEgY3VzdG9tIGVycm9yIGNsYXNzLCBvciBjYWxsYmFjayBhcyB0aGUgb25seSBhcmd1bWVudCB0byB0aHJvdyBhIGRpZmZlcmVudFxuICAgICAqIGVycm9yLlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGVUYWtlRmlyc3RPclRocm93KGVycm9yQ29uc3RydWN0b3IgPSBOb1Jlc3VsdEVycm9yKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZVRha2VGaXJzdCgpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNOb1Jlc3VsdEVycm9yQ29uc3RydWN0b3IoZXJyb3JDb25zdHJ1Y3RvcilcbiAgICAgICAgICAgICAgICA/IG5ldyBlcnJvckNvbnN0cnVjdG9yKHRoaXMudG9PcGVyYXRpb25Ob2RlKCkpXG4gICAgICAgICAgICAgICAgOiBlcnJvckNvbnN0cnVjdG9yKHRoaXMudG9PcGVyYXRpb25Ob2RlKCkpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgKnN0cmVhbShjaHVua1NpemUgPSAxMDApIHtcbiAgICAgICAgY29uc3QgY29tcGlsZWRRdWVyeSA9IHRoaXMuY29tcGlsZSgpO1xuICAgICAgICBjb25zdCBzdHJlYW0gPSB0aGlzLiNwcm9wcy5leGVjdXRvci5zdHJlYW0oY29tcGlsZWRRdWVyeSwgY2h1bmtTaXplKTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIHN0cmVhbSkge1xuICAgICAgICAgICAgeWllbGQqIGl0ZW0ucm93cztcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBleHBsYWluKGZvcm1hdCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gbmV3IEluc2VydFF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEV4cGxhaW4odGhpcy4jcHJvcHMucXVlcnlOb2RlLCBmb3JtYXQsIG9wdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGJ1aWxkZXIuZXhlY3V0ZSgpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vc2VsZWN0LXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzUmVhZG9ubHlBcnJheSwgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvc2VsZWN0aW9uLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VBbGlhc2VkU3RyaW5nUmVmZXJlbmNlIH0gZnJvbSAnLi9yZWZlcmVuY2UtcGFyc2VyLmpzJztcbmltcG9ydCB7IGlzRHluYW1pY1JlZmVyZW5jZUJ1aWxkZXIsIH0gZnJvbSAnLi4vZHluYW1pYy9keW5hbWljLXJlZmVyZW5jZS1idWlsZGVyLmpzJztcbmltcG9ydCB7IHBhcnNlQWxpYXNlZEV4cHJlc3Npb24sIH0gZnJvbSAnLi9leHByZXNzaW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVRhYmxlIH0gZnJvbSAnLi90YWJsZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgZXhwcmVzc2lvbkJ1aWxkZXIsIH0gZnJvbSAnLi4vZXhwcmVzc2lvbi9leHByZXNzaW9uLWJ1aWxkZXIuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2VsZWN0QXJnKHNlbGVjdGlvbikge1xuICAgIGlmIChpc0Z1bmN0aW9uKHNlbGVjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlU2VsZWN0QXJnKHNlbGVjdGlvbihleHByZXNzaW9uQnVpbGRlcigpKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUmVhZG9ubHlBcnJheShzZWxlY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb24ubWFwKChpdCkgPT4gcGFyc2VTZWxlY3RFeHByZXNzaW9uKGl0KSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gW3BhcnNlU2VsZWN0RXhwcmVzc2lvbihzZWxlY3Rpb24pXTtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZVNlbGVjdEV4cHJlc3Npb24oc2VsZWN0aW9uKSB7XG4gICAgaWYgKGlzU3RyaW5nKHNlbGVjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIFNlbGVjdGlvbk5vZGUuY3JlYXRlKHBhcnNlQWxpYXNlZFN0cmluZ1JlZmVyZW5jZShzZWxlY3Rpb24pKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNEeW5hbWljUmVmZXJlbmNlQnVpbGRlcihzZWxlY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBTZWxlY3Rpb25Ob2RlLmNyZWF0ZShzZWxlY3Rpb24udG9PcGVyYXRpb25Ob2RlKCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFNlbGVjdGlvbk5vZGUuY3JlYXRlKHBhcnNlQWxpYXNlZEV4cHJlc3Npb24oc2VsZWN0aW9uKSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2VsZWN0QWxsKHRhYmxlKSB7XG4gICAgaWYgKCF0YWJsZSkge1xuICAgICAgICByZXR1cm4gW1NlbGVjdGlvbk5vZGUuY3JlYXRlU2VsZWN0QWxsKCldO1xuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRhYmxlKSkge1xuICAgICAgICByZXR1cm4gdGFibGUubWFwKHBhcnNlU2VsZWN0QWxsQXJnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBbcGFyc2VTZWxlY3RBbGxBcmcodGFibGUpXTtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZVNlbGVjdEFsbEFyZyh0YWJsZSkge1xuICAgIGlmIChpc1N0cmluZyh0YWJsZSkpIHtcbiAgICAgICAgcmV0dXJuIFNlbGVjdGlvbk5vZGUuY3JlYXRlU2VsZWN0QWxsRnJvbVRhYmxlKHBhcnNlVGFibGUodGFibGUpKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHZhbHVlIHNlbGVjdEFsbCBleHByZXNzaW9uOiAke0pTT04uc3RyaW5naWZ5KHRhYmxlKX1gKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vc2VsZWN0aW9uLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBSZWZlcmVuY2VOb2RlIH0gZnJvbSAnLi9yZWZlcmVuY2Utbm9kZS5qcyc7XG5pbXBvcnQgeyBTZWxlY3RBbGxOb2RlIH0gZnJvbSAnLi9zZWxlY3QtYWxsLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFNlbGVjdGlvbk5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1NlbGVjdGlvbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdTZWxlY3Rpb25Ob2RlJyxcbiAgICAgICAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNyZWF0ZVNlbGVjdEFsbCgpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnU2VsZWN0aW9uTm9kZScsXG4gICAgICAgICAgICBzZWxlY3Rpb246IFNlbGVjdEFsbE5vZGUuY3JlYXRlKCksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY3JlYXRlU2VsZWN0QWxsRnJvbVRhYmxlKHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1NlbGVjdGlvbk5vZGUnLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiBSZWZlcmVuY2VOb2RlLmNyZWF0ZVNlbGVjdEFsbCh0YWJsZSksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vaW5zZXJ0LXZhbHVlcy1wYXJzZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBDb2x1bW5Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgUHJpbWl0aXZlVmFsdWVMaXN0Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3ByaW1pdGl2ZS12YWx1ZS1saXN0LW5vZGUuanMnO1xuaW1wb3J0IHsgVmFsdWVMaXN0Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3ZhbHVlLWxpc3Qtbm9kZS5qcyc7XG5pbXBvcnQgeyBmcmVlemUsIGlzRnVuY3Rpb24sIGlzUmVhZG9ubHlBcnJheSwgaXNVbmRlZmluZWQsIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgcGFyc2VWYWx1ZUV4cHJlc3Npb24gfSBmcm9tICcuL3ZhbHVlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBWYWx1ZXNOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvdmFsdWVzLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNFeHByZXNzaW9uT3JGYWN0b3J5IH0gZnJvbSAnLi9leHByZXNzaW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0SW5zZXJ0VmFsdWVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvZGVmYXVsdC1pbnNlcnQtdmFsdWUtbm9kZS5qcyc7XG5pbXBvcnQgeyBleHByZXNzaW9uQnVpbGRlciwgfSBmcm9tICcuLi9leHByZXNzaW9uL2V4cHJlc3Npb24tYnVpbGRlci5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VJbnNlcnRFeHByZXNzaW9uKGFyZykge1xuICAgIGNvbnN0IG9iamVjdE9yTGlzdCA9IGlzRnVuY3Rpb24oYXJnKSA/IGFyZyhleHByZXNzaW9uQnVpbGRlcigpKSA6IGFyZztcbiAgICBjb25zdCBsaXN0ID0gaXNSZWFkb25seUFycmF5KG9iamVjdE9yTGlzdClcbiAgICAgICAgPyBvYmplY3RPckxpc3RcbiAgICAgICAgOiBmcmVlemUoW29iamVjdE9yTGlzdF0pO1xuICAgIHJldHVybiBwYXJzZUluc2VydENvbHVtbnNBbmRWYWx1ZXMobGlzdCk7XG59XG5mdW5jdGlvbiBwYXJzZUluc2VydENvbHVtbnNBbmRWYWx1ZXMocm93cykge1xuICAgIGNvbnN0IGNvbHVtbnMgPSBwYXJzZUNvbHVtbk5hbWVzQW5kSW5kZXhlcyhyb3dzKTtcbiAgICByZXR1cm4gW1xuICAgICAgICBmcmVlemUoWy4uLmNvbHVtbnMua2V5cygpXS5tYXAoQ29sdW1uTm9kZS5jcmVhdGUpKSxcbiAgICAgICAgVmFsdWVzTm9kZS5jcmVhdGUocm93cy5tYXAoKHJvdykgPT4gcGFyc2VSb3dWYWx1ZXMocm93LCBjb2x1bW5zKSkpLFxuICAgIF07XG59XG5mdW5jdGlvbiBwYXJzZUNvbHVtbk5hbWVzQW5kSW5kZXhlcyhyb3dzKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICAgICAgICBpZiAoIWNvbHVtbnMuaGFzKGNvbCkgJiYgcm93W2NvbF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbHVtbnMuc2V0KGNvbCwgY29sdW1ucy5zaXplKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sdW1ucztcbn1cbmZ1bmN0aW9uIHBhcnNlUm93VmFsdWVzKHJvdywgY29sdW1ucykge1xuICAgIGNvbnN0IHJvd0NvbHVtbnMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGNvbnN0IHJvd1ZhbHVlcyA9IEFycmF5LmZyb20oe1xuICAgICAgICBsZW5ndGg6IGNvbHVtbnMuc2l6ZSxcbiAgICB9KTtcbiAgICBsZXQgaGFzVW5kZWZpbmVkT3JDb21wbGV4Q29sdW1ucyA9IGZhbHNlO1xuICAgIGxldCBpbmRleGVkUm93Q29sdW1ucyA9IHJvd0NvbHVtbnMubGVuZ3RoO1xuICAgIGZvciAoY29uc3QgY29sIG9mIHJvd0NvbHVtbnMpIHtcbiAgICAgICAgY29uc3QgY29sdW1uSWR4ID0gY29sdW1ucy5nZXQoY29sKTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGNvbHVtbklkeCkpIHtcbiAgICAgICAgICAgIGluZGV4ZWRSb3dDb2x1bW5zLS07XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd1tjb2xdO1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWUpIHx8IGlzRXhwcmVzc2lvbk9yRmFjdG9yeSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGhhc1VuZGVmaW5lZE9yQ29tcGxleENvbHVtbnMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJvd1ZhbHVlc1tjb2x1bW5JZHhdID0gdmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IGhhc01pc3NpbmdDb2x1bW5zID0gaW5kZXhlZFJvd0NvbHVtbnMgPCBjb2x1bW5zLnNpemU7XG4gICAgaWYgKGhhc01pc3NpbmdDb2x1bW5zIHx8IGhhc1VuZGVmaW5lZE9yQ29tcGxleENvbHVtbnMpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gRGVmYXVsdEluc2VydFZhbHVlTm9kZS5jcmVhdGUoKTtcbiAgICAgICAgcmV0dXJuIFZhbHVlTGlzdE5vZGUuY3JlYXRlKHJvd1ZhbHVlcy5tYXAoKGl0KSA9PiBpc1VuZGVmaW5lZChpdCkgPyBkZWZhdWx0VmFsdWUgOiBwYXJzZVZhbHVlRXhwcmVzc2lvbihpdCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIFByaW1pdGl2ZVZhbHVlTGlzdE5vZGUuY3JlYXRlKHJvd1ZhbHVlcyk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3ZhbHVlcy1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFZhbHVlc05vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1ZhbHVlc05vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHZhbHVlcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdWYWx1ZXNOb2RlJyxcbiAgICAgICAgICAgIHZhbHVlczogZnJlZXplKHZhbHVlcyksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZGVmYXVsdC1pbnNlcnQtdmFsdWUtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0SW5zZXJ0VmFsdWVOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdEZWZhdWx0SW5zZXJ0VmFsdWVOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnRGVmYXVsdEluc2VydFZhbHVlTm9kZScsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vdXBkYXRlLXNldC1wYXJzZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBDb2x1bW5Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgQ29sdW1uVXBkYXRlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NvbHVtbi11cGRhdGUtbm9kZS5qcyc7XG5pbXBvcnQgeyBleHByZXNzaW9uQnVpbGRlciwgfSBmcm9tICcuLi9leHByZXNzaW9uL2V4cHJlc3Npb24tYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgcGFyc2VWYWx1ZUV4cHJlc3Npb24gfSBmcm9tICcuL3ZhbHVlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb24sIH0gZnJvbSAnLi9yZWZlcmVuY2UtcGFyc2VyLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVVwZGF0ZSguLi5hcmdzKSB7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBDb2x1bW5VcGRhdGVOb2RlLmNyZWF0ZShwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb24oYXJnc1swXSksIHBhcnNlVmFsdWVFeHByZXNzaW9uKGFyZ3NbMV0pKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlVXBkYXRlT2JqZWN0RXhwcmVzc2lvbihhcmdzWzBdKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVVwZGF0ZU9iamVjdEV4cHJlc3Npb24odXBkYXRlKSB7XG4gICAgY29uc3QgdXBkYXRlT2JqID0gaXNGdW5jdGlvbih1cGRhdGUpID8gdXBkYXRlKGV4cHJlc3Npb25CdWlsZGVyKCkpIDogdXBkYXRlO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh1cGRhdGVPYmopXG4gICAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICByZXR1cm4gQ29sdW1uVXBkYXRlTm9kZS5jcmVhdGUoQ29sdW1uTm9kZS5jcmVhdGUoa2V5KSwgcGFyc2VWYWx1ZUV4cHJlc3Npb24odmFsdWUpKTtcbiAgICB9KTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vY29sdW1uLXVwZGF0ZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENvbHVtblVwZGF0ZU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0NvbHVtblVwZGF0ZU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGNvbHVtbiwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQ29sdW1uVXBkYXRlTm9kZScsXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vbi1kdXBsaWNhdGUta2V5LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgT25EdXBsaWNhdGVLZXlOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdPbkR1cGxpY2F0ZUtleU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHVwZGF0ZXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnT25EdXBsaWNhdGVLZXlOb2RlJyxcbiAgICAgICAgICAgIHVwZGF0ZXMsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vaW5zZXJ0LXJlc3VsdC5kLnRzXCIgLz5cbi8qKlxuICogVGhlIHJlc3VsdCBvZiBhbiBpbnNlcnQgcXVlcnkuXG4gKlxuICogSWYgdGhlIHRhYmxlIGhhcyBhbiBhdXRvIGluY3JlbWVudGluZyBwcmltYXJ5IGtleSB7QGxpbmsgaW5zZXJ0SWR9IHdpbGwgaG9sZFxuICogdGhlIGdlbmVyYXRlZCBpZCBvbiBkaWFsZWN0cyB0aGF0IHN1cHBvcnQgaXQuIEZvciBleGFtcGxlIFBvc3RncmVTUUwgZG9lc24ndFxuICogcmV0dXJuIHRoZSBpZCBieSBkZWZhdWx0IGFuZCB7QGxpbmsgaW5zZXJ0SWR9IGlzIHVuZGVmaW5lZC4gT24gUG9zdGdyZVNRTCB5b3VcbiAqIG5lZWQgdG8gdXNlIHtAbGluayBSZXR1cm5pbmdJbnRlcmZhY2UucmV0dXJuaW5nfSBvciB7QGxpbmsgUmV0dXJuaW5nSW50ZXJmYWNlLnJldHVybmluZ0FsbH1cbiAqIHRvIGdldCBvdXQgdGhlIGluc2VydGVkIGlkLlxuICpcbiAqIHtAbGluayBudW1JbnNlcnRlZE9yVXBkYXRlZFJvd3N9IGhvbGRzIHRoZSBudW1iZXIgb2YgKGFjdHVhbGx5KSBpbnNlcnRlZCByb3dzLlxuICogT24gTXlTUUwsIHVwZGF0ZWQgcm93cyBhcmUgY291bnRlZCB0d2ljZSB3aGVuIHVzaW5nIGBvbiBkdXBsaWNhdGUga2V5IHVwZGF0ZWAuXG4gKlxuICogIyMjIEV4YW1wbGVzXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB0eXBlIHsgTmV3UGVyc29uIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAqXG4gKiBhc3luYyBmdW5jdGlvbiBpbnNlcnRQZXJzb24ocGVyc29uOiBOZXdQZXJzb24pIHtcbiAqICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAqICAgICAuaW5zZXJ0SW50bygncGVyc29uJylcbiAqICAgICAudmFsdWVzKHBlcnNvbilcbiAqICAgICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICpcbiAqICAgY29uc29sZS5sb2cocmVzdWx0Lmluc2VydElkKSAvLyByZWxldmFudCBvbiBNeVNRTFxuICogICBjb25zb2xlLmxvZyhyZXN1bHQubnVtSW5zZXJ0ZWRPclVwZGF0ZWRSb3dzKSAvLyBhbHdheXMgcmVsZXZhbnRcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgSW5zZXJ0UmVzdWx0IHtcbiAgICAvKipcbiAgICAgKiBUaGUgYXV0byBpbmNyZW1lbnRpbmcgcHJpbWFyeSBrZXkgb2YgdGhlIGluc2VydGVkIHJvdy5cbiAgICAgKlxuICAgICAqIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVuZGVmaW5lZCB3aGVuIHRoZSBxdWVyeSBjb250YWlucyBhbiBgb24gY29uZmxpY3RgXG4gICAgICogY2xhdXNlIHRoYXQgbWFrZXMgdGhlIHF1ZXJ5IHN1Y2NlZWQgZXZlbiB3aGVuIG5vdGhpbmcgZ2V0cyBpbnNlcnRlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgcHJvcGVydHkgaXMgYWx3YXlzIHVuZGVmaW5lZCBvbiBkaWFsZWN0cyBsaWtlIFBvc3RncmVTUUwgdGhhdFxuICAgICAqIGRvbid0IHJldHVybiB0aGUgaW5zZXJ0ZWQgaWQgYnkgZGVmYXVsdC4gT24gdGhvc2UgZGlhbGVjdHMgeW91IG5lZWRcbiAgICAgKiB0byB1c2UgdGhlIHtAbGluayBSZXR1cm5pbmdJbnRlcmZhY2UucmV0dXJuaW5nIHwgcmV0dXJuaW5nfSBtZXRob2QuXG4gICAgICovXG4gICAgaW5zZXJ0SWQ7XG4gICAgLyoqXG4gICAgICogQWZmZWN0ZWQgcm93cyBjb3VudC5cbiAgICAgKi9cbiAgICBudW1JbnNlcnRlZE9yVXBkYXRlZFJvd3M7XG4gICAgY29uc3RydWN0b3IoaW5zZXJ0SWQsIG51bUluc2VydGVkT3JVcGRhdGVkUm93cykge1xuICAgICAgICB0aGlzLmluc2VydElkID0gaW5zZXJ0SWQ7XG4gICAgICAgIHRoaXMubnVtSW5zZXJ0ZWRPclVwZGF0ZWRSb3dzID0gbnVtSW5zZXJ0ZWRPclVwZGF0ZWRSb3dzO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vbm8tcmVzdWx0LWVycm9yLmQudHNcIiAvPlxuZXhwb3J0IGNsYXNzIE5vUmVzdWx0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgLyoqXG4gICAgICogVGhlIG9wZXJhdGlvbiBub2RlIHRyZWUgb2YgdGhlIHF1ZXJ5IHRoYXQgd2FzIGV4ZWN1dGVkLlxuICAgICAqL1xuICAgIG5vZGU7XG4gICAgY29uc3RydWN0b3Iobm9kZSkge1xuICAgICAgICBzdXBlcignbm8gcmVzdWx0Jyk7XG4gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTm9SZXN1bHRFcnJvckNvbnN0cnVjdG9yKGZuKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmbiwgJ3Byb3RvdHlwZScpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9vbi1jb25mbGljdC1idWlsZGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgQ29sdW1uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NvbHVtbi1ub2RlLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IE9uQ29uZmxpY3ROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb24tY29uZmxpY3Qtbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uLCBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uLCB9IGZyb20gJy4uL3BhcnNlci9iaW5hcnktb3BlcmF0aW9uLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVVwZGF0ZU9iamVjdEV4cHJlc3Npb24sIH0gZnJvbSAnLi4vcGFyc2VyL3VwZGF0ZS1zZXQtcGFyc2VyLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBPbkNvbmZsaWN0QnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBhIHNpbmdsZSBjb2x1bW4gYXMgdGhlIGNvbmZsaWN0IHRhcmdldC5cbiAgICAgKlxuICAgICAqIEFsc28gc2VlIHRoZSB7QGxpbmsgY29sdW1uc30sIHtAbGluayBjb25zdHJhaW50fSBhbmQge0BsaW5rIGV4cHJlc3Npb259XG4gICAgICogbWV0aG9kcyBmb3IgYWx0ZXJuYXRpdmUgd2F5cyB0byBzcGVjaWZ5IHRoZSBjb25mbGljdCB0YXJnZXQuXG4gICAgICovXG4gICAgY29sdW1uKGNvbHVtbikge1xuICAgICAgICBjb25zdCBjb2x1bW5Ob2RlID0gQ29sdW1uTm9kZS5jcmVhdGUoY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIG5ldyBPbkNvbmZsaWN0QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG9uQ29uZmxpY3ROb2RlOiBPbkNvbmZsaWN0Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMub25Db25mbGljdE5vZGUsIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zOiB0aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZS5jb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgID8gZnJlZXplKFsuLi50aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZS5jb2x1bW5zLCBjb2x1bW5Ob2RlXSlcbiAgICAgICAgICAgICAgICAgICAgOiBmcmVlemUoW2NvbHVtbk5vZGVdKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBhIGxpc3Qgb2YgY29sdW1ucyBhcyB0aGUgY29uZmxpY3QgdGFyZ2V0LlxuICAgICAqXG4gICAgICogQWxzbyBzZWUgdGhlIHtAbGluayBjb2x1bW59LCB7QGxpbmsgY29uc3RyYWludH0gYW5kIHtAbGluayBleHByZXNzaW9ufVxuICAgICAqIG1ldGhvZHMgZm9yIGFsdGVybmF0aXZlIHdheXMgdG8gc3BlY2lmeSB0aGUgY29uZmxpY3QgdGFyZ2V0LlxuICAgICAqL1xuICAgIGNvbHVtbnMoY29sdW1ucykge1xuICAgICAgICBjb25zdCBjb2x1bW5Ob2RlcyA9IGNvbHVtbnMubWFwKENvbHVtbk5vZGUuY3JlYXRlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBPbkNvbmZsaWN0QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG9uQ29uZmxpY3ROb2RlOiBPbkNvbmZsaWN0Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMub25Db25mbGljdE5vZGUsIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zOiB0aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZS5jb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgID8gZnJlZXplKFsuLi50aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZS5jb2x1bW5zLCAuLi5jb2x1bW5Ob2Rlc10pXG4gICAgICAgICAgICAgICAgICAgIDogZnJlZXplKGNvbHVtbk5vZGVzKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBhIHNwZWNpZmljIGNvbnN0cmFpbnQgYnkgbmFtZSBhcyB0aGUgY29uZmxpY3QgdGFyZ2V0LlxuICAgICAqXG4gICAgICogQWxzbyBzZWUgdGhlIHtAbGluayBjb2x1bW59LCB7QGxpbmsgY29sdW1uc30gYW5kIHtAbGluayBleHByZXNzaW9ufVxuICAgICAqIG1ldGhvZHMgZm9yIGFsdGVybmF0aXZlIHdheXMgdG8gc3BlY2lmeSB0aGUgY29uZmxpY3QgdGFyZ2V0LlxuICAgICAqL1xuICAgIGNvbnN0cmFpbnQoY29uc3RyYWludE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPbkNvbmZsaWN0QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG9uQ29uZmxpY3ROb2RlOiBPbkNvbmZsaWN0Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMub25Db25mbGljdE5vZGUsIHtcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50OiBJZGVudGlmaWVyTm9kZS5jcmVhdGUoY29uc3RyYWludE5hbWUpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGFuIGV4cHJlc3Npb24gYXMgdGhlIGNvbmZsaWN0IHRhcmdldC5cbiAgICAgKlxuICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgaWYgdGhlIHVuaXF1ZSBpbmRleCBpcyBhbiBleHByZXNzaW9uIGluZGV4LlxuICAgICAqXG4gICAgICogQWxzbyBzZWUgdGhlIHtAbGluayBjb2x1bW59LCB7QGxpbmsgY29sdW1uc30gYW5kIHtAbGluayBjb25zdHJhaW50fVxuICAgICAqIG1ldGhvZHMgZm9yIGFsdGVybmF0aXZlIHdheXMgdG8gc3BlY2lmeSB0aGUgY29uZmxpY3QgdGFyZ2V0LlxuICAgICAqL1xuICAgIGV4cHJlc3Npb24oZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gbmV3IE9uQ29uZmxpY3RCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgb25Db25mbGljdE5vZGU6IE9uQ29uZmxpY3ROb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZSwge1xuICAgICAgICAgICAgICAgIGluZGV4RXhwcmVzc2lvbjogZXhwcmVzc2lvbi50b09wZXJhdGlvbk5vZGUoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgd2hlcmUoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IE9uQ29uZmxpY3RCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgb25Db25mbGljdE5vZGU6IE9uQ29uZmxpY3ROb2RlLmNsb25lV2l0aEluZGV4V2hlcmUodGhpcy4jcHJvcHMub25Db25mbGljdE5vZGUsIHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24oYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgd2hlcmVSZWYobGhzLCBvcCwgcmhzKSB7XG4gICAgICAgIHJldHVybiBuZXcgT25Db25mbGljdEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBvbkNvbmZsaWN0Tm9kZTogT25Db25mbGljdE5vZGUuY2xvbmVXaXRoSW5kZXhXaGVyZSh0aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZSwgcGFyc2VSZWZlcmVudGlhbEJpbmFyeU9wZXJhdGlvbihsaHMsIG9wLCByaHMpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFyV2hlcmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgT25Db25mbGljdEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBvbkNvbmZsaWN0Tm9kZTogT25Db25mbGljdE5vZGUuY2xvbmVXaXRob3V0SW5kZXhXaGVyZSh0aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBcImRvIG5vdGhpbmdcIiBjb25mbGljdCBhY3Rpb24uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgaWQgPSAxXG4gICAgICogY29uc3QgZmlyc3RfbmFtZSA9ICdKb2huJ1xuICAgICAqXG4gICAgICogYXdhaXQgZGJcbiAgICAgKiAgIC5pbnNlcnRJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnZhbHVlcyh7XHUwMEEwZmlyc3RfbmFtZSwgaWQgfSlcbiAgICAgKiAgIC5vbkNvbmZsaWN0KChvYykgPT4gb2NcbiAgICAgKiAgICAgLmNvbHVtbignaWQnKVxuICAgICAqICAgICAuZG9Ob3RoaW5nKClcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGVyc29uXCIgKFwiZmlyc3RfbmFtZVwiLCBcImlkXCIpXG4gICAgICogdmFsdWVzICgkMSwgJDIpXG4gICAgICogb24gY29uZmxpY3QgKFwiaWRcIikgZG8gbm90aGluZ1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGRvTm90aGluZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPbkNvbmZsaWN0RG9Ob3RoaW5nQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG9uQ29uZmxpY3ROb2RlOiBPbkNvbmZsaWN0Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMub25Db25mbGljdE5vZGUsIHtcbiAgICAgICAgICAgICAgICBkb05vdGhpbmc6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIFwiZG8gdXBkYXRlIHNldFwiIGNvbmZsaWN0IGFjdGlvbi5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCBpZCA9IDFcbiAgICAgKiBjb25zdCBmaXJzdF9uYW1lID0gJ0pvaG4nXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAudmFsdWVzKHtcdTAwQTBmaXJzdF9uYW1lLCBpZCB9KVxuICAgICAqICAgLm9uQ29uZmxpY3QoKG9jKSA9PiBvY1xuICAgICAqICAgICAuY29sdW1uKCdpZCcpXG4gICAgICogICAgIC5kb1VwZGF0ZVNldCh7IGZpcnN0X25hbWUgfSlcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGluc2VydCBpbnRvIFwicGVyc29uXCIgKFwiZmlyc3RfbmFtZVwiLCBcImlkXCIpXG4gICAgICogdmFsdWVzICgkMSwgJDIpXG4gICAgICogb24gY29uZmxpY3QgKFwiaWRcIilcbiAgICAgKiBkbyB1cGRhdGUgc2V0IFwiZmlyc3RfbmFtZVwiID0gJDNcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEluIHRoZSBuZXh0IGV4YW1wbGUgd2UgdXNlIHRoZSBgcmVmYCBtZXRob2QgdG8gcmVmZXJlbmNlXG4gICAgICogY29sdW1ucyBvZiB0aGUgdmlydHVhbCB0YWJsZSBgZXhjbHVkZWRgIGluIGEgdHlwZS1zYWZlIHdheVxuICAgICAqIHRvIGNyZWF0ZSBhbiB1cHNlcnQgb3BlcmF0aW9uOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgdHlwZSB7IE5ld1BlcnNvbiB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gICAgICpcbiAgICAgKiBhc3luYyBmdW5jdGlvbiB1cHNlcnRQZXJzb24ocGVyc29uOiBOZXdQZXJzb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgKiAgIGF3YWl0IGRiLmluc2VydEludG8oJ3BlcnNvbicpXG4gICAgICogICAgIC52YWx1ZXMocGVyc29uKVxuICAgICAqICAgICAub25Db25mbGljdCgob2MpID0+IG9jXG4gICAgICogICAgICAgLmNvbHVtbignaWQnKVxuICAgICAqICAgICAgIC5kb1VwZGF0ZVNldCgoZWIpID0+ICh7XG4gICAgICogICAgICAgICBmaXJzdF9uYW1lOiBlYi5yZWYoJ2V4Y2x1ZGVkLmZpcnN0X25hbWUnKSxcbiAgICAgKiAgICAgICAgIGxhc3RfbmFtZTogZWIucmVmKCdleGNsdWRlZC5sYXN0X25hbWUnKVxuICAgICAqICAgICAgIH0pXG4gICAgICogICAgIClcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBpbnNlcnQgaW50byBcInBlcnNvblwiIChcImZpcnN0X25hbWVcIiwgXCJsYXN0X25hbWVcIilcbiAgICAgKiB2YWx1ZXMgKCQxLCAkMilcbiAgICAgKiBvbiBjb25mbGljdCAoXCJpZFwiKVxuICAgICAqIGRvIHVwZGF0ZSBzZXRcbiAgICAgKiAgXCJmaXJzdF9uYW1lXCIgPSBleGNsdWRlZC5cImZpcnN0X25hbWVcIixcbiAgICAgKiAgXCJsYXN0X25hbWVcIiA9IGV4Y2x1ZGVkLlwibGFzdF9uYW1lXCJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkb1VwZGF0ZVNldCh1cGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPbkNvbmZsaWN0VXBkYXRlQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG9uQ29uZmxpY3ROb2RlOiBPbkNvbmZsaWN0Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMub25Db25mbGljdE5vZGUsIHtcbiAgICAgICAgICAgICAgICB1cGRhdGVzOiBwYXJzZVVwZGF0ZU9iamVjdEV4cHJlc3Npb24odXBkYXRlKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBPbkNvbmZsaWN0RG9Ob3RoaW5nQnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMub25Db25mbGljdE5vZGU7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE9uQ29uZmxpY3RVcGRhdGVCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICB3aGVyZSguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgT25Db25mbGljdFVwZGF0ZUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBvbkNvbmZsaWN0Tm9kZTogT25Db25mbGljdE5vZGUuY2xvbmVXaXRoVXBkYXRlV2hlcmUodGhpcy4jcHJvcHMub25Db25mbGljdE5vZGUsIHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24oYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBhIHdoZXJlIGNvbmRpdGlvbiBmb3IgdGhlIHVwZGF0ZSBvcGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIFdoZXJlSW50ZXJmYWNlLndoZXJlUmVmfSBmb3IgbW9yZSBpbmZvLlxuICAgICAqL1xuICAgIHdoZXJlUmVmKGxocywgb3AsIHJocykge1xuICAgICAgICByZXR1cm4gbmV3IE9uQ29uZmxpY3RVcGRhdGVCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgb25Db25mbGljdE5vZGU6IE9uQ29uZmxpY3ROb2RlLmNsb25lV2l0aFVwZGF0ZVdoZXJlKHRoaXMuI3Byb3BzLm9uQ29uZmxpY3ROb2RlLCBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uKGxocywgb3AsIHJocykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xlYXJXaGVyZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPbkNvbmZsaWN0VXBkYXRlQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG9uQ29uZmxpY3ROb2RlOiBPbkNvbmZsaWN0Tm9kZS5jbG9uZVdpdGhvdXRVcGRhdGVXaGVyZSh0aGlzLiNwcm9wcy5vbkNvbmZsaWN0Tm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLm9uQ29uZmxpY3ROb2RlO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vb24tY29uZmxpY3Qtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IFdoZXJlTm9kZSB9IGZyb20gJy4vd2hlcmUtbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgT25Db25mbGljdE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ09uQ29uZmxpY3ROb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnT25Db25mbGljdE5vZGUnLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aChub2RlLCBwcm9wcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhJbmRleFdoZXJlKG5vZGUsIG9wZXJhdGlvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICBpbmRleFdoZXJlOiBub2RlLmluZGV4V2hlcmVcbiAgICAgICAgICAgICAgICA/IFdoZXJlTm9kZS5jbG9uZVdpdGhPcGVyYXRpb24obm9kZS5pbmRleFdoZXJlLCAnQW5kJywgb3BlcmF0aW9uKVxuICAgICAgICAgICAgICAgIDogV2hlcmVOb2RlLmNyZWF0ZShvcGVyYXRpb24pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aEluZGV4T3JXaGVyZShub2RlLCBvcGVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgaW5kZXhXaGVyZTogbm9kZS5pbmRleFdoZXJlXG4gICAgICAgICAgICAgICAgPyBXaGVyZU5vZGUuY2xvbmVXaXRoT3BlcmF0aW9uKG5vZGUuaW5kZXhXaGVyZSwgJ09yJywgb3BlcmF0aW9uKVxuICAgICAgICAgICAgICAgIDogV2hlcmVOb2RlLmNyZWF0ZShvcGVyYXRpb24pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFVwZGF0ZVdoZXJlKG5vZGUsIG9wZXJhdGlvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICB1cGRhdGVXaGVyZTogbm9kZS51cGRhdGVXaGVyZVxuICAgICAgICAgICAgICAgID8gV2hlcmVOb2RlLmNsb25lV2l0aE9wZXJhdGlvbihub2RlLnVwZGF0ZVdoZXJlLCAnQW5kJywgb3BlcmF0aW9uKVxuICAgICAgICAgICAgICAgIDogV2hlcmVOb2RlLmNyZWF0ZShvcGVyYXRpb24pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFVwZGF0ZU9yV2hlcmUobm9kZSwgb3BlcmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIHVwZGF0ZVdoZXJlOiBub2RlLnVwZGF0ZVdoZXJlXG4gICAgICAgICAgICAgICAgPyBXaGVyZU5vZGUuY2xvbmVXaXRoT3BlcmF0aW9uKG5vZGUudXBkYXRlV2hlcmUsICdPcicsIG9wZXJhdGlvbilcbiAgICAgICAgICAgICAgICA6IFdoZXJlTm9kZS5jcmVhdGUob3BlcmF0aW9uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhvdXRJbmRleFdoZXJlKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgaW5kZXhXaGVyZTogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aG91dFVwZGF0ZVdoZXJlKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgdXBkYXRlV2hlcmU6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi90b3AtcGFyc2VyLmQudHNcIiAvPlxuaW1wb3J0IHsgVG9wTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3RvcC1ub2RlLmpzJztcbmltcG9ydCB7IGlzQmlnSW50LCBpc051bWJlciwgaXNVbmRlZmluZWQgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUb3AoZXhwcmVzc2lvbiwgbW9kaWZpZXJzKSB7XG4gICAgaWYgKCFpc051bWJlcihleHByZXNzaW9uKSAmJiAhaXNCaWdJbnQoZXhwcmVzc2lvbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRvcCBleHByZXNzaW9uOiAke2V4cHJlc3Npb259YCk7XG4gICAgfVxuICAgIGlmICghaXNVbmRlZmluZWQobW9kaWZpZXJzKSAmJiAhaXNUb3BNb2RpZmllcnMobW9kaWZpZXJzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdG9wIG1vZGlmaWVyczogJHttb2RpZmllcnN9YCk7XG4gICAgfVxuICAgIHJldHVybiBUb3BOb2RlLmNyZWF0ZShleHByZXNzaW9uLCBtb2RpZmllcnMpO1xufVxuZnVuY3Rpb24gaXNUb3BNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gICAgcmV0dXJuIChtb2RpZmllcnMgPT09ICdwZXJjZW50JyB8fFxuICAgICAgICBtb2RpZmllcnMgPT09ICd3aXRoIHRpZXMnIHx8XG4gICAgICAgIG1vZGlmaWVycyA9PT0gJ3BlcmNlbnQgd2l0aCB0aWVzJyk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3RvcC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFRvcE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1RvcE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGV4cHJlc3Npb24sIG1vZGlmaWVycykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdUb3BOb2RlJyxcbiAgICAgICAgICAgIGV4cHJlc3Npb24sXG4gICAgICAgICAgICBtb2RpZmllcnMsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vb3ItYWN0aW9uLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgT3JBY3Rpb25Ob2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdPckFjdGlvbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGFjdGlvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdPckFjdGlvbk5vZGUnLFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2RlbGV0ZS1xdWVyeS1idWlsZGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgcGFyc2VKb2luLCB9IGZyb20gJy4uL3BhcnNlci9qb2luLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVRhYmxlRXhwcmVzc2lvbk9yTGlzdCwgfSBmcm9tICcuLi9wYXJzZXIvdGFibGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlU2VsZWN0QXJnLCBwYXJzZVNlbGVjdEFsbCwgfSBmcm9tICcuLi9wYXJzZXIvc2VsZWN0LXBhcnNlci5qcyc7XG5pbXBvcnQgeyBRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IGlzTm9SZXN1bHRFcnJvckNvbnN0cnVjdG9yLCBOb1Jlc3VsdEVycm9yLCB9IGZyb20gJy4vbm8tcmVzdWx0LWVycm9yLmpzJztcbmltcG9ydCB7IERlbGV0ZVJlc3VsdCB9IGZyb20gJy4vZGVsZXRlLXJlc3VsdC5qcyc7XG5pbXBvcnQgeyBEZWxldGVRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9kZWxldGUtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBMaW1pdE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9saW1pdC1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlT3JkZXJCeSwgfSBmcm9tICcuLi9wYXJzZXIvb3JkZXItYnktcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24sIHBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24sIH0gZnJvbSAnLi4vcGFyc2VyL2JpbmFyeS1vcGVyYXRpb24tcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlVmFsdWVFeHByZXNzaW9uLCB9IGZyb20gJy4uL3BhcnNlci92YWx1ZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VUb3AgfSBmcm9tICcuLi9wYXJzZXIvdG9wLXBhcnNlci5qcyc7XG5leHBvcnQgY2xhc3MgRGVsZXRlUXVlcnlCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICB3aGVyZSguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoV2hlcmUodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uKGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdoZXJlUmVmKGxocywgb3AsIHJocykge1xuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFdoZXJlKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VSZWZlcmVudGlhbEJpbmFyeU9wZXJhdGlvbihsaHMsIG9wLCByaHMpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsZWFyV2hlcmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRob3V0V2hlcmUodGhpcy4jcHJvcHMucXVlcnlOb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgYSBgZGVsZXRlIGZyb21gIHF1ZXJ5IGludG8gYSBgZGVsZXRlIHRvcCBmcm9tYCBxdWVyeS5cbiAgICAgKlxuICAgICAqIGB0b3BgIGNsYXVzZSBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIGRpYWxlY3RzIGxpa2UgTVMgU1FMIFNlcnZlci5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogRGVsZXRlIHRoZSBmaXJzdCA1IHJvd3M6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiXG4gICAgICogICAuZGVsZXRlRnJvbSgncGVyc29uJylcbiAgICAgKiAgIC50b3AoNSlcbiAgICAgKiAgIC53aGVyZSgnYWdlJywgJz4nLCAxOClcbiAgICAgKiAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTVMgU1FMIFNlcnZlcik6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBkZWxldGUgdG9wKDUpIGZyb20gXCJwZXJzb25cIiB3aGVyZSBcImFnZVwiID4gQDFcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIERlbGV0ZSB0aGUgZmlyc3QgNTAlIG9mIHJvd3M6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiXG4gICAgICogICAuZGVsZXRlRnJvbSgncGVyc29uJylcbiAgICAgKiAgIC50b3AoNTAsICdwZXJjZW50JylcbiAgICAgKiAgIC53aGVyZSgnYWdlJywgJz4nLCAxOClcbiAgICAgKiAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTVMgU1FMIFNlcnZlcik6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBkZWxldGUgdG9wKDUwKSBwZXJjZW50IGZyb20gXCJwZXJzb25cIiB3aGVyZSBcImFnZVwiID4gQDFcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB0b3AoZXhwcmVzc2lvbiwgbW9kaWZpZXJzKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoVG9wKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VUb3AoZXhwcmVzc2lvbiwgbW9kaWZpZXJzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1c2luZyh0YWJsZXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWxldGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IERlbGV0ZVF1ZXJ5Tm9kZS5jbG9uZVdpdGhVc2luZyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlVGFibGVFeHByZXNzaW9uT3JMaXN0KHRhYmxlcykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5uZXJKb2luKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2pvaW4oJ0lubmVySm9pbicsIGFyZ3MpO1xuICAgIH1cbiAgICBsZWZ0Sm9pbiguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNqb2luKCdMZWZ0Sm9pbicsIGFyZ3MpO1xuICAgIH1cbiAgICByaWdodEpvaW4oLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jam9pbignUmlnaHRKb2luJywgYXJncyk7XG4gICAgfVxuICAgIGZ1bGxKb2luKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2pvaW4oJ0Z1bGxKb2luJywgYXJncyk7XG4gICAgfVxuICAgICNqb2luKGpvaW5UeXBlLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoSm9pbih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlSm9pbihqb2luVHlwZSwgYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuaW5nKHNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFJldHVybmluZyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QXJnKHNlbGVjdGlvbikpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuaW5nQWxsKHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoUmV0dXJuaW5nKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VTZWxlY3RBbGwodGFibGUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG91dHB1dChhcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoT3V0cHV0KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VTZWxlY3RBcmcoYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3V0cHV0QWxsKHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoT3V0cHV0KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VTZWxlY3RBbGwodGFibGUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsZWFycyBhbGwgYHJldHVybmluZ2AgY2xhdXNlcyBmcm9tIHRoZSBxdWVyeS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5kZWxldGVGcm9tKCdwZXQnKVxuICAgICAqICAgLnJldHVybmluZ0FsbCgpXG4gICAgICogICAud2hlcmUoJ25hbWUnLCAnPScsICdNYXgnKVxuICAgICAqICAgLmNsZWFyUmV0dXJuaW5nKClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogZGVsZXRlIGZyb20gXCJwZXRcIiB3aGVyZSBcIm5hbWVcIiA9IFwiTWF4XCJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjbGVhclJldHVybmluZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWxldGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhvdXRSZXR1cm5pbmcodGhpcy4jcHJvcHMucXVlcnlOb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgYGxpbWl0YCBjbGF1c2UgZnJvbSB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuZGVsZXRlRnJvbSgncGV0JylcbiAgICAgKiAgIC5yZXR1cm5pbmdBbGwoKVxuICAgICAqICAgLndoZXJlKCduYW1lJywgJz0nLCAnTWF4JylcbiAgICAgKiAgIC5saW1pdCg1KVxuICAgICAqICAgLmNsZWFyTGltaXQoKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBkZWxldGUgZnJvbSBcInBldFwiIHdoZXJlIFwibmFtZVwiID0gXCJNYXhcIiByZXR1cm5pbmcgKlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNsZWFyTGltaXQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBEZWxldGVRdWVyeU5vZGUuY2xvbmVXaXRob3V0TGltaXQodGhpcy4jcHJvcHMucXVlcnlOb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9yZGVyQnkoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aE9yZGVyQnlJdGVtcyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlT3JkZXJCeShhcmdzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjbGVhck9yZGVyQnkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRob3V0T3JkZXJCeSh0aGlzLiNwcm9wcy5xdWVyeU5vZGUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGxpbWl0IGNsYXVzZSB0byB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiBBIGxpbWl0IGNsYXVzZSBpbiBhIGRlbGV0ZSBxdWVyeSBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIGRpYWxlY3RzXG4gICAgICogbGlrZSBNeVNRTC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogRGVsZXRlIDUgb2xkZXN0IGl0ZW1zIGluIGEgdGFibGU6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiXG4gICAgICogICAuZGVsZXRlRnJvbSgncGV0JylcbiAgICAgKiAgIC5vcmRlckJ5KCdjcmVhdGVkX2F0JylcbiAgICAgKiAgIC5saW1pdCg1KVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGRlbGV0ZSBmcm9tIGBwZXRgIG9yZGVyIGJ5IGBjcmVhdGVkX2F0YCBsaW1pdCA/XG4gICAgICogYGBgXG4gICAgICovXG4gICAgbGltaXQobGltaXQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWxldGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IERlbGV0ZVF1ZXJ5Tm9kZS5jbG9uZVdpdGhMaW1pdCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIExpbWl0Tm9kZS5jcmVhdGUocGFyc2VWYWx1ZUV4cHJlc3Npb24obGltaXQpKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZCBhbnkgYWRkaXRpb25hbCBTUUwgdG8gdGhlIGVuZCBvZiB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGIuZGVsZXRlRnJvbSgncGVyc29uJylcbiAgICAgKiAgIC53aGVyZSgnZmlyc3RfbmFtZScsICc9JywgJ0pvaG4nKVxuICAgICAqICAgLm1vZGlmeUVuZChzcWxgLS0gVGhpcyBpcyBhIGNvbW1lbnRgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGRlbGV0ZSBmcm9tIGBwZXJzb25gXG4gICAgICogd2hlcmUgYGZpcnN0X25hbWVgID0gXCJKb2huXCIgLS0gVGhpcyBpcyBhIGNvbW1lbnRcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBtb2RpZnlFbmQobW9kaWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWxldGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhFbmRNb2RpZmllcih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIG1vZGlmaWVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBjb25kaXRpb25hbGx5IGNhbGwgYSBtZXRob2Qgb24gYHRoaXNgLCBzZWVcbiAgICAgKiB0aGUge0BsaW5rICRpZn0gbWV0aG9kLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBUaGUgbmV4dCBleGFtcGxlIHVzZXMgYSBoZWxwZXIgZnVuY3Rpb24gYGxvZ2AgdG8gbG9nIGEgcXVlcnk6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgQ29tcGlsYWJsZSB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGxvZzxUIGV4dGVuZHMgQ29tcGlsYWJsZT4ocWI6IFQpOiBUIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHFiLmNvbXBpbGUoKSlcbiAgICAgKiAgIHJldHVybiBxYlxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLmRlbGV0ZUZyb20oJ3BlcnNvbicpXG4gICAgICogICAuJGNhbGwobG9nKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgYGZ1bmModGhpcylgIGlmIGBjb25kaXRpb25gIGlzIHRydWUuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBlc3BlY2lhbGx5IGhhbmR5IHdpdGggb3B0aW9uYWwgc2VsZWN0cy4gQW55IGByZXR1cm5pbmdgIG9yIGByZXR1cm5pbmdBbGxgXG4gICAgICogbWV0aG9kIGNhbGxzIGFkZCBjb2x1bW5zIGFzIG9wdGlvbmFsIGZpZWxkcyB0byB0aGUgb3V0cHV0IHR5cGUgd2hlbiBjYWxsZWQgaW5zaWRlXG4gICAgICogdGhlIGBmdW5jYCBjYWxsYmFjay4gVGhpcyBpcyBiZWNhdXNlIHdlIGNhbid0IGtub3cgaWYgdGhvc2Ugc2VsZWN0aW9ucyB3ZXJlIGFjdHVhbGx5XG4gICAgICogbWFkZSBiZWZvcmUgcnVubmluZyB0aGUgY29kZS5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gYWxzbyBjYWxsIGFueSBvdGhlciBtZXRob2RzIGluc2lkZSB0aGUgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXN5bmMgZnVuY3Rpb24gZGVsZXRlUGVyc29uKGlkOiBudW1iZXIsIHJldHVybkxhc3ROYW1lOiBib29sZWFuKSB7XG4gICAgICogICByZXR1cm4gYXdhaXQgZGJcbiAgICAgKiAgICAgLmRlbGV0ZUZyb20oJ3BlcnNvbicpXG4gICAgICogICAgIC53aGVyZSgnaWQnLCAnPScsIGlkKVxuICAgICAqICAgICAucmV0dXJuaW5nKFsnaWQnLCAnZmlyc3RfbmFtZSddKVxuICAgICAqICAgICAuJGlmKHJldHVybkxhc3ROYW1lLCAocWIpID0+IHFiLnJldHVybmluZygnbGFzdF9uYW1lJykpXG4gICAgICogICAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQW55IHNlbGVjdGlvbnMgYWRkZWQgaW5zaWRlIHRoZSBgaWZgIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYXMgb3B0aW9uYWwgZmllbGRzIHRvIHRoZVxuICAgICAqIG91dHB1dCB0eXBlIHNpbmNlIHdlIGNhbid0IGtub3cgaWYgdGhlIHNlbGVjdGlvbnMgd2VyZSBhY3R1YWxseSBtYWRlIGJlZm9yZSBydW5uaW5nXG4gICAgICogdGhlIGNvZGUuIEluIHRoZSBleGFtcGxlIGFib3ZlIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgYGRlbGV0ZVBlcnNvbmAgZnVuY3Rpb24gaXM6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIFByb21pc2U8e1xuICAgICAqICAgaWQ6IG51bWJlclxuICAgICAqICAgZmlyc3RfbmFtZTogc3RyaW5nXG4gICAgICogICBsYXN0X25hbWU/OiBzdHJpbmdcbiAgICAgKiB9PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgICRpZihjb25kaXRpb24sIGZ1bmMpIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBEZWxldGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIG91dHB1dCB0eXBlIG9mIHRoZSBxdWVyeS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGNhbGwgZG9lc24ndCBjaGFuZ2UgdGhlIFNRTCBpbiBhbnkgd2F5LiBUaGlzIG1ldGhvZHMgc2ltcGx5XG4gICAgICogcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBgRGVsZXRlUXVlcnlCdWlsZGVyYCB3aXRoIGEgbmV3IG91dHB1dCB0eXBlLlxuICAgICAqL1xuICAgICRjYXN0VG8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHRoaXMuI3Byb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTmFycm93cyAocGFydHMgb2YpIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiBLeXNlbHkgdHJpZXMgdG8gYmUgYXMgdHlwZS1zYWZlIGFzIHBvc3NpYmxlLCBidXQgaW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIG1ha2VcbiAgICAgKiBjb21wcm9taXNlcyBmb3IgYmV0dGVyIG1haW50YWluYWJpbGl0eSBhbmQgY29tcGlsYXRpb24gcGVyZm9ybWFuY2UuIEF0IHByZXNlbnQsXG4gICAgICogS3lzZWx5IGRvZXNuJ3QgbmFycm93IHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgcXVlcnkgd2hlbiB1c2luZyB7QGxpbmsgd2hlcmV9IGFuZCB7QGxpbmsgcmV0dXJuaW5nfSBvciB7QGxpbmsgcmV0dXJuaW5nQWxsfS5cbiAgICAgKlxuICAgICAqIFRoaXMgdXRpbGl0eSBtZXRob2QgaXMgdmVyeSB1c2VmdWwgZm9yIHRoZXNlIHNpdHVhdGlvbnMsIGFzIGl0IHJlbW92ZXMgdW5uY2Vzc2FyeVxuICAgICAqIHJ1bnRpbWUgYXNzZXJ0aW9uL2d1YXJkIGNvZGUuIEl0cyBpbnB1dCB0eXBlIGlzIGxpbWl0ZWQgdG8gdGhlIG91dHB1dCB0eXBlXG4gICAgICogb2YgdGhlIHF1ZXJ5LCBzbyB5b3UgY2FuJ3QgYWRkIGEgY29sdW1uIHRoYXQgZG9lc24ndCBleGlzdCwgb3IgY2hhbmdlIGEgY29sdW1uJ3NcbiAgICAgKiB0eXBlIHRvIHNvbWV0aGluZyB0aGF0IGRvZXNuJ3QgZXhpc3QgaW4gaXRzIHVuaW9uIHR5cGUuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIFR1cm4gdGhpcyBjb2RlOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgdHlwZSB7IFBlcnNvbiB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gICAgICpcbiAgICAgKiBjb25zdCBwZXJzb24gPSBhd2FpdCBkYi5kZWxldGVGcm9tKCdwZXJzb24nKVxuICAgICAqICAgLndoZXJlKCdpZCcsICc9JywgMylcbiAgICAgKiAgIC53aGVyZSgnbnVsbGFibGVfY29sdW1uJywgJ2lzIG5vdCcsIG51bGwpXG4gICAgICogICAucmV0dXJuaW5nQWxsKClcbiAgICAgKiAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICpcbiAgICAgKiBpZiAoaXNXaXRoTm9OdWxsVmFsdWUocGVyc29uKSkge1xuICAgICAqICAgZnVuY3Rpb25UaGF0RXhwZWN0c1BlcnNvbldpdGhOb25OdWxsVmFsdWUocGVyc29uKVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGlzV2l0aE5vTnVsbFZhbHVlKHBlcnNvbjogUGVyc29uKTogcGVyc29uIGlzIFBlcnNvbiAmIHsgbnVsbGFibGVfY29sdW1uOiBzdHJpbmcgfSB7XG4gICAgICogICByZXR1cm4gcGVyc29uLm51bGxhYmxlX2NvbHVtbiAhPSBudWxsXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogSW50byB0aGlzOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgdHlwZSB7IE5vdE51bGwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBjb25zdCBwZXJzb24gPSBhd2FpdCBkYi5kZWxldGVGcm9tKCdwZXJzb24nKVxuICAgICAqICAgLndoZXJlKCdpZCcsICc9JywgMylcbiAgICAgKiAgIC53aGVyZSgnbnVsbGFibGVfY29sdW1uJywgJ2lzIG5vdCcsIG51bGwpXG4gICAgICogICAucmV0dXJuaW5nQWxsKClcbiAgICAgKiAgIC4kbmFycm93VHlwZTx7IG51bGxhYmxlX2NvbHVtbjogTm90TnVsbCB9PigpXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqXG4gICAgICogZnVuY3Rpb25UaGF0RXhwZWN0c1BlcnNvbldpdGhOb25OdWxsVmFsdWUocGVyc29uKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgICRuYXJyb3dUeXBlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih0aGlzLiNwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzc2VydHMgdGhhdCBxdWVyeSdzIG91dHB1dCByb3cgdHlwZSBlcXVhbHMgdGhlIGdpdmVuIHR5cGUgYFRgLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gc2ltcGxpZnkgZXhjZXNzaXZlbHkgY29tcGxleCB0eXBlcyB0byBtYWtlIFR5cGVTY3JpcHQgaGFwcHlcbiAgICAgKiBhbmQgbXVjaCBmYXN0ZXIuXG4gICAgICpcbiAgICAgKiBLeXNlbHkgdXNlcyBjb21wbGV4IHR5cGUgbWFnaWMgdG8gYWNoaWV2ZSBpdHMgdHlwZSBzYWZldHkuIFRoaXMgY29tcGxleGl0eSBpcyBzb21ldGltZXMgdG9vIG11Y2hcbiAgICAgKiBmb3IgVHlwZVNjcmlwdCBhbmQgeW91IGdldCBlcnJvcnMgbGlrZSB0aGlzOlxuICAgICAqXG4gICAgICogYGBgXG4gICAgICogZXJyb3IgVFMyNTg5OiBUeXBlIGluc3RhbnRpYXRpb24gaXMgZXhjZXNzaXZlbHkgZGVlcCBhbmQgcG9zc2libHkgaW5maW5pdGUuXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBJbiB0aGVzZSBjYXNlIHlvdSBjYW4gb2Z0ZW4gdXNlIHRoaXMgbWV0aG9kIHRvIGhlbHAgVHlwZVNjcmlwdCBhIGxpdHRsZSBiaXQuIFdoZW4geW91IHVzZSB0aGlzXG4gICAgICogbWV0aG9kIHRvIGFzc2VydCB0aGUgb3V0cHV0IHR5cGUgb2YgYSBxdWVyeSwgS3lzZWx5IGNhbiBkcm9wIHRoZSBjb21wbGV4IG91dHB1dCB0eXBlIHRoYXRcbiAgICAgKiBjb25zaXN0cyBvZiBtdWx0aXBsZSBuZXN0ZWQgaGVscGVyIHR5cGVzIGFuZCByZXBsYWNlIGl0IHdpdGggdGhlIHNpbXBsZSBhc3NlcnRlZCB0eXBlLlxuICAgICAqXG4gICAgICogVXNpbmcgdGhpcyBtZXRob2QgZG9lc24ndCByZWR1Y2UgdHlwZSBzYWZldHkgYXQgYWxsLiBZb3UgaGF2ZSB0byBwYXNzIGluIGEgdHlwZSB0aGF0IGlzXG4gICAgICogc3RydWN0dXJhbGx5IGVxdWFsIHRvIHRoZSBjdXJyZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHR5cGUgeyBTcGVjaWVzIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVBlcnNvbkFuZFBldHMocGVyc29uSWQ6IG51bWJlcikge1xuICAgICAqICAgcmV0dXJuIGF3YWl0IGRiXG4gICAgICogICAgIC53aXRoKCdkZWxldGVkX3BlcnNvbicsIChxYikgPT4gcWJcbiAgICAgKiAgICAgICAgLmRlbGV0ZUZyb20oJ3BlcnNvbicpXG4gICAgICogICAgICAgIC53aGVyZSgnaWQnLCAnPScsIHBlcnNvbklkKVxuICAgICAqICAgICAgICAucmV0dXJuaW5nKCdmaXJzdF9uYW1lJylcbiAgICAgKiAgICAgICAgLiRhc3NlcnRUeXBlPHsgZmlyc3RfbmFtZTogc3RyaW5nIH0+KClcbiAgICAgKiAgICAgKVxuICAgICAqICAgICAud2l0aCgnZGVsZXRlZF9wZXRzJywgKHFiKSA9PiBxYlxuICAgICAqICAgICAgIC5kZWxldGVGcm9tKCdwZXQnKVxuICAgICAqICAgICAgIC53aGVyZSgnb3duZXJfaWQnLCAnPScsIHBlcnNvbklkKVxuICAgICAqICAgICAgIC5yZXR1cm5pbmcoWyduYW1lIGFzIHBldF9uYW1lJywgJ3NwZWNpZXMnXSlcbiAgICAgKiAgICAgICAuJGFzc2VydFR5cGU8eyBwZXRfbmFtZTogc3RyaW5nLCBzcGVjaWVzOiBTcGVjaWVzIH0+KClcbiAgICAgKiAgICAgKVxuICAgICAqICAgICAuc2VsZWN0RnJvbShbJ2RlbGV0ZWRfcGVyc29uJywgJ2RlbGV0ZWRfcGV0cyddKVxuICAgICAqICAgICAuc2VsZWN0QWxsKClcbiAgICAgKiAgICAgLmV4ZWN1dGUoKVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAkYXNzZXJ0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWxldGVRdWVyeUJ1aWxkZXIodGhpcy4jcHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY29weSBvZiB0aGlzIERlbGV0ZVF1ZXJ5QnVpbGRlciBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbiBwbHVnaW4gaW5zdGFsbGVkLlxuICAgICAqL1xuICAgIHdpdGhQbHVnaW4ocGx1Z2luKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVsZXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgZXhlY3V0b3I6IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLndpdGhQbHVnaW4ocGx1Z2luKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBxdWVyeSBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiByb3dzLlxuICAgICAqXG4gICAgICogQWxzbyBzZWUgdGhlIHtAbGluayBleGVjdXRlVGFrZUZpcnN0fSBhbmQge0BsaW5rIGV4ZWN1dGVUYWtlRmlyc3RPclRocm93fSBtZXRob2RzLlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBpbGVkUXVlcnkgPSB0aGlzLmNvbXBpbGUoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KGNvbXBpbGVkUXVlcnkpO1xuICAgICAgICBjb25zdCB7IGFkYXB0ZXIgfSA9IHRoaXMuI3Byb3BzLmV4ZWN1dG9yO1xuICAgICAgICBjb25zdCBxdWVyeSA9IGNvbXBpbGVkUXVlcnkucXVlcnk7XG4gICAgICAgIGlmICgocXVlcnkucmV0dXJuaW5nICYmIGFkYXB0ZXIuc3VwcG9ydHNSZXR1cm5pbmcpIHx8XG4gICAgICAgICAgICAocXVlcnkub3V0cHV0ICYmIGFkYXB0ZXIuc3VwcG9ydHNPdXRwdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtuZXcgRGVsZXRlUmVzdWx0KHJlc3VsdC5udW1BZmZlY3RlZFJvd3MgPz8gQmlnSW50KDApKV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBxdWVyeSBhbmQgcmV0dXJucyB0aGUgZmlyc3QgcmVzdWx0IG9yIHVuZGVmaW5lZCBpZlxuICAgICAqIHRoZSBxdWVyeSByZXR1cm5lZCBubyByZXN1bHQuXG4gICAgICovXG4gICAgYXN5bmMgZXhlY3V0ZVRha2VGaXJzdCgpIHtcbiAgICAgICAgY29uc3QgW3Jlc3VsdF0gPSBhd2FpdCB0aGlzLmV4ZWN1dGUoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHF1ZXJ5IGFuZCByZXR1cm5zIHRoZSBmaXJzdCByZXN1bHQgb3IgdGhyb3dzIGlmXG4gICAgICogdGhlIHF1ZXJ5IHJldHVybmVkIG5vIHJlc3VsdC5cbiAgICAgKlxuICAgICAqIEJ5IGRlZmF1bHQgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIE5vUmVzdWx0RXJyb3J9IGlzIHRocm93biwgYnV0IHlvdSBjYW5cbiAgICAgKiBwcm92aWRlIGEgY3VzdG9tIGVycm9yIGNsYXNzLCBvciBjYWxsYmFjayBhcyB0aGUgb25seSBhcmd1bWVudCB0byB0aHJvdyBhIGRpZmZlcmVudFxuICAgICAqIGVycm9yLlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGVUYWtlRmlyc3RPclRocm93KGVycm9yQ29uc3RydWN0b3IgPSBOb1Jlc3VsdEVycm9yKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZVRha2VGaXJzdCgpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNOb1Jlc3VsdEVycm9yQ29uc3RydWN0b3IoZXJyb3JDb25zdHJ1Y3RvcilcbiAgICAgICAgICAgICAgICA/IG5ldyBlcnJvckNvbnN0cnVjdG9yKHRoaXMudG9PcGVyYXRpb25Ob2RlKCkpXG4gICAgICAgICAgICAgICAgOiBlcnJvckNvbnN0cnVjdG9yKHRoaXMudG9PcGVyYXRpb25Ob2RlKCkpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgKnN0cmVhbShjaHVua1NpemUgPSAxMDApIHtcbiAgICAgICAgY29uc3QgY29tcGlsZWRRdWVyeSA9IHRoaXMuY29tcGlsZSgpO1xuICAgICAgICBjb25zdCBzdHJlYW0gPSB0aGlzLiNwcm9wcy5leGVjdXRvci5zdHJlYW0oY29tcGlsZWRRdWVyeSwgY2h1bmtTaXplKTtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIHN0cmVhbSkge1xuICAgICAgICAgICAgeWllbGQqIGl0ZW0ucm93cztcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBleHBsYWluKGZvcm1hdCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gbmV3IERlbGV0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEV4cGxhaW4odGhpcy4jcHJvcHMucXVlcnlOb2RlLCBmb3JtYXQsIG9wdGlvbnMpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGJ1aWxkZXIuZXhlY3V0ZSgpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZGVsZXRlLXJlc3VsdC5kLnRzXCIgLz5cbmV4cG9ydCBjbGFzcyBEZWxldGVSZXN1bHQge1xuICAgIG51bURlbGV0ZWRSb3dzO1xuICAgIGNvbnN0cnVjdG9yKG51bURlbGV0ZWRSb3dzKSB7XG4gICAgICAgIHRoaXMubnVtRGVsZXRlZFJvd3MgPSBudW1EZWxldGVkUm93cztcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2xpbWl0LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTGltaXROb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdMaW1pdE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGxpbWl0KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0xpbWl0Tm9kZScsXG4gICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi91cGRhdGUtcXVlcnktYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IHBhcnNlSm9pbiwgfSBmcm9tICcuLi9wYXJzZXIvam9pbi1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VUYWJsZUV4cHJlc3Npb25Pckxpc3QsIH0gZnJvbSAnLi4vcGFyc2VyL3RhYmxlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVNlbGVjdEFyZywgcGFyc2VTZWxlY3RBbGwsIH0gZnJvbSAnLi4vcGFyc2VyL3NlbGVjdC1wYXJzZXIuanMnO1xuaW1wb3J0IHsgUXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBVcGRhdGVRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS91cGRhdGUtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVVwZGF0ZSwgfSBmcm9tICcuLi9wYXJzZXIvdXBkYXRlLXNldC1wYXJzZXIuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgVXBkYXRlUmVzdWx0IH0gZnJvbSAnLi91cGRhdGUtcmVzdWx0LmpzJztcbmltcG9ydCB7IGlzTm9SZXN1bHRFcnJvckNvbnN0cnVjdG9yLCBOb1Jlc3VsdEVycm9yLCB9IGZyb20gJy4vbm8tcmVzdWx0LWVycm9yLmpzJztcbmltcG9ydCB7IHBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24sIHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24sIH0gZnJvbSAnLi4vcGFyc2VyL2JpbmFyeS1vcGVyYXRpb24tcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlVmFsdWVFeHByZXNzaW9uLCB9IGZyb20gJy4uL3BhcnNlci92YWx1ZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgTGltaXROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvbGltaXQtbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVRvcCB9IGZyb20gJy4uL3BhcnNlci90b3AtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlT3JkZXJCeSwgfSBmcm9tICcuLi9wYXJzZXIvb3JkZXItYnktcGFyc2VyLmpzJztcbmV4cG9ydCBjbGFzcyBVcGRhdGVRdWVyeUJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIHdoZXJlKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhXaGVyZSh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24oYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgd2hlcmVSZWYobGhzLCBvcCwgcmhzKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoV2hlcmUodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uKGxocywgb3AsIHJocykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xlYXJXaGVyZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhvdXRXaGVyZSh0aGlzLiNwcm9wcy5xdWVyeU5vZGUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyBhbiBgdXBkYXRlYCBxdWVyeSBpbnRvIGEgYHVwZGF0ZSB0b3BgIHF1ZXJ5LlxuICAgICAqXG4gICAgICogYHRvcGAgY2xhdXNlIGlzIG9ubHkgc3VwcG9ydGVkIGJ5IHNvbWUgZGlhbGVjdHMgbGlrZSBNUyBTUUwgU2VydmVyLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBVcGRhdGUgdGhlIGZpcnN0IHJvdzpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIudXBkYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAudG9wKDEpXG4gICAgICogICAuc2V0KHsgZmlyc3RfbmFtZTogJ0ZvbycgfSlcbiAgICAgKiAgIC53aGVyZSgnYWdlJywgJz4nLCAxOClcbiAgICAgKiAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTVMgU1FMIFNlcnZlcik6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiB1cGRhdGUgdG9wKDEpIFwicGVyc29uXCIgc2V0IFwiZmlyc3RfbmFtZVwiID0gQDEgd2hlcmUgXCJhZ2VcIiA+IEAyXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBVcGRhdGUgdGhlIDUwJSBmaXJzdCByb3dzOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi51cGRhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC50b3AoNTAsICdwZXJjZW50JylcbiAgICAgKiAgIC5zZXQoeyBmaXJzdF9uYW1lOiAnRm9vJyB9KVxuICAgICAqICAgLndoZXJlKCdhZ2UnLCAnPicsIDE4KVxuICAgICAqICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNUyBTUUwgU2VydmVyKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHVwZGF0ZSB0b3AoNTApIHBlcmNlbnQgXCJwZXJzb25cIiBzZXQgXCJmaXJzdF9uYW1lXCIgPSBAMSB3aGVyZSBcImFnZVwiID4gQDJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB0b3AoZXhwcmVzc2lvbiwgbW9kaWZpZXJzKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoVG9wKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VUb3AoZXhwcmVzc2lvbiwgbW9kaWZpZXJzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmcm9tKGZyb20pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFVwZGF0ZVF1ZXJ5Tm9kZS5jbG9uZVdpdGhGcm9tSXRlbXModGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVRhYmxlRXhwcmVzc2lvbk9yTGlzdChmcm9tKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpbm5lckpvaW4oLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jam9pbignSW5uZXJKb2luJywgYXJncyk7XG4gICAgfVxuICAgIGxlZnRKb2luKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2pvaW4oJ0xlZnRKb2luJywgYXJncyk7XG4gICAgfVxuICAgIHJpZ2h0Sm9pbiguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNqb2luKCdSaWdodEpvaW4nLCBhcmdzKTtcbiAgICB9XG4gICAgZnVsbEpvaW4oLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jam9pbignRnVsbEpvaW4nLCBhcmdzKTtcbiAgICB9XG4gICAgI2pvaW4oam9pblR5cGUsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhKb2luKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VKb2luKGpvaW5UeXBlLCBhcmdzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvcmRlckJ5KC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhPcmRlckJ5SXRlbXModGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZU9yZGVyQnkoYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xlYXJPcmRlckJ5KCkge1xuICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aG91dE9yZGVyQnkodGhpcy4jcHJvcHMucXVlcnlOb2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBsaW1pdCBjbGF1c2UgdG8gdGhlIHVwZGF0ZSBxdWVyeSBmb3Igc3VwcG9ydGVkIGRhdGFiYXNlcywgc3VjaCBhcyBNeVNRTC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogVXBkYXRlIHRoZSBmaXJzdCAyIHJvd3MgaW4gdGhlICdwZXJzb24nIHRhYmxlOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLnVwZGF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLnNldCh7IGZpcnN0X25hbWU6ICdGb28nIH0pXG4gICAgICogICAubGltaXQoMilcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiB1cGRhdGUgYHBlcnNvbmAgc2V0IGBmaXJzdF9uYW1lYCA9ID8gbGltaXQgP1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGxpbWl0KGxpbWl0KSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBVcGRhdGVRdWVyeU5vZGUuY2xvbmVXaXRoTGltaXQodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBMaW1pdE5vZGUuY3JlYXRlKHBhcnNlVmFsdWVFeHByZXNzaW9uKGxpbWl0KSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2V0KC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFVwZGF0ZVF1ZXJ5Tm9kZS5jbG9uZVdpdGhVcGRhdGVzKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VVcGRhdGUoLi4uYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuaW5nKHNlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFJldHVybmluZyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QXJnKHNlbGVjdGlvbikpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuaW5nQWxsKHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoUmV0dXJuaW5nKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VTZWxlY3RBbGwodGFibGUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG91dHB1dChhcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoT3V0cHV0KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VTZWxlY3RBcmcoYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3V0cHV0QWxsKHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoT3V0cHV0KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VTZWxlY3RBbGwodGFibGUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWRkIGFueSBhZGRpdGlvbmFsIFNRTCB0byB0aGUgZW5kIG9mIHRoZSBxdWVyeS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYi51cGRhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5zZXQoeyBhZ2U6IDM5IH0pXG4gICAgICogICAud2hlcmUoJ2ZpcnN0X25hbWUnLCAnPScsICdKb2huJylcbiAgICAgKiAgIC5tb2RpZnlFbmQoc3FsLnJhdygnLS0gVGhpcyBpcyBhIGNvbW1lbnQnKSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiB1cGRhdGUgYHBlcnNvbmBcbiAgICAgKiBzZXQgYGFnZWAgPSAzOVxuICAgICAqIHdoZXJlIGBmaXJzdF9uYW1lYCA9IFwiSm9oblwiIC0tIFRoaXMgaXMgYSBjb21tZW50XG4gICAgICogYGBgXG4gICAgICovXG4gICAgbW9kaWZ5RW5kKG1vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoRW5kTW9kaWZpZXIodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBtb2RpZmllci50b09wZXJhdGlvbk5vZGUoKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgYWxsIGByZXR1cm5pbmdgIGNsYXVzZXMgZnJvbSB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZGIudXBkYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAucmV0dXJuaW5nQWxsKClcbiAgICAgKiAgIC5zZXQoeyBhZ2U6IDM5IH0pXG4gICAgICogICAud2hlcmUoJ2ZpcnN0X25hbWUnLCAnPScsICdKb2huJylcbiAgICAgKiAgIC5jbGVhclJldHVybmluZygpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHVwZGF0ZSBcInBlcnNvblwiIHNldCBcImFnZVwiID0gMzkgd2hlcmUgXCJmaXJzdF9uYW1lXCIgPSBcIkpvaG5cIlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNsZWFyUmV0dXJuaW5nKCkge1xuICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aG91dFJldHVybmluZyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKlxuICAgICAqIElmIHlvdSB3YW50IHRvIGNvbmRpdGlvbmFsbHkgY2FsbCBhIG1ldGhvZCBvbiBgdGhpc2AsIHNlZVxuICAgICAqIHRoZSB7QGxpbmsgJGlmfSBtZXRob2QuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIFRoZSBuZXh0IGV4YW1wbGUgdXNlcyBhIGhlbHBlciBmdW5jdGlvbiBgbG9nYCB0byBsb2cgYSBxdWVyeTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHR5cGUgeyBDb21waWxhYmxlIH0gZnJvbSAna3lzZWx5J1xuICAgICAqIGltcG9ydCB0eXBlIHsgUGVyc29uVXBkYXRlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGxvZzxUIGV4dGVuZHMgQ29tcGlsYWJsZT4ocWI6IFQpOiBUIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHFiLmNvbXBpbGUoKSlcbiAgICAgKiAgIHJldHVybiBxYlxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGNvbnN0IHZhbHVlcyA9IHtcbiAgICAgKiAgIGZpcnN0X25hbWU6ICdKb2huJyxcbiAgICAgKiB9IHNhdGlzZmllcyBQZXJzb25VcGRhdGVcbiAgICAgKlxuICAgICAqIGRiLnVwZGF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLnNldCh2YWx1ZXMpXG4gICAgICogICAuJGNhbGwobG9nKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGwgYGZ1bmModGhpcylgIGlmIGBjb25kaXRpb25gIGlzIHRydWUuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBlc3BlY2lhbGx5IGhhbmR5IHdpdGggb3B0aW9uYWwgc2VsZWN0cy4gQW55IGByZXR1cm5pbmdgIG9yIGByZXR1cm5pbmdBbGxgXG4gICAgICogbWV0aG9kIGNhbGxzIGFkZCBjb2x1bW5zIGFzIG9wdGlvbmFsIGZpZWxkcyB0byB0aGUgb3V0cHV0IHR5cGUgd2hlbiBjYWxsZWQgaW5zaWRlXG4gICAgICogdGhlIGBmdW5jYCBjYWxsYmFjay4gVGhpcyBpcyBiZWNhdXNlIHdlIGNhbid0IGtub3cgaWYgdGhvc2Ugc2VsZWN0aW9ucyB3ZXJlIGFjdHVhbGx5XG4gICAgICogbWFkZSBiZWZvcmUgcnVubmluZyB0aGUgY29kZS5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gYWxzbyBjYWxsIGFueSBvdGhlciBtZXRob2RzIGluc2lkZSB0aGUgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHR5cGUgeyBQZXJzb25VcGRhdGUgfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICAgICAqXG4gICAgICogYXN5bmMgZnVuY3Rpb24gdXBkYXRlUGVyc29uKGlkOiBudW1iZXIsIHVwZGF0ZXM6IFBlcnNvblVwZGF0ZSwgcmV0dXJuTGFzdE5hbWU6IGJvb2xlYW4pIHtcbiAgICAgKiAgIHJldHVybiBhd2FpdCBkYlxuICAgICAqICAgICAudXBkYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAgIC5zZXQodXBkYXRlcylcbiAgICAgKiAgICAgLndoZXJlKCdpZCcsICc9JywgaWQpXG4gICAgICogICAgIC5yZXR1cm5pbmcoWydpZCcsICdmaXJzdF9uYW1lJ10pXG4gICAgICogICAgIC4kaWYocmV0dXJuTGFzdE5hbWUsIChxYikgPT4gcWIucmV0dXJuaW5nKCdsYXN0X25hbWUnKSlcbiAgICAgKiAgICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBBbnkgc2VsZWN0aW9ucyBhZGRlZCBpbnNpZGUgdGhlIGBpZmAgY2FsbGJhY2sgd2lsbCBiZSBhZGRlZCBhcyBvcHRpb25hbCBmaWVsZHMgdG8gdGhlXG4gICAgICogb3V0cHV0IHR5cGUgc2luY2Ugd2UgY2FuJ3Qga25vdyBpZiB0aGUgc2VsZWN0aW9ucyB3ZXJlIGFjdHVhbGx5IG1hZGUgYmVmb3JlIHJ1bm5pbmdcbiAgICAgKiB0aGUgY29kZS4gSW4gdGhlIGV4YW1wbGUgYWJvdmUgdGhlIHJldHVybiB0eXBlIG9mIHRoZSBgdXBkYXRlUGVyc29uYCBmdW5jdGlvbiBpczpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogUHJvbWlzZTx7XG4gICAgICogICBpZDogbnVtYmVyXG4gICAgICogICBmaXJzdF9uYW1lOiBzdHJpbmdcbiAgICAgKiAgIGxhc3RfbmFtZT86IHN0cmluZ1xuICAgICAqIH0+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgJGlmKGNvbmRpdGlvbiwgZnVuYykge1xuICAgICAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgb3V0cHV0IHR5cGUgb2YgdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgY2FsbCBkb2Vzbid0IGNoYW5nZSB0aGUgU1FMIGluIGFueSB3YXkuIFRoaXMgbWV0aG9kcyBzaW1wbHlcbiAgICAgKiByZXR1cm5zIGEgY29weSBvZiB0aGlzIGBVcGRhdGVRdWVyeUJ1aWxkZXJgIHdpdGggYSBuZXcgb3V0cHV0IHR5cGUuXG4gICAgICovXG4gICAgJGNhc3RUbygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVRdWVyeUJ1aWxkZXIodGhpcy4jcHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIChwYXJ0cyBvZikgdGhlIG91dHB1dCB0eXBlIG9mIHRoZSBxdWVyeS5cbiAgICAgKlxuICAgICAqIEt5c2VseSB0cmllcyB0byBiZSBhcyB0eXBlLXNhZmUgYXMgcG9zc2libGUsIGJ1dCBpbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gbWFrZVxuICAgICAqIGNvbXByb21pc2VzIGZvciBiZXR0ZXIgbWFpbnRhaW5hYmlsaXR5IGFuZCBjb21waWxhdGlvbiBwZXJmb3JtYW5jZS4gQXQgcHJlc2VudCxcbiAgICAgKiBLeXNlbHkgZG9lc24ndCBuYXJyb3cgdGhlIG91dHB1dCB0eXBlIG9mIHRoZSBxdWVyeSBiYXNlZCBvbiB7QGxpbmsgc2V0fSBpbnB1dFxuICAgICAqIHdoZW4gdXNpbmcge0BsaW5rIHdoZXJlfSBhbmQvb3Ige0BsaW5rIHJldHVybmluZ30gb3Ige0BsaW5rIHJldHVybmluZ0FsbH0uXG4gICAgICpcbiAgICAgKiBUaGlzIHV0aWxpdHkgbWV0aG9kIGlzIHZlcnkgdXNlZnVsIGZvciB0aGVzZSBzaXR1YXRpb25zLCBhcyBpdCByZW1vdmVzIHVubmNlc3NhcnlcbiAgICAgKiBydW50aW1lIGFzc2VydGlvbi9ndWFyZCBjb2RlLiBJdHMgaW5wdXQgdHlwZSBpcyBsaW1pdGVkIHRvIHRoZSBvdXRwdXQgdHlwZVxuICAgICAqIG9mIHRoZSBxdWVyeSwgc28geW91IGNhbid0IGFkZCBhIGNvbHVtbiB0aGF0IGRvZXNuJ3QgZXhpc3QsIG9yIGNoYW5nZSBhIGNvbHVtbidzXG4gICAgICogdHlwZSB0byBzb21ldGhpbmcgdGhhdCBkb2Vzbid0IGV4aXN0IGluIGl0cyB1bmlvbiB0eXBlLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBUdXJuIHRoaXMgY29kZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHR5cGUgeyBQZXJzb24gfSBmcm9tICd0eXBlLWVkaXRvcicgLy8gaW1hZ2luYXJ5IG1vZHVsZVxuICAgICAqXG4gICAgICogY29uc3QgaWQgPSAxXG4gICAgICogY29uc3Qgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICpcbiAgICAgKiBjb25zdCBwZXJzb24gPSBhd2FpdCBkYi51cGRhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5zZXQoeyBkZWxldGVkX2F0OiBub3cgfSlcbiAgICAgKiAgIC53aGVyZSgnaWQnLCAnPScsIGlkKVxuICAgICAqICAgLndoZXJlKCdudWxsYWJsZV9jb2x1bW4nLCAnaXMgbm90JywgbnVsbClcbiAgICAgKiAgIC5yZXR1cm5pbmdBbGwoKVxuICAgICAqICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKlxuICAgICAqIGlmIChpc1dpdGhOb051bGxWYWx1ZShwZXJzb24pKSB7XG4gICAgICogICBmdW5jdGlvblRoYXRFeHBlY3RzUGVyc29uV2l0aE5vbk51bGxWYWx1ZShwZXJzb24pXG4gICAgICogfVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gaXNXaXRoTm9OdWxsVmFsdWUocGVyc29uOiBQZXJzb24pOiBwZXJzb24gaXMgUGVyc29uICYgeyBudWxsYWJsZV9jb2x1bW46IHN0cmluZyB9IHtcbiAgICAgKiAgIHJldHVybiBwZXJzb24ubnVsbGFibGVfY29sdW1uICE9IG51bGxcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBJbnRvIHRoaXM6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgTm90TnVsbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGNvbnN0IGlkID0gMVxuICAgICAqIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAqXG4gICAgICogY29uc3QgcGVyc29uID0gYXdhaXQgZGIudXBkYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuc2V0KHsgZGVsZXRlZF9hdDogbm93IH0pXG4gICAgICogICAud2hlcmUoJ2lkJywgJz0nLCBpZClcbiAgICAgKiAgIC53aGVyZSgnbnVsbGFibGVfY29sdW1uJywgJ2lzIG5vdCcsIG51bGwpXG4gICAgICogICAucmV0dXJuaW5nQWxsKClcbiAgICAgKiAgIC4kbmFycm93VHlwZTx7IGRlbGV0ZWRfYXQ6IERhdGU7IG51bGxhYmxlX2NvbHVtbjogTm90TnVsbCB9PigpXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqXG4gICAgICogZnVuY3Rpb25UaGF0RXhwZWN0c1BlcnNvbldpdGhOb25OdWxsVmFsdWUocGVyc29uKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgICRuYXJyb3dUeXBlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih0aGlzLiNwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFzc2VydHMgdGhhdCBxdWVyeSdzIG91dHB1dCByb3cgdHlwZSBlcXVhbHMgdGhlIGdpdmVuIHR5cGUgYFRgLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gc2ltcGxpZnkgZXhjZXNzaXZlbHkgY29tcGxleCB0eXBlcyB0byBtYWtlIFR5cGVTY3JpcHQgaGFwcHlcbiAgICAgKiBhbmQgbXVjaCBmYXN0ZXIuXG4gICAgICpcbiAgICAgKiBLeXNlbHkgdXNlcyBjb21wbGV4IHR5cGUgbWFnaWMgdG8gYWNoaWV2ZSBpdHMgdHlwZSBzYWZldHkuIFRoaXMgY29tcGxleGl0eSBpcyBzb21ldGltZXMgdG9vIG11Y2hcbiAgICAgKiBmb3IgVHlwZVNjcmlwdCBhbmQgeW91IGdldCBlcnJvcnMgbGlrZSB0aGlzOlxuICAgICAqXG4gICAgICogYGBgXG4gICAgICogZXJyb3IgVFMyNTg5OiBUeXBlIGluc3RhbnRpYXRpb24gaXMgZXhjZXNzaXZlbHkgZGVlcCBhbmQgcG9zc2libHkgaW5maW5pdGUuXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBJbiB0aGVzZSBjYXNlIHlvdSBjYW4gb2Z0ZW4gdXNlIHRoaXMgbWV0aG9kIHRvIGhlbHAgVHlwZVNjcmlwdCBhIGxpdHRsZSBiaXQuIFdoZW4geW91IHVzZSB0aGlzXG4gICAgICogbWV0aG9kIHRvIGFzc2VydCB0aGUgb3V0cHV0IHR5cGUgb2YgYSBxdWVyeSwgS3lzZWx5IGNhbiBkcm9wIHRoZSBjb21wbGV4IG91dHB1dCB0eXBlIHRoYXRcbiAgICAgKiBjb25zaXN0cyBvZiBtdWx0aXBsZSBuZXN0ZWQgaGVscGVyIHR5cGVzIGFuZCByZXBsYWNlIGl0IHdpdGggdGhlIHNpbXBsZSBhc3NlcnRlZCB0eXBlLlxuICAgICAqXG4gICAgICogVXNpbmcgdGhpcyBtZXRob2QgZG9lc24ndCByZWR1Y2UgdHlwZSBzYWZldHkgYXQgYWxsLiBZb3UgaGF2ZSB0byBwYXNzIGluIGEgdHlwZSB0aGF0IGlzXG4gICAgICogc3RydWN0dXJhbGx5IGVxdWFsIHRvIHRoZSBjdXJyZW50IHR5cGUuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHR5cGUgeyBQZXJzb25VcGRhdGUsIFBldFVwZGF0ZSwgU3BlY2llcyB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gICAgICpcbiAgICAgKiBjb25zdCBwZXJzb24gPSB7XG4gICAgICogICBpZDogMSxcbiAgICAgKiAgIGdlbmRlcjogJ290aGVyJyxcbiAgICAgKiB9IHNhdGlzZmllcyBQZXJzb25VcGRhdGVcbiAgICAgKlxuICAgICAqIGNvbnN0IHBldCA9IHtcbiAgICAgKiAgIG5hbWU6ICdGbHVmZnknLFxuICAgICAqIH0gc2F0aXNmaWVzIFBldFVwZGF0ZVxuICAgICAqXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAgICAgKiAgIC53aXRoKCd1cGRhdGVkX3BlcnNvbicsIChxYikgPT4gcWJcbiAgICAgKiAgICAgLnVwZGF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgICAuc2V0KHBlcnNvbilcbiAgICAgKiAgICAgLndoZXJlKCdpZCcsICc9JywgcGVyc29uLmlkKVxuICAgICAqICAgICAucmV0dXJuaW5nKCdmaXJzdF9uYW1lJylcbiAgICAgKiAgICAgLiRhc3NlcnRUeXBlPHsgZmlyc3RfbmFtZTogc3RyaW5nIH0+KClcbiAgICAgKiAgIClcbiAgICAgKiAgIC53aXRoKCd1cGRhdGVkX3BldCcsIChxYikgPT4gcWJcbiAgICAgKiAgICAgLnVwZGF0ZVRhYmxlKCdwZXQnKVxuICAgICAqICAgICAuc2V0KHBldClcbiAgICAgKiAgICAgLndoZXJlKCdvd25lcl9pZCcsICc9JywgcGVyc29uLmlkKVxuICAgICAqICAgICAucmV0dXJuaW5nKFsnbmFtZSBhcyBwZXRfbmFtZScsICdzcGVjaWVzJ10pXG4gICAgICogICAgIC4kYXNzZXJ0VHlwZTx7IHBldF9uYW1lOiBzdHJpbmcsIHNwZWNpZXM6IFNwZWNpZXMgfT4oKVxuICAgICAqICAgKVxuICAgICAqICAgLnNlbGVjdEZyb20oWyd1cGRhdGVkX3BlcnNvbicsICd1cGRhdGVkX3BldCddKVxuICAgICAqICAgLnNlbGVjdEFsbCgpXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgICRhc3NlcnRUeXBlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih0aGlzLiNwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgVXBkYXRlUXVlcnlCdWlsZGVyIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIHBsdWdpbiBpbnN0YWxsZWQuXG4gICAgICovXG4gICAgd2l0aFBsdWdpbihwbHVnaW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcGRhdGVRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBleGVjdXRvcjogdGhpcy4jcHJvcHMuZXhlY3V0b3Iud2l0aFBsdWdpbihwbHVnaW4pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IudHJhbnNmb3JtUXVlcnkodGhpcy4jcHJvcHMucXVlcnlOb2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLnRvT3BlcmF0aW9uTm9kZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHF1ZXJ5IGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHJvd3MuXG4gICAgICpcbiAgICAgKiBBbHNvIHNlZSB0aGUge0BsaW5rIGV4ZWN1dGVUYWtlRmlyc3R9IGFuZCB7QGxpbmsgZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3d9IG1ldGhvZHMuXG4gICAgICovXG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgY29uc3QgY29tcGlsZWRRdWVyeSA9IHRoaXMuY29tcGlsZSgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLiNwcm9wcy5leGVjdXRvci5leGVjdXRlUXVlcnkoY29tcGlsZWRRdWVyeSk7XG4gICAgICAgIGNvbnN0IHsgYWRhcHRlciB9ID0gdGhpcy4jcHJvcHMuZXhlY3V0b3I7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gY29tcGlsZWRRdWVyeS5xdWVyeTtcbiAgICAgICAgaWYgKChxdWVyeS5yZXR1cm5pbmcgJiYgYWRhcHRlci5zdXBwb3J0c1JldHVybmluZykgfHxcbiAgICAgICAgICAgIChxdWVyeS5vdXRwdXQgJiYgYWRhcHRlci5zdXBwb3J0c091dHB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQucm93cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbmV3IFVwZGF0ZVJlc3VsdChyZXN1bHQubnVtQWZmZWN0ZWRSb3dzID8/IEJpZ0ludCgwKSwgcmVzdWx0Lm51bUNoYW5nZWRSb3dzKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhlY3V0ZXMgdGhlIHF1ZXJ5IGFuZCByZXR1cm5zIHRoZSBmaXJzdCByZXN1bHQgb3IgdW5kZWZpbmVkIGlmXG4gICAgICogdGhlIHF1ZXJ5IHJldHVybmVkIG5vIHJlc3VsdC5cbiAgICAgKi9cbiAgICBhc3luYyBleGVjdXRlVGFrZUZpcnN0KCkge1xuICAgICAgICBjb25zdCBbcmVzdWx0XSA9IGF3YWl0IHRoaXMuZXhlY3V0ZSgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyB0aGUgcXVlcnkgYW5kIHJldHVybnMgdGhlIGZpcnN0IHJlc3VsdCBvciB0aHJvd3MgaWZcbiAgICAgKiB0aGUgcXVlcnkgcmV0dXJuZWQgbm8gcmVzdWx0LlxuICAgICAqXG4gICAgICogQnkgZGVmYXVsdCBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgTm9SZXN1bHRFcnJvcn0gaXMgdGhyb3duLCBidXQgeW91IGNhblxuICAgICAqIHByb3ZpZGUgYSBjdXN0b20gZXJyb3IgY2xhc3MsIG9yIGNhbGxiYWNrIGFzIHRoZSBvbmx5IGFyZ3VtZW50IHRvIHRocm93IGEgZGlmZmVyZW50XG4gICAgICogZXJyb3IuXG4gICAgICovXG4gICAgYXN5bmMgZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coZXJyb3JDb25zdHJ1Y3RvciA9IE5vUmVzdWx0RXJyb3IpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlVGFrZUZpcnN0KCk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc05vUmVzdWx0RXJyb3JDb25zdHJ1Y3RvcihlcnJvckNvbnN0cnVjdG9yKVxuICAgICAgICAgICAgICAgID8gbmV3IGVycm9yQ29uc3RydWN0b3IodGhpcy50b09wZXJhdGlvbk5vZGUoKSlcbiAgICAgICAgICAgICAgICA6IGVycm9yQ29uc3RydWN0b3IodGhpcy50b09wZXJhdGlvbk5vZGUoKSk7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyAqc3RyZWFtKGNodW5rU2l6ZSA9IDEwMCkge1xuICAgICAgICBjb25zdCBjb21waWxlZFF1ZXJ5ID0gdGhpcy5jb21waWxlKCk7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnN0cmVhbShjb21waWxlZFF1ZXJ5LCBjaHVua1NpemUpO1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2Ygc3RyZWFtKSB7XG4gICAgICAgICAgICB5aWVsZCogaXRlbS5yb3dzO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGV4cGxhaW4oZm9ybWF0LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVXBkYXRlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoRXhwbGFpbih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIGZvcm1hdCwgb3B0aW9ucyksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYXdhaXQgYnVpbGRlci5leGVjdXRlKCk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi91cGRhdGUtcmVzdWx0LmQudHNcIiAvPlxuZXhwb3J0IGNsYXNzIFVwZGF0ZVJlc3VsdCB7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiByb3dzIHRoZSB1cGRhdGUgcXVlcnkgdXBkYXRlZCAoZXZlbiBpZiBub3QgY2hhbmdlZCkuXG4gICAgICovXG4gICAgbnVtVXBkYXRlZFJvd3M7XG4gICAgLyoqXG4gICAgICogVGhlIG51bWJlciBvZiByb3dzIHRoZSB1cGRhdGUgcXVlcnkgY2hhbmdlZC5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgKipvcHRpb25hbCoqIGFuZCBvbmx5IHN1cHBvcnRlZCBpbiBkaWFsZWN0cyBzdWNoIGFzIE15U1FMLlxuICAgICAqIFlvdSB3b3VsZCBwcm9iYWJseSB1c2Uge0BsaW5rIG51bVVwZGF0ZWRSb3dzfSBpbiBtb3N0IGNhc2VzLlxuICAgICAqL1xuICAgIG51bUNoYW5nZWRSb3dzO1xuICAgIGNvbnN0cnVjdG9yKG51bVVwZGF0ZWRSb3dzLCBudW1DaGFuZ2VkUm93cykge1xuICAgICAgICB0aGlzLm51bVVwZGF0ZWRSb3dzID0gbnVtVXBkYXRlZFJvd3M7XG4gICAgICAgIHRoaXMubnVtQ2hhbmdlZFJvd3MgPSBudW1DaGFuZ2VkUm93cztcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3dpdGgtcGFyc2VyLmQudHNcIiAvPlxuaW1wb3J0IHsgQ29tbW9uVGFibGVFeHByZXNzaW9uTmFtZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jb21tb24tdGFibGUtZXhwcmVzc2lvbi1uYW1lLW5vZGUuanMnO1xuaW1wb3J0IHsgY3JlYXRlUXVlcnlDcmVhdG9yIH0gZnJvbSAnLi9wYXJzZS11dGlscy5qcyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ1RFQnVpbGRlciB9IGZyb20gJy4uL3F1ZXJ5LWJ1aWxkZXIvY3RlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgQ29tbW9uVGFibGVFeHByZXNzaW9uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NvbW1vbi10YWJsZS1leHByZXNzaW9uLW5vZGUuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29tbW9uVGFibGVFeHByZXNzaW9uKG5hbWVPckJ1aWxkZXJDYWxsYmFjaywgZXhwcmVzc2lvbikge1xuICAgIGNvbnN0IGV4cHJlc3Npb25Ob2RlID0gZXhwcmVzc2lvbihjcmVhdGVRdWVyeUNyZWF0b3IoKSkudG9PcGVyYXRpb25Ob2RlKCk7XG4gICAgaWYgKGlzRnVuY3Rpb24obmFtZU9yQnVpbGRlckNhbGxiYWNrKSkge1xuICAgICAgICByZXR1cm4gbmFtZU9yQnVpbGRlckNhbGxiYWNrKGN0ZUJ1aWxkZXJGYWN0b3J5KGV4cHJlc3Npb25Ob2RlKSkudG9PcGVyYXRpb25Ob2RlKCk7XG4gICAgfVxuICAgIHJldHVybiBDb21tb25UYWJsZUV4cHJlc3Npb25Ob2RlLmNyZWF0ZShwYXJzZUNvbW1vblRhYmxlRXhwcmVzc2lvbk5hbWUobmFtZU9yQnVpbGRlckNhbGxiYWNrKSwgZXhwcmVzc2lvbk5vZGUpO1xufVxuZnVuY3Rpb24gY3RlQnVpbGRlckZhY3RvcnkoZXhwcmVzc2lvbk5vZGUpIHtcbiAgICByZXR1cm4gKG5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDVEVCdWlsZGVyKHtcbiAgICAgICAgICAgIG5vZGU6IENvbW1vblRhYmxlRXhwcmVzc2lvbk5vZGUuY3JlYXRlKHBhcnNlQ29tbW9uVGFibGVFeHByZXNzaW9uTmFtZShuYW1lKSwgZXhwcmVzc2lvbk5vZGUpLFxuICAgICAgICB9KTtcbiAgICB9O1xufVxuZnVuY3Rpb24gcGFyc2VDb21tb25UYWJsZUV4cHJlc3Npb25OYW1lKG5hbWUpIHtcbiAgICBpZiAobmFtZS5pbmNsdWRlcygnKCcpKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gbmFtZS5zcGxpdCgvW1xcKFxcKV0vKTtcbiAgICAgICAgY29uc3QgdGFibGUgPSBwYXJ0c1swXTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHBhcnRzWzFdLnNwbGl0KCcsJykubWFwKChpdCkgPT4gaXQudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIENvbW1vblRhYmxlRXhwcmVzc2lvbk5hbWVOb2RlLmNyZWF0ZSh0YWJsZSwgY29sdW1ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gQ29tbW9uVGFibGVFeHByZXNzaW9uTmFtZU5vZGUuY3JlYXRlKG5hbWUpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vY29tbW9uLXRhYmxlLWV4cHJlc3Npb24tbmFtZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ29sdW1uTm9kZSB9IGZyb20gJy4vY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgVGFibGVOb2RlIH0gZnJvbSAnLi90YWJsZS1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBDb21tb25UYWJsZUV4cHJlc3Npb25OYW1lTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnQ29tbW9uVGFibGVFeHByZXNzaW9uTmFtZU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHRhYmxlTmFtZSwgY29sdW1uTmFtZXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQ29tbW9uVGFibGVFeHByZXNzaW9uTmFtZU5vZGUnLFxuICAgICAgICAgICAgdGFibGU6IFRhYmxlTm9kZS5jcmVhdGUodGFibGVOYW1lKSxcbiAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbk5hbWVzXG4gICAgICAgICAgICAgICAgPyBmcmVlemUoY29sdW1uTmFtZXMubWFwKENvbHVtbk5vZGUuY3JlYXRlKSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jdGUtYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IENvbW1vblRhYmxlRXhwcmVzc2lvbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jb21tb24tdGFibGUtZXhwcmVzc2lvbi1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBDVEVCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYWtlcyB0aGUgY29tbW9uIHRhYmxlIGV4cHJlc3Npb24gbWF0ZXJpYWxpemVkLlxuICAgICAqL1xuICAgIG1hdGVyaWFsaXplZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDVEVCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ29tbW9uVGFibGVFeHByZXNzaW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplZDogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFrZXMgdGhlIGNvbW1vbiB0YWJsZSBleHByZXNzaW9uIG5vdCBtYXRlcmlhbGl6ZWQuXG4gICAgICovXG4gICAgbm90TWF0ZXJpYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gbmV3IENURUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDb21tb25UYWJsZUV4cHJlc3Npb25Ob2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkOiBmYWxzZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMubm9kZTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NvbW1vbi10YWJsZS1leHByZXNzaW9uLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ29tbW9uVGFibGVFeHByZXNzaW9uTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnQ29tbW9uVGFibGVFeHByZXNzaW9uTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUobmFtZSwgZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDb21tb25UYWJsZUV4cHJlc3Npb25Ob2RlJyxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBleHByZXNzaW9uLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aChub2RlLCBwcm9wcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi93aXRoLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgV2l0aE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1dpdGhOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShleHByZXNzaW9uLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnV2l0aE5vZGUnLFxuICAgICAgICAgICAgZXhwcmVzc2lvbnM6IGZyZWV6ZShbZXhwcmVzc2lvbl0pLFxuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aEV4cHJlc3Npb24od2l0aE5vZGUsIGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi53aXRoTm9kZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb25zOiBmcmVlemUoWy4uLndpdGhOb2RlLmV4cHJlc3Npb25zLCBleHByZXNzaW9uXSksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcXVlcnktaWQuZC50c1wiIC8+XG5pbXBvcnQgeyByYW5kb21TdHJpbmcgfSBmcm9tICcuL3JhbmRvbS1zdHJpbmcuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVF1ZXJ5SWQoKSB7XG4gICAgcmV0dXJuIG5ldyBMYXp5UXVlcnlJZCgpO1xufVxuY2xhc3MgTGF6eVF1ZXJ5SWQge1xuICAgICNxdWVyeUlkO1xuICAgIGdldCBxdWVyeUlkKCkge1xuICAgICAgICBpZiAodGhpcy4jcXVlcnlJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLiNxdWVyeUlkID0gcmFuZG9tU3RyaW5nKDgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLiNxdWVyeUlkO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcmFuZG9tLXN0cmluZy5kLnRzXCIgLz5cbmNvbnN0IENIQVJTID0gW1xuICAgICdBJyxcbiAgICAnQicsXG4gICAgJ0MnLFxuICAgICdEJyxcbiAgICAnRScsXG4gICAgJ0YnLFxuICAgICdHJyxcbiAgICAnSCcsXG4gICAgJ0knLFxuICAgICdKJyxcbiAgICAnSycsXG4gICAgJ0wnLFxuICAgICdNJyxcbiAgICAnTicsXG4gICAgJ08nLFxuICAgICdQJyxcbiAgICAnUScsXG4gICAgJ1InLFxuICAgICdTJyxcbiAgICAnVCcsXG4gICAgJ1UnLFxuICAgICdWJyxcbiAgICAnVycsXG4gICAgJ1gnLFxuICAgICdZJyxcbiAgICAnWicsXG4gICAgJ2EnLFxuICAgICdiJyxcbiAgICAnYycsXG4gICAgJ2QnLFxuICAgICdlJyxcbiAgICAnZicsXG4gICAgJ2cnLFxuICAgICdoJyxcbiAgICAnaScsXG4gICAgJ2onLFxuICAgICdrJyxcbiAgICAnbCcsXG4gICAgJ20nLFxuICAgICduJyxcbiAgICAnbycsXG4gICAgJ3AnLFxuICAgICdxJyxcbiAgICAncicsXG4gICAgJ3MnLFxuICAgICd0JyxcbiAgICAndScsXG4gICAgJ3YnLFxuICAgICd3JyxcbiAgICAneCcsXG4gICAgJ3knLFxuICAgICd6JyxcbiAgICAnMCcsXG4gICAgJzEnLFxuICAgICcyJyxcbiAgICAnMycsXG4gICAgJzQnLFxuICAgICc1JyxcbiAgICAnNicsXG4gICAgJzcnLFxuICAgICc4JyxcbiAgICAnOScsXG5dO1xuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVN0cmluZyhsZW5ndGgpIHtcbiAgICBsZXQgY2hhcnMgPSAnJztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNoYXJzICs9IHJhbmRvbUNoYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYXJzO1xufVxuZnVuY3Rpb24gcmFuZG9tQ2hhcigpIHtcbiAgICByZXR1cm4gQ0hBUlNbfn4oTWF0aC5yYW5kb20oKSAqIENIQVJTLmxlbmd0aCldO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi93aXRoLXNjaGVtYS1wbHVnaW4uZC50c1wiIC8+XG5pbXBvcnQgeyBXaXRoU2NoZW1hVHJhbnNmb3JtZXIgfSBmcm9tICcuL3dpdGgtc2NoZW1hLXRyYW5zZm9ybWVyLmpzJztcbmV4cG9ydCBjbGFzcyBXaXRoU2NoZW1hUGx1Z2luIHtcbiAgICAjdHJhbnNmb3JtZXI7XG4gICAgY29uc3RydWN0b3Ioc2NoZW1hKSB7XG4gICAgICAgIHRoaXMuI3RyYW5zZm9ybWVyID0gbmV3IFdpdGhTY2hlbWFUcmFuc2Zvcm1lcihzY2hlbWEpO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1RdWVyeShhcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiN0cmFuc2Zvcm1lci50cmFuc2Zvcm1Ob2RlKGFyZ3Mubm9kZSwgYXJncy5xdWVyeUlkKTtcbiAgICB9XG4gICAgYXN5bmMgdHJhbnNmb3JtUmVzdWx0KGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3MucmVzdWx0O1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vd2l0aC1zY2hlbWEtdHJhbnNmb3JtZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBBbGlhc05vZGUgfSBmcm9tICcuLi8uLi9vcGVyYXRpb24tbm9kZS9hbGlhcy1ub2RlLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vLi4vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IEpvaW5Ob2RlIH0gZnJvbSAnLi4vLi4vb3BlcmF0aW9uLW5vZGUvam9pbi1ub2RlLmpzJztcbmltcG9ydCB7IExpc3ROb2RlIH0gZnJvbSAnLi4vLi4vb3BlcmF0aW9uLW5vZGUvbGlzdC1ub2RlLmpzJztcbmltcG9ydCB7IE9wZXJhdGlvbk5vZGVUcmFuc2Zvcm1lciB9IGZyb20gJy4uLy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXRyYW5zZm9ybWVyLmpzJztcbmltcG9ydCB7IFNjaGVtYWJsZUlkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vLi4vb3BlcmF0aW9uLW5vZGUvc2NoZW1hYmxlLWlkZW50aWZpZXItbm9kZS5qcyc7XG5pbXBvcnQgeyBUYWJsZU5vZGUgfSBmcm9tICcuLi8uLi9vcGVyYXRpb24tbm9kZS90YWJsZS1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uLy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8vIFRoaXMgb2JqZWN0IGV4aXN0IG9ubHkgc28gdGhhdCB3ZSBnZXQgYSB0eXBlIGVycm9yIHdoZW4gYSBuZXcgUm9vdE9wZXJhdGlvbk5vZGVcbi8vIGlzIGFkZGVkLiBJZiB5b3UgZ2V0IGEgdHlwZSBlcnJvciBoZXJlLCBtYWtlIHN1cmUgdG8gYWRkIHRoZSBuZXcgcm9vdCBub2RlIGFuZFxuLy8gaGFuZGxlIGl0IGNvcnJlY3RseSBpbiB0aGUgdHJhbnNmb3JtZXIuXG4vL1xuLy8gRE8gTk9UIFJFRkFDVE9SIFRISVMgRVZFTiBJRiBJVCBTRUVNUyBVU0VMRVNTIFRPIFlPVSFcbmNvbnN0IFJPT1RfT1BFUkFUSU9OX05PREVTID0gZnJlZXplKHtcbiAgICBBbHRlclRhYmxlTm9kZTogdHJ1ZSxcbiAgICBDcmVhdGVJbmRleE5vZGU6IHRydWUsXG4gICAgQ3JlYXRlU2NoZW1hTm9kZTogdHJ1ZSxcbiAgICBDcmVhdGVUYWJsZU5vZGU6IHRydWUsXG4gICAgQ3JlYXRlVHlwZU5vZGU6IHRydWUsXG4gICAgQ3JlYXRlVmlld05vZGU6IHRydWUsXG4gICAgUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdOb2RlOiB0cnVlLFxuICAgIERlbGV0ZVF1ZXJ5Tm9kZTogdHJ1ZSxcbiAgICBEcm9wSW5kZXhOb2RlOiB0cnVlLFxuICAgIERyb3BTY2hlbWFOb2RlOiB0cnVlLFxuICAgIERyb3BUYWJsZU5vZGU6IHRydWUsXG4gICAgRHJvcFR5cGVOb2RlOiB0cnVlLFxuICAgIERyb3BWaWV3Tm9kZTogdHJ1ZSxcbiAgICBJbnNlcnRRdWVyeU5vZGU6IHRydWUsXG4gICAgUmF3Tm9kZTogdHJ1ZSxcbiAgICBTZWxlY3RRdWVyeU5vZGU6IHRydWUsXG4gICAgVXBkYXRlUXVlcnlOb2RlOiB0cnVlLFxuICAgIE1lcmdlUXVlcnlOb2RlOiB0cnVlLFxufSk7XG5jb25zdCBTQ0hFTUFMRVNTX0ZVTkNUSU9OUyA9IHtcbiAgICBqc29uX2FnZzogdHJ1ZSxcbiAgICB0b19qc29uOiB0cnVlLFxufTtcbmV4cG9ydCBjbGFzcyBXaXRoU2NoZW1hVHJhbnNmb3JtZXIgZXh0ZW5kcyBPcGVyYXRpb25Ob2RlVHJhbnNmb3JtZXIge1xuICAgICNzY2hlbWE7XG4gICAgI3NjaGVtYWJsZUlkcyA9IG5ldyBTZXQoKTtcbiAgICAjY3RlcyA9IG5ldyBTZXQoKTtcbiAgICBjb25zdHJ1Y3RvcihzY2hlbWEpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy4jc2NoZW1hID0gc2NoZW1hO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Ob2RlSW1wbChub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIGlmICghdGhpcy4jaXNSb290T3BlcmF0aW9uTm9kZShub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnRyYW5zZm9ybU5vZGVJbXBsKG5vZGUsIHF1ZXJ5SWQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN0ZXMgPSB0aGlzLiNjb2xsZWN0Q1RFcyhub2RlKTtcbiAgICAgICAgZm9yIChjb25zdCBjdGUgb2YgY3Rlcykge1xuICAgICAgICAgICAgdGhpcy4jY3Rlcy5hZGQoY3RlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YWJsZXMgPSB0aGlzLiNjb2xsZWN0U2NoZW1hYmxlSWRzKG5vZGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuICAgICAgICAgICAgdGhpcy4jc2NoZW1hYmxlSWRzLmFkZCh0YWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSBzdXBlci50cmFuc2Zvcm1Ob2RlSW1wbChub2RlLCBxdWVyeUlkKTtcbiAgICAgICAgZm9yIChjb25zdCB0YWJsZSBvZiB0YWJsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuI3NjaGVtYWJsZUlkcy5kZWxldGUodGFibGUpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgY3RlIG9mIGN0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuI2N0ZXMuZGVsZXRlKGN0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1TY2hlbWFibGVJZGVudGlmaWVyKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSBzdXBlci50cmFuc2Zvcm1TY2hlbWFibGVJZGVudGlmaWVyKG5vZGUsIHF1ZXJ5SWQpO1xuICAgICAgICBpZiAodHJhbnNmb3JtZWQuc2NoZW1hIHx8ICF0aGlzLiNzY2hlbWFibGVJZHMuaGFzKG5vZGUuaWRlbnRpZmllci5uYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi50cmFuc2Zvcm1lZCxcbiAgICAgICAgICAgIHNjaGVtYTogSWRlbnRpZmllck5vZGUuY3JlYXRlKHRoaXMuI3NjaGVtYSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHRyYW5zZm9ybVJlZmVyZW5jZXMobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IHN1cGVyLnRyYW5zZm9ybVJlZmVyZW5jZXMobm9kZSwgcXVlcnlJZCk7XG4gICAgICAgIGlmICh0cmFuc2Zvcm1lZC50YWJsZS50YWJsZS5zY2hlbWEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udHJhbnNmb3JtZWQsXG4gICAgICAgICAgICB0YWJsZTogVGFibGVOb2RlLmNyZWF0ZVdpdGhTY2hlbWEodGhpcy4jc2NoZW1hLCB0cmFuc2Zvcm1lZC50YWJsZS50YWJsZS5pZGVudGlmaWVyLm5hbWUpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICB0cmFuc2Zvcm1BZ2dyZWdhdGVGdW5jdGlvbihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdXBlci50cmFuc2Zvcm1BZ2dyZWdhdGVGdW5jdGlvbih7IC4uLm5vZGUsIGFnZ3JlZ2F0ZWQ6IFtdIH0sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgYWdncmVnYXRlZDogdGhpcy4jdHJhbnNmb3JtVGFibGVBcmdzV2l0aG91dFNjaGVtYXMobm9kZSwgcXVlcnlJZCwgJ2FnZ3JlZ2F0ZWQnKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdHJhbnNmb3JtRnVuY3Rpb24obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3VwZXIudHJhbnNmb3JtRnVuY3Rpb24oeyAuLi5ub2RlLCBhcmd1bWVudHM6IFtdIH0sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgYXJndW1lbnRzOiB0aGlzLiN0cmFuc2Zvcm1UYWJsZUFyZ3NXaXRob3V0U2NoZW1hcyhub2RlLCBxdWVyeUlkLCAnYXJndW1lbnRzJyksXG4gICAgICAgIH07XG4gICAgfVxuICAgICN0cmFuc2Zvcm1UYWJsZUFyZ3NXaXRob3V0U2NoZW1hcyhub2RlLCBxdWVyeUlkLCBhcmdzS2V5KSB7XG4gICAgICAgIHJldHVybiBTQ0hFTUFMRVNTX0ZVTkNUSU9OU1tub2RlLmZ1bmNdXG4gICAgICAgICAgICA/IG5vZGVbYXJnc0tleV0ubWFwKChhcmcpID0+ICFUYWJsZU5vZGUuaXMoYXJnKSB8fCBhcmcudGFibGUuc2NoZW1hXG4gICAgICAgICAgICAgICAgPyB0aGlzLnRyYW5zZm9ybU5vZGUoYXJnLCBxdWVyeUlkKVxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAuLi5hcmcsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRyYW5zZm9ybUlkZW50aWZpZXIoYXJnLnRhYmxlLmlkZW50aWZpZXIsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZVthcmdzS2V5XSwgcXVlcnlJZCk7XG4gICAgfVxuICAgICNpc1Jvb3RPcGVyYXRpb25Ob2RlKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCBpbiBST09UX09QRVJBVElPTl9OT0RFUztcbiAgICB9XG4gICAgI2NvbGxlY3RTY2hlbWFibGVJZHMobm9kZSkge1xuICAgICAgICBjb25zdCBzY2hlbWFibGVJZHMgPSBuZXcgU2V0KCk7XG4gICAgICAgIGlmICgnbmFtZScgaW4gbm9kZSAmJiBub2RlLm5hbWUgJiYgU2NoZW1hYmxlSWRlbnRpZmllck5vZGUuaXMobm9kZS5uYW1lKSkge1xuICAgICAgICAgICAgdGhpcy4jY29sbGVjdFNjaGVtYWJsZUlkKG5vZGUubmFtZSwgc2NoZW1hYmxlSWRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2Zyb20nIGluIG5vZGUgJiYgbm9kZS5mcm9tKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZyb20gb2Ygbm9kZS5mcm9tLmZyb21zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jY29sbGVjdFNjaGVtYWJsZUlkc0Zyb21UYWJsZUV4cHIoZnJvbSwgc2NoZW1hYmxlSWRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2ludG8nIGluIG5vZGUgJiYgbm9kZS5pbnRvKSB7XG4gICAgICAgICAgICB0aGlzLiNjb2xsZWN0U2NoZW1hYmxlSWRzRnJvbVRhYmxlRXhwcihub2RlLmludG8sIHNjaGVtYWJsZUlkcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCd0YWJsZScgaW4gbm9kZSAmJiBub2RlLnRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLiNjb2xsZWN0U2NoZW1hYmxlSWRzRnJvbVRhYmxlRXhwcihub2RlLnRhYmxlLCBzY2hlbWFibGVJZHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgnam9pbnMnIGluIG5vZGUgJiYgbm9kZS5qb2lucykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBqb2luIG9mIG5vZGUuam9pbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNjb2xsZWN0U2NoZW1hYmxlSWRzRnJvbVRhYmxlRXhwcihqb2luLnRhYmxlLCBzY2hlbWFibGVJZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgndXNpbmcnIGluIG5vZGUgJiYgbm9kZS51c2luZykge1xuICAgICAgICAgICAgaWYgKEpvaW5Ob2RlLmlzKG5vZGUudXNpbmcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jY29sbGVjdFNjaGVtYWJsZUlkc0Zyb21UYWJsZUV4cHIobm9kZS51c2luZy50YWJsZSwgc2NoZW1hYmxlSWRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuI2NvbGxlY3RTY2hlbWFibGVJZHNGcm9tVGFibGVFeHByKG5vZGUudXNpbmcsIHNjaGVtYWJsZUlkcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVtYWJsZUlkcztcbiAgICB9XG4gICAgI2NvbGxlY3RDVEVzKG5vZGUpIHtcbiAgICAgICAgY29uc3QgY3RlcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgaWYgKCd3aXRoJyBpbiBub2RlICYmIG5vZGUud2l0aCkge1xuICAgICAgICAgICAgdGhpcy4jY29sbGVjdENURUlkcyhub2RlLndpdGgsIGN0ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdGVzO1xuICAgIH1cbiAgICAjY29sbGVjdFNjaGVtYWJsZUlkc0Zyb21UYWJsZUV4cHIobm9kZSwgc2NoZW1hYmxlSWRzKSB7XG4gICAgICAgIGlmIChUYWJsZU5vZGUuaXMobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuI2NvbGxlY3RTY2hlbWFibGVJZChub2RlLnRhYmxlLCBzY2hlbWFibGVJZHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFsaWFzTm9kZS5pcyhub2RlKSAmJiBUYWJsZU5vZGUuaXMobm9kZS5ub2RlKSkge1xuICAgICAgICAgICAgdGhpcy4jY29sbGVjdFNjaGVtYWJsZUlkKG5vZGUubm9kZS50YWJsZSwgc2NoZW1hYmxlSWRzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChMaXN0Tm9kZS5pcyhub2RlKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB0YWJsZSBvZiBub2RlLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jY29sbGVjdFNjaGVtYWJsZUlkc0Zyb21UYWJsZUV4cHIodGFibGUsIHNjaGVtYWJsZUlkcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgI2NvbGxlY3RTY2hlbWFibGVJZChub2RlLCBzY2hlbWFibGVJZHMpIHtcbiAgICAgICAgY29uc3QgaWQgPSBub2RlLmlkZW50aWZpZXIubmFtZTtcbiAgICAgICAgaWYgKCF0aGlzLiNzY2hlbWFibGVJZHMuaGFzKGlkKSAmJiAhdGhpcy4jY3Rlcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICBzY2hlbWFibGVJZHMuYWRkKGlkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjY29sbGVjdENURUlkcyhub2RlLCBjdGVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXhwciBvZiBub2RlLmV4cHJlc3Npb25zKSB7XG4gICAgICAgICAgICBjb25zdCBjdGVJZCA9IGV4cHIubmFtZS50YWJsZS50YWJsZS5pZGVudGlmaWVyLm5hbWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuI2N0ZXMuaGFzKGN0ZUlkKSkge1xuICAgICAgICAgICAgICAgIGN0ZXMuYWRkKGN0ZUlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vb3BlcmF0aW9uLW5vZGUtdHJhbnNmb3JtZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyByZXF1aXJlQWxsUHJvcHMgfSBmcm9tICcuLi91dGlsL3JlcXVpcmUtYWxsLXByb3BzLmpzJztcbi8qKlxuICogVHJhbnNmb3JtcyBhbiBvcGVyYXRpb24gbm9kZSB0cmVlIGludG8gYW5vdGhlciBvbmUuXG4gKlxuICogS3lzZWx5IHF1ZXJpZXMgYXJlIGV4cHJlc3NlZCBpbnRlcm5hbGx5IGFzIGEgdHJlZSBvZiBvYmplY3RzIChvcGVyYXRpb24gbm9kZXMpLlxuICogYE9wZXJhdGlvbk5vZGVUcmFuc2Zvcm1lcmAgdGFrZXMgc3VjaCBhIHRyZWUgYXMgaXRzIGlucHV0IGFuZCByZXR1cm5zIGFcbiAqIHRyYW5zZm9ybWVkIGRlZXAgY29weSBvZiBpdC4gQnkgZGVmYXVsdCB0aGUgYE9wZXJhdGlvbk5vZGVUcmFuc2Zvcm1lcmBcbiAqIGRvZXMgbm90aGluZy4gWW91IG5lZWQgdG8gb3ZlcnJpZGUgb25lIG9yIG1vcmUgbWV0aG9kcyB0byBtYWtlIGl0IGRvXG4gKiBzb21ldGhpbmcuXG4gKlxuICogVGhlcmUncyBhIG1ldGhvZCBmb3IgZWFjaCBub2RlIHR5cGUuIEZvciBleGFtcGxlIGlmIHlvdSdkIGxpa2UgdG8gY29udmVydFxuICogZWFjaCBpZGVudGlmaWVyICh0YWJsZSBuYW1lLCBjb2x1bW4gbmFtZSwgYWxpYXMgZXRjLikgZnJvbSBjYW1lbENhc2UgdG9cbiAqIHNuYWtlX2Nhc2UsIHlvdSdkIGRvIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHR5cGUgSWRlbnRpZmllck5vZGUsIE9wZXJhdGlvbk5vZGVUcmFuc2Zvcm1lciB9IGZyb20gJ2t5c2VseSdcbiAqIGltcG9ydCBzbmFrZUNhc2UgZnJvbSAnbG9kYXNoL3NuYWtlQ2FzZSdcbiAqXG4gKiBjbGFzcyBDYW1lbENhc2VUcmFuc2Zvcm1lciBleHRlbmRzIE9wZXJhdGlvbk5vZGVUcmFuc2Zvcm1lciB7XG4gKiAgIG92ZXJyaWRlIHRyYW5zZm9ybUlkZW50aWZpZXIobm9kZTogSWRlbnRpZmllck5vZGUpOiBJZGVudGlmaWVyTm9kZSB7XG4gKiAgICAgbm9kZSA9IHN1cGVyLnRyYW5zZm9ybUlkZW50aWZpZXIobm9kZSlcbiAqXG4gKiAgICAgcmV0dXJuIHtcbiAqICAgICAgIC4uLm5vZGUsXG4gKiAgICAgICBuYW1lOiBzbmFrZUNhc2Uobm9kZS5uYW1lKSxcbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBDYW1lbENhc2VUcmFuc2Zvcm1lcigpXG4gKlxuICogY29uc3QgcXVlcnkgPSBkYi5zZWxlY3RGcm9tKCdwZXJzb24nKS5zZWxlY3QoWydmaXJzdF9uYW1lJywgJ2xhc3RfbmFtZSddKVxuICpcbiAqIGNvbnN0IHRyZWUgPSB0cmFuc2Zvcm1lci50cmFuc2Zvcm1Ob2RlKHF1ZXJ5LnRvT3BlcmF0aW9uTm9kZSgpKVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBPcGVyYXRpb25Ob2RlVHJhbnNmb3JtZXIge1xuICAgIG5vZGVTdGFjayA9IFtdO1xuICAgICN0cmFuc2Zvcm1lcnMgPSBmcmVlemUoe1xuICAgICAgICBBbGlhc05vZGU6IHRoaXMudHJhbnNmb3JtQWxpYXMuYmluZCh0aGlzKSxcbiAgICAgICAgQ29sdW1uTm9kZTogdGhpcy50cmFuc2Zvcm1Db2x1bW4uYmluZCh0aGlzKSxcbiAgICAgICAgSWRlbnRpZmllck5vZGU6IHRoaXMudHJhbnNmb3JtSWRlbnRpZmllci5iaW5kKHRoaXMpLFxuICAgICAgICBTY2hlbWFibGVJZGVudGlmaWVyTm9kZTogdGhpcy50cmFuc2Zvcm1TY2hlbWFibGVJZGVudGlmaWVyLmJpbmQodGhpcyksXG4gICAgICAgIFJhd05vZGU6IHRoaXMudHJhbnNmb3JtUmF3LmJpbmQodGhpcyksXG4gICAgICAgIFJlZmVyZW5jZU5vZGU6IHRoaXMudHJhbnNmb3JtUmVmZXJlbmNlLmJpbmQodGhpcyksXG4gICAgICAgIFNlbGVjdFF1ZXJ5Tm9kZTogdGhpcy50cmFuc2Zvcm1TZWxlY3RRdWVyeS5iaW5kKHRoaXMpLFxuICAgICAgICBTZWxlY3Rpb25Ob2RlOiB0aGlzLnRyYW5zZm9ybVNlbGVjdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBUYWJsZU5vZGU6IHRoaXMudHJhbnNmb3JtVGFibGUuYmluZCh0aGlzKSxcbiAgICAgICAgRnJvbU5vZGU6IHRoaXMudHJhbnNmb3JtRnJvbS5iaW5kKHRoaXMpLFxuICAgICAgICBTZWxlY3RBbGxOb2RlOiB0aGlzLnRyYW5zZm9ybVNlbGVjdEFsbC5iaW5kKHRoaXMpLFxuICAgICAgICBBbmROb2RlOiB0aGlzLnRyYW5zZm9ybUFuZC5iaW5kKHRoaXMpLFxuICAgICAgICBPck5vZGU6IHRoaXMudHJhbnNmb3JtT3IuYmluZCh0aGlzKSxcbiAgICAgICAgVmFsdWVOb2RlOiB0aGlzLnRyYW5zZm9ybVZhbHVlLmJpbmQodGhpcyksXG4gICAgICAgIFZhbHVlTGlzdE5vZGU6IHRoaXMudHJhbnNmb3JtVmFsdWVMaXN0LmJpbmQodGhpcyksXG4gICAgICAgIFByaW1pdGl2ZVZhbHVlTGlzdE5vZGU6IHRoaXMudHJhbnNmb3JtUHJpbWl0aXZlVmFsdWVMaXN0LmJpbmQodGhpcyksXG4gICAgICAgIFBhcmVuc05vZGU6IHRoaXMudHJhbnNmb3JtUGFyZW5zLmJpbmQodGhpcyksXG4gICAgICAgIEpvaW5Ob2RlOiB0aGlzLnRyYW5zZm9ybUpvaW4uYmluZCh0aGlzKSxcbiAgICAgICAgT3BlcmF0b3JOb2RlOiB0aGlzLnRyYW5zZm9ybU9wZXJhdG9yLmJpbmQodGhpcyksXG4gICAgICAgIFdoZXJlTm9kZTogdGhpcy50cmFuc2Zvcm1XaGVyZS5iaW5kKHRoaXMpLFxuICAgICAgICBJbnNlcnRRdWVyeU5vZGU6IHRoaXMudHJhbnNmb3JtSW5zZXJ0UXVlcnkuYmluZCh0aGlzKSxcbiAgICAgICAgRGVsZXRlUXVlcnlOb2RlOiB0aGlzLnRyYW5zZm9ybURlbGV0ZVF1ZXJ5LmJpbmQodGhpcyksXG4gICAgICAgIFJldHVybmluZ05vZGU6IHRoaXMudHJhbnNmb3JtUmV0dXJuaW5nLmJpbmQodGhpcyksXG4gICAgICAgIENyZWF0ZVRhYmxlTm9kZTogdGhpcy50cmFuc2Zvcm1DcmVhdGVUYWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICBBZGRDb2x1bW5Ob2RlOiB0aGlzLnRyYW5zZm9ybUFkZENvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBDb2x1bW5EZWZpbml0aW9uTm9kZTogdGhpcy50cmFuc2Zvcm1Db2x1bW5EZWZpbml0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIERyb3BUYWJsZU5vZGU6IHRoaXMudHJhbnNmb3JtRHJvcFRhYmxlLmJpbmQodGhpcyksXG4gICAgICAgIERhdGFUeXBlTm9kZTogdGhpcy50cmFuc2Zvcm1EYXRhVHlwZS5iaW5kKHRoaXMpLFxuICAgICAgICBPcmRlckJ5Tm9kZTogdGhpcy50cmFuc2Zvcm1PcmRlckJ5LmJpbmQodGhpcyksXG4gICAgICAgIE9yZGVyQnlJdGVtTm9kZTogdGhpcy50cmFuc2Zvcm1PcmRlckJ5SXRlbS5iaW5kKHRoaXMpLFxuICAgICAgICBHcm91cEJ5Tm9kZTogdGhpcy50cmFuc2Zvcm1Hcm91cEJ5LmJpbmQodGhpcyksXG4gICAgICAgIEdyb3VwQnlJdGVtTm9kZTogdGhpcy50cmFuc2Zvcm1Hcm91cEJ5SXRlbS5iaW5kKHRoaXMpLFxuICAgICAgICBVcGRhdGVRdWVyeU5vZGU6IHRoaXMudHJhbnNmb3JtVXBkYXRlUXVlcnkuYmluZCh0aGlzKSxcbiAgICAgICAgQ29sdW1uVXBkYXRlTm9kZTogdGhpcy50cmFuc2Zvcm1Db2x1bW5VcGRhdGUuYmluZCh0aGlzKSxcbiAgICAgICAgTGltaXROb2RlOiB0aGlzLnRyYW5zZm9ybUxpbWl0LmJpbmQodGhpcyksXG4gICAgICAgIE9mZnNldE5vZGU6IHRoaXMudHJhbnNmb3JtT2Zmc2V0LmJpbmQodGhpcyksXG4gICAgICAgIE9uQ29uZmxpY3ROb2RlOiB0aGlzLnRyYW5zZm9ybU9uQ29uZmxpY3QuYmluZCh0aGlzKSxcbiAgICAgICAgT25EdXBsaWNhdGVLZXlOb2RlOiB0aGlzLnRyYW5zZm9ybU9uRHVwbGljYXRlS2V5LmJpbmQodGhpcyksXG4gICAgICAgIENyZWF0ZUluZGV4Tm9kZTogdGhpcy50cmFuc2Zvcm1DcmVhdGVJbmRleC5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wSW5kZXhOb2RlOiB0aGlzLnRyYW5zZm9ybURyb3BJbmRleC5iaW5kKHRoaXMpLFxuICAgICAgICBMaXN0Tm9kZTogdGhpcy50cmFuc2Zvcm1MaXN0LmJpbmQodGhpcyksXG4gICAgICAgIFByaW1hcnlLZXlDb25zdHJhaW50Tm9kZTogdGhpcy50cmFuc2Zvcm1QcmltYXJ5S2V5Q29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBVbmlxdWVDb25zdHJhaW50Tm9kZTogdGhpcy50cmFuc2Zvcm1VbmlxdWVDb25zdHJhaW50LmJpbmQodGhpcyksXG4gICAgICAgIFJlZmVyZW5jZXNOb2RlOiB0aGlzLnRyYW5zZm9ybVJlZmVyZW5jZXMuYmluZCh0aGlzKSxcbiAgICAgICAgQ2hlY2tDb25zdHJhaW50Tm9kZTogdGhpcy50cmFuc2Zvcm1DaGVja0NvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgV2l0aE5vZGU6IHRoaXMudHJhbnNmb3JtV2l0aC5iaW5kKHRoaXMpLFxuICAgICAgICBDb21tb25UYWJsZUV4cHJlc3Npb25Ob2RlOiB0aGlzLnRyYW5zZm9ybUNvbW1vblRhYmxlRXhwcmVzc2lvbi5iaW5kKHRoaXMpLFxuICAgICAgICBDb21tb25UYWJsZUV4cHJlc3Npb25OYW1lTm9kZTogdGhpcy50cmFuc2Zvcm1Db21tb25UYWJsZUV4cHJlc3Npb25OYW1lLmJpbmQodGhpcyksXG4gICAgICAgIEhhdmluZ05vZGU6IHRoaXMudHJhbnNmb3JtSGF2aW5nLmJpbmQodGhpcyksXG4gICAgICAgIENyZWF0ZVNjaGVtYU5vZGU6IHRoaXMudHJhbnNmb3JtQ3JlYXRlU2NoZW1hLmJpbmQodGhpcyksXG4gICAgICAgIERyb3BTY2hlbWFOb2RlOiB0aGlzLnRyYW5zZm9ybURyb3BTY2hlbWEuYmluZCh0aGlzKSxcbiAgICAgICAgQWx0ZXJUYWJsZU5vZGU6IHRoaXMudHJhbnNmb3JtQWx0ZXJUYWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wQ29sdW1uTm9kZTogdGhpcy50cmFuc2Zvcm1Ecm9wQ29sdW1uLmJpbmQodGhpcyksXG4gICAgICAgIFJlbmFtZUNvbHVtbk5vZGU6IHRoaXMudHJhbnNmb3JtUmVuYW1lQ29sdW1uLmJpbmQodGhpcyksXG4gICAgICAgIEFsdGVyQ29sdW1uTm9kZTogdGhpcy50cmFuc2Zvcm1BbHRlckNvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBNb2RpZnlDb2x1bW5Ob2RlOiB0aGlzLnRyYW5zZm9ybU1vZGlmeUNvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBBZGRDb25zdHJhaW50Tm9kZTogdGhpcy50cmFuc2Zvcm1BZGRDb25zdHJhaW50LmJpbmQodGhpcyksXG4gICAgICAgIERyb3BDb25zdHJhaW50Tm9kZTogdGhpcy50cmFuc2Zvcm1Ecm9wQ29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBSZW5hbWVDb25zdHJhaW50Tm9kZTogdGhpcy50cmFuc2Zvcm1SZW5hbWVDb25zdHJhaW50LmJpbmQodGhpcyksXG4gICAgICAgIEZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZTogdGhpcy50cmFuc2Zvcm1Gb3JlaWduS2V5Q29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBDcmVhdGVWaWV3Tm9kZTogdGhpcy50cmFuc2Zvcm1DcmVhdGVWaWV3LmJpbmQodGhpcyksXG4gICAgICAgIFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3Tm9kZTogdGhpcy50cmFuc2Zvcm1SZWZyZXNoTWF0ZXJpYWxpemVkVmlldy5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wVmlld05vZGU6IHRoaXMudHJhbnNmb3JtRHJvcFZpZXcuYmluZCh0aGlzKSxcbiAgICAgICAgR2VuZXJhdGVkTm9kZTogdGhpcy50cmFuc2Zvcm1HZW5lcmF0ZWQuYmluZCh0aGlzKSxcbiAgICAgICAgRGVmYXVsdFZhbHVlTm9kZTogdGhpcy50cmFuc2Zvcm1EZWZhdWx0VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgICAgT25Ob2RlOiB0aGlzLnRyYW5zZm9ybU9uLmJpbmQodGhpcyksXG4gICAgICAgIFZhbHVlc05vZGU6IHRoaXMudHJhbnNmb3JtVmFsdWVzLmJpbmQodGhpcyksXG4gICAgICAgIFNlbGVjdE1vZGlmaWVyTm9kZTogdGhpcy50cmFuc2Zvcm1TZWxlY3RNb2RpZmllci5iaW5kKHRoaXMpLFxuICAgICAgICBDcmVhdGVUeXBlTm9kZTogdGhpcy50cmFuc2Zvcm1DcmVhdGVUeXBlLmJpbmQodGhpcyksXG4gICAgICAgIERyb3BUeXBlTm9kZTogdGhpcy50cmFuc2Zvcm1Ecm9wVHlwZS5iaW5kKHRoaXMpLFxuICAgICAgICBFeHBsYWluTm9kZTogdGhpcy50cmFuc2Zvcm1FeHBsYWluLmJpbmQodGhpcyksXG4gICAgICAgIERlZmF1bHRJbnNlcnRWYWx1ZU5vZGU6IHRoaXMudHJhbnNmb3JtRGVmYXVsdEluc2VydFZhbHVlLmJpbmQodGhpcyksXG4gICAgICAgIEFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZTogdGhpcy50cmFuc2Zvcm1BZ2dyZWdhdGVGdW5jdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBPdmVyTm9kZTogdGhpcy50cmFuc2Zvcm1PdmVyLmJpbmQodGhpcyksXG4gICAgICAgIFBhcnRpdGlvbkJ5Tm9kZTogdGhpcy50cmFuc2Zvcm1QYXJ0aXRpb25CeS5iaW5kKHRoaXMpLFxuICAgICAgICBQYXJ0aXRpb25CeUl0ZW1Ob2RlOiB0aGlzLnRyYW5zZm9ybVBhcnRpdGlvbkJ5SXRlbS5iaW5kKHRoaXMpLFxuICAgICAgICBTZXRPcGVyYXRpb25Ob2RlOiB0aGlzLnRyYW5zZm9ybVNldE9wZXJhdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBCaW5hcnlPcGVyYXRpb25Ob2RlOiB0aGlzLnRyYW5zZm9ybUJpbmFyeU9wZXJhdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBVbmFyeU9wZXJhdGlvbk5vZGU6IHRoaXMudHJhbnNmb3JtVW5hcnlPcGVyYXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgVXNpbmdOb2RlOiB0aGlzLnRyYW5zZm9ybVVzaW5nLmJpbmQodGhpcyksXG4gICAgICAgIEZ1bmN0aW9uTm9kZTogdGhpcy50cmFuc2Zvcm1GdW5jdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBDYXNlTm9kZTogdGhpcy50cmFuc2Zvcm1DYXNlLmJpbmQodGhpcyksXG4gICAgICAgIFdoZW5Ob2RlOiB0aGlzLnRyYW5zZm9ybVdoZW4uYmluZCh0aGlzKSxcbiAgICAgICAgSlNPTlJlZmVyZW5jZU5vZGU6IHRoaXMudHJhbnNmb3JtSlNPTlJlZmVyZW5jZS5iaW5kKHRoaXMpLFxuICAgICAgICBKU09OUGF0aE5vZGU6IHRoaXMudHJhbnNmb3JtSlNPTlBhdGguYmluZCh0aGlzKSxcbiAgICAgICAgSlNPTlBhdGhMZWdOb2RlOiB0aGlzLnRyYW5zZm9ybUpTT05QYXRoTGVnLmJpbmQodGhpcyksXG4gICAgICAgIEpTT05PcGVyYXRvckNoYWluTm9kZTogdGhpcy50cmFuc2Zvcm1KU09OT3BlcmF0b3JDaGFpbi5iaW5kKHRoaXMpLFxuICAgICAgICBUdXBsZU5vZGU6IHRoaXMudHJhbnNmb3JtVHVwbGUuYmluZCh0aGlzKSxcbiAgICAgICAgTWVyZ2VRdWVyeU5vZGU6IHRoaXMudHJhbnNmb3JtTWVyZ2VRdWVyeS5iaW5kKHRoaXMpLFxuICAgICAgICBNYXRjaGVkTm9kZTogdGhpcy50cmFuc2Zvcm1NYXRjaGVkLmJpbmQodGhpcyksXG4gICAgICAgIEFkZEluZGV4Tm9kZTogdGhpcy50cmFuc2Zvcm1BZGRJbmRleC5iaW5kKHRoaXMpLFxuICAgICAgICBDYXN0Tm9kZTogdGhpcy50cmFuc2Zvcm1DYXN0LmJpbmQodGhpcyksXG4gICAgICAgIEZldGNoTm9kZTogdGhpcy50cmFuc2Zvcm1GZXRjaC5iaW5kKHRoaXMpLFxuICAgICAgICBUb3BOb2RlOiB0aGlzLnRyYW5zZm9ybVRvcC5iaW5kKHRoaXMpLFxuICAgICAgICBPdXRwdXROb2RlOiB0aGlzLnRyYW5zZm9ybU91dHB1dC5iaW5kKHRoaXMpLFxuICAgICAgICBPckFjdGlvbk5vZGU6IHRoaXMudHJhbnNmb3JtT3JBY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgQ29sbGF0ZU5vZGU6IHRoaXMudHJhbnNmb3JtQ29sbGF0ZS5iaW5kKHRoaXMpLFxuICAgIH0pO1xuICAgIHRyYW5zZm9ybU5vZGUobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubm9kZVN0YWNrLnB1c2gobm9kZSk7XG4gICAgICAgIGNvbnN0IG91dCA9IHRoaXMudHJhbnNmb3JtTm9kZUltcGwobm9kZSwgcXVlcnlJZCk7XG4gICAgICAgIHRoaXMubm9kZVN0YWNrLnBvcCgpO1xuICAgICAgICByZXR1cm4gZnJlZXplKG91dCk7XG4gICAgfVxuICAgIHRyYW5zZm9ybU5vZGVJbXBsKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3RyYW5zZm9ybWVyc1tub2RlLmtpbmRdKG5vZGUsIHF1ZXJ5SWQpO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Ob2RlTGlzdChsaXN0LCBxdWVyeUlkKSB7XG4gICAgICAgIGlmICghbGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZyZWV6ZShsaXN0Lm1hcCgobm9kZSkgPT4gdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUsIHF1ZXJ5SWQpKSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVNlbGVjdFF1ZXJ5KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnU2VsZWN0UXVlcnlOb2RlJyxcbiAgICAgICAgICAgIGZyb206IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmZyb20sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgc2VsZWN0aW9uczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLnNlbGVjdGlvbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZGlzdGluY3RPbjogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmRpc3RpbmN0T24sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgam9pbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5qb2lucywgcXVlcnlJZCksXG4gICAgICAgICAgICBncm91cEJ5OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5ncm91cEJ5LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG9yZGVyQnk6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm9yZGVyQnksIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgd2hlcmU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLndoZXJlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGZyb250TW9kaWZpZXJzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuZnJvbnRNb2RpZmllcnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZW5kTW9kaWZpZXJzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGxpbWl0OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5saW1pdCwgcXVlcnlJZCksXG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm9mZnNldCwgcXVlcnlJZCksXG4gICAgICAgICAgICB3aXRoOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS53aXRoLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGhhdmluZzogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuaGF2aW5nLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGV4cGxhaW46IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmV4cGxhaW4sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgc2V0T3BlcmF0aW9uczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLnNldE9wZXJhdGlvbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZmV0Y2g6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmZldGNoLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHRvcDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudG9wLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVNlbGVjdGlvbihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1NlbGVjdGlvbk5vZGUnLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5zZWxlY3Rpb24sIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQ29sdW1uKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQ29sdW1uTm9kZScsXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmNvbHVtbiwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1BbGlhcyhub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0FsaWFzTm9kZScsXG4gICAgICAgICAgICBub2RlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5ub2RlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGFsaWFzOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5hbGlhcywgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1UYWJsZShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1RhYmxlTm9kZScsXG4gICAgICAgICAgICB0YWJsZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudGFibGUsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtRnJvbShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0Zyb21Ob2RlJyxcbiAgICAgICAgICAgIGZyb21zOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuZnJvbXMsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtUmVmZXJlbmNlKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnUmVmZXJlbmNlTm9kZScsXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmNvbHVtbiwgcXVlcnlJZCksXG4gICAgICAgICAgICB0YWJsZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudGFibGUsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQW5kKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQW5kTm9kZScsXG4gICAgICAgICAgICBsZWZ0OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5sZWZ0LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHJpZ2h0OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5yaWdodCwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Pcihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ09yTm9kZScsXG4gICAgICAgICAgICBsZWZ0OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5sZWZ0LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHJpZ2h0OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5yaWdodCwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1WYWx1ZUxpc3Qobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdWYWx1ZUxpc3ROb2RlJyxcbiAgICAgICAgICAgIHZhbHVlczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLnZhbHVlcywgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1QYXJlbnMobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdQYXJlbnNOb2RlJyxcbiAgICAgICAgICAgIG5vZGU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm5vZGUsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtSm9pbihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0pvaW5Ob2RlJyxcbiAgICAgICAgICAgIGpvaW5UeXBlOiBub2RlLmpvaW5UeXBlLFxuICAgICAgICAgICAgdGFibGU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnRhYmxlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG9uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5vbiwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1SYXcobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdSYXdOb2RlJyxcbiAgICAgICAgICAgIHNxbEZyYWdtZW50czogZnJlZXplKFsuLi5ub2RlLnNxbEZyYWdtZW50c10pLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLnBhcmFtZXRlcnMsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtV2hlcmUobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdXaGVyZU5vZGUnLFxuICAgICAgICAgICAgd2hlcmU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLndoZXJlLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUluc2VydFF1ZXJ5KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnSW5zZXJ0UXVlcnlOb2RlJyxcbiAgICAgICAgICAgIGludG86IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmludG8sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgY29sdW1uczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmNvbHVtbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgdmFsdWVzOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS52YWx1ZXMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgcmV0dXJuaW5nOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5yZXR1cm5pbmcsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgb25Db25mbGljdDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub25Db25mbGljdCwgcXVlcnlJZCksXG4gICAgICAgICAgICBvbkR1cGxpY2F0ZUtleTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub25EdXBsaWNhdGVLZXksIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZW5kTW9kaWZpZXJzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHdpdGg6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLndpdGgsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgaWdub3JlOiBub2RlLmlnbm9yZSxcbiAgICAgICAgICAgIG9yQWN0aW9uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5vckFjdGlvbiwgcXVlcnlJZCksXG4gICAgICAgICAgICByZXBsYWNlOiBub2RlLnJlcGxhY2UsXG4gICAgICAgICAgICBleHBsYWluOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5leHBsYWluLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZXM6IG5vZGUuZGVmYXVsdFZhbHVlcyxcbiAgICAgICAgICAgIHRvcDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudG9wLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG91dHB1dDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub3V0cHV0LCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVZhbHVlcyhub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1ZhbHVlc05vZGUnLFxuICAgICAgICAgICAgdmFsdWVzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUudmFsdWVzLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybURlbGV0ZVF1ZXJ5KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnRGVsZXRlUXVlcnlOb2RlJyxcbiAgICAgICAgICAgIGZyb206IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmZyb20sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgdXNpbmc6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnVzaW5nLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGpvaW5zOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuam9pbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgd2hlcmU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLndoZXJlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHJldHVybmluZzogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUucmV0dXJuaW5nLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGVuZE1vZGlmaWVyczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmVuZE1vZGlmaWVycywgcXVlcnlJZCksXG4gICAgICAgICAgICB3aXRoOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS53aXRoLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG9yZGVyQnk6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm9yZGVyQnksIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgbGltaXQ6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmxpbWl0LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGV4cGxhaW46IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmV4cGxhaW4sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgdG9wOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS50b3AsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgb3V0cHV0OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5vdXRwdXQsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtUmV0dXJuaW5nKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnUmV0dXJuaW5nTm9kZScsXG4gICAgICAgICAgICBzZWxlY3Rpb25zOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuc2VsZWN0aW9ucywgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1DcmVhdGVUYWJsZShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0NyZWF0ZVRhYmxlTm9kZScsXG4gICAgICAgICAgICB0YWJsZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudGFibGUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgY29sdW1uczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmNvbHVtbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgY29uc3RyYWludHM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5jb25zdHJhaW50cywgcXVlcnlJZCksXG4gICAgICAgICAgICB0ZW1wb3Jhcnk6IG5vZGUudGVtcG9yYXJ5LFxuICAgICAgICAgICAgaWZOb3RFeGlzdHM6IG5vZGUuaWZOb3RFeGlzdHMsXG4gICAgICAgICAgICBvbkNvbW1pdDogbm9kZS5vbkNvbW1pdCxcbiAgICAgICAgICAgIGZyb250TW9kaWZpZXJzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuZnJvbnRNb2RpZmllcnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZW5kTW9kaWZpZXJzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHNlbGVjdFF1ZXJ5OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5zZWxlY3RRdWVyeSwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Db2x1bW5EZWZpbml0aW9uKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQ29sdW1uRGVmaW5pdGlvbk5vZGUnLFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5jb2x1bW4sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZGF0YVR5cGU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmRhdGFUeXBlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHJlZmVyZW5jZXM6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnJlZmVyZW5jZXMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgcHJpbWFyeUtleTogbm9kZS5wcmltYXJ5S2V5LFxuICAgICAgICAgICAgYXV0b0luY3JlbWVudDogbm9kZS5hdXRvSW5jcmVtZW50LFxuICAgICAgICAgICAgdW5pcXVlOiBub2RlLnVuaXF1ZSxcbiAgICAgICAgICAgIG5vdE51bGw6IG5vZGUubm90TnVsbCxcbiAgICAgICAgICAgIHVuc2lnbmVkOiBub2RlLnVuc2lnbmVkLFxuICAgICAgICAgICAgZGVmYXVsdFRvOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5kZWZhdWx0VG8sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgY2hlY2s6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmNoZWNrLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGdlbmVyYXRlZDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuZ2VuZXJhdGVkLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGZyb250TW9kaWZpZXJzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuZnJvbnRNb2RpZmllcnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZW5kTW9kaWZpZXJzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG51bGxzTm90RGlzdGluY3Q6IG5vZGUubnVsbHNOb3REaXN0aW5jdCxcbiAgICAgICAgICAgIGlkZW50aXR5OiBub2RlLmlkZW50aXR5LFxuICAgICAgICAgICAgaWZOb3RFeGlzdHM6IG5vZGUuaWZOb3RFeGlzdHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1BZGRDb2x1bW4obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdBZGRDb2x1bW5Ob2RlJyxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuY29sdW1uLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybURyb3BUYWJsZShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0Ryb3BUYWJsZU5vZGUnLFxuICAgICAgICAgICAgdGFibGU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnRhYmxlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGlmRXhpc3RzOiBub2RlLmlmRXhpc3RzLFxuICAgICAgICAgICAgY2FzY2FkZTogbm9kZS5jYXNjYWRlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtT3JkZXJCeShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ09yZGVyQnlOb2RlJyxcbiAgICAgICAgICAgIGl0ZW1zOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuaXRlbXMsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtT3JkZXJCeUl0ZW0obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdPcmRlckJ5SXRlbU5vZGUnLFxuICAgICAgICAgICAgb3JkZXJCeTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub3JkZXJCeSwgcXVlcnlJZCksXG4gICAgICAgICAgICBkaXJlY3Rpb246IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmRpcmVjdGlvbiwgcXVlcnlJZCksXG4gICAgICAgICAgICBjb2xsYXRpb246IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmNvbGxhdGlvbiwgcXVlcnlJZCksXG4gICAgICAgICAgICBudWxsczogbm9kZS5udWxscyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUdyb3VwQnkobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdHcm91cEJ5Tm9kZScsXG4gICAgICAgICAgICBpdGVtczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLml0ZW1zLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUdyb3VwQnlJdGVtKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnR3JvdXBCeUl0ZW1Ob2RlJyxcbiAgICAgICAgICAgIGdyb3VwQnk6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmdyb3VwQnksIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtVXBkYXRlUXVlcnkobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdVcGRhdGVRdWVyeU5vZGUnLFxuICAgICAgICAgICAgdGFibGU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnRhYmxlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGZyb206IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmZyb20sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgam9pbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5qb2lucywgcXVlcnlJZCksXG4gICAgICAgICAgICB3aGVyZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUud2hlcmUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgdXBkYXRlczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLnVwZGF0ZXMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgcmV0dXJuaW5nOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5yZXR1cm5pbmcsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZW5kTW9kaWZpZXJzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHdpdGg6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLndpdGgsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZXhwbGFpbjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuZXhwbGFpbiwgcXVlcnlJZCksXG4gICAgICAgICAgICBsaW1pdDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubGltaXQsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgdG9wOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS50b3AsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgb3V0cHV0OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5vdXRwdXQsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgb3JkZXJCeTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub3JkZXJCeSwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Db2x1bW5VcGRhdGUobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDb2x1bW5VcGRhdGVOb2RlJyxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuY29sdW1uLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS52YWx1ZSwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1MaW1pdChub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0xpbWl0Tm9kZScsXG4gICAgICAgICAgICBsaW1pdDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubGltaXQsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtT2Zmc2V0KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnT2Zmc2V0Tm9kZScsXG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm9mZnNldCwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1PbkNvbmZsaWN0KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnT25Db25mbGljdE5vZGUnLFxuICAgICAgICAgICAgY29sdW1uczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmNvbHVtbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgY29uc3RyYWludDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuY29uc3RyYWludCwgcXVlcnlJZCksXG4gICAgICAgICAgICBpbmRleEV4cHJlc3Npb246IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmluZGV4RXhwcmVzc2lvbiwgcXVlcnlJZCksXG4gICAgICAgICAgICBpbmRleFdoZXJlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5pbmRleFdoZXJlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHVwZGF0ZXM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS51cGRhdGVzLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHVwZGF0ZVdoZXJlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS51cGRhdGVXaGVyZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBkb05vdGhpbmc6IG5vZGUuZG9Ob3RoaW5nLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtT25EdXBsaWNhdGVLZXkobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdPbkR1cGxpY2F0ZUtleU5vZGUnLFxuICAgICAgICAgICAgdXBkYXRlczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLnVwZGF0ZXMsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQ3JlYXRlSW5kZXgobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDcmVhdGVJbmRleE5vZGUnLFxuICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubmFtZSwgcXVlcnlJZCksXG4gICAgICAgICAgICB0YWJsZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudGFibGUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgY29sdW1uczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmNvbHVtbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgdW5pcXVlOiBub2RlLnVuaXF1ZSxcbiAgICAgICAgICAgIHVzaW5nOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS51c2luZywgcXVlcnlJZCksXG4gICAgICAgICAgICBpZk5vdEV4aXN0czogbm9kZS5pZk5vdEV4aXN0cyxcbiAgICAgICAgICAgIHdoZXJlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS53aGVyZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBudWxsc05vdERpc3RpbmN0OiBub2RlLm51bGxzTm90RGlzdGluY3QsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1MaXN0KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnTGlzdE5vZGUnLFxuICAgICAgICAgICAgaXRlbXM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5pdGVtcywgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Ecm9wSW5kZXgobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdEcm9wSW5kZXhOb2RlJyxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm5hbWUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgdGFibGU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnRhYmxlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGlmRXhpc3RzOiBub2RlLmlmRXhpc3RzLFxuICAgICAgICAgICAgY2FzY2FkZTogbm9kZS5jYXNjYWRlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtUHJpbWFyeUtleUNvbnN0cmFpbnQobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdQcmltYXJ5S2V5Q29uc3RyYWludE5vZGUnLFxuICAgICAgICAgICAgY29sdW1uczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmNvbHVtbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubmFtZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBkZWZlcnJhYmxlOiBub2RlLmRlZmVycmFibGUsXG4gICAgICAgICAgICBpbml0aWFsbHlEZWZlcnJlZDogbm9kZS5pbml0aWFsbHlEZWZlcnJlZCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVVuaXF1ZUNvbnN0cmFpbnQobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdVbmlxdWVDb25zdHJhaW50Tm9kZScsXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuY29sdW1ucywgcXVlcnlJZCksXG4gICAgICAgICAgICBuYW1lOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5uYW1lLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG51bGxzTm90RGlzdGluY3Q6IG5vZGUubnVsbHNOb3REaXN0aW5jdCxcbiAgICAgICAgICAgIGRlZmVycmFibGU6IG5vZGUuZGVmZXJyYWJsZSxcbiAgICAgICAgICAgIGluaXRpYWxseURlZmVycmVkOiBub2RlLmluaXRpYWxseURlZmVycmVkLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtRm9yZWlnbktleUNvbnN0cmFpbnQobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdGb3JlaWduS2V5Q29uc3RyYWludE5vZGUnLFxuICAgICAgICAgICAgY29sdW1uczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmNvbHVtbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgcmVmZXJlbmNlczogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUucmVmZXJlbmNlcywgcXVlcnlJZCksXG4gICAgICAgICAgICBuYW1lOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5uYW1lLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG9uRGVsZXRlOiBub2RlLm9uRGVsZXRlLFxuICAgICAgICAgICAgb25VcGRhdGU6IG5vZGUub25VcGRhdGUsXG4gICAgICAgICAgICBkZWZlcnJhYmxlOiBub2RlLmRlZmVycmFibGUsXG4gICAgICAgICAgICBpbml0aWFsbHlEZWZlcnJlZDogbm9kZS5pbml0aWFsbHlEZWZlcnJlZCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVNldE9wZXJhdGlvbihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1NldE9wZXJhdGlvbk5vZGUnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG5vZGUub3BlcmF0b3IsXG4gICAgICAgICAgICBleHByZXNzaW9uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5leHByZXNzaW9uLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGFsbDogbm9kZS5hbGwsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1SZWZlcmVuY2VzKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnUmVmZXJlbmNlc05vZGUnLFxuICAgICAgICAgICAgdGFibGU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnRhYmxlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5jb2x1bW5zLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG9uRGVsZXRlOiBub2RlLm9uRGVsZXRlLFxuICAgICAgICAgICAgb25VcGRhdGU6IG5vZGUub25VcGRhdGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1DaGVja0NvbnN0cmFpbnQobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDaGVja0NvbnN0cmFpbnROb2RlJyxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmV4cHJlc3Npb24sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubmFtZSwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1XaXRoKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnV2l0aE5vZGUnLFxuICAgICAgICAgICAgZXhwcmVzc2lvbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5leHByZXNzaW9ucywgcXVlcnlJZCksXG4gICAgICAgICAgICByZWN1cnNpdmU6IG5vZGUucmVjdXJzaXZlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQ29tbW9uVGFibGVFeHByZXNzaW9uKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQ29tbW9uVGFibGVFeHByZXNzaW9uTm9kZScsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5uYW1lLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG1hdGVyaWFsaXplZDogbm9kZS5tYXRlcmlhbGl6ZWQsXG4gICAgICAgICAgICBleHByZXNzaW9uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5leHByZXNzaW9uLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUNvbW1vblRhYmxlRXhwcmVzc2lvbk5hbWUobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDb21tb25UYWJsZUV4cHJlc3Npb25OYW1lTm9kZScsXG4gICAgICAgICAgICB0YWJsZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudGFibGUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgY29sdW1uczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmNvbHVtbnMsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtSGF2aW5nKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnSGF2aW5nTm9kZScsXG4gICAgICAgICAgICBoYXZpbmc6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmhhdmluZywgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1DcmVhdGVTY2hlbWEobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDcmVhdGVTY2hlbWFOb2RlJyxcbiAgICAgICAgICAgIHNjaGVtYTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuc2NoZW1hLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGlmTm90RXhpc3RzOiBub2RlLmlmTm90RXhpc3RzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtRHJvcFNjaGVtYShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0Ryb3BTY2hlbWFOb2RlJyxcbiAgICAgICAgICAgIHNjaGVtYTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuc2NoZW1hLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGlmRXhpc3RzOiBub2RlLmlmRXhpc3RzLFxuICAgICAgICAgICAgY2FzY2FkZTogbm9kZS5jYXNjYWRlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQWx0ZXJUYWJsZShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0FsdGVyVGFibGVOb2RlJyxcbiAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS50YWJsZSwgcXVlcnlJZCksXG4gICAgICAgICAgICByZW5hbWVUbzogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUucmVuYW1lVG8sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgc2V0U2NoZW1hOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5zZXRTY2hlbWEsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgY29sdW1uQWx0ZXJhdGlvbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5jb2x1bW5BbHRlcmF0aW9ucywgcXVlcnlJZCksXG4gICAgICAgICAgICBhZGRDb25zdHJhaW50OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5hZGRDb25zdHJhaW50LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGRyb3BDb25zdHJhaW50OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5kcm9wQ29uc3RyYWludCwgcXVlcnlJZCksXG4gICAgICAgICAgICByZW5hbWVDb25zdHJhaW50OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5yZW5hbWVDb25zdHJhaW50LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGFkZEluZGV4OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5hZGRJbmRleCwgcXVlcnlJZCksXG4gICAgICAgICAgICBkcm9wSW5kZXg6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmRyb3BJbmRleCwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Ecm9wQ29sdW1uKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnRHJvcENvbHVtbk5vZGUnLFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5jb2x1bW4sIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtUmVuYW1lQ29sdW1uKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnUmVuYW1lQ29sdW1uTm9kZScsXG4gICAgICAgICAgICBjb2x1bW46IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmNvbHVtbiwgcXVlcnlJZCksXG4gICAgICAgICAgICByZW5hbWVUbzogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUucmVuYW1lVG8sIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQWx0ZXJDb2x1bW4obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdBbHRlckNvbHVtbk5vZGUnLFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5jb2x1bW4sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZGF0YVR5cGU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmRhdGFUeXBlLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGRhdGFUeXBlRXhwcmVzc2lvbjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuZGF0YVR5cGVFeHByZXNzaW9uLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHNldERlZmF1bHQ6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnNldERlZmF1bHQsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZHJvcERlZmF1bHQ6IG5vZGUuZHJvcERlZmF1bHQsXG4gICAgICAgICAgICBzZXROb3ROdWxsOiBub2RlLnNldE5vdE51bGwsXG4gICAgICAgICAgICBkcm9wTm90TnVsbDogbm9kZS5kcm9wTm90TnVsbCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybU1vZGlmeUNvbHVtbihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ01vZGlmeUNvbHVtbk5vZGUnLFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5jb2x1bW4sIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQWRkQ29uc3RyYWludChub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0FkZENvbnN0cmFpbnROb2RlJyxcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmNvbnN0cmFpbnQsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtRHJvcENvbnN0cmFpbnQobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdEcm9wQ29uc3RyYWludE5vZGUnLFxuICAgICAgICAgICAgY29uc3RyYWludE5hbWU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmNvbnN0cmFpbnROYW1lLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGlmRXhpc3RzOiBub2RlLmlmRXhpc3RzLFxuICAgICAgICAgICAgbW9kaWZpZXI6IG5vZGUubW9kaWZpZXIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1SZW5hbWVDb25zdHJhaW50KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnUmVuYW1lQ29uc3RyYWludE5vZGUnLFxuICAgICAgICAgICAgb2xkTmFtZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub2xkTmFtZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBuZXdOYW1lOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5uZXdOYW1lLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUNyZWF0ZVZpZXcobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDcmVhdGVWaWV3Tm9kZScsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5uYW1lLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHRlbXBvcmFyeTogbm9kZS50ZW1wb3JhcnksXG4gICAgICAgICAgICBvclJlcGxhY2U6IG5vZGUub3JSZXBsYWNlLFxuICAgICAgICAgICAgaWZOb3RFeGlzdHM6IG5vZGUuaWZOb3RFeGlzdHMsXG4gICAgICAgICAgICBtYXRlcmlhbGl6ZWQ6IG5vZGUubWF0ZXJpYWxpemVkLFxuICAgICAgICAgICAgY29sdW1uczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmNvbHVtbnMsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgYXM6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmFzLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdOb2RlJyxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm5hbWUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgY29uY3VycmVudGx5OiBub2RlLmNvbmN1cnJlbnRseSxcbiAgICAgICAgICAgIHdpdGhOb0RhdGE6IG5vZGUud2l0aE5vRGF0YSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybURyb3BWaWV3KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnRHJvcFZpZXdOb2RlJyxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm5hbWUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgaWZFeGlzdHM6IG5vZGUuaWZFeGlzdHMsXG4gICAgICAgICAgICBtYXRlcmlhbGl6ZWQ6IG5vZGUubWF0ZXJpYWxpemVkLFxuICAgICAgICAgICAgY2FzY2FkZTogbm9kZS5jYXNjYWRlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtR2VuZXJhdGVkKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnR2VuZXJhdGVkTm9kZScsXG4gICAgICAgICAgICBieURlZmF1bHQ6IG5vZGUuYnlEZWZhdWx0LFxuICAgICAgICAgICAgYWx3YXlzOiBub2RlLmFsd2F5cyxcbiAgICAgICAgICAgIGlkZW50aXR5OiBub2RlLmlkZW50aXR5LFxuICAgICAgICAgICAgc3RvcmVkOiBub2RlLnN0b3JlZCxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmV4cHJlc3Npb24sIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtRGVmYXVsdFZhbHVlKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnRGVmYXVsdFZhbHVlTm9kZScsXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmRlZmF1bHRWYWx1ZSwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Pbihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ09uTm9kZScsXG4gICAgICAgICAgICBvbjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub24sIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtU2VsZWN0TW9kaWZpZXIobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdTZWxlY3RNb2RpZmllck5vZGUnLFxuICAgICAgICAgICAgbW9kaWZpZXI6IG5vZGUubW9kaWZpZXIsXG4gICAgICAgICAgICByYXdNb2RpZmllcjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUucmF3TW9kaWZpZXIsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgb2Y6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5vZiwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1DcmVhdGVUeXBlKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnQ3JlYXRlVHlwZU5vZGUnLFxuICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubmFtZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBlbnVtOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5lbnVtLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybURyb3BUeXBlKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnRHJvcFR5cGVOb2RlJyxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm5hbWUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgaWZFeGlzdHM6IG5vZGUuaWZFeGlzdHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1FeHBsYWluKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnRXhwbGFpbk5vZGUnLFxuICAgICAgICAgICAgZm9ybWF0OiBub2RlLmZvcm1hdCxcbiAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLm9wdGlvbnMsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtU2NoZW1hYmxlSWRlbnRpZmllcihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1NjaGVtYWJsZUlkZW50aWZpZXJOb2RlJyxcbiAgICAgICAgICAgIHNjaGVtYTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuc2NoZW1hLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmlkZW50aWZpZXIsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQWdncmVnYXRlRnVuY3Rpb24obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdBZ2dyZWdhdGVGdW5jdGlvbk5vZGUnLFxuICAgICAgICAgICAgZnVuYzogbm9kZS5mdW5jLFxuICAgICAgICAgICAgYWdncmVnYXRlZDogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLmFnZ3JlZ2F0ZWQsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZGlzdGluY3Q6IG5vZGUuZGlzdGluY3QsXG4gICAgICAgICAgICBvcmRlckJ5OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5vcmRlckJ5LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHdpdGhpbkdyb3VwOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS53aXRoaW5Hcm91cCwgcXVlcnlJZCksXG4gICAgICAgICAgICBmaWx0ZXI6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmZpbHRlciwgcXVlcnlJZCksXG4gICAgICAgICAgICBvdmVyOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5vdmVyLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybU92ZXIobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdPdmVyTm9kZScsXG4gICAgICAgICAgICBvcmRlckJ5OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5vcmRlckJ5LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHBhcnRpdGlvbkJ5OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5wYXJ0aXRpb25CeSwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1QYXJ0aXRpb25CeShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1BhcnRpdGlvbkJ5Tm9kZScsXG4gICAgICAgICAgICBpdGVtczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLml0ZW1zLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVBhcnRpdGlvbkJ5SXRlbShub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1BhcnRpdGlvbkJ5SXRlbU5vZGUnLFxuICAgICAgICAgICAgcGFydGl0aW9uQnk6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnBhcnRpdGlvbkJ5LCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUJpbmFyeU9wZXJhdGlvbihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0JpbmFyeU9wZXJhdGlvbk5vZGUnLFxuICAgICAgICAgICAgbGVmdE9wZXJhbmQ6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmxlZnRPcGVyYW5kLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG9wZXJhdG9yOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5vcGVyYXRvciwgcXVlcnlJZCksXG4gICAgICAgICAgICByaWdodE9wZXJhbmQ6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnJpZ2h0T3BlcmFuZCwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1VbmFyeU9wZXJhdGlvbihub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1VuYXJ5T3BlcmF0aW9uTm9kZScsXG4gICAgICAgICAgICBvcGVyYXRvcjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub3BlcmF0b3IsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgb3BlcmFuZDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub3BlcmFuZCwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1Vc2luZyhub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ1VzaW5nTm9kZScsXG4gICAgICAgICAgICB0YWJsZXM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS50YWJsZXMsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtRnVuY3Rpb24obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdGdW5jdGlvbk5vZGUnLFxuICAgICAgICAgICAgZnVuYzogbm9kZS5mdW5jLFxuICAgICAgICAgICAgYXJndW1lbnRzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuYXJndW1lbnRzLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUNhc2Uobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDYXNlTm9kZScsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUudmFsdWUsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgd2hlbjogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLndoZW4sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZWxzZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuZWxzZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBpc1N0YXRlbWVudDogbm9kZS5pc1N0YXRlbWVudCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVdoZW4obm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdXaGVuTm9kZScsXG4gICAgICAgICAgICBjb25kaXRpb246IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmNvbmRpdGlvbiwgcXVlcnlJZCksXG4gICAgICAgICAgICByZXN1bHQ6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnJlc3VsdCwgcXVlcnlJZCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1KU09OUmVmZXJlbmNlKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnSlNPTlJlZmVyZW5jZU5vZGUnLFxuICAgICAgICAgICAgcmVmZXJlbmNlOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5yZWZlcmVuY2UsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgdHJhdmVyc2FsOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS50cmF2ZXJzYWwsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtSlNPTlBhdGgobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdKU09OUGF0aE5vZGUnLFxuICAgICAgICAgICAgaW5PcGVyYXRvcjogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUuaW5PcGVyYXRvciwgcXVlcnlJZCksXG4gICAgICAgICAgICBwYXRoTGVnczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLnBhdGhMZWdzLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUpTT05QYXRoTGVnKG5vZGUsIF9xdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0pTT05QYXRoTGVnTm9kZScsXG4gICAgICAgICAgICB0eXBlOiBub2RlLnR5cGUsXG4gICAgICAgICAgICB2YWx1ZTogbm9kZS52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUpTT05PcGVyYXRvckNoYWluKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnSlNPTk9wZXJhdG9yQ2hhaW5Ob2RlJyxcbiAgICAgICAgICAgIG9wZXJhdG9yOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5vcGVyYXRvciwgcXVlcnlJZCksXG4gICAgICAgICAgICB2YWx1ZXM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS52YWx1ZXMsIHF1ZXJ5SWQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtVHVwbGUobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdUdXBsZU5vZGUnLFxuICAgICAgICAgICAgdmFsdWVzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUudmFsdWVzLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybU1lcmdlUXVlcnkobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdNZXJnZVF1ZXJ5Tm9kZScsXG4gICAgICAgICAgICBpbnRvOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5pbnRvLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHVzaW5nOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS51c2luZywgcXVlcnlJZCksXG4gICAgICAgICAgICB3aGVuczogdGhpcy50cmFuc2Zvcm1Ob2RlTGlzdChub2RlLndoZW5zLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHdpdGg6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLndpdGgsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgdG9wOiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS50b3AsIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZW5kTW9kaWZpZXJzOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIG91dHB1dDogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUub3V0cHV0LCBxdWVyeUlkKSxcbiAgICAgICAgICAgIHJldHVybmluZzogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUucmV0dXJuaW5nLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybU1hdGNoZWQobm9kZSwgX3F1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnTWF0Y2hlZE5vZGUnLFxuICAgICAgICAgICAgbm90OiBub2RlLm5vdCxcbiAgICAgICAgICAgIGJ5U291cmNlOiBub2RlLmJ5U291cmNlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQWRkSW5kZXgobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdBZGRJbmRleE5vZGUnLFxuICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2Zvcm1Ob2RlKG5vZGUubmFtZSwgcXVlcnlJZCksXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLnRyYW5zZm9ybU5vZGVMaXN0KG5vZGUuY29sdW1ucywgcXVlcnlJZCksXG4gICAgICAgICAgICB1bmlxdWU6IG5vZGUudW5pcXVlLFxuICAgICAgICAgICAgdXNpbmc6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLnVzaW5nLCBxdWVyeUlkKSxcbiAgICAgICAgICAgIGlmTm90RXhpc3RzOiBub2RlLmlmTm90RXhpc3RzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQ2FzdChub2RlLCBxdWVyeUlkKSB7XG4gICAgICAgIHJldHVybiByZXF1aXJlQWxsUHJvcHMoe1xuICAgICAgICAgICAga2luZDogJ0Nhc3ROb2RlJyxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmV4cHJlc3Npb24sIHF1ZXJ5SWQpLFxuICAgICAgICAgICAgZGF0YVR5cGU6IHRoaXMudHJhbnNmb3JtTm9kZShub2RlLmRhdGFUeXBlLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybUZldGNoKG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVBbGxQcm9wcyh7XG4gICAgICAgICAgICBraW5kOiAnRmV0Y2hOb2RlJyxcbiAgICAgICAgICAgIHJvd0NvdW50OiB0aGlzLnRyYW5zZm9ybU5vZGUobm9kZS5yb3dDb3VudCwgcXVlcnlJZCksXG4gICAgICAgICAgICBtb2RpZmllcjogbm9kZS5tb2RpZmllcixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVRvcChub2RlLCBfcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdUb3BOb2RlJyxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IG5vZGUuZXhwcmVzc2lvbixcbiAgICAgICAgICAgIG1vZGlmaWVyczogbm9kZS5tb2RpZmllcnMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1PdXRwdXQobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUFsbFByb3BzKHtcbiAgICAgICAgICAgIGtpbmQ6ICdPdXRwdXROb2RlJyxcbiAgICAgICAgICAgIHNlbGVjdGlvbnM6IHRoaXMudHJhbnNmb3JtTm9kZUxpc3Qobm9kZS5zZWxlY3Rpb25zLCBxdWVyeUlkKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYW5zZm9ybURhdGFUeXBlKG5vZGUsIF9xdWVyeUlkKSB7XG4gICAgICAgIC8vIEFuIE9iamVjdC5mcmVlemVkIGxlYWYgbm9kZS4gTm8gbmVlZCB0byBjbG9uZS5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIHRyYW5zZm9ybVNlbGVjdEFsbChub2RlLCBfcXVlcnlJZCkge1xuICAgICAgICAvLyBBbiBPYmplY3QuZnJlZXplZCBsZWFmIG5vZGUuIE5vIG5lZWQgdG8gY2xvbmUuXG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1JZGVudGlmaWVyKG5vZGUsIF9xdWVyeUlkKSB7XG4gICAgICAgIC8vIEFuIE9iamVjdC5mcmVlemVkIGxlYWYgbm9kZS4gTm8gbmVlZCB0byBjbG9uZS5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIHRyYW5zZm9ybVZhbHVlKG5vZGUsIF9xdWVyeUlkKSB7XG4gICAgICAgIC8vIEFuIE9iamVjdC5mcmVlemVkIGxlYWYgbm9kZS4gTm8gbmVlZCB0byBjbG9uZS5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIHRyYW5zZm9ybVByaW1pdGl2ZVZhbHVlTGlzdChub2RlLCBfcXVlcnlJZCkge1xuICAgICAgICAvLyBBbiBPYmplY3QuZnJlZXplZCBsZWFmIG5vZGUuIE5vIG5lZWQgdG8gY2xvbmUuXG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1PcGVyYXRvcihub2RlLCBfcXVlcnlJZCkge1xuICAgICAgICAvLyBBbiBPYmplY3QuZnJlZXplZCBsZWFmIG5vZGUuIE5vIG5lZWQgdG8gY2xvbmUuXG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICB0cmFuc2Zvcm1EZWZhdWx0SW5zZXJ0VmFsdWUobm9kZSwgX3F1ZXJ5SWQpIHtcbiAgICAgICAgLy8gQW4gT2JqZWN0LmZyZWV6ZWQgbGVhZiBub2RlLiBObyBuZWVkIHRvIGNsb25lLlxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgdHJhbnNmb3JtT3JBY3Rpb24obm9kZSwgX3F1ZXJ5SWQpIHtcbiAgICAgICAgLy8gQW4gT2JqZWN0LmZyZWV6ZWQgbGVhZiBub2RlLiBObyBuZWVkIHRvIGNsb25lLlxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gICAgdHJhbnNmb3JtQ29sbGF0ZShub2RlLCBfcXVlcnlJZCkge1xuICAgICAgICAvLyBBbiBPYmplY3QuZnJlZXplZCBsZWFmIG5vZGUuIE5vIG5lZWQgdG8gY2xvbmUuXG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vbWVyZ2UtcXVlcnktYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IEluc2VydFF1ZXJ5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2luc2VydC1xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IE1lcmdlUXVlcnlOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvbWVyZ2UtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IFVwZGF0ZVF1ZXJ5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3VwZGF0ZS1xdWVyeS1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlSW5zZXJ0RXhwcmVzc2lvbiwgfSBmcm9tICcuLi9wYXJzZXIvaW5zZXJ0LXZhbHVlcy1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VKb2luLCB9IGZyb20gJy4uL3BhcnNlci9qb2luLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZU1lcmdlVGhlbiwgcGFyc2VNZXJnZVdoZW4gfSBmcm9tICcuLi9wYXJzZXIvbWVyZ2UtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlU2VsZWN0QWxsLCBwYXJzZVNlbGVjdEFyZywgfSBmcm9tICcuLi9wYXJzZXIvc2VsZWN0LXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVRvcCB9IGZyb20gJy4uL3BhcnNlci90b3AtcGFyc2VyLmpzJztcbmltcG9ydCB7IE5PT1BfUVVFUllfRVhFQ1VUT1IgfSBmcm9tICcuLi9xdWVyeS1leGVjdXRvci9ub29wLXF1ZXJ5LWV4ZWN1dG9yLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IE1lcmdlUmVzdWx0IH0gZnJvbSAnLi9tZXJnZS1yZXN1bHQuanMnO1xuaW1wb3J0IHsgTm9SZXN1bHRFcnJvciwgaXNOb1Jlc3VsdEVycm9yQ29uc3RydWN0b3IsIH0gZnJvbSAnLi9uby1yZXN1bHQtZXJyb3IuanMnO1xuaW1wb3J0IHsgVXBkYXRlUXVlcnlCdWlsZGVyIH0gZnJvbSAnLi91cGRhdGUtcXVlcnktYnVpbGRlci5qcyc7XG5leHBvcnQgY2xhc3MgTWVyZ2VRdWVyeUJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWRkIGFueSBhZGRpdGlvbmFsIFNRTCB0byB0aGUgZW5kIG9mIHRoZSBxdWVyeS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYlxuICAgICAqICAgLm1lcmdlSW50bygncGVyc29uJylcbiAgICAgKiAgIC51c2luZygncGV0JywgJ3BldC5vd25lcl9pZCcsICdwZXJzb24uaWQnKVxuICAgICAqICAgLndoZW5NYXRjaGVkKClcbiAgICAgKiAgIC50aGVuRGVsZXRlKClcbiAgICAgKiAgIC5tb2RpZnlFbmQoc3FsLnJhdygnLS0gdGhpcyBpcyBhIGNvbW1lbnQnKSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIG1lcmdlIGludG8gXCJwZXJzb25cIiB1c2luZyBcInBldFwiIG9uIFwicGV0XCIuXCJvd25lcl9pZFwiID0gXCJwZXJzb25cIi5cImlkXCIgd2hlbiBtYXRjaGVkIHRoZW4gZGVsZXRlIC0tIHRoaXMgaXMgYSBjb21tZW50XG4gICAgICogYGBgXG4gICAgICovXG4gICAgbW9kaWZ5RW5kKG1vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhFbmRNb2RpZmllcih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIG1vZGlmaWVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgYSBgbWVyZ2UgaW50b2AgcXVlcnkgdG8gYW4gYG1lcmdlIHRvcCBpbnRvYCBxdWVyeS5cbiAgICAgKlxuICAgICAqIGB0b3BgIGNsYXVzZSBpcyBvbmx5IHN1cHBvcnRlZCBieSBzb21lIGRpYWxlY3RzIGxpa2UgTVMgU1FMIFNlcnZlci5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogQWZmZWN0IDUgbWF0Y2hlZCByb3dzIGF0IG1vc3Q6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLm1lcmdlSW50bygncGVyc29uJylcbiAgICAgKiAgIC50b3AoNSlcbiAgICAgKiAgIC51c2luZygncGV0JywgJ3BlcnNvbi5pZCcsICdwZXQub3duZXJfaWQnKVxuICAgICAqICAgLndoZW5NYXRjaGVkKClcbiAgICAgKiAgIC50aGVuRGVsZXRlKClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNUyBTUUwgU2VydmVyKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIG1lcmdlIHRvcCg1KSBpbnRvIFwicGVyc29uXCJcbiAgICAgKiB1c2luZyBcInBldFwiIG9uIFwicGVyc29uXCIuXCJpZFwiID0gXCJwZXRcIi5cIm93bmVyX2lkXCJcbiAgICAgKiB3aGVuIG1hdGNoZWQgdGhlblxuICAgICAqICAgZGVsZXRlXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBBZmZlY3QgNTAlIG9mIG1hdGNoZWQgcm93czpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIubWVyZ2VJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnRvcCg1MCwgJ3BlcmNlbnQnKVxuICAgICAqICAgLnVzaW5nKCdwZXQnLCAncGVyc29uLmlkJywgJ3BldC5vd25lcl9pZCcpXG4gICAgICogICAud2hlbk1hdGNoZWQoKVxuICAgICAqICAgLnRoZW5EZWxldGUoKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE1TIFNRTCBTZXJ2ZXIpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogbWVyZ2UgdG9wKDUwKSBwZXJjZW50IGludG8gXCJwZXJzb25cIlxuICAgICAqIHVzaW5nIFwicGV0XCIgb24gXCJwZXJzb25cIi5cImlkXCIgPSBcInBldFwiLlwib3duZXJfaWRcIlxuICAgICAqIHdoZW4gbWF0Y2hlZCB0aGVuXG4gICAgICogICBkZWxldGVcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB0b3AoZXhwcmVzc2lvbiwgbW9kaWZpZXJzKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhUb3AodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVRvcChleHByZXNzaW9uLCBtb2RpZmllcnMpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVzaW5nKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBXaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogTWVyZ2VRdWVyeU5vZGUuY2xvbmVXaXRoVXNpbmcodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZUpvaW4oJ1VzaW5nJywgYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuaW5nKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFJldHVybmluZyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QXJnKGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybmluZ0FsbCh0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IE1lcmdlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoUmV0dXJuaW5nKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VTZWxlY3RBbGwodGFibGUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG91dHB1dChhcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhPdXRwdXQodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVNlbGVjdEFyZyhhcmdzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvdXRwdXRBbGwodGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aE91dHB1dCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QWxsKHRhYmxlKSksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBXaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBhZGQgYW55IGFkZGl0aW9uYWwgU1FMIHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7IHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGF3YWl0IGRiXG4gICAgICogICAubWVyZ2VJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnVzaW5nKCdwZXQnLCAncGV0Lm93bmVyX2lkJywgJ3BlcnNvbi5pZCcpXG4gICAgICogICAud2hlbk1hdGNoZWQoKVxuICAgICAqICAgLnRoZW5EZWxldGUoKVxuICAgICAqICAgLm1vZGlmeUVuZChzcWwucmF3KCctLSB0aGlzIGlzIGEgY29tbWVudCcpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogbWVyZ2UgaW50byBcInBlcnNvblwiIHVzaW5nIFwicGV0XCIgb24gXCJwZXRcIi5cIm93bmVyX2lkXCIgPSBcInBlcnNvblwiLlwiaWRcIiB3aGVuIG1hdGNoZWQgdGhlbiBkZWxldGUgLS0gdGhpcyBpcyBhIGNvbW1lbnRcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBtb2RpZnlFbmQobW9kaWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBXaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aEVuZE1vZGlmaWVyKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgbW9kaWZpZXIudG9PcGVyYXRpb25Ob2RlKCkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VlIHtAbGluayBNZXJnZVF1ZXJ5QnVpbGRlci50b3B9LlxuICAgICAqL1xuICAgIHRvcChleHByZXNzaW9uLCBtb2RpZmllcnMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBXaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFRvcCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlVG9wKGV4cHJlc3Npb24sIG1vZGlmaWVycykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIHNpbXBsZSBgd2hlbiBtYXRjaGVkYCBjbGF1c2UgdG8gdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogRm9yIGEgYHdoZW4gbWF0Y2hlZGAgY2xhdXNlIHdpdGggYW4gYGFuZGAgY29uZGl0aW9uLCBzZWUge0BsaW5rIHdoZW5NYXRjaGVkQW5kfS5cbiAgICAgKlxuICAgICAqIEZvciBhIHNpbXBsZSBgd2hlbiBub3QgbWF0Y2hlZGAgY2xhdXNlLCBzZWUge0BsaW5rIHdoZW5Ob3RNYXRjaGVkfS5cbiAgICAgKlxuICAgICAqIEZvciBhIGB3aGVuIG5vdCBtYXRjaGVkYCBjbGF1c2Ugd2l0aCBhbiBgYW5kYCBjb25kaXRpb24sIHNlZSB7QGxpbmsgd2hlbk5vdE1hdGNoZWRBbmR9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiLm1lcmdlSW50bygncGVyc29uJylcbiAgICAgKiAgIC51c2luZygncGV0JywgJ3BlcnNvbi5pZCcsICdwZXQub3duZXJfaWQnKVxuICAgICAqICAgLndoZW5NYXRjaGVkKClcbiAgICAgKiAgIC50aGVuRGVsZXRlKClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIG1lcmdlIGludG8gXCJwZXJzb25cIlxuICAgICAqIHVzaW5nIFwicGV0XCIgb24gXCJwZXJzb25cIi5cImlkXCIgPSBcInBldFwiLlwib3duZXJfaWRcIlxuICAgICAqIHdoZW4gbWF0Y2hlZCB0aGVuXG4gICAgICogICBkZWxldGVcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB3aGVuTWF0Y2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3doZW5NYXRjaGVkKFtdKTtcbiAgICB9XG4gICAgd2hlbk1hdGNoZWRBbmQoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jd2hlbk1hdGNoZWQoYXJncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIGB3aGVuIG1hdGNoZWRgIGNsYXVzZSB0byB0aGUgcXVlcnkgd2l0aCBhbiBgYW5kYCBjb25kaXRpb24uIEJ1dCB1bmxpa2VcbiAgICAgKiB7QGxpbmsgd2hlbk1hdGNoZWRBbmR9LCB0aGlzIG1ldGhvZCBhY2NlcHRzIGEgY29sdW1uIHJlZmVyZW5jZSBhcyB0aGUgM3JkIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgc2ltaWxhciB0byB7QGxpbmsgU2VsZWN0UXVlcnlCdWlsZGVyLndoZXJlUmVmfSwgc28gc2VlIHRoZSBkb2N1bWVudGF0aW9uXG4gICAgICogZm9yIHRoYXQgbWV0aG9kIGZvciBtb3JlIGV4YW1wbGVzLlxuICAgICAqL1xuICAgIHdoZW5NYXRjaGVkQW5kUmVmKGxocywgb3AsIHJocykge1xuICAgICAgICByZXR1cm4gdGhpcy4jd2hlbk1hdGNoZWQoW2xocywgb3AsIHJoc10sIHRydWUpO1xuICAgIH1cbiAgICAjd2hlbk1hdGNoZWQoYXJncywgcmVmUmlnaHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXRjaGVkVGhlbmFibGVNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogTWVyZ2VRdWVyeU5vZGUuY2xvbmVXaXRoV2hlbih0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlTWVyZ2VXaGVuKHsgaXNNYXRjaGVkOiB0cnVlIH0sIGFyZ3MsIHJlZlJpZ2h0KSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgc2ltcGxlIGB3aGVuIG5vdCBtYXRjaGVkYCBjbGF1c2UgdG8gdGhlIHF1ZXJ5LlxuICAgICAqXG4gICAgICogRm9yIGEgYHdoZW4gbm90IG1hdGNoZWRgIGNsYXVzZSB3aXRoIGFuIGBhbmRgIGNvbmRpdGlvbiwgc2VlIHtAbGluayB3aGVuTm90TWF0Y2hlZEFuZH0uXG4gICAgICpcbiAgICAgKiBGb3IgYSBzaW1wbGUgYHdoZW4gbWF0Y2hlZGAgY2xhdXNlLCBzZWUge0BsaW5rIHdoZW5NYXRjaGVkfS5cbiAgICAgKlxuICAgICAqIEZvciBhIGB3aGVuIG1hdGNoZWRgIGNsYXVzZSB3aXRoIGFuIGBhbmRgIGNvbmRpdGlvbiwgc2VlIHtAbGluayB3aGVuTWF0Y2hlZEFuZH0uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGIubWVyZ2VJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnVzaW5nKCdwZXQnLCAncGVyc29uLmlkJywgJ3BldC5vd25lcl9pZCcpXG4gICAgICogICAud2hlbk5vdE1hdGNoZWQoKVxuICAgICAqICAgLnRoZW5JbnNlcnRWYWx1ZXMoe1xuICAgICAqICAgICBmaXJzdF9uYW1lOiAnSm9obicsXG4gICAgICogICAgIGxhc3RfbmFtZTogJ0RvZScsXG4gICAgICogICB9KVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogbWVyZ2UgaW50byBcInBlcnNvblwiXG4gICAgICogdXNpbmcgXCJwZXRcIiBvbiBcInBlcnNvblwiLlwiaWRcIiA9IFwicGV0XCIuXCJvd25lcl9pZFwiXG4gICAgICogd2hlbiBub3QgbWF0Y2hlZCB0aGVuXG4gICAgICogICBpbnNlcnQgKFwiZmlyc3RfbmFtZVwiLCBcImxhc3RfbmFtZVwiKSB2YWx1ZXMgKCQxLCAkMilcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB3aGVuTm90TWF0Y2hlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3doZW5Ob3RNYXRjaGVkKFtdKTtcbiAgICB9XG4gICAgd2hlbk5vdE1hdGNoZWRBbmQoLi4uYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jd2hlbk5vdE1hdGNoZWQoYXJncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIGB3aGVuIG5vdCBtYXRjaGVkYCBjbGF1c2UgdG8gdGhlIHF1ZXJ5IHdpdGggYW4gYGFuZGAgY29uZGl0aW9uLiBCdXQgdW5saWtlXG4gICAgICoge0BsaW5rIHdoZW5Ob3RNYXRjaGVkQW5kfSwgdGhpcyBtZXRob2QgYWNjZXB0cyBhIGNvbHVtbiByZWZlcmVuY2UgYXMgdGhlIDNyZCBhcmd1bWVudC5cbiAgICAgKlxuICAgICAqIFVubGlrZSB7QGxpbmsgd2hlbk1hdGNoZWRBbmRSZWZ9LCB5b3UgY2Fubm90IHJlZmVyZW5jZSBjb2x1bW5zIGZyb20gdGhlIHRhcmdldCB0YWJsZS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHNpbWlsYXIgdG8ge0BsaW5rIFNlbGVjdFF1ZXJ5QnVpbGRlci53aGVyZVJlZn0sIHNvIHNlZSB0aGUgZG9jdW1lbnRhdGlvblxuICAgICAqIGZvciB0aGF0IG1ldGhvZCBmb3IgbW9yZSBleGFtcGxlcy5cbiAgICAgKi9cbiAgICB3aGVuTm90TWF0Y2hlZEFuZFJlZihsaHMsIG9wLCByaHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3doZW5Ob3RNYXRjaGVkKFtsaHMsIG9wLCByaHNdLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIHNpbXBsZSBgd2hlbiBub3QgbWF0Y2hlZCBieSBzb3VyY2VgIGNsYXVzZSB0byB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiBTdXBwb3J0ZWQgaW4gTVMgU1FMIFNlcnZlci5cbiAgICAgKlxuICAgICAqIFNpbWlsYXIgdG8ge0BsaW5rIHdoZW5Ob3RNYXRjaGVkfSwgYnV0IHJldHVybnMgYSB7QGxpbmsgTWF0Y2hlZFRoZW5hYmxlTWVyZ2VRdWVyeUJ1aWxkZXJ9LlxuICAgICAqL1xuICAgIHdoZW5Ob3RNYXRjaGVkQnlTb3VyY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiN3aGVuTm90TWF0Y2hlZChbXSwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgICB3aGVuTm90TWF0Y2hlZEJ5U291cmNlQW5kKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3doZW5Ob3RNYXRjaGVkKGFyZ3MsIGZhbHNlLCB0cnVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgYHdoZW4gbm90IG1hdGNoZWQgYnkgc291cmNlYCBjbGF1c2UgdG8gdGhlIHF1ZXJ5IHdpdGggYW4gYGFuZGAgY29uZGl0aW9uLlxuICAgICAqXG4gICAgICogU2ltaWxhciB0byB7QGxpbmsgd2hlbk5vdE1hdGNoZWRBbmRSZWZ9LCBidXQgeW91IGNhbiByZWZlcmVuY2UgY29sdW1ucyBmcm9tXG4gICAgICogdGhlIHRhcmdldCB0YWJsZSwgYW5kIG5vdCBmcm9tIHNvdXJjZSB0YWJsZSBhbmQgcmV0dXJucyBhIHtAbGluayBNYXRjaGVkVGhlbmFibGVNZXJnZVF1ZXJ5QnVpbGRlcn0uXG4gICAgICovXG4gICAgd2hlbk5vdE1hdGNoZWRCeVNvdXJjZUFuZFJlZihsaHMsIG9wLCByaHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3doZW5Ob3RNYXRjaGVkKFtsaHMsIG9wLCByaHNdLCB0cnVlLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuaW5nKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBXaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aFJldHVybmluZyh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QXJnKGFyZ3MpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybmluZ0FsbCh0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IFdoZW5lYWJsZU1lcmdlUXVlcnlCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoUmV0dXJuaW5nKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VTZWxlY3RBbGwodGFibGUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG91dHB1dChhcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgV2hlbmVhYmxlTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhPdXRwdXQodGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZVNlbGVjdEFyZyhhcmdzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvdXRwdXRBbGwodGFibGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBXaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIHF1ZXJ5Tm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aE91dHB1dCh0aGlzLiNwcm9wcy5xdWVyeU5vZGUsIHBhcnNlU2VsZWN0QWxsKHRhYmxlKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAjd2hlbk5vdE1hdGNoZWQoYXJncywgcmVmUmlnaHQgPSBmYWxzZSwgYnlTb3VyY2UgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcXVlcnlOb2RlOiBNZXJnZVF1ZXJ5Tm9kZS5jbG9uZVdpdGhXaGVuKHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgcGFyc2VNZXJnZVdoZW4oeyBpc01hdGNoZWQ6IGZhbHNlLCBieVNvdXJjZSB9LCBhcmdzLCByZWZSaWdodCkpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBCdWlsZGVyID0gYnlTb3VyY2VcbiAgICAgICAgICAgID8gTWF0Y2hlZFRoZW5hYmxlTWVyZ2VRdWVyeUJ1aWxkZXJcbiAgICAgICAgICAgIDogTm90TWF0Y2hlZFRoZW5hYmxlTWVyZ2VRdWVyeUJ1aWxkZXI7XG4gICAgICAgIHJldHVybiBuZXcgQnVpbGRlcihwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBjb25kaXRpb25hbGx5IGNhbGwgYSBtZXRob2Qgb24gYHRoaXNgLCBzZWVcbiAgICAgKiB0aGUge0BsaW5rICRpZn0gbWV0aG9kLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBUaGUgbmV4dCBleGFtcGxlIHVzZXMgYSBoZWxwZXIgZnVuY3Rpb24gYGxvZ2AgdG8gbG9nIGEgcXVlcnk6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgQ29tcGlsYWJsZSB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGZ1bmN0aW9uIGxvZzxUIGV4dGVuZHMgQ29tcGlsYWJsZT4ocWI6IFQpOiBUIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHFiLmNvbXBpbGUoKSlcbiAgICAgKiAgIHJldHVybiBxYlxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLnVwZGF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLnNldCh7IGZpcnN0X25hbWU6ICdKb2huJyB9KVxuICAgICAqICAgLiRjYWxsKGxvZylcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxsIGBmdW5jKHRoaXMpYCBpZiBgY29uZGl0aW9uYCBpcyB0cnVlLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgZXNwZWNpYWxseSBoYW5keSB3aXRoIG9wdGlvbmFsIHNlbGVjdHMuIEFueSBgcmV0dXJuaW5nYCBvciBgcmV0dXJuaW5nQWxsYFxuICAgICAqIG1ldGhvZCBjYWxscyBhZGQgY29sdW1ucyBhcyBvcHRpb25hbCBmaWVsZHMgdG8gdGhlIG91dHB1dCB0eXBlIHdoZW4gY2FsbGVkIGluc2lkZVxuICAgICAqIHRoZSBgZnVuY2AgY2FsbGJhY2suIFRoaXMgaXMgYmVjYXVzZSB3ZSBjYW4ndCBrbm93IGlmIHRob3NlIHNlbGVjdGlvbnMgd2VyZSBhY3R1YWxseVxuICAgICAqIG1hZGUgYmVmb3JlIHJ1bm5pbmcgdGhlIGNvZGUuXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIGFsc28gY2FsbCBhbnkgb3RoZXIgbWV0aG9kcyBpbnNpZGUgdGhlIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB0eXBlIHsgUGVyc29uVXBkYXRlIH0gZnJvbSAndHlwZS1lZGl0b3InIC8vIGltYWdpbmFyeSBtb2R1bGVcbiAgICAgKlxuICAgICAqIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVBlcnNvbihpZDogbnVtYmVyLCB1cGRhdGVzOiBQZXJzb25VcGRhdGUsIHJldHVybkxhc3ROYW1lOiBib29sZWFuKSB7XG4gICAgICogICByZXR1cm4gYXdhaXQgZGJcbiAgICAgKiAgICAgLnVwZGF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgICAuc2V0KHVwZGF0ZXMpXG4gICAgICogICAgIC53aGVyZSgnaWQnLCAnPScsIGlkKVxuICAgICAqICAgICAucmV0dXJuaW5nKFsnaWQnLCAnZmlyc3RfbmFtZSddKVxuICAgICAqICAgICAuJGlmKHJldHVybkxhc3ROYW1lLCAocWIpID0+IHFiLnJldHVybmluZygnbGFzdF9uYW1lJykpXG4gICAgICogICAgIC5leGVjdXRlVGFrZUZpcnN0T3JUaHJvdygpXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQW55IHNlbGVjdGlvbnMgYWRkZWQgaW5zaWRlIHRoZSBgaWZgIGNhbGxiYWNrIHdpbGwgYmUgYWRkZWQgYXMgb3B0aW9uYWwgZmllbGRzIHRvIHRoZVxuICAgICAqIG91dHB1dCB0eXBlIHNpbmNlIHdlIGNhbid0IGtub3cgaWYgdGhlIHNlbGVjdGlvbnMgd2VyZSBhY3R1YWxseSBtYWRlIGJlZm9yZSBydW5uaW5nXG4gICAgICogdGhlIGNvZGUuIEluIHRoZSBleGFtcGxlIGFib3ZlIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgYHVwZGF0ZVBlcnNvbmAgZnVuY3Rpb24gaXM6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIFByb21pc2U8e1xuICAgICAqICAgaWQ6IG51bWJlclxuICAgICAqICAgZmlyc3RfbmFtZTogc3RyaW5nXG4gICAgICogICBsYXN0X25hbWU/OiBzdHJpbmdcbiAgICAgKiB9PlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgICRpZihjb25kaXRpb24sIGZ1bmMpIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBXaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KHRoaXMuI3Byb3BzLnF1ZXJ5Tm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBxdWVyeSBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiByb3dzLlxuICAgICAqXG4gICAgICogQWxzbyBzZWUgdGhlIHtAbGluayBleGVjdXRlVGFrZUZpcnN0fSBhbmQge0BsaW5rIGV4ZWN1dGVUYWtlRmlyc3RPclRocm93fSBtZXRob2RzLlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBpbGVkUXVlcnkgPSB0aGlzLmNvbXBpbGUoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KGNvbXBpbGVkUXVlcnkpO1xuICAgICAgICBjb25zdCB7IGFkYXB0ZXIgfSA9IHRoaXMuI3Byb3BzLmV4ZWN1dG9yO1xuICAgICAgICBjb25zdCBxdWVyeSA9IGNvbXBpbGVkUXVlcnkucXVlcnk7XG4gICAgICAgIGlmICgocXVlcnkucmV0dXJuaW5nICYmIGFkYXB0ZXIuc3VwcG9ydHNSZXR1cm5pbmcpIHx8XG4gICAgICAgICAgICAocXVlcnkub3V0cHV0ICYmIGFkYXB0ZXIuc3VwcG9ydHNPdXRwdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJvd3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtuZXcgTWVyZ2VSZXN1bHQocmVzdWx0Lm51bUFmZmVjdGVkUm93cyldO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeGVjdXRlcyB0aGUgcXVlcnkgYW5kIHJldHVybnMgdGhlIGZpcnN0IHJlc3VsdCBvciB1bmRlZmluZWQgaWZcbiAgICAgKiB0aGUgcXVlcnkgcmV0dXJuZWQgbm8gcmVzdWx0LlxuICAgICAqL1xuICAgIGFzeW5jIGV4ZWN1dGVUYWtlRmlyc3QoKSB7XG4gICAgICAgIGNvbnN0IFtyZXN1bHRdID0gYXdhaXQgdGhpcy5leGVjdXRlKCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4ZWN1dGVzIHRoZSBxdWVyeSBhbmQgcmV0dXJucyB0aGUgZmlyc3QgcmVzdWx0IG9yIHRocm93cyBpZlxuICAgICAqIHRoZSBxdWVyeSByZXR1cm5lZCBubyByZXN1bHQuXG4gICAgICpcbiAgICAgKiBCeSBkZWZhdWx0IGFuIGluc3RhbmNlIG9mIHtAbGluayBOb1Jlc3VsdEVycm9yfSBpcyB0aHJvd24sIGJ1dCB5b3UgY2FuXG4gICAgICogcHJvdmlkZSBhIGN1c3RvbSBlcnJvciBjbGFzcywgb3IgY2FsbGJhY2sgYXMgdGhlIG9ubHkgYXJndW1lbnQgdG8gdGhyb3cgYSBkaWZmZXJlbnRcbiAgICAgKiBlcnJvci5cbiAgICAgKi9cbiAgICBhc3luYyBleGVjdXRlVGFrZUZpcnN0T3JUaHJvdyhlcnJvckNvbnN0cnVjdG9yID0gTm9SZXN1bHRFcnJvcikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVUYWtlRmlyc3QoKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzTm9SZXN1bHRFcnJvckNvbnN0cnVjdG9yKGVycm9yQ29uc3RydWN0b3IpXG4gICAgICAgICAgICAgICAgPyBuZXcgZXJyb3JDb25zdHJ1Y3Rvcih0aGlzLnRvT3BlcmF0aW9uTm9kZSgpKVxuICAgICAgICAgICAgICAgIDogZXJyb3JDb25zdHJ1Y3Rvcih0aGlzLnRvT3BlcmF0aW9uTm9kZSgpKTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIE1hdGNoZWRUaGVuYWJsZU1lcmdlUXVlcnlCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtcyB0aGUgYGRlbGV0ZWAgYWN0aW9uLlxuICAgICAqXG4gICAgICogVG8gcGVyZm9ybSB0aGUgYGRvIG5vdGhpbmdgIGFjdGlvbiwgc2VlIHtAbGluayB0aGVuRG9Ob3RoaW5nfS5cbiAgICAgKlxuICAgICAqIFRvIHBlcmZvcm0gdGhlIGB1cGRhdGVgIGFjdGlvbiwgc2VlIHtAbGluayB0aGVuVXBkYXRlfSBvciB7QGxpbmsgdGhlblVwZGF0ZVNldH0uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGIubWVyZ2VJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnVzaW5nKCdwZXQnLCAncGVyc29uLmlkJywgJ3BldC5vd25lcl9pZCcpXG4gICAgICogICAud2hlbk1hdGNoZWQoKVxuICAgICAqICAgLnRoZW5EZWxldGUoKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogbWVyZ2UgaW50byBcInBlcnNvblwiXG4gICAgICogdXNpbmcgXCJwZXRcIiBvbiBcInBlcnNvblwiLlwiaWRcIiA9IFwicGV0XCIuXCJvd25lcl9pZFwiXG4gICAgICogd2hlbiBtYXRjaGVkIHRoZW5cbiAgICAgKiAgIGRlbGV0ZVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRoZW5EZWxldGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgV2hlbmVhYmxlTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IE1lcmdlUXVlcnlOb2RlLmNsb25lV2l0aFRoZW4odGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZU1lcmdlVGhlbignZGVsZXRlJykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgdGhlIGBkbyBub3RoaW5nYCBhY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHN1cHBvcnRlZCBpbiBQb3N0Z3JlU1FMLlxuICAgICAqXG4gICAgICogVG8gcGVyZm9ybSB0aGUgYGRlbGV0ZWAgYWN0aW9uLCBzZWUge0BsaW5rIHRoZW5EZWxldGV9LlxuICAgICAqXG4gICAgICogVG8gcGVyZm9ybSB0aGUgYHVwZGF0ZWAgYWN0aW9uLCBzZWUge0BsaW5rIHRoZW5VcGRhdGV9IG9yIHtAbGluayB0aGVuVXBkYXRlU2V0fS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkYi5tZXJnZUludG8oJ3BlcnNvbicpXG4gICAgICogICAudXNpbmcoJ3BldCcsICdwZXJzb24uaWQnLCAncGV0Lm93bmVyX2lkJylcbiAgICAgKiAgIC53aGVuTWF0Y2hlZCgpXG4gICAgICogICAudGhlbkRvTm90aGluZygpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBtZXJnZSBpbnRvIFwicGVyc29uXCJcbiAgICAgKiB1c2luZyBcInBldFwiIG9uIFwicGVyc29uXCIuXCJpZFwiID0gXCJwZXRcIi5cIm93bmVyX2lkXCJcbiAgICAgKiB3aGVuIG1hdGNoZWQgdGhlblxuICAgICAqICAgZG8gbm90aGluZ1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRoZW5Eb05vdGhpbmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgV2hlbmVhYmxlTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IE1lcmdlUXVlcnlOb2RlLmNsb25lV2l0aFRoZW4odGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZU1lcmdlVGhlbignZG8gbm90aGluZycpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gYW4gYHVwZGF0ZWAgb3BlcmF0aW9uIHdpdGggYSBmdWxsLWZsZWRnZWQge0BsaW5rIFVwZGF0ZVF1ZXJ5QnVpbGRlcn0uXG4gICAgICogVGhpcyBpcyBoYW5keSB3aGVuIG11bHRpcGxlIGBzZXRgIGludm9jYXRpb25zIGFyZSBuZWVkZWQuXG4gICAgICpcbiAgICAgKiBGb3IgYSBzaG9ydGhhbmQgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCwgc2VlIHtAbGluayB0aGVuVXBkYXRlU2V0fS5cbiAgICAgKlxuICAgICAqIFRvIHBlcmZvcm0gdGhlIGBkZWxldGVgIGFjdGlvbiwgc2VlIHtAbGluayB0aGVuRGVsZXRlfS5cbiAgICAgKlxuICAgICAqIFRvIHBlcmZvcm0gdGhlIGBkbyBub3RoaW5nYCBhY3Rpb24sIHNlZSB7QGxpbmsgdGhlbkRvTm90aGluZ30uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGIubWVyZ2VJbnRvKCdwZXJzb24nKVxuICAgICAqICAgLnVzaW5nKCdwZXQnLCAncGVyc29uLmlkJywgJ3BldC5vd25lcl9pZCcpXG4gICAgICogICAud2hlbk1hdGNoZWQoKVxuICAgICAqICAgLnRoZW5VcGRhdGUoKHViKSA9PiB1YlxuICAgICAqICAgICAuc2V0KHNxbGBtZXRhZGF0YVsnaGFzX3BldHMnXWAsICdZJylcbiAgICAgKiAgICAgLnNldCh7XG4gICAgICogICAgICAgdXBkYXRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAqICAgICB9KVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogbWVyZ2UgaW50byBcInBlcnNvblwiXG4gICAgICogdXNpbmcgXCJwZXRcIiBvbiBcInBlcnNvblwiLlwiaWRcIiA9IFwicGV0XCIuXCJvd25lcl9pZFwiXG4gICAgICogd2hlbiBtYXRjaGVkIHRoZW5cbiAgICAgKiAgIHVwZGF0ZSBzZXQgbWV0YWRhdGFbJ2hhc19wZXRzJ10gPSAkMSwgXCJ1cGRhdGVkX2F0XCIgPSAkMlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRoZW5VcGRhdGUoc2V0KSB7XG4gICAgICAgIHJldHVybiBuZXcgV2hlbmVhYmxlTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IE1lcmdlUXVlcnlOb2RlLmNsb25lV2l0aFRoZW4odGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZU1lcmdlVGhlbihzZXQobmV3IFVwZGF0ZVF1ZXJ5QnVpbGRlcih7XG4gICAgICAgICAgICAgICAgcXVlcnlJZDogdGhpcy4jcHJvcHMucXVlcnlJZCxcbiAgICAgICAgICAgICAgICBleGVjdXRvcjogTk9PUF9RVUVSWV9FWEVDVVRPUixcbiAgICAgICAgICAgICAgICBxdWVyeU5vZGU6IFVwZGF0ZVF1ZXJ5Tm9kZS5jcmVhdGVXaXRob3V0VGFibGUoKSxcbiAgICAgICAgICAgIH0pKSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdGhlblVwZGF0ZVNldCguLi5hcmdzKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgbm90IHN1cmUgaG93IHRvIHR5cGUgdGhpcyBzbyBpdCB3b24ndCBjb21wbGFpbiBhYm91dCBzZXQoLi4uYXJncykuXG4gICAgICAgIHJldHVybiB0aGlzLnRoZW5VcGRhdGUoKHViKSA9PiB1Yi5zZXQoLi4uYXJncykpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBOb3RNYXRjaGVkVGhlbmFibGVNZXJnZVF1ZXJ5QnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgdGhlIGBkbyBub3RoaW5nYCBhY3Rpb24uXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHN1cHBvcnRlZCBpbiBQb3N0Z3JlU1FMLlxuICAgICAqXG4gICAgICogVG8gcGVyZm9ybSB0aGUgYGluc2VydGAgYWN0aW9uLCBzZWUge0BsaW5rIHRoZW5JbnNlcnRWYWx1ZXN9LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiLm1lcmdlSW50bygncGVyc29uJylcbiAgICAgKiAgIC51c2luZygncGV0JywgJ3BlcnNvbi5pZCcsICdwZXQub3duZXJfaWQnKVxuICAgICAqICAgLndoZW5Ob3RNYXRjaGVkKClcbiAgICAgKiAgIC50aGVuRG9Ob3RoaW5nKClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIG1lcmdlIGludG8gXCJwZXJzb25cIlxuICAgICAqIHVzaW5nIFwicGV0XCIgb24gXCJwZXJzb25cIi5cImlkXCIgPSBcInBldFwiLlwib3duZXJfaWRcIlxuICAgICAqIHdoZW4gbm90IG1hdGNoZWQgdGhlblxuICAgICAqICAgZG8gbm90aGluZ1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHRoZW5Eb05vdGhpbmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgV2hlbmVhYmxlTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IE1lcmdlUXVlcnlOb2RlLmNsb25lV2l0aFRoZW4odGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZU1lcmdlVGhlbignZG8gbm90aGluZycpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoZW5JbnNlcnRWYWx1ZXMoaW5zZXJ0KSB7XG4gICAgICAgIGNvbnN0IFtjb2x1bW5zLCB2YWx1ZXNdID0gcGFyc2VJbnNlcnRFeHByZXNzaW9uKGluc2VydCk7XG4gICAgICAgIHJldHVybiBuZXcgV2hlbmVhYmxlTWVyZ2VRdWVyeUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBxdWVyeU5vZGU6IE1lcmdlUXVlcnlOb2RlLmNsb25lV2l0aFRoZW4odGhpcy4jcHJvcHMucXVlcnlOb2RlLCBwYXJzZU1lcmdlVGhlbihJbnNlcnRRdWVyeU5vZGUuY2xvbmVXaXRoKEluc2VydFF1ZXJ5Tm9kZS5jcmVhdGVXaXRob3V0SW50bygpLCB7XG4gICAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgICAgICB9KSkpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL21lcmdlLXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IE1hdGNoZWROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvbWF0Y2hlZC1ub2RlLmpzJztcbmltcG9ydCB7IGlzT3BlcmF0aW9uTm9kZVNvdXJjZSwgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vcGVyYXRpb24tbm9kZS1zb3VyY2UuanMnO1xuaW1wb3J0IHsgUmF3Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3Jhdy1ub2RlLmpzJztcbmltcG9ydCB7IFdoZW5Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvd2hlbi1ub2RlLmpzJztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgcGFyc2VGaWx0ZXJMaXN0LCBwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uLCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uLCB9IGZyb20gJy4vYmluYXJ5LW9wZXJhdGlvbi1wYXJzZXIuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWVyZ2VXaGVuKHR5cGUsIGFyZ3MsIHJlZlJpZ2h0KSB7XG4gICAgcmV0dXJuIFdoZW5Ob2RlLmNyZWF0ZShwYXJzZUZpbHRlckxpc3QoW1xuICAgICAgICBNYXRjaGVkTm9kZS5jcmVhdGUoIXR5cGUuaXNNYXRjaGVkLCB0eXBlLmJ5U291cmNlKSxcbiAgICAgICAgLi4uKGFyZ3MgJiYgYXJncy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICBhcmdzLmxlbmd0aCA9PT0gMyAmJiByZWZSaWdodFxuICAgICAgICAgICAgICAgICAgICA/IHBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgOiBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uKGFyZ3MpLFxuICAgICAgICAgICAgXVxuICAgICAgICAgICAgOiBbXSksXG4gICAgXSwgJ2FuZCcsIGZhbHNlKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNZXJnZVRoZW4ocmVzdWx0KSB7XG4gICAgaWYgKGlzU3RyaW5nKHJlc3VsdCkpIHtcbiAgICAgICAgcmV0dXJuIFJhd05vZGUuY3JlYXRlKFtyZXN1bHRdLCBbXSk7XG4gICAgfVxuICAgIGlmIChpc09wZXJhdGlvbk5vZGVTb3VyY2UocmVzdWx0KSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0LnRvT3BlcmF0aW9uTm9kZSgpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9tYXRjaGVkLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgTWF0Y2hlZE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ01hdGNoZWROb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShub3QsIGJ5U291cmNlID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnTWF0Y2hlZE5vZGUnLFxuICAgICAgICAgICAgbm90LFxuICAgICAgICAgICAgYnlTb3VyY2UsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vbm9vcC1xdWVyeS1leGVjdXRvci5kLnRzXCIgLz5cbmltcG9ydCB7IFF1ZXJ5RXhlY3V0b3JCYXNlIH0gZnJvbSAnLi9xdWVyeS1leGVjdXRvci1iYXNlLmpzJztcbi8qKlxuICogQSB7QGxpbmsgUXVlcnlFeGVjdXRvcn0gc3ViY2xhc3MgdGhhdCBjYW4gYmUgdXNlZCB3aGVuIHlvdSBkb24ndFxuICogaGF2ZSBhIHtAbGluayBRdWVyeUNvbXBpbGVyfSwge0BsaW5rIENvbm5lY3Rpb25Qcm92aWRlcn0gb3IgYW55XG4gKiBvdGhlciBuZWVkZWQgdGhpbmdzIHRvIGFjdHVhbGx5IGV4ZWN1dGUgcXVlcmllcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5vb3BRdWVyeUV4ZWN1dG9yIGV4dGVuZHMgUXVlcnlFeGVjdXRvckJhc2Uge1xuICAgIGdldCBhZGFwdGVyKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgcXVlcnkgY2Fubm90IGJlIGNvbXBpbGVkIHRvIFNRTCcpO1xuICAgIH1cbiAgICBjb21waWxlUXVlcnkoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBxdWVyeSBjYW5ub3QgYmUgY29tcGlsZWQgdG8gU1FMJyk7XG4gICAgfVxuICAgIHByb3ZpZGVDb25uZWN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RoaXMgcXVlcnkgY2Fubm90IGJlIGV4ZWN1dGVkJyk7XG4gICAgfVxuICAgIHdpdGhDb25uZWN0aW9uUHJvdmlkZXIoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndGhpcyBxdWVyeSBjYW5ub3QgaGF2ZSBhIGNvbm5lY3Rpb24gcHJvdmlkZXInKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbihwbHVnaW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb29wUXVlcnlFeGVjdXRvcihbLi4udGhpcy5wbHVnaW5zLCBwbHVnaW5dKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbnMocGx1Z2lucykge1xuICAgICAgICByZXR1cm4gbmV3IE5vb3BRdWVyeUV4ZWN1dG9yKFsuLi50aGlzLnBsdWdpbnMsIC4uLnBsdWdpbnNdKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbkF0RnJvbnQocGx1Z2luKSB7XG4gICAgICAgIHJldHVybiBuZXcgTm9vcFF1ZXJ5RXhlY3V0b3IoW3BsdWdpbiwgLi4udGhpcy5wbHVnaW5zXSk7XG4gICAgfVxuICAgIHdpdGhvdXRQbHVnaW5zKCkge1xuICAgICAgICByZXR1cm4gbmV3IE5vb3BRdWVyeUV4ZWN1dG9yKFtdKTtcbiAgICB9XG59XG5leHBvcnQgY29uc3QgTk9PUF9RVUVSWV9FWEVDVVRPUiA9IG5ldyBOb29wUXVlcnlFeGVjdXRvcigpO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9xdWVyeS1leGVjdXRvci1iYXNlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgcHJvdmlkZUNvbnRyb2xsZWRDb25uZWN0aW9uIH0gZnJvbSAnLi4vdXRpbC9wcm92aWRlLWNvbnRyb2xsZWQtY29ubmVjdGlvbi5qcyc7XG5pbXBvcnQgeyBsb2dPbmNlIH0gZnJvbSAnLi4vdXRpbC9sb2ctb25jZS5qcyc7XG5jb25zdCBOT19QTFVHSU5TID0gZnJlZXplKFtdKTtcbmV4cG9ydCBjbGFzcyBRdWVyeUV4ZWN1dG9yQmFzZSB7XG4gICAgI3BsdWdpbnM7XG4gICAgY29uc3RydWN0b3IocGx1Z2lucyA9IE5PX1BMVUdJTlMpIHtcbiAgICAgICAgdGhpcy4jcGx1Z2lucyA9IHBsdWdpbnM7XG4gICAgfVxuICAgIGdldCBwbHVnaW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcGx1Z2lucztcbiAgICB9XG4gICAgdHJhbnNmb3JtUXVlcnkobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0aGlzLiNwbHVnaW5zKSB7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZE5vZGUgPSBwbHVnaW4udHJhbnNmb3JtUXVlcnkoeyBub2RlLCBxdWVyeUlkIH0pO1xuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIHJ1bnRpbWUgY2hlY2sgaGVyZS4gVGhlcmUgaXMgbm8gZ29vZCB3YXlcbiAgICAgICAgICAgIC8vIHRvIHdyaXRlIHR5cGVzIHRoYXQgZW5mb3JjZSB0aGlzIGNvbnN0cmFpbnQuXG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtZWROb2RlLmtpbmQgPT09IG5vZGUua2luZCkge1xuICAgICAgICAgICAgICAgIG5vZGUgPSB0cmFuc2Zvcm1lZE5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoW1xuICAgICAgICAgICAgICAgICAgICBgS3lzZWx5UGx1Z2luLnRyYW5zZm9ybVF1ZXJ5IG11c3QgcmV0dXJuIGEgbm9kZWAsXG4gICAgICAgICAgICAgICAgICAgIGBvZiB0aGUgc2FtZSBraW5kIHRoYXQgd2FzIGdpdmVuIHRvIGl0LmAsXG4gICAgICAgICAgICAgICAgICAgIGBUaGUgcGx1Z2luIHdhcyBnaXZlbiBhICR7bm9kZS5raW5kfWAsXG4gICAgICAgICAgICAgICAgICAgIGBidXQgaXQgcmV0dXJuZWQgYSAke3RyYW5zZm9ybWVkTm9kZS5raW5kfWAsXG4gICAgICAgICAgICAgICAgXS5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlUXVlcnkoY29tcGlsZWRRdWVyeSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm92aWRlQ29ubmVjdGlvbihhc3luYyAoY29ubmVjdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29ubmVjdGlvbi5leGVjdXRlUXVlcnkoY29tcGlsZWRRdWVyeSk7XG4gICAgICAgICAgICBpZiAoJ251bVVwZGF0ZWRPckRlbGV0ZWRSb3dzJyBpbiByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBsb2dPbmNlKCdreXNlbHk6d2FybmluZzogb3V0ZGF0ZWQgZHJpdmVyL3BsdWdpbiBkZXRlY3RlZCEgYFF1ZXJ5UmVzdWx0Lm51bVVwZGF0ZWRPckRlbGV0ZWRSb3dzYCBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGBRdWVyeVJlc3VsdC5udW1BZmZlY3RlZFJvd3NgLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuI3RyYW5zZm9ybVJlc3VsdChyZXN1bHQsIGNvbXBpbGVkUXVlcnkucXVlcnlJZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyAqc3RyZWFtKGNvbXBpbGVkUXVlcnksIGNodW5rU2l6ZSkge1xuICAgICAgICBjb25zdCB7IGNvbm5lY3Rpb24sIHJlbGVhc2UgfSA9IGF3YWl0IHByb3ZpZGVDb250cm9sbGVkQ29ubmVjdGlvbih0aGlzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciBhd2FpdCAoY29uc3QgcmVzdWx0IG9mIGNvbm5lY3Rpb24uc3RyZWFtUXVlcnkoY29tcGlsZWRRdWVyeSwgY2h1bmtTaXplKSkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGF3YWl0IHRoaXMuI3RyYW5zZm9ybVJlc3VsdChyZXN1bHQsIGNvbXBpbGVkUXVlcnkucXVlcnlJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICByZWxlYXNlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgI3RyYW5zZm9ybVJlc3VsdChyZXN1bHQsIHF1ZXJ5SWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBwbHVnaW4gb2YgdGhpcy4jcGx1Z2lucykge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgcGx1Z2luLnRyYW5zZm9ybVJlc3VsdCh7IHJlc3VsdCwgcXVlcnlJZCB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcHJvdmlkZS1jb250cm9sbGVkLWNvbm5lY3Rpb24uZC50c1wiIC8+XG5pbXBvcnQgeyBEZWZlcnJlZCB9IGZyb20gJy4vZGVmZXJyZWQuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb3ZpZGVDb250cm9sbGVkQ29ubmVjdGlvbihjb25uZWN0aW9uUHJvdmlkZXIpIHtcbiAgICBjb25zdCBjb25uZWN0aW9uRGVmZXIgPSBuZXcgRGVmZXJyZWQoKTtcbiAgICBjb25zdCBjb25uZWN0aW9uUmVsZWFzZURlZmVyID0gbmV3IERlZmVycmVkKCk7XG4gICAgY29ubmVjdGlvblByb3ZpZGVyXG4gICAgICAgIC5wcm92aWRlQ29ubmVjdGlvbihhc3luYyAoY29ubmVjdGlvbikgPT4ge1xuICAgICAgICBjb25uZWN0aW9uRGVmZXIucmVzb2x2ZShjb25uZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGNvbm5lY3Rpb25SZWxlYXNlRGVmZXIucHJvbWlzZTtcbiAgICB9KVxuICAgICAgICAuY2F0Y2goKGV4KSA9PiBjb25uZWN0aW9uRGVmZXIucmVqZWN0KGV4KSk7XG4gICAgLy8gQ3JlYXRlIGNvbXBvc2l0ZSBvZiB0aGUgY29ubmVjdGlvbiBhbmQgdGhlIHJlbGVhc2UgbWV0aG9kIGluc3RlYWQgb2ZcbiAgICAvLyBtb2RpZnlpbmcgdGhlIGNvbm5lY3Rpb24gb3IgY3JlYXRpbmcgYSBuZXcgbmVzdGluZyBgRGF0YWJhc2VDb25uZWN0aW9uYC5cbiAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBhY2NpZGVudGFsbHkgb3ZlcnJpZGUgYW55IG1ldGhvZHMgb2YgM3JkIHBhcnR5XG4gICAgLy8gY29ubmVjdGlvbnMgYW5kIGRvbid0IHJldHVybiB3cmFwcGVkIGNvbm5lY3Rpb25zIHRvIGRyaXZlcnMgdGhhdFxuICAgIC8vIGV4cGVjdCBhIGNlcnRhaW4gc3BlY2lmaWMgY29ubmVjdGlvbiBjbGFzcy5cbiAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgY29ubmVjdGlvbjogYXdhaXQgY29ubmVjdGlvbkRlZmVyLnByb21pc2UsXG4gICAgICAgIHJlbGVhc2U6IGNvbm5lY3Rpb25SZWxlYXNlRGVmZXIucmVzb2x2ZSxcbiAgICB9KTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZGVmZXJyZWQuZC50c1wiIC8+XG5leHBvcnQgY2xhc3MgRGVmZXJyZWQge1xuICAgICNwcm9taXNlO1xuICAgICNyZXNvbHZlO1xuICAgICNyZWplY3Q7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuI3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNyZWplY3QgPSByZWplY3Q7XG4gICAgICAgICAgICB0aGlzLiNyZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBwcm9taXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvbWlzZTtcbiAgICB9XG4gICAgcmVzb2x2ZSA9ICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy4jcmVzb2x2ZSkge1xuICAgICAgICAgICAgdGhpcy4jcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJlamVjdCA9IChyZWFzb24pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuI3JlamVjdCkge1xuICAgICAgICAgICAgdGhpcy4jcmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9tZXJnZS1yZXN1bHQuZC50c1wiIC8+XG5leHBvcnQgY2xhc3MgTWVyZ2VSZXN1bHQge1xuICAgIG51bUNoYW5nZWRSb3dzO1xuICAgIGNvbnN0cnVjdG9yKG51bUNoYW5nZWRSb3dzKSB7XG4gICAgICAgIHRoaXMubnVtQ2hhbmdlZFJvd3MgPSBudW1DaGFuZ2VkUm93cztcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL29mZnNldC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE9mZnNldE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ09mZnNldE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG9mZnNldCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdPZmZzZXROb2RlJyxcbiAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9ncm91cC1ieS1wYXJzZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBHcm91cEJ5SXRlbU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9ncm91cC1ieS1pdGVtLW5vZGUuanMnO1xuaW1wb3J0IHsgZXhwcmVzc2lvbkJ1aWxkZXIsIH0gZnJvbSAnLi4vZXhwcmVzc2lvbi9leHByZXNzaW9uLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbk9yTGlzdCwgfSBmcm9tICcuL3JlZmVyZW5jZS1wYXJzZXIuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlR3JvdXBCeShncm91cEJ5KSB7XG4gICAgZ3JvdXBCeSA9IGlzRnVuY3Rpb24oZ3JvdXBCeSkgPyBncm91cEJ5KGV4cHJlc3Npb25CdWlsZGVyKCkpIDogZ3JvdXBCeTtcbiAgICByZXR1cm4gcGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uT3JMaXN0KGdyb3VwQnkpLm1hcChHcm91cEJ5SXRlbU5vZGUuY3JlYXRlKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZ3JvdXAtYnktaXRlbS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEdyb3VwQnlJdGVtTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnR3JvdXBCeUl0ZW1Ob2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShncm91cEJ5KSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0dyb3VwQnlJdGVtTm9kZScsXG4gICAgICAgICAgICBncm91cEJ5LFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3NldC1vcGVyYXRpb24tcGFyc2VyLmQudHNcIiAvPlxuaW1wb3J0IHsgY3JlYXRlRXhwcmVzc2lvbkJ1aWxkZXIsIH0gZnJvbSAnLi4vZXhwcmVzc2lvbi9leHByZXNzaW9uLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgU2V0T3BlcmF0aW9uTm9kZSwgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9zZXQtb3BlcmF0aW9uLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNSZWFkb25seUFycmF5IH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgcGFyc2VFeHByZXNzaW9uIH0gZnJvbSAnLi9leHByZXNzaW9uLXBhcnNlci5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTZXRPcGVyYXRpb25zKG9wZXJhdG9yLCBleHByZXNzaW9uLCBhbGwpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihleHByZXNzaW9uKSkge1xuICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbihjcmVhdGVFeHByZXNzaW9uQnVpbGRlcigpKTtcbiAgICB9XG4gICAgaWYgKCFpc1JlYWRvbmx5QXJyYXkoZXhwcmVzc2lvbikpIHtcbiAgICAgICAgZXhwcmVzc2lvbiA9IFtleHByZXNzaW9uXTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cHJlc3Npb24ubWFwKChleHByKSA9PiBTZXRPcGVyYXRpb25Ob2RlLmNyZWF0ZShvcGVyYXRvciwgcGFyc2VFeHByZXNzaW9uKGV4cHIpLCBhbGwpKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vc2V0LW9wZXJhdGlvbi1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFNldE9wZXJhdGlvbk5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1NldE9wZXJhdGlvbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG9wZXJhdG9yLCBleHByZXNzaW9uLCBhbGwpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnU2V0T3BlcmF0aW9uTm9kZScsXG4gICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgIGV4cHJlc3Npb24sXG4gICAgICAgICAgICBhbGwsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZXhwcmVzc2lvbi13cmFwcGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgQWxpYXNOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWxpYXMtbm9kZS5qcyc7XG5pbXBvcnQgeyBBbmROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYW5kLW5vZGUuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9pZGVudGlmaWVyLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNPcGVyYXRpb25Ob2RlU291cmNlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmltcG9ydCB7IE9yTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29yLW5vZGUuanMnO1xuaW1wb3J0IHsgUGFyZW5zTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3BhcmVucy1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24sIH0gZnJvbSAnLi4vcGFyc2VyL2JpbmFyeS1vcGVyYXRpb24tcGFyc2VyLmpzJztcbmV4cG9ydCBjbGFzcyBFeHByZXNzaW9uV3JhcHBlciB7XG4gICAgI25vZGU7XG4gICAgY29uc3RydWN0b3Iobm9kZSkge1xuICAgICAgICB0aGlzLiNub2RlID0gbm9kZTtcbiAgICB9XG4gICAgLyoqIEBwcml2YXRlICovXG4gICAgZ2V0IGV4cHJlc3Npb25UeXBlKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBhcyhhbGlhcykge1xuICAgICAgICByZXR1cm4gbmV3IEFsaWFzZWRFeHByZXNzaW9uV3JhcHBlcih0aGlzLCBhbGlhcyk7XG4gICAgfVxuICAgIG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPcldyYXBwZXIoT3JOb2RlLmNyZWF0ZSh0aGlzLiNub2RlLCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uKGFyZ3MpKSk7XG4gICAgfVxuICAgIGFuZCguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQW5kV3JhcHBlcihBbmROb2RlLmNyZWF0ZSh0aGlzLiNub2RlLCBwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uKGFyZ3MpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgb3V0cHV0IHR5cGUgb2YgdGhlIGV4cHJlc3Npb24uXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBjYWxsIGRvZXNuJ3QgY2hhbmdlIHRoZSBTUUwgaW4gYW55IHdheS4gVGhpcyBtZXRob2RzIHNpbXBseVxuICAgICAqIHJldHVybnMgYSBjb3B5IG9mIHRoaXMgYEV4cHJlc3Npb25XcmFwcGVyYCB3aXRoIGEgbmV3IG91dHB1dCB0eXBlLlxuICAgICAqL1xuICAgICRjYXN0VG8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbldyYXBwZXIodGhpcy4jbm9kZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9taXQgbnVsbCBmcm9tIHRoZSBleHByZXNzaW9uJ3MgdHlwZS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWZ1bCBpbiBjYXNlcyB3aGVyZSB5b3Uga25vdyBhbiBleHByZXNzaW9uIGNhbid0IGJlXG4gICAgICogbnVsbCwgYnV0IEt5c2VseSBpcyB1bmFibGUgdG8gaW5mZXIgaXQuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBjYWxsIGRvZXNuJ3QgY2hhbmdlIHRoZSBTUUwgaW4gYW55IHdheS4gVGhpcyBtZXRob2RzIHNpbXBseVxuICAgICAqIHJldHVybnMgYSBjb3B5IG9mIGB0aGlzYCB3aXRoIGEgbmV3IG91dHB1dCB0eXBlLlxuICAgICAqL1xuICAgICRub3ROdWxsKCkge1xuICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKHRoaXMuI25vZGUpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNub2RlO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBbGlhc2VkRXhwcmVzc2lvbldyYXBwZXIge1xuICAgICNleHByO1xuICAgICNhbGlhcztcbiAgICBjb25zdHJ1Y3RvcihleHByLCBhbGlhcykge1xuICAgICAgICB0aGlzLiNleHByID0gZXhwcjtcbiAgICAgICAgdGhpcy4jYWxpYXMgPSBhbGlhcztcbiAgICB9XG4gICAgLyoqIEBwcml2YXRlICovXG4gICAgZ2V0IGV4cHJlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNleHByO1xuICAgIH1cbiAgICAvKiogQHByaXZhdGUgKi9cbiAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhbGlhcztcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gQWxpYXNOb2RlLmNyZWF0ZSh0aGlzLiNleHByLnRvT3BlcmF0aW9uTm9kZSgpLCBpc09wZXJhdGlvbk5vZGVTb3VyY2UodGhpcy4jYWxpYXMpXG4gICAgICAgICAgICA/IHRoaXMuI2FsaWFzLnRvT3BlcmF0aW9uTm9kZSgpXG4gICAgICAgICAgICA6IElkZW50aWZpZXJOb2RlLmNyZWF0ZSh0aGlzLiNhbGlhcykpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBPcldyYXBwZXIge1xuICAgICNub2RlO1xuICAgIGNvbnN0cnVjdG9yKG5vZGUpIHtcbiAgICAgICAgdGhpcy4jbm9kZSA9IG5vZGU7XG4gICAgfVxuICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgIGdldCBleHByZXNzaW9uVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgYXMoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbGlhc2VkRXhwcmVzc2lvbldyYXBwZXIodGhpcywgYWxpYXMpO1xuICAgIH1cbiAgICBvciguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgT3JXcmFwcGVyKE9yTm9kZS5jcmVhdGUodGhpcy4jbm9kZSwgcGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbihhcmdzKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2UgdGhlIG91dHB1dCB0eXBlIG9mIHRoZSBleHByZXNzaW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgY2FsbCBkb2Vzbid0IGNoYW5nZSB0aGUgU1FMIGluIGFueSB3YXkuIFRoaXMgbWV0aG9kcyBzaW1wbHlcbiAgICAgKiByZXR1cm5zIGEgY29weSBvZiB0aGlzIGBPcldyYXBwZXJgIHdpdGggYSBuZXcgb3V0cHV0IHR5cGUuXG4gICAgICovXG4gICAgJGNhc3RUbygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPcldyYXBwZXIodGhpcy4jbm9kZSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIFBhcmVuc05vZGUuY3JlYXRlKHRoaXMuI25vZGUpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBbmRXcmFwcGVyIHtcbiAgICAjbm9kZTtcbiAgICBjb25zdHJ1Y3Rvcihub2RlKSB7XG4gICAgICAgIHRoaXMuI25vZGUgPSBub2RlO1xuICAgIH1cbiAgICAvKiogQHByaXZhdGUgKi9cbiAgICBnZXQgZXhwcmVzc2lvblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxpYXNlZEV4cHJlc3Npb25XcmFwcGVyKHRoaXMsIGFsaWFzKTtcbiAgICB9XG4gICAgYW5kKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbmRXcmFwcGVyKEFuZE5vZGUuY3JlYXRlKHRoaXMuI25vZGUsIHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24oYXJncykpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hhbmdlIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbi5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGNhbGwgZG9lc24ndCBjaGFuZ2UgdGhlIFNRTCBpbiBhbnkgd2F5LiBUaGlzIG1ldGhvZHMgc2ltcGx5XG4gICAgICogcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBgQW5kV3JhcHBlcmAgd2l0aCBhIG5ldyBvdXRwdXQgdHlwZS5cbiAgICAgKi9cbiAgICAkY2FzdFRvKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFuZFdyYXBwZXIodGhpcy4jbm9kZSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIFBhcmVuc05vZGUuY3JlYXRlKHRoaXMuI25vZGUpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZmV0Y2gtcGFyc2VyLmQudHNcIiAvPlxuaW1wb3J0IHsgRmV0Y2hOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvZmV0Y2gtbm9kZS5qcyc7XG5pbXBvcnQgeyBpc0JpZ0ludCwgaXNOdW1iZXIgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGZXRjaChyb3dDb3VudCwgbW9kaWZpZXIpIHtcbiAgICBpZiAoIWlzTnVtYmVyKHJvd0NvdW50KSAmJiAhaXNCaWdJbnQocm93Q291bnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBmZXRjaCByb3cgY291bnQ6ICR7cm93Q291bnR9YCk7XG4gICAgfVxuICAgIGlmICghaXNGZXRjaE1vZGlmaWVyKG1vZGlmaWVyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZmV0Y2ggbW9kaWZpZXI6ICR7bW9kaWZpZXJ9YCk7XG4gICAgfVxuICAgIHJldHVybiBGZXRjaE5vZGUuY3JlYXRlKHJvd0NvdW50LCBtb2RpZmllcik7XG59XG5mdW5jdGlvbiBpc0ZldGNoTW9kaWZpZXIodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09ICdvbmx5JyB8fCB2YWx1ZSA9PT0gJ3dpdGggdGllcyc7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2ZldGNoLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBWYWx1ZU5vZGUgfSBmcm9tICcuL3ZhbHVlLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEZldGNoTm9kZSA9IHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdGZXRjaE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHJvd0NvdW50LCBtb2RpZmllcikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2luZDogJ0ZldGNoTm9kZScsXG4gICAgICAgICAgICByb3dDb3VudDogVmFsdWVOb2RlLmNyZWF0ZShyb3dDb3VudCksXG4gICAgICAgICAgICBtb2RpZmllcixcbiAgICAgICAgfTtcbiAgICB9LFxufTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZnVuY3Rpb24tbW9kdWxlLmQudHNcIiAvPlxuaW1wb3J0IHsgRXhwcmVzc2lvbldyYXBwZXIgfSBmcm9tICcuLi9leHByZXNzaW9uL2V4cHJlc3Npb24td3JhcHBlci5qcyc7XG5pbXBvcnQgeyBBZ2dyZWdhdGVGdW5jdGlvbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hZ2dyZWdhdGUtZnVuY3Rpb24tbm9kZS5qcyc7XG5pbXBvcnQgeyBGdW5jdGlvbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9mdW5jdGlvbi1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbk9yTGlzdCwgfSBmcm9tICcuLi9wYXJzZXIvcmVmZXJlbmNlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBwYXJzZVNlbGVjdEFsbCB9IGZyb20gJy4uL3BhcnNlci9zZWxlY3QtcGFyc2VyLmpzJztcbmltcG9ydCB7IEFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlciB9IGZyb20gJy4vYWdncmVnYXRlLWZ1bmN0aW9uLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBwYXJzZVRhYmxlIH0gZnJvbSAnLi4vcGFyc2VyL3RhYmxlLXBhcnNlci5qcyc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25Nb2R1bGUoKSB7XG4gICAgY29uc3QgZm4gPSAobmFtZSwgYXJncykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKEZ1bmN0aW9uTm9kZS5jcmVhdGUobmFtZSwgcGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uT3JMaXN0KGFyZ3MgPz8gW10pKSk7XG4gICAgfTtcbiAgICBjb25zdCBhZ2cgPSAobmFtZSwgYXJncykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IEFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlcih7XG4gICAgICAgICAgICBhZ2dyZWdhdGVGdW5jdGlvbk5vZGU6IEFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZS5jcmVhdGUobmFtZSwgYXJncyA/IHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbk9yTGlzdChhcmdzKSA6IHVuZGVmaW5lZCksXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZm4sIHtcbiAgICAgICAgYWdnLFxuICAgICAgICBhdmcoY29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm4gYWdnKCdhdmcnLCBbY29sdW1uXSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvYWxlc2NlKC4uLnZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIGZuKCdjb2FsZXNjZScsIHZhbHVlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50KGNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuIGFnZygnY291bnQnLCBbY29sdW1uXSk7XG4gICAgICAgIH0sXG4gICAgICAgIGNvdW50QWxsKHRhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlcih7XG4gICAgICAgICAgICAgICAgYWdncmVnYXRlRnVuY3Rpb25Ob2RlOiBBZ2dyZWdhdGVGdW5jdGlvbk5vZGUuY3JlYXRlKCdjb3VudCcsIHBhcnNlU2VsZWN0QWxsKHRhYmxlKSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbWF4KGNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuIGFnZygnbWF4JywgW2NvbHVtbl0pO1xuICAgICAgICB9LFxuICAgICAgICBtaW4oY29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm4gYWdnKCdtaW4nLCBbY29sdW1uXSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1bShjb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiBhZ2coJ3N1bScsIFtjb2x1bW5dKTtcbiAgICAgICAgfSxcbiAgICAgICAgYW55KGNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuIGZuKCdhbnknLCBbY29sdW1uXSk7XG4gICAgICAgIH0sXG4gICAgICAgIGpzb25BZ2codGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyKHtcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGVGdW5jdGlvbk5vZGU6IEFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZS5jcmVhdGUoJ2pzb25fYWdnJywgW1xuICAgICAgICAgICAgICAgICAgICBpc1N0cmluZyh0YWJsZSkgPyBwYXJzZVRhYmxlKHRhYmxlKSA6IHRhYmxlLnRvT3BlcmF0aW9uTm9kZSgpLFxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvSnNvbih0YWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihGdW5jdGlvbk5vZGUuY3JlYXRlKCd0b19qc29uJywgW1xuICAgICAgICAgICAgICAgIGlzU3RyaW5nKHRhYmxlKSA/IHBhcnNlVGFibGUodGFibGUpIDogdGFibGUudG9PcGVyYXRpb25Ob2RlKCksXG4gICAgICAgICAgICBdKSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2FnZ3JlZ2F0ZS1mdW5jdGlvbi1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgV2hlcmVOb2RlIH0gZnJvbSAnLi93aGVyZS1ub2RlLmpzJztcbmltcG9ydCB7IE9yZGVyQnlOb2RlIH0gZnJvbSAnLi9vcmRlci1ieS1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBZ2dyZWdhdGVGdW5jdGlvbk5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0FnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoYWdncmVnYXRlRnVuY3Rpb24sIGFnZ3JlZ2F0ZWQgPSBbXSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdBZ2dyZWdhdGVGdW5jdGlvbk5vZGUnLFxuICAgICAgICAgICAgZnVuYzogYWdncmVnYXRlRnVuY3Rpb24sXG4gICAgICAgICAgICBhZ2dyZWdhdGVkLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aERpc3RpbmN0KGFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSxcbiAgICAgICAgICAgIGRpc3RpbmN0OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aE9yZGVyQnkoYWdncmVnYXRlRnVuY3Rpb25Ob2RlLCBvcmRlckl0ZW1zLCB3aXRoaW5Hcm91cCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHByb3AgPSB3aXRoaW5Hcm91cCA/ICd3aXRoaW5Hcm91cCcgOiAnb3JkZXJCeSc7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uYWdncmVnYXRlRnVuY3Rpb25Ob2RlLFxuICAgICAgICAgICAgW3Byb3BdOiBhZ2dyZWdhdGVGdW5jdGlvbk5vZGVbcHJvcF1cbiAgICAgICAgICAgICAgICA/IE9yZGVyQnlOb2RlLmNsb25lV2l0aEl0ZW1zKGFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZVtwcm9wXSwgb3JkZXJJdGVtcylcbiAgICAgICAgICAgICAgICA6IE9yZGVyQnlOb2RlLmNyZWF0ZShvcmRlckl0ZW1zKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhGaWx0ZXIoYWdncmVnYXRlRnVuY3Rpb25Ob2RlLCBmaWx0ZXIpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5hZ2dyZWdhdGVGdW5jdGlvbk5vZGUsXG4gICAgICAgICAgICBmaWx0ZXI6IGFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZS5maWx0ZXJcbiAgICAgICAgICAgICAgICA/IFdoZXJlTm9kZS5jbG9uZVdpdGhPcGVyYXRpb24oYWdncmVnYXRlRnVuY3Rpb25Ob2RlLmZpbHRlciwgJ0FuZCcsIGZpbHRlcilcbiAgICAgICAgICAgICAgICA6IFdoZXJlTm9kZS5jcmVhdGUoZmlsdGVyKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhPckZpbHRlcihhZ2dyZWdhdGVGdW5jdGlvbk5vZGUsIGZpbHRlcikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSxcbiAgICAgICAgICAgIGZpbHRlcjogYWdncmVnYXRlRnVuY3Rpb25Ob2RlLmZpbHRlclxuICAgICAgICAgICAgICAgID8gV2hlcmVOb2RlLmNsb25lV2l0aE9wZXJhdGlvbihhZ2dyZWdhdGVGdW5jdGlvbk5vZGUuZmlsdGVyLCAnT3InLCBmaWx0ZXIpXG4gICAgICAgICAgICAgICAgOiBXaGVyZU5vZGUuY3JlYXRlKGZpbHRlciksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoT3ZlcihhZ2dyZWdhdGVGdW5jdGlvbk5vZGUsIG92ZXIpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5hZ2dyZWdhdGVGdW5jdGlvbk5vZGUsXG4gICAgICAgICAgICBvdmVyLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Z1bmN0aW9uLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgRnVuY3Rpb25Ob2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdGdW5jdGlvbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGZ1bmMsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnRnVuY3Rpb25Ob2RlJyxcbiAgICAgICAgICAgIGZ1bmMsXG4gICAgICAgICAgICBhcmd1bWVudHM6IGFyZ3MsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vYWdncmVnYXRlLWZ1bmN0aW9uLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBBZ2dyZWdhdGVGdW5jdGlvbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hZ2dyZWdhdGUtZnVuY3Rpb24tbm9kZS5qcyc7XG5pbXBvcnQgeyBBbGlhc05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hbGlhcy1ub2RlLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IGNyZWF0ZU92ZXJCdWlsZGVyIH0gZnJvbSAnLi4vcGFyc2VyL3BhcnNlLXV0aWxzLmpzJztcbmltcG9ydCB7IHBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24sIHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24sIH0gZnJvbSAnLi4vcGFyc2VyL2JpbmFyeS1vcGVyYXRpb24tcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlT3JkZXJCeSwgfSBmcm9tICcuLi9wYXJzZXIvb3JkZXItYnktcGFyc2VyLmpzJztcbmltcG9ydCB7IFF1ZXJ5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3F1ZXJ5LW5vZGUuanMnO1xuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgLyoqIEBwcml2YXRlICovXG4gICAgZ2V0IGV4cHJlc3Npb25UeXBlKCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFsaWFzZWQgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBJbiBhZGRpdGlvbiB0byBzbGFwcGluZyBgYXMgXCJ0aGVfYWxpYXNcImAgdG8gdGhlIGVuZCBvZiB0aGUgU1FMLFxuICAgICAqIHRoaXMgbWV0aG9kIGFsc28gcHJvdmlkZXMgc3RyaWN0IHR5cGluZzpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAgICAgKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICAgICAqICAgLnNlbGVjdChcbiAgICAgKiAgICAgKGViKSA9PiBlYi5mbi5jb3VudDxudW1iZXI+KCdpZCcpLmFzKCdwZXJzb25fY291bnQnKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKlxuICAgICAqIC8vIGBwZXJzb25fY291bnQ6IG51bWJlcmAgZmllbGQgZXhpc3RzIGluIHRoZSByZXN1bHQgdHlwZS5cbiAgICAgKiBjb25zb2xlLmxvZyhyZXN1bHQucGVyc29uX2NvdW50KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IGNvdW50KFwiaWRcIikgYXMgXCJwZXJzb25fY291bnRcIlxuICAgICAqIGZyb20gXCJwZXJzb25cIlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxpYXNlZEFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlcih0aGlzLCBhbGlhcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBgZGlzdGluY3RgIGNsYXVzZSBpbnNpZGUgdGhlIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gICAgICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAgICAgKiAgIC5zZWxlY3QoKGViKSA9PlxuICAgICAqICAgICBlYi5mbi5jb3VudDxudW1iZXI+KCdmaXJzdF9uYW1lJykuZGlzdGluY3QoKS5hcygnZmlyc3RfbmFtZV9jb3VudCcpXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IGNvdW50KGRpc3RpbmN0IFwiZmlyc3RfbmFtZVwiKSBhcyBcImZpcnN0X25hbWVfY291bnRcIlxuICAgICAqIGZyb20gXCJwZXJzb25cIlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGRpc3RpbmN0KCkge1xuICAgICAgICByZXR1cm4gbmV3IEFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZTogQWdncmVnYXRlRnVuY3Rpb25Ob2RlLmNsb25lV2l0aERpc3RpbmN0KHRoaXMuI3Byb3BzLmFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvcmRlckJ5KC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBhZ2dyZWdhdGVGdW5jdGlvbk5vZGU6IFF1ZXJ5Tm9kZS5jbG9uZVdpdGhPcmRlckJ5SXRlbXModGhpcy4jcHJvcHMuYWdncmVnYXRlRnVuY3Rpb25Ob2RlLCBwYXJzZU9yZGVyQnkoYXJncykpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xlYXJPcmRlckJ5KCkge1xuICAgICAgICByZXR1cm4gbmV3IEFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZTogUXVlcnlOb2RlLmNsb25lV2l0aG91dE9yZGVyQnkodGhpcy4jcHJvcHMuYWdncmVnYXRlRnVuY3Rpb25Ob2RlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHdpdGhpbkdyb3VwT3JkZXJCeSguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgYWdncmVnYXRlRnVuY3Rpb25Ob2RlOiBBZ2dyZWdhdGVGdW5jdGlvbk5vZGUuY2xvbmVXaXRoT3JkZXJCeSh0aGlzLiNwcm9wcy5hZ2dyZWdhdGVGdW5jdGlvbk5vZGUsIHBhcnNlT3JkZXJCeShhcmdzKSwgdHJ1ZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmaWx0ZXJXaGVyZSguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgYWdncmVnYXRlRnVuY3Rpb25Ob2RlOiBBZ2dyZWdhdGVGdW5jdGlvbk5vZGUuY2xvbmVXaXRoRmlsdGVyKHRoaXMuI3Byb3BzLmFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSwgcGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbihhcmdzKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgYGZpbHRlcmAgY2xhdXNlIHdpdGggYSBuZXN0ZWQgYHdoZXJlYCBjbGF1c2UgYWZ0ZXIgdGhlIGZ1bmN0aW9uLCB3aGVyZVxuICAgICAqIGJvdGggc2lkZXMgb2YgdGhlIG9wZXJhdG9yIGFyZSByZWZlcmVuY2VzIHRvIGNvbHVtbnMuXG4gICAgICpcbiAgICAgKiBTaW1pbGFyIHRvIHtAbGluayBXaGVyZUludGVyZmFjZX0ncyBgd2hlcmVSZWZgIG1ldGhvZC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogQ291bnQgcGVvcGxlIHdpdGggc2FtZSBmaXJzdCBhbmQgbGFzdCBuYW1lcyB2ZXJzdXMgZ2VuZXJhbCBwdWJsaWM6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gICAgICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAgICAgKiAgIC5zZWxlY3QoKGViKSA9PiBbXG4gICAgICogICAgIGViLmZuXG4gICAgICogICAgICAgLmNvdW50PG51bWJlcj4oJ2lkJylcbiAgICAgKiAgICAgICAuZmlsdGVyV2hlcmVSZWYoJ2ZpcnN0X25hbWUnLCAnPScsICdsYXN0X25hbWUnKVxuICAgICAqICAgICAgIC5hcygncmVwZWF0X25hbWVfY291bnQnKSxcbiAgICAgKiAgICAgZWIuZm4uY291bnQ8bnVtYmVyPignaWQnKS5hcygndG90YWxfY291bnQnKSxcbiAgICAgKiAgIF0pXG4gICAgICogICAuZXhlY3V0ZVRha2VGaXJzdE9yVGhyb3coKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0XG4gICAgICogICBjb3VudChcImlkXCIpIGZpbHRlcih3aGVyZSBcImZpcnN0X25hbWVcIiA9IFwibGFzdF9uYW1lXCIpIGFzIFwicmVwZWF0X25hbWVfY291bnRcIixcbiAgICAgKiAgIGNvdW50KFwiaWRcIikgYXMgXCJ0b3RhbF9jb3VudFwiXG4gICAgICogZnJvbSBcInBlcnNvblwiXG4gICAgICogYGBgXG4gICAgICovXG4gICAgZmlsdGVyV2hlcmVSZWYobGhzLCBvcCwgcmhzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgYWdncmVnYXRlRnVuY3Rpb25Ob2RlOiBBZ2dyZWdhdGVGdW5jdGlvbk5vZGUuY2xvbmVXaXRoRmlsdGVyKHRoaXMuI3Byb3BzLmFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSwgcGFyc2VSZWZlcmVudGlhbEJpbmFyeU9wZXJhdGlvbihsaHMsIG9wLCByaHMpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gYG92ZXJgIGNsYXVzZSAod2luZG93IGZ1bmN0aW9ucykgYWZ0ZXIgdGhlIGZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRiXG4gICAgICogICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAgICAgKiAgIC5zZWxlY3QoXG4gICAgICogICAgIChlYikgPT4gZWIuZm4uYXZnPG51bWJlcj4oJ2FnZScpLm92ZXIoKS5hcygnYXZlcmFnZV9hZ2UnKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IGF2ZyhcImFnZVwiKSBvdmVyKCkgYXMgXCJhdmVyYWdlX2FnZVwiXG4gICAgICogZnJvbSBcInBlcnNvblwiXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBBbHNvIHN1cHBvcnRzIHBhc3NpbmcgYSBjYWxsYmFjayB0aGF0IHJldHVybnMgYW4gb3ZlciBidWlsZGVyLFxuICAgICAqIGFsbG93aW5nIHRvIGFkZCBwYXJ0aXRpb24gYnkgYW5kIHNvcnQgYnkgY2xhdXNlcyBpbnNpZGUgb3Zlci5cbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZGJcbiAgICAgKiAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICAgICAqICAgLnNlbGVjdChcbiAgICAgKiAgICAgKGViKSA9PiBlYi5mbi5hdmc8bnVtYmVyPignYWdlJykub3ZlcihcbiAgICAgKiAgICAgICBvYiA9PiBvYi5wYXJ0aXRpb25CeSgnbGFzdF9uYW1lJykub3JkZXJCeSgnZmlyc3RfbmFtZScsICdhc2MnKVxuICAgICAqICAgICApLmFzKCdhdmVyYWdlX2FnZScpXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBzZWxlY3QgYXZnKFwiYWdlXCIpIG92ZXIocGFydGl0aW9uIGJ5IFwibGFzdF9uYW1lXCIgb3JkZXIgYnkgXCJmaXJzdF9uYW1lXCIgYXNjKSBhcyBcImF2ZXJhZ2VfYWdlXCJcbiAgICAgKiBmcm9tIFwicGVyc29uXCJcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBvdmVyKG92ZXIpIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGNyZWF0ZU92ZXJCdWlsZGVyKCk7XG4gICAgICAgIHJldHVybiBuZXcgQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgYWdncmVnYXRlRnVuY3Rpb25Ob2RlOiBBZ2dyZWdhdGVGdW5jdGlvbk5vZGUuY2xvbmVXaXRoT3Zlcih0aGlzLiNwcm9wcy5hZ2dyZWdhdGVGdW5jdGlvbk5vZGUsIChvdmVyID8gb3ZlcihidWlsZGVyKSA6IGJ1aWxkZXIpLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2FzdHMgdGhlIGV4cHJlc3Npb24gdG8gdGhlIGdpdmVuIHR5cGUuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBjYWxsIGRvZXNuJ3QgY2hhbmdlIHRoZSBTUUwgaW4gYW55IHdheS4gVGhpcyBtZXRob2RzIHNpbXBseVxuICAgICAqIHJldHVybnMgYSBjb3B5IG9mIHRoaXMgYEFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlcmAgd2l0aCBhIG5ldyBvdXRwdXQgdHlwZS5cbiAgICAgKi9cbiAgICAkY2FzdFRvKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlcih0aGlzLiNwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9taXQgbnVsbCBmcm9tIHRoZSBleHByZXNzaW9uJ3MgdHlwZS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWZ1bCBpbiBjYXNlcyB3aGVyZSB5b3Uga25vdyBhbiBleHByZXNzaW9uIGNhbid0IGJlXG4gICAgICogbnVsbCwgYnV0IEt5c2VseSBpcyB1bmFibGUgdG8gaW5mZXIgaXQuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBjYWxsIGRvZXNuJ3QgY2hhbmdlIHRoZSBTUUwgaW4gYW55IHdheS4gVGhpcyBtZXRob2RzIHNpbXBseVxuICAgICAqIHJldHVybnMgYSBjb3B5IG9mIGB0aGlzYCB3aXRoIGEgbmV3IG91dHB1dCB0eXBlLlxuICAgICAqL1xuICAgICRub3ROdWxsKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlcih0aGlzLiNwcm9wcyk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZTtcbiAgICB9XG59XG4vKipcbiAqIHtAbGluayBBZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXJ9IHdpdGggYW4gYWxpYXMuIFRoZSByZXN1bHQgb2YgY2FsbGluZyB7QGxpbmsgQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyLmFzfS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFsaWFzZWRBZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXIge1xuICAgICNhZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXI7XG4gICAgI2FsaWFzO1xuICAgIGNvbnN0cnVjdG9yKGFnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlciwgYWxpYXMpIHtcbiAgICAgICAgdGhpcy4jYWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyID0gYWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyO1xuICAgICAgICB0aGlzLiNhbGlhcyA9IGFsaWFzO1xuICAgIH1cbiAgICAvKiogQHByaXZhdGUgKi9cbiAgICBnZXQgZXhwcmVzc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2FnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlcjtcbiAgICB9XG4gICAgLyoqIEBwcml2YXRlICovXG4gICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYWxpYXM7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIEFsaWFzTm9kZS5jcmVhdGUodGhpcy4jYWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpLCBJZGVudGlmaWVyTm9kZS5jcmVhdGUodGhpcy4jYWxpYXMpKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3VuYXJ5LW9wZXJhdGlvbi1wYXJzZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBPcGVyYXRvck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9vcGVyYXRvci1ub2RlLmpzJztcbmltcG9ydCB7IFVuYXJ5T3BlcmF0aW9uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3VuYXJ5LW9wZXJhdGlvbi1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbiwgfSBmcm9tICcuL3JlZmVyZW5jZS1wYXJzZXIuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRXhpc3RzKG9wZXJhbmQpIHtcbiAgICByZXR1cm4gcGFyc2VVbmFyeU9wZXJhdGlvbignZXhpc3RzJywgb3BlcmFuZCk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOb3RFeGlzdHMob3BlcmFuZCkge1xuICAgIHJldHVybiBwYXJzZVVuYXJ5T3BlcmF0aW9uKCdub3QgZXhpc3RzJywgb3BlcmFuZCk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VVbmFyeU9wZXJhdGlvbihvcGVyYXRvciwgb3BlcmFuZCkge1xuICAgIHJldHVybiBVbmFyeU9wZXJhdGlvbk5vZGUuY3JlYXRlKE9wZXJhdG9yTm9kZS5jcmVhdGUob3BlcmF0b3IpLCBwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb24ob3BlcmFuZCkpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi91bmFyeS1vcGVyYXRpb24tbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBVbmFyeU9wZXJhdGlvbk5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1VuYXJ5T3BlcmF0aW9uTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUob3BlcmF0b3IsIG9wZXJhbmQpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnVW5hcnlPcGVyYXRpb25Ob2RlJyxcbiAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgb3BlcmFuZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jYXNlLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBFeHByZXNzaW9uV3JhcHBlciB9IGZyb20gJy4uL2V4cHJlc3Npb24vZXhwcmVzc2lvbi13cmFwcGVyLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IENhc2VOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY2FzZS1ub2RlLmpzJztcbmltcG9ydCB7IFdoZW5Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvd2hlbi1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24sIH0gZnJvbSAnLi4vcGFyc2VyL2JpbmFyeS1vcGVyYXRpb24tcGFyc2VyLmpzJztcbmltcG9ydCB7IGlzU2FmZUltbWVkaWF0ZVZhbHVlLCBwYXJzZVNhZmVJbW1lZGlhdGVWYWx1ZSwgcGFyc2VWYWx1ZUV4cHJlc3Npb24sIH0gZnJvbSAnLi4vcGFyc2VyL3ZhbHVlLXBhcnNlci5qcyc7XG5leHBvcnQgY2xhc3MgQ2FzZUJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIHdoZW4oLi4uYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IENhc2VUaGVuQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENhc2VOb2RlLmNsb25lV2l0aFdoZW4odGhpcy4jcHJvcHMubm9kZSwgV2hlbk5vZGUuY3JlYXRlKHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24oYXJncykpKSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIENhc2VUaGVuQnVpbGRlciB7XG4gICAgI3Byb3BzO1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHRoaXMuI3Byb3BzID0gZnJlZXplKHByb3BzKTtcbiAgICB9XG4gICAgdGhlbih2YWx1ZUV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYXNlV2hlbkJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDYXNlTm9kZS5jbG9uZVdpdGhUaGVuKHRoaXMuI3Byb3BzLm5vZGUsIGlzU2FmZUltbWVkaWF0ZVZhbHVlKHZhbHVlRXhwcmVzc2lvbilcbiAgICAgICAgICAgICAgICA/IHBhcnNlU2FmZUltbWVkaWF0ZVZhbHVlKHZhbHVlRXhwcmVzc2lvbilcbiAgICAgICAgICAgICAgICA6IHBhcnNlVmFsdWVFeHByZXNzaW9uKHZhbHVlRXhwcmVzc2lvbikpLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQ2FzZVdoZW5CdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICB3aGVuKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYXNlVGhlbkJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDYXNlTm9kZS5jbG9uZVdpdGhXaGVuKHRoaXMuI3Byb3BzLm5vZGUsIFdoZW5Ob2RlLmNyZWF0ZShwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uKGFyZ3MpKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlKHZhbHVlRXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gbmV3IENhc2VFbmRCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ2FzZU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBlbHNlOiBpc1NhZmVJbW1lZGlhdGVWYWx1ZSh2YWx1ZUV4cHJlc3Npb24pXG4gICAgICAgICAgICAgICAgICAgID8gcGFyc2VTYWZlSW1tZWRpYXRlVmFsdWUodmFsdWVFeHByZXNzaW9uKVxuICAgICAgICAgICAgICAgICAgICA6IHBhcnNlVmFsdWVFeHByZXNzaW9uKHZhbHVlRXhwcmVzc2lvbiksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVuZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihDYXNlTm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwgeyBpc1N0YXRlbWVudDogZmFsc2UgfSkpO1xuICAgIH1cbiAgICBlbmRDYXNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKENhc2VOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7IGlzU3RhdGVtZW50OiB0cnVlIH0pKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQ2FzZUVuZEJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIGVuZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uV3JhcHBlcihDYXNlTm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwgeyBpc1N0YXRlbWVudDogZmFsc2UgfSkpO1xuICAgIH1cbiAgICBlbmRDYXNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25XcmFwcGVyKENhc2VOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7IGlzU3RhdGVtZW50OiB0cnVlIH0pKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Nhc2Utbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IFdoZW5Ob2RlIH0gZnJvbSAnLi93aGVuLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENhc2VOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdDYXNlTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQ2FzZU5vZGUnLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoV2hlbihjYXNlTm9kZSwgd2hlbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmNhc2VOb2RlLFxuICAgICAgICAgICAgd2hlbjogZnJlZXplKGNhc2VOb2RlLndoZW4gPyBbLi4uY2FzZU5vZGUud2hlbiwgd2hlbl0gOiBbd2hlbl0pLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aFRoZW4oY2FzZU5vZGUsIHRoZW4pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5jYXNlTm9kZSxcbiAgICAgICAgICAgIHdoZW46IGNhc2VOb2RlLndoZW5cbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbXG4gICAgICAgICAgICAgICAgICAgIC4uLmNhc2VOb2RlLndoZW4uc2xpY2UoMCwgLTEpLFxuICAgICAgICAgICAgICAgICAgICBXaGVuTm9kZS5jbG9uZVdpdGhSZXN1bHQoY2FzZU5vZGUud2hlbltjYXNlTm9kZS53aGVuLmxlbmd0aCAtIDFdLCB0aGVuKSxcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aChjYXNlTm9kZSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5jYXNlTm9kZSxcbiAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2pzb24tcGF0aC1idWlsZGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgQWxpYXNOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWxpYXMtbm9kZS5qcyc7XG5pbXBvcnQgeyBJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2lkZW50aWZpZXItbm9kZS5qcyc7XG5pbXBvcnQgeyBKU09OT3BlcmF0b3JDaGFpbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9qc29uLW9wZXJhdG9yLWNoYWluLW5vZGUuanMnO1xuaW1wb3J0IHsgSlNPTlBhdGhMZWdOb2RlLCB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2pzb24tcGF0aC1sZWctbm9kZS5qcyc7XG5pbXBvcnQgeyBKU09OUGF0aE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9qc29uLXBhdGgtbm9kZS5qcyc7XG5pbXBvcnQgeyBKU09OUmVmZXJlbmNlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2pzb24tcmVmZXJlbmNlLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNPcGVyYXRpb25Ob2RlU291cmNlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmltcG9ydCB7IFZhbHVlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3ZhbHVlLW5vZGUuanMnO1xuZXhwb3J0IGNsYXNzIEpTT05QYXRoQnVpbGRlciB7XG4gICAgI25vZGU7XG4gICAgY29uc3RydWN0b3Iobm9kZSkge1xuICAgICAgICB0aGlzLiNub2RlID0gbm9kZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWNjZXNzIGFuIGVsZW1lbnQgb2YgYSBKU09OIGFycmF5IGluIGEgc3BlY2lmaWMgbG9jYXRpb24uXG4gICAgICpcbiAgICAgKiBTaW5jZSB0aGVyZSdzIG5vIGd1YXJhbnRlZSBhbiBlbGVtZW50IGV4aXN0cyBpbiB0aGUgZ2l2ZW4gYXJyYXkgbG9jYXRpb24sIHRoZVxuICAgICAqIHJlc3VsdGluZyB0eXBlIGlzIGFsd2F5cyBudWxsYWJsZS4gSWYgeW91J3JlIHN1cmUgdGhlIGVsZW1lbnQgZXhpc3RzLCB5b3VcbiAgICAgKiBzaG91bGQgdXNlIHtAbGluayBTZWxlY3RRdWVyeUJ1aWxkZXIuJGFzc2VydFR5cGV9IHRvIG5hcnJvdyB0aGUgdHlwZSBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBTZWUgYWxzbyB7QGxpbmsga2V5fSB0byBhY2Nlc3MgcHJvcGVydGllcyBvZiBKU09OIG9iamVjdHMuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2VsZWN0RnJvbSgncGVyc29uJylcbiAgICAgKiAgIC5zZWxlY3QoZWIgPT5cbiAgICAgKiAgICAgZWIucmVmKCduaWNrbmFtZXMnLCAnLT4nKS5hdCgwKS5hcygncHJpbWFyeV9uaWNrbmFtZScpXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBzZWxlY3QgXCJuaWNrbmFtZXNcIi0+MCBhcyBcInByaW1hcnlfbmlja25hbWVcIiBmcm9tIFwicGVyc29uXCJcbiAgICAgKmBgYFxuICAgICAqXG4gICAgICogQ29tYmluZWQgd2l0aCB7QGxpbmsga2V5fTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZGIuc2VsZWN0RnJvbSgncGVyc29uJykuc2VsZWN0KGViID0+XG4gICAgICogICBlYi5yZWYoJ2V4cGVyaWVuY2UnLCAnLT4nKS5hdCgwKS5rZXkoJ3JvbGUnKS5hcygnZmlyc3Rfcm9sZScpXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IFwiZXhwZXJpZW5jZVwiLT4wLT4ncm9sZScgYXMgXCJmaXJzdF9yb2xlXCIgZnJvbSBcInBlcnNvblwiXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBZb3UgY2FuIHVzZSBgJ2xhc3QnYCB0byBhY2Nlc3MgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgYXJyYXkgaW4gTXlTUUw6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGRiLnNlbGVjdEZyb20oJ3BlcnNvbicpLnNlbGVjdChlYiA9PlxuICAgICAqICAgZWIucmVmKCduaWNrbmFtZXMnLCAnLT4kJykuYXQoJ2xhc3QnKS5hcygnbGFzdF9uaWNrbmFtZScpXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHNlbGVjdCBgbmlja25hbWVzYC0+JyRbbGFzdF0nIGFzIGBsYXN0X25pY2tuYW1lYCBmcm9tIGBwZXJzb25gXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBPciBgJyMtMSdgIGluIFNRTGl0ZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZGIuc2VsZWN0RnJvbSgncGVyc29uJykuc2VsZWN0KGViID0+XG4gICAgICogICBlYi5yZWYoJ25pY2tuYW1lcycsICctPj4kJykuYXQoJyMtMScpLmFzKCdsYXN0X25pY2tuYW1lJylcbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoU1FMaXRlKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIHNlbGVjdCBcIm5pY2tuYW1lc1wiLT4+JyRbIy0xXScgYXMgYGxhc3Rfbmlja25hbWVgIGZyb20gYHBlcnNvbmBcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhdChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY3JlYXRlQnVpbGRlcldpdGhQYXRoTGVnKCdBcnJheUxvY2F0aW9uJywgaW5kZXgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBY2Nlc3MgYSBwcm9wZXJ0eSBvZiBhIEpTT04gb2JqZWN0LlxuICAgICAqXG4gICAgICogSWYgYSBmaWVsZCBpcyBvcHRpb25hbCwgdGhlIHJlc3VsdGluZyB0eXBlIHdpbGwgYmUgbnVsbGFibGUuXG4gICAgICpcbiAgICAgKiBTZWUgYWxzbyB7QGxpbmsgYXR9IHRvIGFjY2VzcyBlbGVtZW50cyBvZiBKU09OIGFycmF5cy5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBkYi5zZWxlY3RGcm9tKCdwZXJzb24nKS5zZWxlY3QoZWIgPT5cbiAgICAgKiAgIGViLnJlZignYWRkcmVzcycsICctPicpLmtleSgnY2l0eScpLmFzKCdjaXR5JylcbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBzZWxlY3QgXCJhZGRyZXNzXCItPidjaXR5JyBhcyBcImNpdHlcIiBmcm9tIFwicGVyc29uXCJcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEdvaW5nIGRlZXBlcjpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZGIuc2VsZWN0RnJvbSgncGVyc29uJykuc2VsZWN0KGViID0+XG4gICAgICogICBlYi5yZWYoJ3Byb2ZpbGUnLCAnLT4kJykua2V5KCd3ZWJzaXRlJykua2V5KCd1cmwnKS5hcygnd2Vic2l0ZV91cmwnKVxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBzZWxlY3QgYHByb2ZpbGVgLT4nJC53ZWJzaXRlLnVybCcgYXMgYHdlYnNpdGVfdXJsYCBmcm9tIGBwZXJzb25gXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBDb21iaW5lZCB3aXRoIHtAbGluayBhdH06XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGRiLnNlbGVjdEZyb20oJ3BlcnNvbicpLnNlbGVjdChlYiA9PlxuICAgICAqICAgZWIucmVmKCdwcm9maWxlJywgJy0+Jykua2V5KCdhZGRyZXNzZXMnKS5hdCgwKS5rZXkoJ2NpdHknKS5hcygnY2l0eScpXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogc2VsZWN0IFwicHJvZmlsZVwiLT4nYWRkcmVzc2VzJy0+MC0+J2NpdHknIGFzIFwiY2l0eVwiIGZyb20gXCJwZXJzb25cIlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGtleShrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NyZWF0ZUJ1aWxkZXJXaXRoUGF0aExlZygnTWVtYmVyJywga2V5KTtcbiAgICB9XG4gICAgI2NyZWF0ZUJ1aWxkZXJXaXRoUGF0aExlZyhsZWdUeXBlLCB2YWx1ZSkge1xuICAgICAgICBpZiAoSlNPTlJlZmVyZW5jZU5vZGUuaXModGhpcy4jbm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHJhdmVyc2VkSlNPTlBhdGhCdWlsZGVyKEpTT05SZWZlcmVuY2VOb2RlLmNsb25lV2l0aFRyYXZlcnNhbCh0aGlzLiNub2RlLCBKU09OUGF0aE5vZGUuaXModGhpcy4jbm9kZS50cmF2ZXJzYWwpXG4gICAgICAgICAgICAgICAgPyBKU09OUGF0aE5vZGUuY2xvbmVXaXRoTGVnKHRoaXMuI25vZGUudHJhdmVyc2FsLCBKU09OUGF0aExlZ05vZGUuY3JlYXRlKGxlZ1R5cGUsIHZhbHVlKSlcbiAgICAgICAgICAgICAgICA6IEpTT05PcGVyYXRvckNoYWluTm9kZS5jbG9uZVdpdGhWYWx1ZSh0aGlzLiNub2RlLnRyYXZlcnNhbCwgVmFsdWVOb2RlLmNyZWF0ZUltbWVkaWF0ZSh2YWx1ZSkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBUcmF2ZXJzZWRKU09OUGF0aEJ1aWxkZXIoSlNPTlBhdGhOb2RlLmNsb25lV2l0aExlZyh0aGlzLiNub2RlLCBKU09OUGF0aExlZ05vZGUuY3JlYXRlKGxlZ1R5cGUsIHZhbHVlKSkpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBUcmF2ZXJzZWRKU09OUGF0aEJ1aWxkZXIgZXh0ZW5kcyBKU09OUGF0aEJ1aWxkZXIge1xuICAgICNub2RlO1xuICAgIGNvbnN0cnVjdG9yKG5vZGUpIHtcbiAgICAgICAgc3VwZXIobm9kZSk7XG4gICAgICAgIHRoaXMuI25vZGUgPSBub2RlO1xuICAgIH1cbiAgICAvKiogQHByaXZhdGUgKi9cbiAgICBnZXQgZXhwcmVzc2lvblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxpYXNlZEpTT05QYXRoQnVpbGRlcih0aGlzLCBhbGlhcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoYW5nZSB0aGUgb3V0cHV0IHR5cGUgb2YgdGhlIGpzb24gcGF0aC5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGNhbGwgZG9lc24ndCBjaGFuZ2UgdGhlIFNRTCBpbiBhbnkgd2F5LiBUaGlzIG1ldGhvZHMgc2ltcGx5XG4gICAgICogcmV0dXJucyBhIGNvcHkgb2YgdGhpcyBgSlNPTlBhdGhCdWlsZGVyYCB3aXRoIGEgbmV3IG91dHB1dCB0eXBlLlxuICAgICAqL1xuICAgICRjYXN0VG8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgVHJhdmVyc2VkSlNPTlBhdGhCdWlsZGVyKHRoaXMuI25vZGUpO1xuICAgIH1cbiAgICAkbm90TnVsbCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUcmF2ZXJzZWRKU09OUGF0aEJ1aWxkZXIodGhpcy4jbm9kZSk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI25vZGU7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEFsaWFzZWRKU09OUGF0aEJ1aWxkZXIge1xuICAgICNqc29uUGF0aDtcbiAgICAjYWxpYXM7XG4gICAgY29uc3RydWN0b3IoanNvblBhdGgsIGFsaWFzKSB7XG4gICAgICAgIHRoaXMuI2pzb25QYXRoID0ganNvblBhdGg7XG4gICAgICAgIHRoaXMuI2FsaWFzID0gYWxpYXM7XG4gICAgfVxuICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgIGdldCBleHByZXNzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4janNvblBhdGg7XG4gICAgfVxuICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2FsaWFzO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiBBbGlhc05vZGUuY3JlYXRlKHRoaXMuI2pzb25QYXRoLnRvT3BlcmF0aW9uTm9kZSgpLCBpc09wZXJhdGlvbk5vZGVTb3VyY2UodGhpcy4jYWxpYXMpXG4gICAgICAgICAgICA/IHRoaXMuI2FsaWFzLnRvT3BlcmF0aW9uTm9kZSgpXG4gICAgICAgICAgICA6IElkZW50aWZpZXJOb2RlLmNyZWF0ZSh0aGlzLiNhbGlhcykpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vanNvbi1wYXRoLWxlZy1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEpTT05QYXRoTGVnTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnSlNPTlBhdGhMZWdOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZSh0eXBlLCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdKU09OUGF0aExlZ05vZGUnLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3R1cGxlLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVHVwbGVOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdUdXBsZU5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHZhbHVlcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdUdXBsZU5vZGUnLFxuICAgICAgICAgICAgdmFsdWVzOiBmcmVlemUodmFsdWVzKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kYXRhLXR5cGUtcGFyc2VyLmQudHNcIiAvPlxuaW1wb3J0IHsgRGF0YVR5cGVOb2RlLCBpc0NvbHVtbkRhdGFUeXBlLCB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2RhdGEtdHlwZS1ub2RlLmpzJztcbmltcG9ydCB7IGlzT3BlcmF0aW9uTm9kZVNvdXJjZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXNvdXJjZS5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRhVHlwZUV4cHJlc3Npb24oZGF0YVR5cGUpIHtcbiAgICBpZiAoaXNPcGVyYXRpb25Ob2RlU291cmNlKGRhdGFUeXBlKSkge1xuICAgICAgICByZXR1cm4gZGF0YVR5cGUudG9PcGVyYXRpb25Ob2RlKCk7XG4gICAgfVxuICAgIGlmIChpc0NvbHVtbkRhdGFUeXBlKGRhdGFUeXBlKSkge1xuICAgICAgICByZXR1cm4gRGF0YVR5cGVOb2RlLmNyZWF0ZShkYXRhVHlwZSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBjb2x1bW4gZGF0YSB0eXBlICR7SlNPTi5zdHJpbmdpZnkoZGF0YVR5cGUpfWApO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kYXRhLXR5cGUtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmNvbnN0IFNJTVBMRV9DT0xVTU5fREFUQV9UWVBFUyA9IFtcbiAgICAndmFyY2hhcicsXG4gICAgJ2NoYXInLFxuICAgICd0ZXh0JyxcbiAgICAnaW50ZWdlcicsXG4gICAgJ2ludDInLFxuICAgICdpbnQ0JyxcbiAgICAnaW50OCcsXG4gICAgJ3NtYWxsaW50JyxcbiAgICAnYmlnaW50JyxcbiAgICAnYm9vbGVhbicsXG4gICAgJ3JlYWwnLFxuICAgICdkb3VibGUgcHJlY2lzaW9uJyxcbiAgICAnZmxvYXQ0JyxcbiAgICAnZmxvYXQ4JyxcbiAgICAnZGVjaW1hbCcsXG4gICAgJ251bWVyaWMnLFxuICAgICdiaW5hcnknLFxuICAgICdieXRlYScsXG4gICAgJ2RhdGUnLFxuICAgICdkYXRldGltZScsXG4gICAgJ3RpbWUnLFxuICAgICd0aW1ldHonLFxuICAgICd0aW1lc3RhbXAnLFxuICAgICd0aW1lc3RhbXB0eicsXG4gICAgJ3NlcmlhbCcsXG4gICAgJ2JpZ3NlcmlhbCcsXG4gICAgJ3V1aWQnLFxuICAgICdqc29uJyxcbiAgICAnanNvbmInLFxuICAgICdibG9iJyxcbiAgICAndmFyYmluYXJ5JyxcbiAgICAnaW50NHJhbmdlJyxcbiAgICAnaW50NG11bHRpcmFuZ2UnLFxuICAgICdpbnQ4cmFuZ2UnLFxuICAgICdpbnQ4bXVsdGlyYW5nZScsXG4gICAgJ251bXJhbmdlJyxcbiAgICAnbnVtbXVsdGlyYW5nZScsXG4gICAgJ3RzcmFuZ2UnLFxuICAgICd0c211bHRpcmFuZ2UnLFxuICAgICd0c3R6cmFuZ2UnLFxuICAgICd0c3R6bXVsdGlyYW5nZScsXG4gICAgJ2RhdGVyYW5nZScsXG4gICAgJ2RhdGVtdWx0aXJhbmdlJyxcbl07XG5jb25zdCBDT0xVTU5fREFUQV9UWVBFX1JFR0VYID0gW1xuICAgIC9edmFyY2hhclxcKFxcZCtcXCkkLyxcbiAgICAvXmNoYXJcXChcXGQrXFwpJC8sXG4gICAgL15kZWNpbWFsXFwoXFxkKywgXFxkK1xcKSQvLFxuICAgIC9ebnVtZXJpY1xcKFxcZCssIFxcZCtcXCkkLyxcbiAgICAvXmJpbmFyeVxcKFxcZCtcXCkkLyxcbiAgICAvXmRhdGV0aW1lXFwoXFxkK1xcKSQvLFxuICAgIC9edGltZVxcKFxcZCtcXCkkLyxcbiAgICAvXnRpbWV0elxcKFxcZCtcXCkkLyxcbiAgICAvXnRpbWVzdGFtcFxcKFxcZCtcXCkkLyxcbiAgICAvXnRpbWVzdGFtcHR6XFwoXFxkK1xcKSQvLFxuICAgIC9edmFyYmluYXJ5XFwoXFxkK1xcKSQvLFxuXTtcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBEYXRhVHlwZU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0RhdGFUeXBlTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoZGF0YVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnRGF0YVR5cGVOb2RlJyxcbiAgICAgICAgICAgIGRhdGFUeXBlLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG5leHBvcnQgZnVuY3Rpb24gaXNDb2x1bW5EYXRhVHlwZShkYXRhVHlwZSkge1xuICAgIGlmIChTSU1QTEVfQ09MVU1OX0RBVEFfVFlQRVMuaW5jbHVkZXMoZGF0YVR5cGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoQ09MVU1OX0RBVEFfVFlQRV9SRUdFWC5zb21lKChyKSA9PiByLnRlc3QoZGF0YVR5cGUpKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jYXN0LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ2FzdE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0Nhc3ROb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShleHByZXNzaW9uLCBkYXRhVHlwZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDYXN0Tm9kZScsXG4gICAgICAgICAgICBleHByZXNzaW9uLFxuICAgICAgICAgICAgZGF0YVR5cGUsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZHluYW1pYy10YWJsZS1idWlsZGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgQWxpYXNOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWxpYXMtbm9kZS5qcyc7XG5pbXBvcnQgeyBJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2lkZW50aWZpZXItbm9kZS5qcyc7XG5pbXBvcnQgeyBpc09wZXJhdGlvbk5vZGVTb3VyY2UsIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmltcG9ydCB7IHBhcnNlVGFibGUgfSBmcm9tICcuLi9wYXJzZXIvdGFibGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBEeW5hbWljVGFibGVCdWlsZGVyIHtcbiAgICAjdGFibGU7XG4gICAgZ2V0IHRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jdGFibGU7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHRhYmxlKSB7XG4gICAgICAgIHRoaXMuI3RhYmxlID0gdGFibGU7XG4gICAgfVxuICAgIGFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWxpYXNlZER5bmFtaWNUYWJsZUJ1aWxkZXIodGhpcy4jdGFibGUsIGFsaWFzKTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQWxpYXNlZER5bmFtaWNUYWJsZUJ1aWxkZXIge1xuICAgICN0YWJsZTtcbiAgICAjYWxpYXM7XG4gICAgZ2V0IHRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jdGFibGU7XG4gICAgfVxuICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2FsaWFzO1xuICAgIH1cbiAgICBjb25zdHJ1Y3Rvcih0YWJsZSwgYWxpYXMpIHtcbiAgICAgICAgdGhpcy4jdGFibGUgPSB0YWJsZTtcbiAgICAgICAgdGhpcy4jYWxpYXMgPSBhbGlhcztcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gQWxpYXNOb2RlLmNyZWF0ZShwYXJzZVRhYmxlKHRoaXMuI3RhYmxlKSwgSWRlbnRpZmllck5vZGUuY3JlYXRlKHRoaXMuI2FsaWFzKSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQWxpYXNlZER5bmFtaWNUYWJsZUJ1aWxkZXIob2JqKSB7XG4gICAgcmV0dXJuIChpc09iamVjdChvYmopICYmXG4gICAgICAgIGlzT3BlcmF0aW9uTm9kZVNvdXJjZShvYmopICYmXG4gICAgICAgIGlzU3RyaW5nKG9iai50YWJsZSkgJiZcbiAgICAgICAgaXNTdHJpbmcob2JqLmFsaWFzKSk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2FsdGVyLXRhYmxlLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBBZGRDb2x1bW5Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWRkLWNvbHVtbi1ub2RlLmpzJztcbmltcG9ydCB7IEFsdGVyVGFibGVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWx0ZXItdGFibGUtbm9kZS5qcyc7XG5pbXBvcnQgeyBDb2x1bW5EZWZpbml0aW9uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NvbHVtbi1kZWZpbml0aW9uLW5vZGUuanMnO1xuaW1wb3J0IHsgRHJvcENvbHVtbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9kcm9wLWNvbHVtbi1ub2RlLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvaWRlbnRpZmllci1ub2RlLmpzJztcbmltcG9ydCB7IFJlbmFtZUNvbHVtbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9yZW5hbWUtY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgZnJlZXplLCBub29wIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIsIH0gZnJvbSAnLi9jb2x1bW4tZGVmaW5pdGlvbi1idWlsZGVyLmpzJztcbmltcG9ydCB7IE1vZGlmeUNvbHVtbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9tb2RpZnktY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VEYXRhVHlwZUV4cHJlc3Npb24sIH0gZnJvbSAnLi4vcGFyc2VyL2RhdGEtdHlwZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyLCB9IGZyb20gJy4vZm9yZWlnbi1rZXktY29uc3RyYWludC1idWlsZGVyLmpzJztcbmltcG9ydCB7IEFkZENvbnN0cmFpbnROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvYWRkLWNvbnN0cmFpbnQtbm9kZS5qcyc7XG5pbXBvcnQgeyBVbmlxdWVDb25zdHJhaW50Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3VuaXF1ZS1jb25zdHJhaW50LW5vZGUuanMnO1xuaW1wb3J0IHsgQ2hlY2tDb25zdHJhaW50Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NoZWNrLWNvbnN0cmFpbnQtbm9kZS5qcyc7XG5pbXBvcnQgeyBGb3JlaWduS2V5Q29uc3RyYWludE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9mb3JlaWduLWtleS1jb25zdHJhaW50LW5vZGUuanMnO1xuaW1wb3J0IHsgQ29sdW1uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NvbHVtbi1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlVGFibGUgfSBmcm9tICcuLi9wYXJzZXIvdGFibGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IERyb3BDb25zdHJhaW50Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2Ryb3AtY29uc3RyYWludC1ub2RlLmpzJztcbmltcG9ydCB7IEFsdGVyQ29sdW1uQnVpbGRlciwgfSBmcm9tICcuL2FsdGVyLWNvbHVtbi1idWlsZGVyLmpzJztcbmltcG9ydCB7IEFsdGVyVGFibGVFeGVjdXRvciB9IGZyb20gJy4vYWx0ZXItdGFibGUtZXhlY3V0b3IuanMnO1xuaW1wb3J0IHsgQWx0ZXJUYWJsZUFkZEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlciB9IGZyb20gJy4vYWx0ZXItdGFibGUtYWRkLWZvcmVpZ24ta2V5LWNvbnN0cmFpbnQtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBBbHRlclRhYmxlRHJvcENvbnN0cmFpbnRCdWlsZGVyIH0gZnJvbSAnLi9hbHRlci10YWJsZS1kcm9wLWNvbnN0cmFpbnQtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBQcmltYXJ5S2V5Q29uc3RyYWludE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9wcmltYXJ5LWtleS1jb25zdHJhaW50LW5vZGUuanMnO1xuaW1wb3J0IHsgRHJvcEluZGV4Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2Ryb3AtaW5kZXgtbm9kZS5qcyc7XG5pbXBvcnQgeyBBZGRJbmRleE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hZGQtaW5kZXgtbm9kZS5qcyc7XG5pbXBvcnQgeyBBbHRlclRhYmxlQWRkSW5kZXhCdWlsZGVyIH0gZnJvbSAnLi9hbHRlci10YWJsZS1hZGQtaW5kZXgtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBVbmlxdWVDb25zdHJhaW50Tm9kZUJ1aWxkZXIsIH0gZnJvbSAnLi91bmlxdWUtY29uc3RyYWludC1idWlsZGVyLmpzJztcbmltcG9ydCB7IFByaW1hcnlLZXlDb25zdHJhaW50QnVpbGRlciwgfSBmcm9tICcuL3ByaW1hcnkta2V5LWNvbnN0cmFpbnQtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBDaGVja0NvbnN0cmFpbnRCdWlsZGVyLCB9IGZyb20gJy4vY2hlY2stY29uc3RyYWludC1idWlsZGVyLmpzJztcbmltcG9ydCB7IFJlbmFtZUNvbnN0cmFpbnROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcmVuYW1lLWNvbnN0cmFpbnQtbm9kZS5qcyc7XG4vKipcbiAqIFRoaXMgYnVpbGRlciBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBgYWx0ZXIgdGFibGVgIHF1ZXJ5LlxuICovXG5leHBvcnQgY2xhc3MgQWx0ZXJUYWJsZUJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIHJlbmFtZVRvKG5ld1RhYmxlTmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVFeGVjdXRvcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aFRhYmxlUHJvcHModGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIHJlbmFtZVRvOiBwYXJzZVRhYmxlKG5ld1RhYmxlTmFtZSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNldFNjaGVtYShuZXdTY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlRXhlY3V0b3Ioe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBBbHRlclRhYmxlTm9kZS5jbG9uZVdpdGhUYWJsZVByb3BzKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBzZXRTY2hlbWE6IElkZW50aWZpZXJOb2RlLmNyZWF0ZShuZXdTY2hlbWEpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhbHRlckNvbHVtbihjb2x1bW4sIGFsdGVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGFsdGVyYXRpb24obmV3IEFsdGVyQ29sdW1uQnVpbGRlcihjb2x1bW4pKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQ29sdW1uQWx0ZXJpbmdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoQ29sdW1uQWx0ZXJhdGlvbih0aGlzLiNwcm9wcy5ub2RlLCBidWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRyb3BDb2x1bW4oY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUNvbHVtbkFsdGVyaW5nQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aENvbHVtbkFsdGVyYXRpb24odGhpcy4jcHJvcHMubm9kZSwgRHJvcENvbHVtbk5vZGUuY3JlYXRlKGNvbHVtbikpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVuYW1lQ29sdW1uKGNvbHVtbiwgbmV3Q29sdW1uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUNvbHVtbkFsdGVyaW5nQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aENvbHVtbkFsdGVyYXRpb24odGhpcy4jcHJvcHMubm9kZSwgUmVuYW1lQ29sdW1uTm9kZS5jcmVhdGUoY29sdW1uLCBuZXdDb2x1bW4pKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFkZENvbHVtbihjb2x1bW5OYW1lLCBkYXRhVHlwZSwgYnVpbGQgPSBub29wKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBidWlsZChuZXcgQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIoQ29sdW1uRGVmaW5pdGlvbk5vZGUuY3JlYXRlKGNvbHVtbk5hbWUsIHBhcnNlRGF0YVR5cGVFeHByZXNzaW9uKGRhdGFUeXBlKSkpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQ29sdW1uQWx0ZXJpbmdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoQ29sdW1uQWx0ZXJhdGlvbih0aGlzLiNwcm9wcy5ub2RlLCBBZGRDb2x1bW5Ob2RlLmNyZWF0ZShidWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtb2RpZnlDb2x1bW4oY29sdW1uTmFtZSwgZGF0YVR5cGUsIGJ1aWxkID0gbm9vcCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gYnVpbGQobmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNyZWF0ZShjb2x1bW5OYW1lLCBwYXJzZURhdGFUeXBlRXhwcmVzc2lvbihkYXRhVHlwZSkpKSk7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUNvbHVtbkFsdGVyaW5nQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aENvbHVtbkFsdGVyYXRpb24odGhpcy4jcHJvcHMubm9kZSwgTW9kaWZ5Q29sdW1uTm9kZS5jcmVhdGUoYnVpbGRlci50b09wZXJhdGlvbk5vZGUoKSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VlIHtAbGluayBDcmVhdGVUYWJsZUJ1aWxkZXIuYWRkVW5pcXVlQ29uc3RyYWludH1cbiAgICAgKi9cbiAgICBhZGRVbmlxdWVDb25zdHJhaW50KGNvbnN0cmFpbnROYW1lLCBjb2x1bW5zLCBidWlsZCA9IG5vb3ApIHtcbiAgICAgICAgY29uc3QgdW5pcXVlQ29uc3RyYWludEJ1aWxkZXIgPSBidWlsZChuZXcgVW5pcXVlQ29uc3RyYWludE5vZGVCdWlsZGVyKFVuaXF1ZUNvbnN0cmFpbnROb2RlLmNyZWF0ZShjb2x1bW5zLCBjb25zdHJhaW50TmFtZSkpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlRXhlY3V0b3Ioe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBBbHRlclRhYmxlTm9kZS5jbG9uZVdpdGhUYWJsZVByb3BzKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBhZGRDb25zdHJhaW50OiBBZGRDb25zdHJhaW50Tm9kZS5jcmVhdGUodW5pcXVlQ29uc3RyYWludEJ1aWxkZXIudG9PcGVyYXRpb25Ob2RlKCkpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZWUge0BsaW5rIENyZWF0ZVRhYmxlQnVpbGRlci5hZGRDaGVja0NvbnN0cmFpbnR9XG4gICAgICovXG4gICAgYWRkQ2hlY2tDb25zdHJhaW50KGNvbnN0cmFpbnROYW1lLCBjaGVja0V4cHJlc3Npb24sIGJ1aWxkID0gbm9vcCkge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50QnVpbGRlciA9IGJ1aWxkKG5ldyBDaGVja0NvbnN0cmFpbnRCdWlsZGVyKENoZWNrQ29uc3RyYWludE5vZGUuY3JlYXRlKGNoZWNrRXhwcmVzc2lvbi50b09wZXJhdGlvbk5vZGUoKSwgY29uc3RyYWludE5hbWUpKSk7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUV4ZWN1dG9yKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoVGFibGVQcm9wcyh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgYWRkQ29uc3RyYWludDogQWRkQ29uc3RyYWludE5vZGUuY3JlYXRlKGNvbnN0cmFpbnRCdWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VlIHtAbGluayBDcmVhdGVUYWJsZUJ1aWxkZXIuYWRkRm9yZWlnbktleUNvbnN0cmFpbnR9XG4gICAgICpcbiAgICAgKiBVbmxpa2Uge0BsaW5rIENyZWF0ZVRhYmxlQnVpbGRlci5hZGRGb3JlaWduS2V5Q29uc3RyYWludH0gdGhpcyBtZXRob2QgcmV0dXJuc1xuICAgICAqIHRoZSBjb25zdHJhaW50IGJ1aWxkZXIgYW5kIGRvZXNuJ3QgdGFrZSBhIGNhbGxiYWNrIGFzIHRoZSBsYXN0IGFyZ3VtZW50LiBUaGlzXG4gICAgICogaXMgYmVjYXVzZSB5b3UgY2FuIG9ubHkgYWRkIG9uZSBjb2x1bW4gcGVyIGBBTFRFUiBUQUJMRWAgcXVlcnkuXG4gICAgICovXG4gICAgYWRkRm9yZWlnbktleUNvbnN0cmFpbnQoY29uc3RyYWludE5hbWUsIGNvbHVtbnMsIHRhcmdldFRhYmxlLCB0YXJnZXRDb2x1bW5zLCBidWlsZCA9IG5vb3ApIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludEJ1aWxkZXIgPSBidWlsZChuZXcgRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyKEZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZS5jcmVhdGUoY29sdW1ucy5tYXAoQ29sdW1uTm9kZS5jcmVhdGUpLCBwYXJzZVRhYmxlKHRhcmdldFRhYmxlKSwgdGFyZ2V0Q29sdW1ucy5tYXAoQ29sdW1uTm9kZS5jcmVhdGUpLCBjb25zdHJhaW50TmFtZSkpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQWRkRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgY29uc3RyYWludEJ1aWxkZXIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZWUge0BsaW5rIENyZWF0ZVRhYmxlQnVpbGRlci5hZGRQcmltYXJ5S2V5Q29uc3RyYWludH1cbiAgICAgKi9cbiAgICBhZGRQcmltYXJ5S2V5Q29uc3RyYWludChjb25zdHJhaW50TmFtZSwgY29sdW1ucywgYnVpbGQgPSBub29wKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRCdWlsZGVyID0gYnVpbGQobmV3IFByaW1hcnlLZXlDb25zdHJhaW50QnVpbGRlcihQcmltYXJ5S2V5Q29uc3RyYWludE5vZGUuY3JlYXRlKGNvbHVtbnMsIGNvbnN0cmFpbnROYW1lKSkpO1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVFeGVjdXRvcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aFRhYmxlUHJvcHModGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGFkZENvbnN0cmFpbnQ6IEFkZENvbnN0cmFpbnROb2RlLmNyZWF0ZShjb25zdHJhaW50QnVpbGRlci50b09wZXJhdGlvbk5vZGUoKSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRyb3BDb25zdHJhaW50KGNvbnN0cmFpbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZURyb3BDb25zdHJhaW50QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aFRhYmxlUHJvcHModGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGRyb3BDb25zdHJhaW50OiBEcm9wQ29uc3RyYWludE5vZGUuY3JlYXRlKGNvbnN0cmFpbnROYW1lKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVuYW1lQ29uc3RyYWludChvbGROYW1lLCBuZXdOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZURyb3BDb25zdHJhaW50QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aFRhYmxlUHJvcHModGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIHJlbmFtZUNvbnN0cmFpbnQ6IFJlbmFtZUNvbnN0cmFpbnROb2RlLmNyZWF0ZShvbGROYW1lLCBuZXdOYW1lKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBhZGQgaW5kZXggdG8gdGFibGUuXG4gICAgICpcbiAgICAgKiAgIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGRiLnNjaGVtYS5hbHRlclRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZEluZGV4KCdwZXJzb25fZW1haWxfaW5kZXgnKVxuICAgICAqICAgLmNvbHVtbignZW1haWwnKVxuICAgICAqICAgLnVuaXF1ZSgpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogYWx0ZXIgdGFibGUgYHBlcnNvbmAgYWRkIHVuaXF1ZSBpbmRleCBgcGVyc29uX2VtYWlsX2luZGV4YCAoYGVtYWlsYClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhZGRJbmRleChpbmRleE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQWRkSW5kZXhCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoVGFibGVQcm9wcyh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgYWRkSW5kZXg6IEFkZEluZGV4Tm9kZS5jcmVhdGUoaW5kZXhOYW1lKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBkcm9wIGluZGV4IGZyb20gdGFibGUuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZGIuc2NoZW1hLmFsdGVyVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuZHJvcEluZGV4KCdwZXJzb25fZW1haWxfaW5kZXgnKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGFsdGVyIHRhYmxlIGBwZXJzb25gIGRyb3AgaW5kZXggYHRlc3RfZmlyc3RfbmFtZV9pbmRleGBcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkcm9wSW5kZXgoaW5kZXhOYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUV4ZWN1dG9yKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoVGFibGVQcm9wcyh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgZHJvcEluZGV4OiBEcm9wSW5kZXhOb2RlLmNyZWF0ZShpbmRleE5hbWUpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDYWxscyB0aGUgZ2l2ZW4gZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuXG4gICAgICpcbiAgICAgKiBTZWUge0BsaW5rIENyZWF0ZVRhYmxlQnVpbGRlci4kY2FsbH1cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBbHRlclRhYmxlQ29sdW1uQWx0ZXJpbmdCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBhbHRlckNvbHVtbihjb2x1bW4sIGFsdGVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGFsdGVyYXRpb24obmV3IEFsdGVyQ29sdW1uQnVpbGRlcihjb2x1bW4pKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQ29sdW1uQWx0ZXJpbmdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoQ29sdW1uQWx0ZXJhdGlvbih0aGlzLiNwcm9wcy5ub2RlLCBidWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRyb3BDb2x1bW4oY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUNvbHVtbkFsdGVyaW5nQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aENvbHVtbkFsdGVyYXRpb24odGhpcy4jcHJvcHMubm9kZSwgRHJvcENvbHVtbk5vZGUuY3JlYXRlKGNvbHVtbikpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVuYW1lQ29sdW1uKGNvbHVtbiwgbmV3Q29sdW1uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUNvbHVtbkFsdGVyaW5nQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aENvbHVtbkFsdGVyYXRpb24odGhpcy4jcHJvcHMubm9kZSwgUmVuYW1lQ29sdW1uTm9kZS5jcmVhdGUoY29sdW1uLCBuZXdDb2x1bW4pKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFkZENvbHVtbihjb2x1bW5OYW1lLCBkYXRhVHlwZSwgYnVpbGQgPSBub29wKSB7XG4gICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBidWlsZChuZXcgQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIoQ29sdW1uRGVmaW5pdGlvbk5vZGUuY3JlYXRlKGNvbHVtbk5hbWUsIHBhcnNlRGF0YVR5cGVFeHByZXNzaW9uKGRhdGFUeXBlKSkpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQ29sdW1uQWx0ZXJpbmdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoQ29sdW1uQWx0ZXJhdGlvbih0aGlzLiNwcm9wcy5ub2RlLCBBZGRDb2x1bW5Ob2RlLmNyZWF0ZShidWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtb2RpZnlDb2x1bW4oY29sdW1uTmFtZSwgZGF0YVR5cGUsIGJ1aWxkID0gbm9vcCkge1xuICAgICAgICBjb25zdCBidWlsZGVyID0gYnVpbGQobmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNyZWF0ZShjb2x1bW5OYW1lLCBwYXJzZURhdGFUeXBlRXhwcmVzc2lvbihkYXRhVHlwZSkpKSk7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUNvbHVtbkFsdGVyaW5nQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aENvbHVtbkFsdGVyYXRpb24odGhpcy4jcHJvcHMubm9kZSwgTW9kaWZ5Q29sdW1uTm9kZS5jcmVhdGUoYnVpbGRlci50b09wZXJhdGlvbk5vZGUoKSkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IudHJhbnNmb3JtUXVlcnkodGhpcy4jcHJvcHMubm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmV4ZWN1dGVRdWVyeSh0aGlzLmNvbXBpbGUoKSk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9hZGQtY29sdW1uLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQWRkQ29sdW1uTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnQWRkQ29sdW1uTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0FkZENvbHVtbk5vZGUnLFxuICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NvbHVtbi1kZWZpbml0aW9uLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBDb2x1bW5Ob2RlIH0gZnJvbSAnLi9jb2x1bW4tbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ29sdW1uRGVmaW5pdGlvbk5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0NvbHVtbkRlZmluaXRpb25Ob2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShjb2x1bW4sIGRhdGFUeXBlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0NvbHVtbkRlZmluaXRpb25Ob2RlJyxcbiAgICAgICAgICAgIGNvbHVtbjogQ29sdW1uTm9kZS5jcmVhdGUoY29sdW1uKSxcbiAgICAgICAgICAgIGRhdGFUeXBlLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aEZyb250TW9kaWZpZXIobm9kZSwgbW9kaWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgZnJvbnRNb2RpZmllcnM6IG5vZGUuZnJvbnRNb2RpZmllcnNcbiAgICAgICAgICAgICAgICA/IGZyZWV6ZShbLi4ubm9kZS5mcm9udE1vZGlmaWVycywgbW9kaWZpZXJdKVxuICAgICAgICAgICAgICAgIDogW21vZGlmaWVyXSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhFbmRNb2RpZmllcihub2RlLCBtb2RpZmllcikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICBlbmRNb2RpZmllcnM6IG5vZGUuZW5kTW9kaWZpZXJzXG4gICAgICAgICAgICAgICAgPyBmcmVlemUoWy4uLm5vZGUuZW5kTW9kaWZpZXJzLCBtb2RpZmllcl0pXG4gICAgICAgICAgICAgICAgOiBbbW9kaWZpZXJdLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aChub2RlLCBwcm9wcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLm5vZGUsXG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kcm9wLWNvbHVtbi1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ29sdW1uTm9kZSB9IGZyb20gJy4vY29sdW1uLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IERyb3BDb2x1bW5Ob2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdEcm9wQ29sdW1uTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0Ryb3BDb2x1bW5Ob2RlJyxcbiAgICAgICAgICAgIGNvbHVtbjogQ29sdW1uTm9kZS5jcmVhdGUoY29sdW1uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9yZW5hbWUtY29sdW1uLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBDb2x1bW5Ob2RlIH0gZnJvbSAnLi9jb2x1bW4tbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUmVuYW1lQ29sdW1uTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnUmVuYW1lQ29sdW1uTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoY29sdW1uLCBuZXdDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnUmVuYW1lQ29sdW1uTm9kZScsXG4gICAgICAgICAgICBjb2x1bW46IENvbHVtbk5vZGUuY3JlYXRlKGNvbHVtbiksXG4gICAgICAgICAgICByZW5hbWVUbzogQ29sdW1uTm9kZS5jcmVhdGUobmV3Q29sdW1uKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jb2x1bW4tZGVmaW5pdGlvbi1idWlsZGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgQ2hlY2tDb25zdHJhaW50Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NoZWNrLWNvbnN0cmFpbnQtbm9kZS5qcyc7XG5pbXBvcnQgeyBSZWZlcmVuY2VzTm9kZSwgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9yZWZlcmVuY2VzLW5vZGUuanMnO1xuaW1wb3J0IHsgU2VsZWN0QWxsTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3NlbGVjdC1hbGwtbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZVN0cmluZ1JlZmVyZW5jZSB9IGZyb20gJy4uL3BhcnNlci9yZWZlcmVuY2UtcGFyc2VyLmpzJztcbmltcG9ydCB7IENvbHVtbkRlZmluaXRpb25Ob2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY29sdW1uLWRlZmluaXRpb24tbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZURlZmF1bHRWYWx1ZUV4cHJlc3Npb24sIH0gZnJvbSAnLi4vcGFyc2VyL2RlZmF1bHQtdmFsdWUtcGFyc2VyLmpzJztcbmltcG9ydCB7IEdlbmVyYXRlZE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9nZW5lcmF0ZWQtbm9kZS5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0VmFsdWVOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvZGVmYXVsdC12YWx1ZS1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlT25Nb2RpZnlGb3JlaWduQWN0aW9uIH0gZnJvbSAnLi4vcGFyc2VyL29uLW1vZGlmeS1hY3Rpb24tcGFyc2VyLmpzJztcbmV4cG9ydCBjbGFzcyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlciB7XG4gICAgI25vZGU7XG4gICAgY29uc3RydWN0b3Iobm9kZSkge1xuICAgICAgICB0aGlzLiNub2RlID0gbm9kZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBgYXV0b19pbmNyZW1lbnRgIG9yIGBhdXRvaW5jcmVtZW50YCB0byB0aGUgY29sdW1uIGRlZmluaXRpb25cbiAgICAgKiBkZXBlbmRpbmcgb24gdGhlIGRpYWxlY3QuXG4gICAgICpcbiAgICAgKiBTb21lIGRpYWxlY3RzIGxpa2UgUG9zdGdyZVNRTCBkb24ndCBzdXBwb3J0IHRoaXMuIE9uIFBvc3RncmVTUUxcbiAgICAgKiB5b3UgY2FuIHVzZSB0aGUgYHNlcmlhbGAgb3IgYGJpZ3NlcmlhbGAgZGF0YSB0eXBlIGluc3RlYWQuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkQ29sdW1uKCdpZCcsICdpbnRlZ2VyJywgY29sID0+IGNvbC5hdXRvSW5jcmVtZW50KCkucHJpbWFyeUtleSgpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSB0YWJsZSBgcGVyc29uYCAoXG4gICAgICogICBgaWRgIGludGVnZXIgcHJpbWFyeSBrZXkgYXV0b19pbmNyZW1lbnRcbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXV0b0luY3JlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwgeyBhdXRvSW5jcmVtZW50OiB0cnVlIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFrZXMgdGhlIGNvbHVtbiBhbiBpZGVudGl0eSBjb2x1bW4uXG4gICAgICpcbiAgICAgKiBUaGlzIG9ubHkgd29ya3Mgb24gc29tZSBkaWFsZWN0cyBsaWtlIE1TIFNRTCBTZXJ2ZXIgKE1TU1FMKS5cbiAgICAgKlxuICAgICAqIEZvciBQb3N0Z3JlU1FMJ3MgYGdlbmVyYXRlZCBhbHdheXMgYXMgaWRlbnRpdHlgIHVzZSB7QGxpbmsgZ2VuZXJhdGVkQWx3YXlzQXNJZGVudGl0eX0uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkQ29sdW1uKCdpZCcsICdpbnRlZ2VyJywgY29sID0+IGNvbC5pZGVudGl0eSgpLnByaW1hcnlLZXkoKSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNU1NRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGFibGUgXCJwZXJzb25cIiAoXG4gICAgICogICBcImlkXCIgaW50ZWdlciBpZGVudGl0eSBwcmltYXJ5IGtleVxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBpZGVudGl0eSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwgeyBpZGVudGl0eTogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBjb2x1bW4gdGhlIHByaW1hcnkga2V5LlxuICAgICAqXG4gICAgICogSWYgeW91IHdhbnQgdG8gc3BlY2lmeSBhIGNvbXBvc2l0ZSBwcmltYXJ5IGtleSB1c2UgdGhlXG4gICAgICoge0BsaW5rIENyZWF0ZVRhYmxlQnVpbGRlci5hZGRQcmltYXJ5S2V5Q29uc3RyYWludH0gbWV0aG9kLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignaWQnLCAnaW50ZWdlcicsIGNvbCA9PiBjb2wucHJpbWFyeUtleSgpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSB0YWJsZSBgcGVyc29uYCAoXG4gICAgICogICBgaWRgIGludGVnZXIgcHJpbWFyeSBrZXlcbiAgICAgKiApXG4gICAgICovXG4gICAgcHJpbWFyeUtleSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwgeyBwcmltYXJ5S2V5OiB0cnVlIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgZm9yIHRoZSBjb2x1bW4uXG4gICAgICpcbiAgICAgKiBJZiB5b3VyIGRhdGFiYXNlIGVuZ2luZSBkb2Vzbid0IHN1cHBvcnQgZm9yZWlnbiBrZXkgY29uc3RyYWludHMgaW4gdGhlXG4gICAgICogY29sdW1uIGRlZmluaXRpb24gKGxpa2UgTXlTUUwgNSkgeW91IG5lZWQgdG8gY2FsbCB0aGUgdGFibGUgbGV2ZWxcbiAgICAgKiB7QGxpbmsgQ3JlYXRlVGFibGVCdWlsZGVyLmFkZEZvcmVpZ25LZXlDb25zdHJhaW50fSBtZXRob2QgaW5zdGVhZC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGV0JylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ293bmVyX2lkJywgJ2ludGVnZXInLCAoY29sKSA9PiBjb2wucmVmZXJlbmNlcygncGVyc29uLmlkJykpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGFibGUgXCJwZXRcIiAoXG4gICAgICogICBcIm93bmVyX2lkXCIgaW50ZWdlciByZWZlcmVuY2VzIFwicGVyc29uXCIgKFwiaWRcIilcbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcmVmZXJlbmNlcyhyZWYpIHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlcyA9IHBhcnNlU3RyaW5nUmVmZXJlbmNlKHJlZik7XG4gICAgICAgIGlmICghcmVmZXJlbmNlcy50YWJsZSB8fCBTZWxlY3RBbGxOb2RlLmlzKHJlZmVyZW5jZXMuY29sdW1uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGNhbGwgcmVmZXJlbmNlcygnJHtyZWZ9JykuIFRoZSByZWZlcmVuY2UgbXVzdCBoYXZlIGZvcm1hdCB0YWJsZS5jb2x1bW4gb3Igc2NoZW1hLnRhYmxlLmNvbHVtbmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIoQ29sdW1uRGVmaW5pdGlvbk5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHtcbiAgICAgICAgICAgIHJlZmVyZW5jZXM6IFJlZmVyZW5jZXNOb2RlLmNyZWF0ZShyZWZlcmVuY2VzLnRhYmxlLCBbXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlcy5jb2x1bW4sXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGFuIGBvbiBkZWxldGVgIGNvbnN0cmFpbnQgZm9yIHRoZSBmb3JlaWduIGtleSBjb2x1bW4uXG4gICAgICpcbiAgICAgKiBJZiB5b3VyIGRhdGFiYXNlIGVuZ2luZSBkb2Vzbid0IHN1cHBvcnQgZm9yZWlnbiBrZXkgY29uc3RyYWludHMgaW4gdGhlXG4gICAgICogY29sdW1uIGRlZmluaXRpb24gKGxpa2UgTXlTUUwgNSkgeW91IG5lZWQgdG8gY2FsbCB0aGUgdGFibGUgbGV2ZWxcbiAgICAgKiB7QGxpbmsgQ3JlYXRlVGFibGVCdWlsZGVyLmFkZEZvcmVpZ25LZXlDb25zdHJhaW50fSBtZXRob2QgaW5zdGVhZC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGV0JylcbiAgICAgKiAgIC5hZGRDb2x1bW4oXG4gICAgICogICAgICdvd25lcl9pZCcsXG4gICAgICogICAgICdpbnRlZ2VyJyxcbiAgICAgKiAgICAgKGNvbCkgPT4gY29sLnJlZmVyZW5jZXMoJ3BlcnNvbi5pZCcpLm9uRGVsZXRlKCdjYXNjYWRlJylcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSB0YWJsZSBcInBldFwiIChcbiAgICAgKiAgIFwib3duZXJfaWRcIiBpbnRlZ2VyIHJlZmVyZW5jZXMgXCJwZXJzb25cIiAoXCJpZFwiKSBvbiBkZWxldGUgY2FzY2FkZVxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBvbkRlbGV0ZShvbkRlbGV0ZSkge1xuICAgICAgICBpZiAoIXRoaXMuI25vZGUucmVmZXJlbmNlcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvbiBkZWxldGUgY29uc3RyYWludCBjYW4gb25seSBiZSBhZGRlZCBmb3IgZm9yZWlnbiBrZXlzJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwge1xuICAgICAgICAgICAgcmVmZXJlbmNlczogUmVmZXJlbmNlc05vZGUuY2xvbmVXaXRoT25EZWxldGUodGhpcy4jbm9kZS5yZWZlcmVuY2VzLCBwYXJzZU9uTW9kaWZ5Rm9yZWlnbkFjdGlvbihvbkRlbGV0ZSkpLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gYG9uIHVwZGF0ZWAgY29uc3RyYWludCBmb3IgdGhlIGZvcmVpZ24ga2V5IGNvbHVtbi5cbiAgICAgKlxuICAgICAqIElmIHlvdXIgZGF0YWJhc2UgZW5naW5lIGRvZXNuJ3Qgc3VwcG9ydCBmb3JlaWduIGtleSBjb25zdHJhaW50cyBpbiB0aGVcbiAgICAgKiBjb2x1bW4gZGVmaW5pdGlvbiAobGlrZSBNeVNRTCA1KSB5b3UgbmVlZCB0byBjYWxsIHRoZSB0YWJsZSBsZXZlbFxuICAgICAqIHtAbGluayBDcmVhdGVUYWJsZUJ1aWxkZXIuYWRkRm9yZWlnbktleUNvbnN0cmFpbnR9IG1ldGhvZCBpbnN0ZWFkLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXQnKVxuICAgICAqICAgLmFkZENvbHVtbihcbiAgICAgKiAgICAgJ293bmVyX2lkJyxcbiAgICAgKiAgICAgJ2ludGVnZXInLFxuICAgICAqICAgICAoY29sKSA9PiBjb2wucmVmZXJlbmNlcygncGVyc29uLmlkJykub25VcGRhdGUoJ2Nhc2NhZGUnKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogY3JlYXRlIHRhYmxlIFwicGV0XCIgKFxuICAgICAqICAgXCJvd25lcl9pZFwiIGludGVnZXIgcmVmZXJlbmNlcyBcInBlcnNvblwiIChcImlkXCIpIG9uIHVwZGF0ZSBjYXNjYWRlXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG9uVXBkYXRlKG9uVXBkYXRlKSB7XG4gICAgICAgIGlmICghdGhpcy4jbm9kZS5yZWZlcmVuY2VzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ29uIHVwZGF0ZSBjb25zdHJhaW50IGNhbiBvbmx5IGJlIGFkZGVkIGZvciBmb3JlaWduIGtleXMnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7XG4gICAgICAgICAgICByZWZlcmVuY2VzOiBSZWZlcmVuY2VzTm9kZS5jbG9uZVdpdGhPblVwZGF0ZSh0aGlzLiNub2RlLnJlZmVyZW5jZXMsIHBhcnNlT25Nb2RpZnlGb3JlaWduQWN0aW9uKG9uVXBkYXRlKSksXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIHVuaXF1ZSBjb25zdHJhaW50IGZvciB0aGUgY29sdW1uLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignZW1haWwnLCAndmFyY2hhcigyNTUpJywgY29sID0+IGNvbC51bmlxdWUoKSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGFibGUgYHBlcnNvbmAgKFxuICAgICAqICAgYGVtYWlsYCB2YXJjaGFyKDI1NSkgdW5pcXVlXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHVuaXF1ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwgeyB1bmlxdWU6IHRydWUgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgYG5vdCBudWxsYCBjb25zdHJhaW50IGZvciB0aGUgY29sdW1uLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignZmlyc3RfbmFtZScsICd2YXJjaGFyKDI1NSknLCBjb2wgPT4gY29sLm5vdE51bGwoKSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGFibGUgYHBlcnNvbmAgKFxuICAgICAqICAgYGZpcnN0X25hbWVgIHZhcmNoYXIoMjU1KSBub3QgbnVsbFxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBub3ROdWxsKCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7IG5vdE51bGw6IHRydWUgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgYHVuc2lnbmVkYCBtb2RpZmllciBmb3IgdGhlIGNvbHVtbi5cbiAgICAgKlxuICAgICAqIFRoaXMgb25seSB3b3JrcyBvbiBzb21lIGRpYWxlY3RzIGxpa2UgTXlTUUwuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkQ29sdW1uKCdhZ2UnLCAnaW50ZWdlcicsIGNvbCA9PiBjb2wudW5zaWduZWQoKSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGFibGUgYHBlcnNvbmAgKFxuICAgICAqICAgYGFnZWAgaW50ZWdlciB1bnNpZ25lZFxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB1bnNpZ25lZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwgeyB1bnNpZ25lZDogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBkZWZhdWx0IHZhbHVlIGNvbnN0cmFpbnQgZm9yIHRoZSBjb2x1bW4uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BldCcpXG4gICAgICogICAuYWRkQ29sdW1uKCdudW1iZXJfb2ZfbGVncycsICdpbnRlZ2VyJywgKGNvbCkgPT4gY29sLmRlZmF1bHRUbyg0KSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGFibGUgYHBldGAgKFxuICAgICAqICAgYG51bWJlcl9vZl9sZWdzYCBpbnRlZ2VyIGRlZmF1bHQgNFxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFZhbHVlcyBwYXNzZWQgdG8gYGRlZmF1bHRUb2AgYXJlIGludGVycHJldGVkIGFzIHZhbHVlIGxpdGVyYWxzIGJ5IGRlZmF1bHQuIFlvdSBjYW4gZGVmaW5lXG4gICAgICogYW4gYXJiaXRyYXJ5IFNRTCBleHByZXNzaW9uIHVzaW5nIHRoZSB7QGxpbmsgc3FsfSB0ZW1wbGF0ZSB0YWc6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7XHUwMEEwc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BldCcpXG4gICAgICogICAuYWRkQ29sdW1uKFxuICAgICAqICAgICAnY3JlYXRlZF9hdCcsXG4gICAgICogICAgICd0aW1lc3RhbXAnLFxuICAgICAqICAgICAoY29sKSA9PiBjb2wuZGVmYXVsdFRvKHNxbGBDVVJSRU5UX1RJTUVTVEFNUGApXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogY3JlYXRlIHRhYmxlIGBwZXRgIChcbiAgICAgKiAgIGBjcmVhdGVkX2F0YCB0aW1lc3RhbXAgZGVmYXVsdCBDVVJSRU5UX1RJTUVTVEFNUFxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBkZWZhdWx0VG8odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwge1xuICAgICAgICAgICAgZGVmYXVsdFRvOiBEZWZhdWx0VmFsdWVOb2RlLmNyZWF0ZShwYXJzZURlZmF1bHRWYWx1ZUV4cHJlc3Npb24odmFsdWUpKSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgY2hlY2sgY29uc3RyYWludCBmb3IgdGhlIGNvbHVtbi5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQge1x1MDBBMHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXQnKVxuICAgICAqICAgLmFkZENvbHVtbignbnVtYmVyX29mX2xlZ3MnLCAnaW50ZWdlcicsIChjb2wpID0+XG4gICAgICogICAgIGNvbC5jaGVjayhzcWxgbnVtYmVyX29mX2xlZ3MgPCA1YClcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGFibGUgYHBldGAgKFxuICAgICAqICAgYG51bWJlcl9vZl9sZWdzYCBpbnRlZ2VyIGNoZWNrIChudW1iZXJfb2ZfbGVncyA8IDUpXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNoZWNrKGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwge1xuICAgICAgICAgICAgY2hlY2s6IENoZWNrQ29uc3RyYWludE5vZGUuY3JlYXRlKGV4cHJlc3Npb24udG9PcGVyYXRpb25Ob2RlKCkpLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBjb2x1bW4gYSBnZW5lcmF0ZWQgY29sdW1uIHVzaW5nIGEgYGdlbmVyYXRlZCBhbHdheXMgYXNgIHN0YXRlbWVudC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQge1x1MDBBMHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignZnVsbF9uYW1lJywgJ3ZhcmNoYXIoMjU1KScsXG4gICAgICogICAgIChjb2wpID0+IGNvbC5nZW5lcmF0ZWRBbHdheXNBcyhzcWxgY29uY2F0KGZpcnN0X25hbWUsICcgJywgbGFzdF9uYW1lKWApXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogY3JlYXRlIHRhYmxlIGBwZXJzb25gIChcbiAgICAgKiAgIGBmdWxsX25hbWVgIHZhcmNoYXIoMjU1KSBnZW5lcmF0ZWQgYWx3YXlzIGFzIChjb25jYXQoZmlyc3RfbmFtZSwgJyAnLCBsYXN0X25hbWUpKVxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBnZW5lcmF0ZWRBbHdheXNBcyhleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIoQ29sdW1uRGVmaW5pdGlvbk5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHtcbiAgICAgICAgICAgIGdlbmVyYXRlZDogR2VuZXJhdGVkTm9kZS5jcmVhdGVXaXRoRXhwcmVzc2lvbihleHByZXNzaW9uLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBgZ2VuZXJhdGVkIGFsd2F5cyBhcyBpZGVudGl0eWAgc3BlY2lmaWVyLlxuICAgICAqXG4gICAgICogVGhpcyBvbmx5IHdvcmtzIG9uIHNvbWUgZGlhbGVjdHMgbGlrZSBQb3N0Z3JlU1FMLlxuICAgICAqXG4gICAgICogRm9yIE1TIFNRTCBTZXJ2ZXIgKE1TU1FMKSdzIGlkZW50aXR5IGNvbHVtbiB1c2Uge0BsaW5rIGlkZW50aXR5fS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2lkJywgJ2ludGVnZXInLCBjb2wgPT4gY29sLmdlbmVyYXRlZEFsd2F5c0FzSWRlbnRpdHkoKS5wcmltYXJ5S2V5KCkpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGFibGUgXCJwZXJzb25cIiAoXG4gICAgICogICBcImlkXCIgaW50ZWdlciBnZW5lcmF0ZWQgYWx3YXlzIGFzIGlkZW50aXR5IHByaW1hcnkga2V5XG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGdlbmVyYXRlZEFsd2F5c0FzSWRlbnRpdHkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIoQ29sdW1uRGVmaW5pdGlvbk5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHtcbiAgICAgICAgICAgIGdlbmVyYXRlZDogR2VuZXJhdGVkTm9kZS5jcmVhdGUoeyBpZGVudGl0eTogdHJ1ZSwgYWx3YXlzOiB0cnVlIH0pLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIGBnZW5lcmF0ZWQgYnkgZGVmYXVsdCBhcyBpZGVudGl0eWAgc3BlY2lmaWVyIG9uIHN1cHBvcnRlZCBkaWFsZWN0cy5cbiAgICAgKlxuICAgICAqIFRoaXMgb25seSB3b3JrcyBvbiBzb21lIGRpYWxlY3RzIGxpa2UgUG9zdGdyZVNRTC5cbiAgICAgKlxuICAgICAqIEZvciBNUyBTUUwgU2VydmVyIChNU1NRTCkncyBpZGVudGl0eSBjb2x1bW4gdXNlIHtAbGluayBpZGVudGl0eX0uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkQ29sdW1uKCdpZCcsICdpbnRlZ2VyJywgY29sID0+IGNvbC5nZW5lcmF0ZWRCeURlZmF1bHRBc0lkZW50aXR5KCkucHJpbWFyeUtleSgpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogY3JlYXRlIHRhYmxlIFwicGVyc29uXCIgKFxuICAgICAqICAgXCJpZFwiIGludGVnZXIgZ2VuZXJhdGVkIGJ5IGRlZmF1bHQgYXMgaWRlbnRpdHkgcHJpbWFyeSBrZXlcbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICovXG4gICAgZ2VuZXJhdGVkQnlEZWZhdWx0QXNJZGVudGl0eSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwge1xuICAgICAgICAgICAgZ2VuZXJhdGVkOiBHZW5lcmF0ZWROb2RlLmNyZWF0ZSh7IGlkZW50aXR5OiB0cnVlLCBieURlZmF1bHQ6IHRydWUgfSksXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFrZXMgYSBnZW5lcmF0ZWQgY29sdW1uIHN0b3JlZCBpbnN0ZWFkIG9mIHZpcnR1YWwuIFRoaXMgbWV0aG9kIGNhbiBvbmx5XG4gICAgICogYmUgdXNlZCB3aXRoIHtAbGluayBnZW5lcmF0ZWRBbHdheXNBc31cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2Z1bGxfbmFtZScsICd2YXJjaGFyKDI1NSknLCAoY29sKSA9PiBjb2xcbiAgICAgKiAgICAgLmdlbmVyYXRlZEFsd2F5c0FzKHNxbGBjb25jYXQoZmlyc3RfbmFtZSwgJyAnLCBsYXN0X25hbWUpYClcbiAgICAgKiAgICAgLnN0b3JlZCgpXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogY3JlYXRlIHRhYmxlIGBwZXJzb25gIChcbiAgICAgKiAgIGBmdWxsX25hbWVgIHZhcmNoYXIoMjU1KSBnZW5lcmF0ZWQgYWx3YXlzIGFzIChjb25jYXQoZmlyc3RfbmFtZSwgJyAnLCBsYXN0X25hbWUpKSBzdG9yZWRcbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICovXG4gICAgc3RvcmVkKCkge1xuICAgICAgICBpZiAoIXRoaXMuI25vZGUuZ2VuZXJhdGVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0b3JlZCgpIGNhbiBvbmx5IGJlIGNhbGxlZCBhZnRlciBnZW5lcmF0ZWRBbHdheXNBcycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIoQ29sdW1uRGVmaW5pdGlvbk5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHtcbiAgICAgICAgICAgIGdlbmVyYXRlZDogR2VuZXJhdGVkTm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZS5nZW5lcmF0ZWQsIHtcbiAgICAgICAgICAgICAgICBzdG9yZWQ6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZCBhbnkgYWRkaXRpb25hbCBTUUwgcmlnaHQgYWZ0ZXIgdGhlIGNvbHVtbidzIGRhdGEgdHlwZS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2lkJywgJ2ludGVnZXInLCBjb2wgPT4gY29sLnByaW1hcnlLZXkoKSlcbiAgICAgKiAgIC5hZGRDb2x1bW4oXG4gICAgICogICAgICdmaXJzdF9uYW1lJyxcbiAgICAgKiAgICAgJ3ZhcmNoYXIoMzYpJyxcbiAgICAgKiAgICAgKGNvbCkgPT4gY29sLm1vZGlmeUZyb250KHNxbGBjb2xsYXRlIHV0ZjhtYjRfZ2VuZXJhbF9jaWApLm5vdE51bGwoKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSB0YWJsZSBgcGVyc29uYCAoXG4gICAgICogICBgaWRgIGludGVnZXIgcHJpbWFyeSBrZXksXG4gICAgICogICBgZmlyc3RfbmFtZWAgdmFyY2hhcigzNikgY29sbGF0ZSB1dGY4bWI0X2dlbmVyYWxfY2kgbm90IG51bGxcbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbW9kaWZ5RnJvbnQobW9kaWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jbG9uZVdpdGhGcm9udE1vZGlmaWVyKHRoaXMuI25vZGUsIG1vZGlmaWVyLnRvT3BlcmF0aW9uTm9kZSgpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYG51bGxzIG5vdCBkaXN0aW5jdGAgc3BlY2lmaWVyLlxuICAgICAqIFNob3VsZCBiZSB1c2VkIHdpdGggYHVuaXF1ZWAgY29uc3RyYWludC5cbiAgICAgKlxuICAgICAqIFRoaXMgb25seSB3b3JrcyBvbiBzb21lIGRpYWxlY3RzIGxpa2UgUG9zdGdyZVNRTC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2lkJywgJ2ludGVnZXInLCBjb2wgPT4gY29sLnByaW1hcnlLZXkoKSlcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2ZpcnN0X25hbWUnLCAndmFyY2hhcigzMCknLCBjb2wgPT4gY29sLnVuaXF1ZSgpLm51bGxzTm90RGlzdGluY3QoKSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSB0YWJsZSBcInBlcnNvblwiIChcbiAgICAgKiAgIFwiaWRcIiBpbnRlZ2VyIHByaW1hcnkga2V5LFxuICAgICAqICAgXCJmaXJzdF9uYW1lXCIgdmFyY2hhcigzMCkgdW5pcXVlIG51bGxzIG5vdCBkaXN0aW5jdFxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBudWxsc05vdERpc3RpbmN0KCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7IG51bGxzTm90RGlzdGluY3Q6IHRydWUgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIGBpZiBub3QgZXhpc3RzYCBzcGVjaWZpZXIuIFRoaXMgb25seSB3b3JrcyBmb3IgUG9zdGdyZVNRTC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5hbHRlclRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignZW1haWwnLCAndmFyY2hhcigyNTUpJywgY29sID0+IGNvbC51bmlxdWUoKS5pZk5vdEV4aXN0cygpKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKFBvc3RncmVTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogYWx0ZXIgdGFibGUgXCJwZXJzb25cIiBhZGQgY29sdW1uIGlmIG5vdCBleGlzdHMgXCJlbWFpbFwiIHZhcmNoYXIoMjU1KSB1bmlxdWVcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBpZk5vdEV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlcihDb2x1bW5EZWZpbml0aW9uTm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwgeyBpZk5vdEV4aXN0czogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWRkIGFueSBhZGRpdGlvbmFsIFNRTCB0byB0aGUgZW5kIG9mIHRoZSBjb2x1bW4gZGVmaW5pdGlvbi5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2lkJywgJ2ludGVnZXInLCBjb2wgPT4gY29sLnByaW1hcnlLZXkoKSlcbiAgICAgKiAgIC5hZGRDb2x1bW4oXG4gICAgICogICAgICdhZ2UnLFxuICAgICAqICAgICAnaW50ZWdlcicsXG4gICAgICogICAgIGNvbCA9PiBjb2wudW5zaWduZWQoKVxuICAgICAqICAgICAgIC5ub3ROdWxsKClcbiAgICAgKiAgICAgICAubW9kaWZ5RW5kKHNxbGBjb21tZW50ICR7c3FsLmxpdCgnaXQgaXMgbm90IHBvbGl0ZSB0byBhc2sgYSB3b21hbiBoZXIgYWdlJyl9YClcbiAgICAgKiAgIClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGFibGUgYHBlcnNvbmAgKFxuICAgICAqICAgYGlkYCBpbnRlZ2VyIHByaW1hcnkga2V5LFxuICAgICAqICAgYGFnZWAgaW50ZWdlciB1bnNpZ25lZCBub3QgbnVsbCBjb21tZW50ICdpdCBpcyBub3QgcG9saXRlIHRvIGFzayBhIHdvbWFuIGhlciBhZ2UnXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG1vZGlmeUVuZChtb2RpZmllcikge1xuICAgICAgICByZXR1cm4gbmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNsb25lV2l0aEVuZE1vZGlmaWVyKHRoaXMuI25vZGUsIG1vZGlmaWVyLnRvT3BlcmF0aW9uTm9kZSgpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbm9kZTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NoZWNrLWNvbnN0cmFpbnQtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IElkZW50aWZpZXJOb2RlIH0gZnJvbSAnLi9pZGVudGlmaWVyLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENoZWNrQ29uc3RyYWludE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0NoZWNrQ29uc3RyYWludE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGV4cHJlc3Npb24sIGNvbnN0cmFpbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0NoZWNrQ29uc3RyYWludE5vZGUnLFxuICAgICAgICAgICAgZXhwcmVzc2lvbixcbiAgICAgICAgICAgIG5hbWU6IGNvbnN0cmFpbnROYW1lID8gSWRlbnRpZmllck5vZGUuY3JlYXRlKGNvbnN0cmFpbnROYW1lKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9yZWZlcmVuY2VzLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgY29uc3QgT05fTU9ESUZZX0ZPUkVJR05fQUNUSU9OUyA9IFtcbiAgICAnbm8gYWN0aW9uJyxcbiAgICAncmVzdHJpY3QnLFxuICAgICdjYXNjYWRlJyxcbiAgICAnc2V0IG51bGwnLFxuICAgICdzZXQgZGVmYXVsdCcsXG5dO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IFJlZmVyZW5jZXNOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdSZWZlcmVuY2VzTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUodGFibGUsIGNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnUmVmZXJlbmNlc05vZGUnLFxuICAgICAgICAgICAgdGFibGUsXG4gICAgICAgICAgICBjb2x1bW5zOiBmcmVlemUoWy4uLmNvbHVtbnNdKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhPbkRlbGV0ZShyZWZlcmVuY2VzLCBvbkRlbGV0ZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLnJlZmVyZW5jZXMsXG4gICAgICAgICAgICBvbkRlbGV0ZSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGhPblVwZGF0ZShyZWZlcmVuY2VzLCBvblVwZGF0ZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLnJlZmVyZW5jZXMsXG4gICAgICAgICAgICBvblVwZGF0ZSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kZWZhdWx0LXZhbHVlLXBhcnNlci5kLnRzXCIgLz5cbmltcG9ydCB7IGlzT3BlcmF0aW9uTm9kZVNvdXJjZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXNvdXJjZS5qcyc7XG5pbXBvcnQgeyBWYWx1ZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS92YWx1ZS1ub2RlLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURlZmF1bHRWYWx1ZUV4cHJlc3Npb24odmFsdWUpIHtcbiAgICByZXR1cm4gaXNPcGVyYXRpb25Ob2RlU291cmNlKHZhbHVlKVxuICAgICAgICA/IHZhbHVlLnRvT3BlcmF0aW9uTm9kZSgpXG4gICAgICAgIDogVmFsdWVOb2RlLmNyZWF0ZUltbWVkaWF0ZSh2YWx1ZSk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2dlbmVyYXRlZC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmVyYXRlZE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0dlbmVyYXRlZE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdHZW5lcmF0ZWROb2RlJyxcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjcmVhdGVXaXRoRXhwcmVzc2lvbihleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0dlbmVyYXRlZE5vZGUnLFxuICAgICAgICAgICAgYWx3YXlzOiB0cnVlLFxuICAgICAgICAgICAgZXhwcmVzc2lvbixcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGgobm9kZSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kZWZhdWx0LXZhbHVlLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdFZhbHVlTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnRGVmYXVsdFZhbHVlTm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0RlZmF1bHRWYWx1ZU5vZGUnLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL29uLW1vZGlmeS1hY3Rpb24tcGFyc2VyLmQudHNcIiAvPlxuaW1wb3J0IHsgT05fTU9ESUZZX0ZPUkVJR05fQUNUSU9OUywgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9yZWZlcmVuY2VzLW5vZGUuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT25Nb2RpZnlGb3JlaWduQWN0aW9uKGFjdGlvbikge1xuICAgIGlmIChPTl9NT0RJRllfRk9SRUlHTl9BQ1RJT05TLmluY2x1ZGVzKGFjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIE9uTW9kaWZ5Rm9yZWlnbkFjdGlvbiAke2FjdGlvbn1gKTtcbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vbW9kaWZ5LWNvbHVtbi1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IE1vZGlmeUNvbHVtbk5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ01vZGlmeUNvbHVtbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdNb2RpZnlDb2x1bW5Ob2RlJyxcbiAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9mb3JlaWduLWtleS1jb25zdHJhaW50LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBGb3JlaWduS2V5Q29uc3RyYWludE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9mb3JlaWduLWtleS1jb25zdHJhaW50LW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VPbk1vZGlmeUZvcmVpZ25BY3Rpb24gfSBmcm9tICcuLi9wYXJzZXIvb24tbW9kaWZ5LWFjdGlvbi1wYXJzZXIuanMnO1xuZXhwb3J0IGNsYXNzIEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlciB7XG4gICAgI25vZGU7XG4gICAgY29uc3RydWN0b3Iobm9kZSkge1xuICAgICAgICB0aGlzLiNub2RlID0gbm9kZTtcbiAgICB9XG4gICAgb25EZWxldGUob25EZWxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIoRm9yZWlnbktleUNvbnN0cmFpbnROb2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7XG4gICAgICAgICAgICBvbkRlbGV0ZTogcGFyc2VPbk1vZGlmeUZvcmVpZ25BY3Rpb24ob25EZWxldGUpLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIG9uVXBkYXRlKG9uVXBkYXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyKEZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwge1xuICAgICAgICAgICAgb25VcGRhdGU6IHBhcnNlT25Nb2RpZnlGb3JlaWduQWN0aW9uKG9uVXBkYXRlKSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBkZWZlcnJhYmxlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlcihGb3JlaWduS2V5Q29uc3RyYWludE5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHsgZGVmZXJyYWJsZTogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIG5vdERlZmVycmFibGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyKEZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwgeyBkZWZlcnJhYmxlOiBmYWxzZSB9KSk7XG4gICAgfVxuICAgIGluaXRpYWxseURlZmVycmVkKCkge1xuICAgICAgICByZXR1cm4gbmV3IEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlcihGb3JlaWduS2V5Q29uc3RyYWludE5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHtcbiAgICAgICAgICAgIGluaXRpYWxseURlZmVycmVkOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGluaXRpYWxseUltbWVkaWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIoRm9yZWlnbktleUNvbnN0cmFpbnROb2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7XG4gICAgICAgICAgICBpbml0aWFsbHlEZWZlcnJlZDogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNub2RlO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZm9yZWlnbi1rZXktY29uc3RyYWludC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL2lkZW50aWZpZXItbm9kZS5qcyc7XG5pbXBvcnQgeyBSZWZlcmVuY2VzTm9kZSB9IGZyb20gJy4vcmVmZXJlbmNlcy1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBGb3JlaWduS2V5Q29uc3RyYWludE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0ZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUoc291cmNlQ29sdW1ucywgdGFyZ2V0VGFibGUsIHRhcmdldENvbHVtbnMsIGNvbnN0cmFpbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0ZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZScsXG4gICAgICAgICAgICBjb2x1bW5zOiBzb3VyY2VDb2x1bW5zLFxuICAgICAgICAgICAgcmVmZXJlbmNlczogUmVmZXJlbmNlc05vZGUuY3JlYXRlKHRhcmdldFRhYmxlLCB0YXJnZXRDb2x1bW5zKSxcbiAgICAgICAgICAgIG5hbWU6IGNvbnN0cmFpbnROYW1lID8gSWRlbnRpZmllck5vZGUuY3JlYXRlKGNvbnN0cmFpbnROYW1lKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGgobm9kZSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vYWRkLWNvbnN0cmFpbnQtbm9kZS5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBBZGRDb25zdHJhaW50Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnQWRkQ29uc3RyYWludE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQWRkQ29uc3RyYWludE5vZGUnLFxuICAgICAgICAgICAgY29uc3RyYWludCxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi91bmlxdWUtY29uc3RyYWludC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ29sdW1uTm9kZSB9IGZyb20gJy4vY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL2lkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgVW5pcXVlQ29uc3RyYWludE5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ1VuaXF1ZUNvbnN0cmFpbnROb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShjb2x1bW5zLCBjb25zdHJhaW50TmFtZSwgbnVsbHNOb3REaXN0aW5jdCkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdVbmlxdWVDb25zdHJhaW50Tm9kZScsXG4gICAgICAgICAgICBjb2x1bW5zOiBmcmVlemUoY29sdW1ucy5tYXAoQ29sdW1uTm9kZS5jcmVhdGUpKSxcbiAgICAgICAgICAgIG5hbWU6IGNvbnN0cmFpbnROYW1lID8gSWRlbnRpZmllck5vZGUuY3JlYXRlKGNvbnN0cmFpbnROYW1lKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG51bGxzTm90RGlzdGluY3QsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoKG5vZGUsIHByb3BzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Ryb3AtY29uc3RyYWludC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL2lkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgRHJvcENvbnN0cmFpbnROb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdEcm9wQ29uc3RyYWludE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGNvbnN0cmFpbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0Ryb3BDb25zdHJhaW50Tm9kZScsXG4gICAgICAgICAgICBjb25zdHJhaW50TmFtZTogSWRlbnRpZmllck5vZGUuY3JlYXRlKGNvbnN0cmFpbnROYW1lKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGgoZHJvcENvbnN0cmFpbnQsIHByb3BzKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uZHJvcENvbnN0cmFpbnQsXG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9hbHRlci1jb2x1bW4tYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IEFsdGVyQ29sdW1uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2FsdGVyLWNvbHVtbi1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlRGF0YVR5cGVFeHByZXNzaW9uLCB9IGZyb20gJy4uL3BhcnNlci9kYXRhLXR5cGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlRGVmYXVsdFZhbHVlRXhwcmVzc2lvbiwgfSBmcm9tICcuLi9wYXJzZXIvZGVmYXVsdC12YWx1ZS1wYXJzZXIuanMnO1xuZXhwb3J0IGNsYXNzIEFsdGVyQ29sdW1uQnVpbGRlciB7XG4gICAgI2NvbHVtbjtcbiAgICBjb25zdHJ1Y3Rvcihjb2x1bW4pIHtcbiAgICAgICAgdGhpcy4jY29sdW1uID0gY29sdW1uO1xuICAgIH1cbiAgICBzZXREYXRhVHlwZShkYXRhVHlwZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyZWRDb2x1bW5CdWlsZGVyKEFsdGVyQ29sdW1uTm9kZS5jcmVhdGUodGhpcy4jY29sdW1uLCAnZGF0YVR5cGUnLCBwYXJzZURhdGFUeXBlRXhwcmVzc2lvbihkYXRhVHlwZSkpKTtcbiAgICB9XG4gICAgc2V0RGVmYXVsdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyZWRDb2x1bW5CdWlsZGVyKEFsdGVyQ29sdW1uTm9kZS5jcmVhdGUodGhpcy4jY29sdW1uLCAnc2V0RGVmYXVsdCcsIHBhcnNlRGVmYXVsdFZhbHVlRXhwcmVzc2lvbih2YWx1ZSkpKTtcbiAgICB9XG4gICAgZHJvcERlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJlZENvbHVtbkJ1aWxkZXIoQWx0ZXJDb2x1bW5Ob2RlLmNyZWF0ZSh0aGlzLiNjb2x1bW4sICdkcm9wRGVmYXVsdCcsIHRydWUpKTtcbiAgICB9XG4gICAgc2V0Tm90TnVsbCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlcmVkQ29sdW1uQnVpbGRlcihBbHRlckNvbHVtbk5vZGUuY3JlYXRlKHRoaXMuI2NvbHVtbiwgJ3NldE5vdE51bGwnLCB0cnVlKSk7XG4gICAgfVxuICAgIGRyb3BOb3ROdWxsKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyZWRDb2x1bW5CdWlsZGVyKEFsdGVyQ29sdW1uTm9kZS5jcmVhdGUodGhpcy4jY29sdW1uLCAnZHJvcE5vdE51bGwnLCB0cnVlKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG59XG4vKipcbiAqIEFsbG93cyB1cyB0byBmb3JjZSBjb25zdW1lcnMgdG8gZG8gZXhhY3RseSBvbmUgYWx0ZXJhdGlvbiB0byBhIGNvbHVtbi5cbiAqXG4gKiBPbmUgY2Fubm90IGRvIG5vIGFsdGVyYXRpb25zOlxuICpcbiAqIGBgYHRzXG4gKiBhd2FpdCBkYi5zY2hlbWFcbiAqICAgLmFsdGVyVGFibGUoJ3BlcnNvbicpXG4gKiAvLyAgLmV4ZWN1dGUoKSAvLyBQcm9wZXJ0eSAnZXhlY3V0ZScgZG9lcyBub3QgZXhpc3Qgb24gdHlwZSAnQWx0ZXJlZENvbHVtbkJ1aWxkZXInLlxuICogYGBgXG4gKlxuICogYGBgdHNcbiAqIGF3YWl0IGRiLnNjaGVtYVxuICogICAuYWx0ZXJUYWJsZSgncGVyc29uJylcbiAqIC8vICAuYWx0ZXJDb2x1bW4oJ2FnZScsIChhYykgPT4gYWMpIC8vIFR5cGUgJ0FsdGVyQ29sdW1uQnVpbGRlcicgaXMgbm90IGFzc2lnbmFibGUgdG8gdHlwZSAnQWx0ZXJlZENvbHVtbkJ1aWxkZXInLlxuICogLy8gIC5leGVjdXRlKClcbiAqIGBgYFxuICpcbiAqIE9uZSBjYW5ub3QgZG8gbXVsdGlwbGUgYWx0ZXJhdGlvbnM6XG4gKlxuICogYGBgdHNcbiAqIGF3YWl0IGRiLnNjaGVtYVxuICogICAuYWx0ZXJUYWJsZSgncGVyc29uJylcbiAqIC8vICAuYWx0ZXJDb2x1bW4oJ2FnZScsIChhYykgPT4gYWMuZHJvcE5vdE51bGwoKS5zZXROb3ROdWxsKCkpIC8vIFByb3BlcnR5ICdzZXROb3ROdWxsJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdBbHRlcmVkQ29sdW1uQnVpbGRlcicuXG4gKiAvLyAgLmV4ZWN1dGUoKVxuICogYGBgXG4gKlxuICogV2hpY2ggd291bGQgbm93IHRocm93IGEgY29tcGlsYXRpb24gZXJyb3IsIGluc3RlYWQgb2YgYSBydW50aW1lIGVycm9yLlxuICovXG5leHBvcnQgY2xhc3MgQWx0ZXJlZENvbHVtbkJ1aWxkZXIge1xuICAgICNhbHRlckNvbHVtbk5vZGU7XG4gICAgY29uc3RydWN0b3IoYWx0ZXJDb2x1bW5Ob2RlKSB7XG4gICAgICAgIHRoaXMuI2FsdGVyQ29sdW1uTm9kZSA9IGFsdGVyQ29sdW1uTm9kZTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYWx0ZXJDb2x1bW5Ob2RlO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vYWx0ZXItY29sdW1uLW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBDb2x1bW5Ob2RlIH0gZnJvbSAnLi9jb2x1bW4tbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQWx0ZXJDb2x1bW5Ob2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdBbHRlckNvbHVtbk5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGNvbHVtbiwgcHJvcCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQWx0ZXJDb2x1bW5Ob2RlJyxcbiAgICAgICAgICAgIGNvbHVtbjogQ29sdW1uTm9kZS5jcmVhdGUoY29sdW1uKSxcbiAgICAgICAgICAgIFtwcm9wXTogdmFsdWUsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vYWx0ZXItdGFibGUtZXhlY3V0b3IuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgY2xhc3MgQWx0ZXJUYWJsZUV4ZWN1dG9yIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5ub2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLnRvT3BlcmF0aW9uTm9kZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KHRoaXMuY29tcGlsZSgpKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2FsdGVyLXRhYmxlLWFkZC1mb3JlaWduLWtleS1jb25zdHJhaW50LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBBZGRDb25zdHJhaW50Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2FkZC1jb25zdHJhaW50LW5vZGUuanMnO1xuaW1wb3J0IHsgQWx0ZXJUYWJsZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hbHRlci10YWJsZS1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBBbHRlclRhYmxlQWRkRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBvbkRlbGV0ZShvbkRlbGV0ZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVBZGRGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBjb25zdHJhaW50QnVpbGRlcjogdGhpcy4jcHJvcHMuY29uc3RyYWludEJ1aWxkZXIub25EZWxldGUob25EZWxldGUpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25VcGRhdGUob25VcGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQWRkRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgY29uc3RyYWludEJ1aWxkZXI6IHRoaXMuI3Byb3BzLmNvbnN0cmFpbnRCdWlsZGVyLm9uVXBkYXRlKG9uVXBkYXRlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlZmVycmFibGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUFkZEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRCdWlsZGVyOiB0aGlzLiNwcm9wcy5jb25zdHJhaW50QnVpbGRlci5kZWZlcnJhYmxlKCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub3REZWZlcnJhYmxlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVBZGRGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBjb25zdHJhaW50QnVpbGRlcjogdGhpcy4jcHJvcHMuY29uc3RyYWludEJ1aWxkZXIubm90RGVmZXJyYWJsZSgpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5pdGlhbGx5RGVmZXJyZWQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUFkZEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIGNvbnN0cmFpbnRCdWlsZGVyOiB0aGlzLiNwcm9wcy5jb25zdHJhaW50QnVpbGRlci5pbml0aWFsbHlEZWZlcnJlZCgpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5pdGlhbGx5SW1tZWRpYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVBZGRGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBjb25zdHJhaW50QnVpbGRlcjogdGhpcy4jcHJvcHMuY29uc3RyYWludEJ1aWxkZXIuaW5pdGlhbGx5SW1tZWRpYXRlKCksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aFRhYmxlUHJvcHModGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgYWRkQ29uc3RyYWludDogQWRkQ29uc3RyYWludE5vZGUuY3JlYXRlKHRoaXMuI3Byb3BzLmNvbnN0cmFpbnRCdWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBjb21waWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IuY29tcGlsZVF1ZXJ5KHRoaXMudG9PcGVyYXRpb25Ob2RlKCksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLiNwcm9wcy5leGVjdXRvci5leGVjdXRlUXVlcnkodGhpcy5jb21waWxlKCkpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vYWx0ZXItdGFibGUtZHJvcC1jb25zdHJhaW50LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBBbHRlclRhYmxlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2FsdGVyLXRhYmxlLW5vZGUuanMnO1xuaW1wb3J0IHsgRHJvcENvbnN0cmFpbnROb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvZHJvcC1jb25zdHJhaW50LW5vZGUuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIEFsdGVyVGFibGVEcm9wQ29uc3RyYWludEJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIGlmRXhpc3RzKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVEcm9wQ29uc3RyYWludEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBBbHRlclRhYmxlTm9kZS5jbG9uZVdpdGhUYWJsZVByb3BzKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBkcm9wQ29uc3RyYWludDogRHJvcENvbnN0cmFpbnROb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLmRyb3BDb25zdHJhaW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGlmRXhpc3RzOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXNjYWRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVEcm9wQ29uc3RyYWludEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBBbHRlclRhYmxlTm9kZS5jbG9uZVdpdGhUYWJsZVByb3BzKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBkcm9wQ29uc3RyYWludDogRHJvcENvbnN0cmFpbnROb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLmRyb3BDb25zdHJhaW50LCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyOiAnY2FzY2FkZScsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlc3RyaWN0KCkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVEcm9wQ29uc3RyYWludEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBBbHRlclRhYmxlTm9kZS5jbG9uZVdpdGhUYWJsZVByb3BzKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBkcm9wQ29uc3RyYWludDogRHJvcENvbnN0cmFpbnROb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLmRyb3BDb25zdHJhaW50LCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyOiAncmVzdHJpY3QnLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KHRoaXMuI3Byb3BzLm5vZGUsIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBjb21waWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IuY29tcGlsZVF1ZXJ5KHRoaXMudG9PcGVyYXRpb25Ob2RlKCksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLiNwcm9wcy5leGVjdXRvci5leGVjdXRlUXVlcnkodGhpcy5jb21waWxlKCkpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcHJpbWFyeS1rZXktY29uc3RyYWludC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgQ29sdW1uTm9kZSB9IGZyb20gJy4vY29sdW1uLW5vZGUuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL2lkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUHJpbWFyeUtleUNvbnN0cmFpbnROb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdQcmltYXJ5S2V5Q29uc3RyYWludE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKGNvbHVtbnMsIGNvbnN0cmFpbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ1ByaW1hcnlLZXlDb25zdHJhaW50Tm9kZScsXG4gICAgICAgICAgICBjb2x1bW5zOiBmcmVlemUoY29sdW1ucy5tYXAoQ29sdW1uTm9kZS5jcmVhdGUpKSxcbiAgICAgICAgICAgIG5hbWU6IGNvbnN0cmFpbnROYW1lID8gSWRlbnRpZmllck5vZGUuY3JlYXRlKGNvbnN0cmFpbnROYW1lKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGgobm9kZSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7IC4uLm5vZGUsIC4uLnByb3BzIH0pO1xuICAgIH0sXG59KTtcbi8qKlxuICogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIGEgdHlwbyBpbiB0aGUgY29kZWJhc2UuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBQcmltYXJ5S2V5Q29uc3RyYWludE5vZGV9IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBQcmltYXJ5Q29uc3RyYWludE5vZGUgPSBQcmltYXJ5S2V5Q29uc3RyYWludE5vZGU7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2FkZC1pbmRleC1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL2lkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQWRkSW5kZXhOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdBZGRJbmRleE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnQWRkSW5kZXhOb2RlJyxcbiAgICAgICAgICAgIG5hbWU6IElkZW50aWZpZXJOb2RlLmNyZWF0ZShuYW1lKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGgobm9kZSwgcHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoQ29sdW1ucyhub2RlLCBjb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIGNvbHVtbnM6IFsuLi4obm9kZS5jb2x1bW5zIHx8IFtdKSwgLi4uY29sdW1uc10sXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vYWx0ZXItdGFibGUtYWRkLWluZGV4LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBBZGRJbmRleE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9hZGQtaW5kZXgtbm9kZS5qcyc7XG5pbXBvcnQgeyBBbHRlclRhYmxlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2FsdGVyLXRhYmxlLW5vZGUuanMnO1xuaW1wb3J0IHsgUmF3Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3Jhdy1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlT3JkZXJlZENvbHVtbk5hbWUsIH0gZnJvbSAnLi4vcGFyc2VyL3JlZmVyZW5jZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIEFsdGVyVGFibGVBZGRJbmRleEJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1ha2VzIHRoZSBpbmRleCB1bmlxdWUuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuYWx0ZXJUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRJbmRleCgncGVyc29uX2ZpcnN0X25hbWVfaW5kZXgnKVxuICAgICAqICAgLnVuaXF1ZSgpXG4gICAgICogICAuY29sdW1uKCdlbWFpbCcpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogYWx0ZXIgdGFibGUgYHBlcnNvbmAgYWRkIHVuaXF1ZSBpbmRleCBgcGVyc29uX2ZpcnN0X25hbWVfaW5kZXhgIChgZW1haWxgKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHVuaXF1ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQWRkSW5kZXhCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoVGFibGVQcm9wcyh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgYWRkSW5kZXg6IEFkZEluZGV4Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZS5hZGRJbmRleCwge1xuICAgICAgICAgICAgICAgICAgICB1bmlxdWU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjb2x1bW4gdG8gdGhlIGluZGV4LlxuICAgICAqXG4gICAgICogQWxzbyBzZWUge0BsaW5rIGNvbHVtbnN9IGZvciBhZGRpbmcgbXVsdGlwbGUgY29sdW1ucyBhdCBvbmNlIG9yIHtAbGluayBleHByZXNzaW9ufVxuICAgICAqIGZvciBzcGVjaWZ5aW5nIGFuIGFyYml0cmFyeSBleHByZXNzaW9uLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmFsdGVyVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkSW5kZXgoJ3BlcnNvbl9maXJzdF9uYW1lX2FuZF9hZ2VfaW5kZXgnKVxuICAgICAqICAgLmNvbHVtbignZmlyc3RfbmFtZScpXG4gICAgICogICAuY29sdW1uKCdhZ2UgZGVzYycpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogYWx0ZXIgdGFibGUgYHBlcnNvbmAgYWRkIGluZGV4IGBwZXJzb25fZmlyc3RfbmFtZV9hbmRfYWdlX2luZGV4YCAoYGZpcnN0X25hbWVgLCBgYWdlYCBkZXNjKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbHVtbihjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBbHRlclRhYmxlQWRkSW5kZXhCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQWx0ZXJUYWJsZU5vZGUuY2xvbmVXaXRoVGFibGVQcm9wcyh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgYWRkSW5kZXg6IEFkZEluZGV4Tm9kZS5jbG9uZVdpdGhDb2x1bW5zKHRoaXMuI3Byb3BzLm5vZGUuYWRkSW5kZXgsIFtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VPcmRlcmVkQ29sdW1uTmFtZShjb2x1bW4pLFxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgYSBsaXN0IG9mIGNvbHVtbnMgZm9yIHRoZSBpbmRleC5cbiAgICAgKlxuICAgICAqIEFsc28gc2VlIHtAbGluayBjb2x1bW59IGZvciBhZGRpbmcgYSBzaW5nbGUgY29sdW1uIG9yIHtAbGluayBleHByZXNzaW9ufSBmb3JcbiAgICAgKiBzcGVjaWZ5aW5nIGFuIGFyYml0cmFyeSBleHByZXNzaW9uLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmFsdGVyVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkSW5kZXgoJ3BlcnNvbl9maXJzdF9uYW1lX2FuZF9hZ2VfaW5kZXgnKVxuICAgICAqICAgLmNvbHVtbnMoWydmaXJzdF9uYW1lJywgJ2FnZSBkZXNjJ10pXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoTXlTUUwpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogYWx0ZXIgdGFibGUgYHBlcnNvbmAgYWRkIGluZGV4IGBwZXJzb25fZmlyc3RfbmFtZV9hbmRfYWdlX2luZGV4YCAoYGZpcnN0X25hbWVgLCBgYWdlYCBkZXNjKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbHVtbnMoY29sdW1ucykge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVBZGRJbmRleEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBBbHRlclRhYmxlTm9kZS5jbG9uZVdpdGhUYWJsZVByb3BzKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBhZGRJbmRleDogQWRkSW5kZXhOb2RlLmNsb25lV2l0aENvbHVtbnModGhpcy4jcHJvcHMubm9kZS5hZGRJbmRleCwgY29sdW1ucy5tYXAocGFyc2VPcmRlcmVkQ29sdW1uTmFtZSkpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgYW4gYXJiaXRyYXJ5IGV4cHJlc3Npb24gZm9yIHRoZSBpbmRleC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQge1x1MDBBMHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmFsdGVyVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkSW5kZXgoJ3BlcnNvbl9maXJzdF9uYW1lX2luZGV4JylcbiAgICAgKiAgIC5leHByZXNzaW9uKHNxbDxib29sZWFuPmAoZmlyc3RfbmFtZSA8ICdTYW1pJylgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogVGhlIGdlbmVyYXRlZCBTUUwgKE15U1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGFsdGVyIHRhYmxlIGBwZXJzb25gIGFkZCBpbmRleCBgcGVyc29uX2ZpcnN0X25hbWVfaW5kZXhgICgoZmlyc3RfbmFtZSA8ICdTYW1pJykpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgZXhwcmVzc2lvbihleHByZXNzaW9uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQWx0ZXJUYWJsZUFkZEluZGV4QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IEFsdGVyVGFibGVOb2RlLmNsb25lV2l0aFRhYmxlUHJvcHModGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGFkZEluZGV4OiBBZGRJbmRleE5vZGUuY2xvbmVXaXRoQ29sdW1ucyh0aGlzLiNwcm9wcy5ub2RlLmFkZEluZGV4LCBbXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24udG9PcGVyYXRpb25Ob2RlKCksXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVzaW5nKGluZGV4VHlwZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFsdGVyVGFibGVBZGRJbmRleEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBBbHRlclRhYmxlTm9kZS5jbG9uZVdpdGhUYWJsZVByb3BzKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBhZGRJbmRleDogQWRkSW5kZXhOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLmFkZEluZGV4LCB7XG4gICAgICAgICAgICAgICAgICAgIHVzaW5nOiBSYXdOb2RlLmNyZWF0ZVdpdGhTcWwoaW5kZXhUeXBlKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5ub2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLnRvT3BlcmF0aW9uTm9kZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KHRoaXMuY29tcGlsZSgpKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3VuaXF1ZS1jb25zdHJhaW50LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBVbmlxdWVDb25zdHJhaW50Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3VuaXF1ZS1jb25zdHJhaW50LW5vZGUuanMnO1xuZXhwb3J0IGNsYXNzIFVuaXF1ZUNvbnN0cmFpbnROb2RlQnVpbGRlciB7XG4gICAgI25vZGU7XG4gICAgY29uc3RydWN0b3Iobm9kZSkge1xuICAgICAgICB0aGlzLiNub2RlID0gbm9kZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBgbnVsbHMgbm90IGRpc3RpbmN0YCB0byB0aGUgdW5pcXVlIGNvbnN0cmFpbnQgZGVmaW5pdGlvblxuICAgICAqXG4gICAgICogU3VwcG9ydGVkIGJ5IFBvc3RncmVTUUwgZGlhbGVjdCBvbmx5XG4gICAgICovXG4gICAgbnVsbHNOb3REaXN0aW5jdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVbmlxdWVDb25zdHJhaW50Tm9kZUJ1aWxkZXIoVW5pcXVlQ29uc3RyYWludE5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHsgbnVsbHNOb3REaXN0aW5jdDogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIGRlZmVycmFibGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgVW5pcXVlQ29uc3RyYWludE5vZGVCdWlsZGVyKFVuaXF1ZUNvbnN0cmFpbnROb2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7IGRlZmVycmFibGU6IHRydWUgfSkpO1xuICAgIH1cbiAgICBub3REZWZlcnJhYmxlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFVuaXF1ZUNvbnN0cmFpbnROb2RlQnVpbGRlcihVbmlxdWVDb25zdHJhaW50Tm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwgeyBkZWZlcnJhYmxlOiBmYWxzZSB9KSk7XG4gICAgfVxuICAgIGluaXRpYWxseURlZmVycmVkKCkge1xuICAgICAgICByZXR1cm4gbmV3IFVuaXF1ZUNvbnN0cmFpbnROb2RlQnVpbGRlcihVbmlxdWVDb25zdHJhaW50Tm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwge1xuICAgICAgICAgICAgaW5pdGlhbGx5RGVmZXJyZWQ6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgaW5pdGlhbGx5SW1tZWRpYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFVuaXF1ZUNvbnN0cmFpbnROb2RlQnVpbGRlcihVbmlxdWVDb25zdHJhaW50Tm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwge1xuICAgICAgICAgICAgaW5pdGlhbGx5RGVmZXJyZWQ6IGZhbHNlLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbm9kZTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3ByaW1hcnkta2V5LWNvbnN0cmFpbnQtYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IFByaW1hcnlLZXlDb25zdHJhaW50Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3ByaW1hcnkta2V5LWNvbnN0cmFpbnQtbm9kZS5qcyc7XG5leHBvcnQgY2xhc3MgUHJpbWFyeUtleUNvbnN0cmFpbnRCdWlsZGVyIHtcbiAgICAjbm9kZTtcbiAgICBjb25zdHJ1Y3Rvcihub2RlKSB7XG4gICAgICAgIHRoaXMuI25vZGUgPSBub2RlO1xuICAgIH1cbiAgICBkZWZlcnJhYmxlKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByaW1hcnlLZXlDb25zdHJhaW50QnVpbGRlcihQcmltYXJ5S2V5Q29uc3RyYWludE5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHsgZGVmZXJyYWJsZTogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIG5vdERlZmVycmFibGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJpbWFyeUtleUNvbnN0cmFpbnRCdWlsZGVyKFByaW1hcnlLZXlDb25zdHJhaW50Tm9kZS5jbG9uZVdpdGgodGhpcy4jbm9kZSwgeyBkZWZlcnJhYmxlOiBmYWxzZSB9KSk7XG4gICAgfVxuICAgIGluaXRpYWxseURlZmVycmVkKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByaW1hcnlLZXlDb25zdHJhaW50QnVpbGRlcihQcmltYXJ5S2V5Q29uc3RyYWludE5vZGUuY2xvbmVXaXRoKHRoaXMuI25vZGUsIHtcbiAgICAgICAgICAgIGluaXRpYWxseURlZmVycmVkOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGluaXRpYWxseUltbWVkaWF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcmltYXJ5S2V5Q29uc3RyYWludEJ1aWxkZXIoUHJpbWFyeUtleUNvbnN0cmFpbnROb2RlLmNsb25lV2l0aCh0aGlzLiNub2RlLCB7XG4gICAgICAgICAgICBpbml0aWFsbHlEZWZlcnJlZDogZmFsc2UsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNub2RlO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vY2hlY2stY29uc3RyYWludC1idWlsZGVyLmQudHNcIiAvPlxuZXhwb3J0IGNsYXNzIENoZWNrQ29uc3RyYWludEJ1aWxkZXIge1xuICAgICNub2RlO1xuICAgIGNvbnN0cnVjdG9yKG5vZGUpIHtcbiAgICAgICAgdGhpcy4jbm9kZSA9IG5vZGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jbm9kZTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3JlbmFtZS1jb25zdHJhaW50LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4vaWRlbnRpZmllci1ub2RlLmpzJztcbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBSZW5hbWVDb25zdHJhaW50Tm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnUmVuYW1lQ29uc3RyYWludE5vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG9sZE5hbWUsIG5ld05hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnUmVuYW1lQ29uc3RyYWludE5vZGUnLFxuICAgICAgICAgICAgb2xkTmFtZTogSWRlbnRpZmllck5vZGUuY3JlYXRlKG9sZE5hbWUpLFxuICAgICAgICAgICAgbmV3TmFtZTogSWRlbnRpZmllck5vZGUuY3JlYXRlKG5ld05hbWUpLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NyZWF0ZS1pbmRleC1idWlsZGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgQ3JlYXRlSW5kZXhOb2RlLCB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NyZWF0ZS1pbmRleC1ub2RlLmpzJztcbmltcG9ydCB7IFJhd05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9yYXctbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZU9yZGVyZWRDb2x1bW5OYW1lLCB9IGZyb20gJy4uL3BhcnNlci9yZWZlcmVuY2UtcGFyc2VyLmpzJztcbmltcG9ydCB7IHBhcnNlVGFibGUgfSBmcm9tICcuLi9wYXJzZXIvdGFibGUtcGFyc2VyLmpzJztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IHBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24sIH0gZnJvbSAnLi4vcGFyc2VyL2JpbmFyeS1vcGVyYXRpb24tcGFyc2VyLmpzJztcbmltcG9ydCB7IFF1ZXJ5Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3F1ZXJ5LW5vZGUuanMnO1xuaW1wb3J0IHsgSW1tZWRpYXRlVmFsdWVUcmFuc2Zvcm1lciB9IGZyb20gJy4uL3BsdWdpbi9pbW1lZGlhdGUtdmFsdWUvaW1tZWRpYXRlLXZhbHVlLXRyYW5zZm9ybWVyLmpzJztcbmV4cG9ydCBjbGFzcyBDcmVhdGVJbmRleEJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIFwiaWYgbm90IGV4aXN0c1wiIG1vZGlmaWVyLlxuICAgICAqXG4gICAgICogSWYgdGhlIGluZGV4IGFscmVhZHkgZXhpc3RzLCBubyBlcnJvciBpcyB0aHJvd24gaWYgdGhpcyBtZXRob2QgaGFzIGJlZW4gY2FsbGVkLlxuICAgICAqL1xuICAgIGlmTm90RXhpc3RzKCkge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZUluZGV4QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZUluZGV4Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGlmTm90RXhpc3RzOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYWtlcyB0aGUgaW5kZXggdW5pcXVlLlxuICAgICAqL1xuICAgIHVuaXF1ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVJbmRleEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVJbmRleE5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICB1bmlxdWU6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYG51bGxzIG5vdCBkaXN0aW5jdGAgc3BlY2lmaWVyIHRvIGluZGV4LlxuICAgICAqIFRoaXMgb25seSB3b3JrcyBvbiBzb21lIGRpYWxlY3RzIGxpa2UgUG9zdGdyZVNRTC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBkYi5zY2hlbWEuY3JlYXRlSW5kZXgoJ3BlcnNvbl9maXJzdF9uYW1lX2luZGV4JylcbiAgICAgKiAgLm9uKCdwZXJzb24nKVxuICAgICAqICAuY29sdW1uKCdmaXJzdF9uYW1lJylcbiAgICAgKiAgLm51bGxzTm90RGlzdGluY3QoKVxuICAgICAqICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgaW5kZXggXCJwZXJzb25fZmlyc3RfbmFtZV9pbmRleFwiXG4gICAgICogb24gXCJ0ZXN0XCIgKFwiZmlyc3RfbmFtZVwiKVxuICAgICAqIG51bGxzIG5vdCBkaXN0aW5jdDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBudWxsc05vdERpc3RpbmN0KCkge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZUluZGV4QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZUluZGV4Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIG51bGxzTm90RGlzdGluY3Q6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgdGFibGUgZm9yIHRoZSBpbmRleC5cbiAgICAgKi9cbiAgICBvbih0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZUluZGV4QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZUluZGV4Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIHRhYmxlOiBwYXJzZVRhYmxlKHRhYmxlKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNvbHVtbiB0byB0aGUgaW5kZXguXG4gICAgICpcbiAgICAgKiBBbHNvIHNlZSB7QGxpbmsgY29sdW1uc30gZm9yIGFkZGluZyBtdWx0aXBsZSBjb2x1bW5zIGF0IG9uY2Ugb3Ige0BsaW5rIGV4cHJlc3Npb259XG4gICAgICogZm9yIHNwZWNpZnlpbmcgYW4gYXJiaXRyYXJ5IGV4cHJlc3Npb24uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAgICAgICAuY3JlYXRlSW5kZXgoJ3BlcnNvbl9maXJzdF9uYW1lX2FuZF9hZ2VfaW5kZXgnKVxuICAgICAqICAgICAgICAgLm9uKCdwZXJzb24nKVxuICAgICAqICAgICAgICAgLmNvbHVtbignZmlyc3RfbmFtZScpXG4gICAgICogICAgICAgICAuY29sdW1uKCdhZ2UgZGVzYycpXG4gICAgICogICAgICAgICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgaW5kZXggXCJwZXJzb25fZmlyc3RfbmFtZV9hbmRfYWdlX2luZGV4XCIgb24gXCJwZXJzb25cIiAoXCJmaXJzdF9uYW1lXCIsIFwiYWdlXCIgZGVzYylcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb2x1bW4oY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlSW5kZXhCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlSW5kZXhOb2RlLmNsb25lV2l0aENvbHVtbnModGhpcy4jcHJvcHMubm9kZSwgW1xuICAgICAgICAgICAgICAgIHBhcnNlT3JkZXJlZENvbHVtbk5hbWUoY29sdW1uKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGEgbGlzdCBvZiBjb2x1bW5zIGZvciB0aGUgaW5kZXguXG4gICAgICpcbiAgICAgKiBBbHNvIHNlZSB7QGxpbmsgY29sdW1ufSBmb3IgYWRkaW5nIGEgc2luZ2xlIGNvbHVtbiBvciB7QGxpbmsgZXhwcmVzc2lvbn0gZm9yXG4gICAgICogc3BlY2lmeWluZyBhbiBhcmJpdHJhcnkgZXhwcmVzc2lvbi5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgICAgICAgIC5jcmVhdGVJbmRleCgncGVyc29uX2ZpcnN0X25hbWVfYW5kX2FnZV9pbmRleCcpXG4gICAgICogICAgICAgICAub24oJ3BlcnNvbicpXG4gICAgICogICAgICAgICAuY29sdW1ucyhbJ2ZpcnN0X25hbWUnLCAnYWdlIGRlc2MnXSlcbiAgICAgKiAgICAgICAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSBpbmRleCBcInBlcnNvbl9maXJzdF9uYW1lX2FuZF9hZ2VfaW5kZXhcIiBvbiBcInBlcnNvblwiIChcImZpcnN0X25hbWVcIiwgXCJhZ2VcIiBkZXNjKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbHVtbnMoY29sdW1ucykge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZUluZGV4QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZUluZGV4Tm9kZS5jbG9uZVdpdGhDb2x1bW5zKHRoaXMuI3Byb3BzLm5vZGUsIGNvbHVtbnMubWFwKHBhcnNlT3JkZXJlZENvbHVtbk5hbWUpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyBhbiBhcmJpdHJhcnkgZXhwcmVzc2lvbiBmb3IgdGhlIGluZGV4LlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7XHUwMEEwc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlSW5kZXgoJ3BlcnNvbl9maXJzdF9uYW1lX2luZGV4JylcbiAgICAgKiAgIC5vbigncGVyc29uJylcbiAgICAgKiAgIC5leHByZXNzaW9uKHNxbGBmaXJzdF9uYW1lIENPTExBVEUgXCJmaV9GSVwiYClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSBpbmRleCBcInBlcnNvbl9maXJzdF9uYW1lX2luZGV4XCIgb24gXCJwZXJzb25cIiAoZmlyc3RfbmFtZSBDT0xMQVRFIFwiZmlfRklcIilcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBleHByZXNzaW9uKGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVJbmRleEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVJbmRleE5vZGUuY2xvbmVXaXRoQ29sdW1ucyh0aGlzLiNwcm9wcy5ub2RlLCBbXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbi50b09wZXJhdGlvbk5vZGUoKSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdXNpbmcoaW5kZXhUeXBlKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlSW5kZXhCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlSW5kZXhOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgdXNpbmc6IFJhd05vZGUuY3JlYXRlV2l0aFNxbChpbmRleFR5cGUpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB3aGVyZSguLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IEltbWVkaWF0ZVZhbHVlVHJhbnNmb3JtZXIoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVJbmRleEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBRdWVyeU5vZGUuY2xvbmVXaXRoV2hlcmUodGhpcy4jcHJvcHMubm9kZSwgdHJhbnNmb3JtZXIudHJhbnNmb3JtTm9kZShwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uKGFyZ3MpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KHRoaXMuI3Byb3BzLm5vZGUsIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBjb21waWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IuY29tcGlsZVF1ZXJ5KHRoaXMudG9PcGVyYXRpb25Ob2RlKCksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLiNwcm9wcy5leGVjdXRvci5leGVjdXRlUXVlcnkodGhpcy5jb21waWxlKCkpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vaW1tZWRpYXRlLXZhbHVlLXRyYW5zZm9ybWVyLmQudHNcIiAvPlxuaW1wb3J0IHsgT3BlcmF0aW9uTm9kZVRyYW5zZm9ybWVyIH0gZnJvbSAnLi4vLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtdHJhbnNmb3JtZXIuanMnO1xuaW1wb3J0IHsgVmFsdWVMaXN0Tm9kZSB9IGZyb20gJy4uLy4uL29wZXJhdGlvbi1ub2RlL3ZhbHVlLWxpc3Qtbm9kZS5qcyc7XG5pbXBvcnQgeyBWYWx1ZU5vZGUgfSBmcm9tICcuLi8uLi9vcGVyYXRpb24tbm9kZS92YWx1ZS1ub2RlLmpzJztcbi8qKlxuICogVHJhbnNmb3JtcyBhbGwgVmFsdWVOb2RlcyB0byBpbW1lZGlhdGUuXG4gKlxuICogV0FSTklORyEgVGhpcyBzaG91bGQgbmV2ZXIgYmUgcGFydCBvZiB0aGUgcHVibGljIEFQSS4gVXNlcnMgc2hvdWxkIG5ldmVyIHVzZSB0aGlzLlxuICogVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWxwZXIuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBJbW1lZGlhdGVWYWx1ZVRyYW5zZm9ybWVyIGV4dGVuZHMgT3BlcmF0aW9uTm9kZVRyYW5zZm9ybWVyIHtcbiAgICB0cmFuc2Zvcm1QcmltaXRpdmVWYWx1ZUxpc3Qobm9kZSkge1xuICAgICAgICByZXR1cm4gVmFsdWVMaXN0Tm9kZS5jcmVhdGUobm9kZS52YWx1ZXMubWFwKFZhbHVlTm9kZS5jcmVhdGVJbW1lZGlhdGUpKTtcbiAgICB9XG4gICAgdHJhbnNmb3JtVmFsdWUobm9kZSkge1xuICAgICAgICByZXR1cm4gVmFsdWVOb2RlLmNyZWF0ZUltbWVkaWF0ZShub2RlLnZhbHVlKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NyZWF0ZS1zY2hlbWEtYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IENyZWF0ZVNjaGVtYU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jcmVhdGUtc2NoZW1hLW5vZGUuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIENyZWF0ZVNjaGVtYUJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIGlmTm90RXhpc3RzKCkge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVNjaGVtYUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVTY2hlbWFOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7IGlmTm90RXhpc3RzOiB0cnVlIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5ub2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLnRvT3BlcmF0aW9uTm9kZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KHRoaXMuY29tcGlsZSgpKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NyZWF0ZS10YWJsZS1idWlsZGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgQ29sdW1uRGVmaW5pdGlvbk5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jb2x1bW4tZGVmaW5pdGlvbi1ub2RlLmpzJztcbmltcG9ydCB7IENyZWF0ZVRhYmxlTm9kZSwgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jcmVhdGUtdGFibGUtbm9kZS5qcyc7XG5pbXBvcnQgeyBDb2x1bW5EZWZpbml0aW9uQnVpbGRlciB9IGZyb20gJy4vY29sdW1uLWRlZmluaXRpb24tYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBmcmVlemUsIG5vb3AgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBGb3JlaWduS2V5Q29uc3RyYWludE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9mb3JlaWduLWtleS1jb25zdHJhaW50LW5vZGUuanMnO1xuaW1wb3J0IHsgQ29sdW1uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NvbHVtbi1ub2RlLmpzJztcbmltcG9ydCB7IEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlciwgfSBmcm9tICcuL2ZvcmVpZ24ta2V5LWNvbnN0cmFpbnQtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBwYXJzZURhdGFUeXBlRXhwcmVzc2lvbiwgfSBmcm9tICcuLi9wYXJzZXIvZGF0YS10eXBlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBQcmltYXJ5S2V5Q29uc3RyYWludE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9wcmltYXJ5LWtleS1jb25zdHJhaW50LW5vZGUuanMnO1xuaW1wb3J0IHsgVW5pcXVlQ29uc3RyYWludE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS91bmlxdWUtY29uc3RyYWludC1ub2RlLmpzJztcbmltcG9ydCB7IENoZWNrQ29uc3RyYWludE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jaGVjay1jb25zdHJhaW50LW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VUYWJsZSB9IGZyb20gJy4uL3BhcnNlci90YWJsZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VPbkNvbW1pdEFjdGlvbiB9IGZyb20gJy4uL3BhcnNlci9vbi1jb21taXQtYWN0aW9uLXBhcnNlLmpzJztcbmltcG9ydCB7IFVuaXF1ZUNvbnN0cmFpbnROb2RlQnVpbGRlciwgfSBmcm9tICcuL3VuaXF1ZS1jb25zdHJhaW50LWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VFeHByZXNzaW9uIH0gZnJvbSAnLi4vcGFyc2VyL2V4cHJlc3Npb24tcGFyc2VyLmpzJztcbmltcG9ydCB7IFByaW1hcnlLZXlDb25zdHJhaW50QnVpbGRlciwgfSBmcm9tICcuL3ByaW1hcnkta2V5LWNvbnN0cmFpbnQtYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBDaGVja0NvbnN0cmFpbnRCdWlsZGVyLCB9IGZyb20gJy4vY2hlY2stY29uc3RyYWludC1idWlsZGVyLmpzJztcbi8qKlxuICogVGhpcyBidWlsZGVyIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIGBjcmVhdGUgdGFibGVgIHF1ZXJ5LlxuICovXG5leHBvcnQgY2xhc3MgQ3JlYXRlVGFibGVCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBcInRlbXBvcmFyeVwiIG1vZGlmaWVyLlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgdG8gY3JlYXRlIGEgdGVtcG9yYXJ5IHRhYmxlLlxuICAgICAqL1xuICAgIHRlbXBvcmFyeSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVUYWJsZUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVUYWJsZU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICB0ZW1wb3Jhcnk6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYW4gXCJvbiBjb21taXRcIiBzdGF0ZW1lbnQuXG4gICAgICpcbiAgICAgKiBUaGlzIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGVtcG9yYXJ5IHRhYmxlcyBvbiBzdXBwb3J0ZWQgZGF0YWJhc2VzXG4gICAgICogbGlrZSBQb3N0Z3JlU1FMLlxuICAgICAqL1xuICAgIG9uQ29tbWl0KG9uQ29tbWl0KSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlVGFibGVCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlVGFibGVOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgb25Db21taXQ6IHBhcnNlT25Db21taXRBY3Rpb24ob25Db21taXQpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBcImlmIG5vdCBleGlzdHNcIiBtb2RpZmllci5cbiAgICAgKlxuICAgICAqIElmIHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cywgbm8gZXJyb3IgaXMgdGhyb3duIGlmIHRoaXMgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZC5cbiAgICAgKi9cbiAgICBpZk5vdEV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDcmVhdGVUYWJsZUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVUYWJsZU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBpZk5vdEV4aXN0czogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNvbHVtbiB0byB0aGUgdGFibGUuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHtcdTAwQTBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2lkJywgJ2ludGVnZXInLCAoY29sKSA9PiBjb2wuYXV0b0luY3JlbWVudCgpLnByaW1hcnlLZXkoKSlcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2ZpcnN0X25hbWUnLCAndmFyY2hhcig1MCknLCAoY29sKSA9PiBjb2wubm90TnVsbCgpKVxuICAgICAqICAgLmFkZENvbHVtbignbGFzdF9uYW1lJywgJ3ZhcmNoYXIoMjU1KScpXG4gICAgICogICAuYWRkQ29sdW1uKCdiYW5rX2JhbGFuY2UnLCAnbnVtZXJpYyg4LCAyKScpXG4gICAgICogICAvLyBZb3UgY2FuIHNwZWNpZnkgYW55IGRhdGEgdHlwZSB1c2luZyB0aGUgYHNxbGAgdGFnIGlmIHRoZSB0eXBlc1xuICAgICAqICAgLy8gZG9uJ3QgaW5jbHVkZSBpdC5cbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2RhdGEnLCBzcWxgYW55X3R5cGVfaGVyZWApXG4gICAgICogICAuYWRkQ29sdW1uKCdwYXJlbnRfaWQnLCAnaW50ZWdlcicsIChjb2wpID0+XG4gICAgICogICAgIGNvbC5yZWZlcmVuY2VzKCdwZXJzb24uaWQnKS5vbkRlbGV0ZSgnY2FzY2FkZScpXG4gICAgICogICApXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBXaXRoIHRoaXMgbWV0aG9kLCBpdCdzIG9uY2UgYWdhaW4gZ29vZCB0byByZW1lbWJlciB0aGF0IEt5c2VseSBqdXN0IGJ1aWxkcyB0aGVcbiAgICAgKiBxdWVyeSBhbmQgZG9lc24ndCBwcm92aWRlIHRoZSBzYW1lIEFQSSBmb3IgYWxsIGRhdGFiYXNlcy4gRm9yIGV4YW1wbGUsIHNvbWVcbiAgICAgKiBkYXRhYmFzZXMgbGlrZSBvbGRlciBNeVNRTCBkb24ndCBzdXBwb3J0IHRoZSBgcmVmZXJlbmNlc2Agc3RhdGVtZW50IGluIHRoZVxuICAgICAqIGNvbHVtbiBkZWZpbml0aW9uLiBJbnN0ZWFkIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnRzIG5lZWQgdG8gYmUgZGVmaW5lZCBpbiB0aGVcbiAgICAgKiBgY3JlYXRlIHRhYmxlYCBxdWVyeS4gU2VlIHRoZSBuZXh0IGV4YW1wbGU6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignaWQnLCAnaW50ZWdlcicsIChjb2wpID0+IGNvbC5wcmltYXJ5S2V5KCkpXG4gICAgICogICAuYWRkQ29sdW1uKCdwYXJlbnRfaWQnLCAnaW50ZWdlcicpXG4gICAgICogICAuYWRkRm9yZWlnbktleUNvbnN0cmFpbnQoXG4gICAgICogICAgICdwZXJzb25fcGFyZW50X2lkX2ZrJyxcbiAgICAgKiAgICAgWydwYXJlbnRfaWQnXSxcbiAgICAgKiAgICAgJ3BlcnNvbicsXG4gICAgICogICAgIFsnaWQnXSxcbiAgICAgKiAgICAgKGNiKSA9PiBjYi5vbkRlbGV0ZSgnY2FzY2FkZScpXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBBbm90aGVyIGdvb2QgZXhhbXBsZSBpcyB0aGF0IFBvc3RncmVTUUwgZG9lc24ndCBzdXBwb3J0IHRoZSBgYXV0b19pbmNyZW1lbnRgXG4gICAgICoga2V5d29yZCBhbmQgeW91IG5lZWQgdG8gZGVmaW5lIGFuIGF1dG9pbmNyZW1lbnRpbmcgY29sdW1uIGZvciBleGFtcGxlIHVzaW5nXG4gICAgICogYHNlcmlhbGA6XG4gICAgICpcbiAgICAgKiBgYGB0c1xuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCdwZXJzb24nKVxuICAgICAqICAgLmFkZENvbHVtbignaWQnLCAnc2VyaWFsJywgKGNvbCkgPT4gY29sLnByaW1hcnlLZXkoKSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhZGRDb2x1bW4oY29sdW1uTmFtZSwgZGF0YVR5cGUsIGJ1aWxkID0gbm9vcCkge1xuICAgICAgICBjb25zdCBjb2x1bW5CdWlsZGVyID0gYnVpbGQobmV3IENvbHVtbkRlZmluaXRpb25CdWlsZGVyKENvbHVtbkRlZmluaXRpb25Ob2RlLmNyZWF0ZShjb2x1bW5OYW1lLCBwYXJzZURhdGFUeXBlRXhwcmVzc2lvbihkYXRhVHlwZSkpKSk7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlVGFibGVCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlVGFibGVOb2RlLmNsb25lV2l0aENvbHVtbih0aGlzLiNwcm9wcy5ub2RlLCBjb2x1bW5CdWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwcmltYXJ5IGtleSBjb25zdHJhaW50IGZvciBvbmUgb3IgbW9yZSBjb2x1bW5zLlxuICAgICAqXG4gICAgICogVGhlIGNvbnN0cmFpbnQgbmFtZSBjYW4gYmUgYW55dGhpbmcgeW91IHdhbnQsIGJ1dCBpdCBtdXN0IGJlIHVuaXF1ZVxuICAgICAqIGFjcm9zcyB0aGUgd2hvbGUgZGF0YWJhc2UuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkQ29sdW1uKCdmaXJzdF9uYW1lJywgJ3ZhcmNoYXIoNjQpJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2xhc3RfbmFtZScsICd2YXJjaGFyKDY0KScpXG4gICAgICogICAuYWRkUHJpbWFyeUtleUNvbnN0cmFpbnQoJ3ByaW1hcnlfa2V5JywgWydmaXJzdF9uYW1lJywgJ2xhc3RfbmFtZSddKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFkZFByaW1hcnlLZXlDb25zdHJhaW50KGNvbnN0cmFpbnROYW1lLCBjb2x1bW5zLCBidWlsZCA9IG5vb3ApIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludEJ1aWxkZXIgPSBidWlsZChuZXcgUHJpbWFyeUtleUNvbnN0cmFpbnRCdWlsZGVyKFByaW1hcnlLZXlDb25zdHJhaW50Tm9kZS5jcmVhdGUoY29sdW1ucywgY29uc3RyYWludE5hbWUpKSk7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlVGFibGVCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlVGFibGVOb2RlLmNsb25lV2l0aENvbnN0cmFpbnQodGhpcy4jcHJvcHMubm9kZSwgY29uc3RyYWludEJ1aWxkZXIudG9PcGVyYXRpb25Ob2RlKCkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIHVuaXF1ZSBjb25zdHJhaW50IGZvciBvbmUgb3IgbW9yZSBjb2x1bW5zLlxuICAgICAqXG4gICAgICogVGhlIGNvbnN0cmFpbnQgbmFtZSBjYW4gYmUgYW55dGhpbmcgeW91IHdhbnQsIGJ1dCBpdCBtdXN0IGJlIHVuaXF1ZVxuICAgICAqIGFjcm9zcyB0aGUgd2hvbGUgZGF0YWJhc2UuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkQ29sdW1uKCdmaXJzdF9uYW1lJywgJ3ZhcmNoYXIoNjQpJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2xhc3RfbmFtZScsICd2YXJjaGFyKDY0KScpXG4gICAgICogICAuYWRkVW5pcXVlQ29uc3RyYWludChcbiAgICAgKiAgICAgJ2ZpcnN0X25hbWVfbGFzdF9uYW1lX3VuaXF1ZScsXG4gICAgICogICAgIFsnZmlyc3RfbmFtZScsICdsYXN0X25hbWUnXVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogSW4gZGlhbGVjdHMgc3VjaCBhcyBQb3N0Z3JlU1FMIHlvdSBjYW4gc3BlY2lmeSBgbnVsbHMgbm90IGRpc3RpbmN0YCBhcyBmb2xsb3dzOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgncGVyc29uJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ2ZpcnN0X25hbWUnLCAndmFyY2hhcig2NCknKVxuICAgICAqICAgLmFkZENvbHVtbignbGFzdF9uYW1lJywgJ3ZhcmNoYXIoNjQpJylcbiAgICAgKiAgIC5hZGRVbmlxdWVDb25zdHJhaW50KFxuICAgICAqICAgICAnZmlyc3RfbmFtZV9sYXN0X25hbWVfdW5pcXVlJyxcbiAgICAgKiAgICAgWydmaXJzdF9uYW1lJywgJ2xhc3RfbmFtZSddLFxuICAgICAqICAgICAoY2IpID0+IGNiLm51bGxzTm90RGlzdGluY3QoKVxuICAgICAqICAgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFkZFVuaXF1ZUNvbnN0cmFpbnQoY29uc3RyYWludE5hbWUsIGNvbHVtbnMsIGJ1aWxkID0gbm9vcCkge1xuICAgICAgICBjb25zdCB1bmlxdWVDb25zdHJhaW50QnVpbGRlciA9IGJ1aWxkKG5ldyBVbmlxdWVDb25zdHJhaW50Tm9kZUJ1aWxkZXIoVW5pcXVlQ29uc3RyYWludE5vZGUuY3JlYXRlKGNvbHVtbnMsIGNvbnN0cmFpbnROYW1lKSkpO1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVRhYmxlQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZVRhYmxlTm9kZS5jbG9uZVdpdGhDb25zdHJhaW50KHRoaXMuI3Byb3BzLm5vZGUsIHVuaXF1ZUNvbnN0cmFpbnRCdWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjaGVjayBjb25zdHJhaW50LlxuICAgICAqXG4gICAgICogVGhlIGNvbnN0cmFpbnQgbmFtZSBjYW4gYmUgYW55dGhpbmcgeW91IHdhbnQsIGJ1dCBpdCBtdXN0IGJlIHVuaXF1ZVxuICAgICAqIGFjcm9zcyB0aGUgd2hvbGUgZGF0YWJhc2UuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHtcdTAwQTBzcWwgfSBmcm9tICdreXNlbHknXG4gICAgICpcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgnYW5pbWFsJylcbiAgICAgKiAgIC5hZGRDb2x1bW4oJ251bWJlcl9vZl9sZWdzJywgJ2ludGVnZXInKVxuICAgICAqICAgLmFkZENoZWNrQ29uc3RyYWludCgnY2hlY2tfbGVncycsIHNxbGBudW1iZXJfb2ZfbGVncyA8IDVgKVxuICAgICAqICAgLmV4ZWN1dGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFkZENoZWNrQ29uc3RyYWludChjb25zdHJhaW50TmFtZSwgY2hlY2tFeHByZXNzaW9uLCBidWlsZCA9IG5vb3ApIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludEJ1aWxkZXIgPSBidWlsZChuZXcgQ2hlY2tDb25zdHJhaW50QnVpbGRlcihDaGVja0NvbnN0cmFpbnROb2RlLmNyZWF0ZShjaGVja0V4cHJlc3Npb24udG9PcGVyYXRpb25Ob2RlKCksIGNvbnN0cmFpbnROYW1lKSkpO1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVRhYmxlQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZVRhYmxlTm9kZS5jbG9uZVdpdGhDb25zdHJhaW50KHRoaXMuI3Byb3BzLm5vZGUsIGNvbnN0cmFpbnRCdWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBmb3JlaWduIGtleSBjb25zdHJhaW50LlxuICAgICAqXG4gICAgICogVGhlIGNvbnN0cmFpbnQgbmFtZSBjYW4gYmUgYW55dGhpbmcgeW91IHdhbnQsIGJ1dCBpdCBtdXN0IGJlIHVuaXF1ZVxuICAgICAqIGFjcm9zcyB0aGUgd2hvbGUgZGF0YWJhc2UuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BldCcpXG4gICAgICogICAuYWRkQ29sdW1uKCdvd25lcl9pZCcsICdpbnRlZ2VyJylcbiAgICAgKiAgIC5hZGRGb3JlaWduS2V5Q29uc3RyYWludChcbiAgICAgKiAgICAgJ293bmVyX2lkX2ZvcmVpZ24nLFxuICAgICAqICAgICBbJ293bmVyX2lkJ10sXG4gICAgICogICAgICdwZXJzb24nLFxuICAgICAqICAgICBbJ2lkJ10sXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBBZGQgY29uc3RyYWludCBmb3IgbXVsdGlwbGUgY29sdW1uczpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BldCcpXG4gICAgICogICAuYWRkQ29sdW1uKCdvd25lcl9pZDEnLCAnaW50ZWdlcicpXG4gICAgICogICAuYWRkQ29sdW1uKCdvd25lcl9pZDInLCAnaW50ZWdlcicpXG4gICAgICogICAuYWRkRm9yZWlnbktleUNvbnN0cmFpbnQoXG4gICAgICogICAgICdvd25lcl9pZF9mb3JlaWduJyxcbiAgICAgKiAgICAgWydvd25lcl9pZDEnLCAnb3duZXJfaWQyJ10sXG4gICAgICogICAgICdwZXJzb24nLFxuICAgICAqICAgICBbJ2lkMScsICdpZDInXSxcbiAgICAgKiAgICAgKGNiKSA9PiBjYi5vbkRlbGV0ZSgnY2FzY2FkZScpXG4gICAgICogICApXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgYWRkRm9yZWlnbktleUNvbnN0cmFpbnQoY29uc3RyYWludE5hbWUsIGNvbHVtbnMsIHRhcmdldFRhYmxlLCB0YXJnZXRDb2x1bW5zLCBidWlsZCA9IG5vb3ApIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGJ1aWxkKG5ldyBGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIoRm9yZWlnbktleUNvbnN0cmFpbnROb2RlLmNyZWF0ZShjb2x1bW5zLm1hcChDb2x1bW5Ob2RlLmNyZWF0ZSksIHBhcnNlVGFibGUodGFyZ2V0VGFibGUpLCB0YXJnZXRDb2x1bW5zLm1hcChDb2x1bW5Ob2RlLmNyZWF0ZSksIGNvbnN0cmFpbnROYW1lKSkpO1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVRhYmxlQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZVRhYmxlTm9kZS5jbG9uZVdpdGhDb25zdHJhaW50KHRoaXMuI3Byb3BzLm5vZGUsIGJ1aWxkZXIudG9PcGVyYXRpb25Ob2RlKCkpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBhZGQgYW55IGFkZGl0aW9uYWwgU1FMIHRvIHRoZSBmcm9udCBvZiB0aGUgcXVlcnkgX19hZnRlcl9fIHRoZSBgY3JlYXRlYCBrZXl3b3JkLlxuICAgICAqXG4gICAgICogQWxzbyBzZWUge0BsaW5rIHRlbXBvcmFyeX0uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAubW9kaWZ5RnJvbnQoc3FsYGdsb2JhbCB0ZW1wb3JhcnlgKVxuICAgICAqICAgLmFkZENvbHVtbignaWQnLCAnaW50ZWdlcicsIGNvbCA9PiBjb2wucHJpbWFyeUtleSgpKVxuICAgICAqICAgLmFkZENvbHVtbignZmlyc3RfbmFtZScsICd2YXJjaGFyKDY0KScsIGNvbCA9PiBjb2wubm90TnVsbCgpKVxuICAgICAqICAgLmFkZENvbHVtbignbGFzdF9uYW1lJywgJ3ZhcmNoYXIoNjQpJywgY29sID0+IGNvbC5ub3ROdWxsKCkpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGUgZ2VuZXJhdGVkIFNRTCAoUG9zdGdyZXMpOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogY3JlYXRlIGdsb2JhbCB0ZW1wb3JhcnkgdGFibGUgXCJwZXJzb25cIiAoXG4gICAgICogICBcImlkXCIgaW50ZWdlciBwcmltYXJ5IGtleSxcbiAgICAgKiAgIFwiZmlyc3RfbmFtZVwiIHZhcmNoYXIoNjQpIG5vdCBudWxsLFxuICAgICAqICAgXCJsYXN0X25hbWVcIiB2YXJjaGFyKDY0KSBub3QgbnVsbFxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBtb2RpZnlGcm9udChtb2RpZmllcikge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVRhYmxlQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZVRhYmxlTm9kZS5jbG9uZVdpdGhGcm9udE1vZGlmaWVyKHRoaXMuI3Byb3BzLm5vZGUsIG1vZGlmaWVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gYWRkIGFueSBhZGRpdGlvbmFsIFNRTCB0byB0aGUgZW5kIG9mIHRoZSBxdWVyeS5cbiAgICAgKlxuICAgICAqIEFsc28gc2VlIHtAbGluayBvbkNvbW1pdH0uXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgc3FsIH0gZnJvbSAna3lzZWx5J1xuICAgICAqXG4gICAgICogYXdhaXQgZGIuc2NoZW1hXG4gICAgICogICAuY3JlYXRlVGFibGUoJ3BlcnNvbicpXG4gICAgICogICAuYWRkQ29sdW1uKCdpZCcsICdpbnRlZ2VyJywgY29sID0+IGNvbC5wcmltYXJ5S2V5KCkpXG4gICAgICogICAuYWRkQ29sdW1uKCdmaXJzdF9uYW1lJywgJ3ZhcmNoYXIoNjQpJywgY29sID0+IGNvbC5ub3ROdWxsKCkpXG4gICAgICogICAuYWRkQ29sdW1uKCdsYXN0X25hbWUnLCAndmFyY2hhcig2NCknLCBjb2wgPT4gY29sLm5vdE51bGwoKSlcbiAgICAgKiAgIC5tb2RpZnlFbmQoc3FsYGNvbGxhdGUgdXRmOF91bmljb2RlX2NpYClcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChNeVNRTCk6XG4gICAgICpcbiAgICAgKiBgYGBzcWxcbiAgICAgKiBjcmVhdGUgdGFibGUgYHBlcnNvbmAgKFxuICAgICAqICAgYGlkYCBpbnRlZ2VyIHByaW1hcnkga2V5LFxuICAgICAqICAgYGZpcnN0X25hbWVgIHZhcmNoYXIoNjQpIG5vdCBudWxsLFxuICAgICAqICAgYGxhc3RfbmFtZWAgdmFyY2hhcig2NCkgbm90IG51bGxcbiAgICAgKiApIGNvbGxhdGUgdXRmOF91bmljb2RlX2NpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgbW9kaWZ5RW5kKG1vZGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlVGFibGVCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlVGFibGVOb2RlLmNsb25lV2l0aEVuZE1vZGlmaWVyKHRoaXMuI3Byb3BzLm5vZGUsIG1vZGlmaWVyLnRvT3BlcmF0aW9uTm9kZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsbG93cyB0byBjcmVhdGUgdGFibGUgZnJvbSBgc2VsZWN0YCBxdWVyeS5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgnY29weScpXG4gICAgICogICAudGVtcG9yYXJ5KClcbiAgICAgKiAgIC5hcyhkYi5zZWxlY3RGcm9tKCdwZXJzb24nKS5zZWxlY3QoWydmaXJzdF9uYW1lJywgJ2xhc3RfbmFtZSddKSlcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIFRoZSBnZW5lcmF0ZWQgU1FMIChQb3N0Z3JlU1FMKTpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGNyZWF0ZSB0ZW1wb3JhcnkgdGFibGUgXCJjb3B5XCIgYXNcbiAgICAgKiBzZWxlY3QgXCJmaXJzdF9uYW1lXCIsIFwibGFzdF9uYW1lXCIgZnJvbSBcInBlcnNvblwiXG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXMoZXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVRhYmxlQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IENyZWF0ZVRhYmxlTm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIHNlbGVjdFF1ZXJ5OiBwYXJzZUV4cHJlc3Npb24oZXhwcmVzc2lvbiksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGxzIHRoZSBnaXZlbiBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC5cbiAgICAgKlxuICAgICAqICMjIyBFeGFtcGxlc1xuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhd2FpdCBkYi5zY2hlbWFcbiAgICAgKiAgIC5jcmVhdGVUYWJsZSgndGVzdCcpXG4gICAgICogICAuJGNhbGwoKGJ1aWxkZXIpID0+IGJ1aWxkZXIuYWRkQ29sdW1uKCdpZCcsICdpbnRlZ2VyJykpXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgY3JlYXRpbmcgcmV1c2FibGUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGNhbGxlZCB3aXRoIGEgYnVpbGRlci5cbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgdHlwZSBDcmVhdGVUYWJsZUJ1aWxkZXIsIHNxbCB9IGZyb20gJ2t5c2VseSdcbiAgICAgKlxuICAgICAqIGNvbnN0IGFkZERlZmF1bHRDb2x1bW5zID0gKGN0YjogQ3JlYXRlVGFibGVCdWlsZGVyPGFueSwgYW55PikgPT4ge1xuICAgICAqICAgcmV0dXJuIGN0YlxuICAgICAqICAgICAuYWRkQ29sdW1uKCdpZCcsICdpbnRlZ2VyJywgKGNvbCkgPT4gY29sLm5vdE51bGwoKSlcbiAgICAgKiAgICAgLmFkZENvbHVtbignY3JlYXRlZF9hdCcsICdkYXRlJywgKGNvbCkgPT5cbiAgICAgKiAgICAgICBjb2wubm90TnVsbCgpLmRlZmF1bHRUbyhzcWxgbm93KClgKVxuICAgICAqICAgICApXG4gICAgICogICAgIC5hZGRDb2x1bW4oJ3VwZGF0ZWRfYXQnLCAnZGF0ZScsIChjb2wpID0+XG4gICAgICogICAgICAgY29sLm5vdE51bGwoKS5kZWZhdWx0VG8oc3FsYG5vdygpYClcbiAgICAgKiAgICAgKVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGF3YWl0IGRiLnNjaGVtYVxuICAgICAqICAgLmNyZWF0ZVRhYmxlKCd0ZXN0JylcbiAgICAgKiAgIC4kY2FsbChhZGREZWZhdWx0Q29sdW1ucylcbiAgICAgKiAgIC5leGVjdXRlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5ub2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLnRvT3BlcmF0aW9uTm9kZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KHRoaXMuY29tcGlsZSgpKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL29uLWNvbW1pdC1hY3Rpb24tcGFyc2UuZC50c1wiIC8+XG5pbXBvcnQgeyBPTl9DT01NSVRfQUNUSU9OUywgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jcmVhdGUtdGFibGUtbm9kZS5qcyc7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPbkNvbW1pdEFjdGlvbihhY3Rpb24pIHtcbiAgICBpZiAoT05fQ09NTUlUX0FDVElPTlMuaW5jbHVkZXMoYWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gYWN0aW9uO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgT25Db21taXRBY3Rpb24gJHthY3Rpb259YCk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Ryb3AtaW5kZXgtYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IERyb3BJbmRleE5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9kcm9wLWluZGV4LW5vZGUuanMnO1xuaW1wb3J0IHsgcGFyc2VUYWJsZSB9IGZyb20gJy4uL3BhcnNlci90YWJsZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIERyb3BJbmRleEJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgdGFibGUgdGhlIGluZGV4IHdhcyBjcmVhdGVkIGZvci4gVGhpcyBpcyBub3QgbmVlZGVkXG4gICAgICogaW4gYWxsIGRpYWxlY3RzLlxuICAgICAqL1xuICAgIG9uKHRhYmxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRHJvcEluZGV4QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IERyb3BJbmRleE5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICB0YWJsZTogcGFyc2VUYWJsZSh0YWJsZSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmRXhpc3RzKCkge1xuICAgICAgICByZXR1cm4gbmV3IERyb3BJbmRleEJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBEcm9wSW5kZXhOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgaWZFeGlzdHM6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhc2NhZGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRHJvcEluZGV4QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IERyb3BJbmRleE5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBjYXNjYWRlOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KHRoaXMuI3Byb3BzLm5vZGUsIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBjb21waWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IuY29tcGlsZVF1ZXJ5KHRoaXMudG9PcGVyYXRpb25Ob2RlKCksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLiNwcm9wcy5leGVjdXRvci5leGVjdXRlUXVlcnkodGhpcy5jb21waWxlKCkpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZHJvcC1zY2hlbWEtYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IERyb3BTY2hlbWFOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvZHJvcC1zY2hlbWEtbm9kZS5qcyc7XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgY2xhc3MgRHJvcFNjaGVtYUJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIGlmRXhpc3RzKCkge1xuICAgICAgICByZXR1cm4gbmV3IERyb3BTY2hlbWFCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogRHJvcFNjaGVtYU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBpZkV4aXN0czogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2FzY2FkZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wU2NoZW1hQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IERyb3BTY2hlbWFOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgY2FzY2FkZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5ub2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLnRvT3BlcmF0aW9uTm9kZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KHRoaXMuY29tcGlsZSgpKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Ryb3AtdGFibGUtYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IERyb3BUYWJsZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9kcm9wLXRhYmxlLW5vZGUuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNsYXNzIERyb3BUYWJsZUJ1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIGlmRXhpc3RzKCkge1xuICAgICAgICByZXR1cm4gbmV3IERyb3BUYWJsZUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBEcm9wVGFibGVOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgaWZFeGlzdHM6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhc2NhZGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRHJvcFRhYmxlQnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IERyb3BUYWJsZU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBjYXNjYWRlOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KHRoaXMuI3Byb3BzLm5vZGUsIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBjb21waWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IuY29tcGlsZVF1ZXJ5KHRoaXMudG9PcGVyYXRpb25Ob2RlKCksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLiNwcm9wcy5leGVjdXRvci5leGVjdXRlUXVlcnkodGhpcy5jb21waWxlKCkpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vY3JlYXRlLXZpZXctYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IENyZWF0ZVZpZXdOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvY3JlYXRlLXZpZXctbm9kZS5qcyc7XG5pbXBvcnQgeyBwYXJzZUNvbHVtbk5hbWUgfSBmcm9tICcuLi9wYXJzZXIvcmVmZXJlbmNlLXBhcnNlci5qcyc7XG5pbXBvcnQgeyBJbW1lZGlhdGVWYWx1ZVBsdWdpbiB9IGZyb20gJy4uL3BsdWdpbi9pbW1lZGlhdGUtdmFsdWUvaW1tZWRpYXRlLXZhbHVlLXBsdWdpbi5qcyc7XG5leHBvcnQgY2xhc3MgQ3JlYXRlVmlld0J1aWxkZXIge1xuICAgICNwcm9wcztcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgICAgICB0aGlzLiNwcm9wcyA9IGZyZWV6ZShwcm9wcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIFwidGVtcG9yYXJ5XCIgbW9kaWZpZXIuXG4gICAgICpcbiAgICAgKiBVc2UgdGhpcyB0byBjcmVhdGUgYSB0ZW1wb3Jhcnkgdmlldy5cbiAgICAgKi9cbiAgICB0ZW1wb3JhcnkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlVmlld0J1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVWaWV3Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIHRlbXBvcmFyeTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWF0ZXJpYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVZpZXdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlVmlld05vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWQ6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE9ubHkgaW1wbGVtZW50ZWQgb24gc29tZSBkaWFsZWN0cyBsaWtlIFNRTGl0ZS4gT24gbW9zdCBkaWFsZWN0cywgdXNlIHtAbGluayBvclJlcGxhY2V9LlxuICAgICAqL1xuICAgIGlmTm90RXhpc3RzKCkge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVZpZXdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlVmlld05vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBpZk5vdEV4aXN0czogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb3JSZXBsYWNlKCkge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVZpZXdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlVmlld05vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBvclJlcGxhY2U6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbHVtbnMoY29sdW1ucykge1xuICAgICAgICByZXR1cm4gbmV3IENyZWF0ZVZpZXdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogQ3JlYXRlVmlld05vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLm1hcChwYXJzZUNvbHVtbk5hbWUpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzZWxlY3QgcXVlcnkgb3IgYSBgdmFsdWVzYCBzdGF0ZW1lbnQgdGhhdCBjcmVhdGVzIHRoZSB2aWV3LlxuICAgICAqXG4gICAgICogV0FSTklORyFcbiAgICAgKiBTb21lIGRpYWxlY3RzIGRvbid0IHN1cHBvcnQgcGFyYW1ldGVyaXplZCBxdWVyaWVzIGluIERETCBzdGF0ZW1lbnRzIGFuZCB0aGVyZWZvcmVcbiAgICAgKiB0aGUgcXVlcnkgb3IgcmF3IHtAbGluayBzcWwgfSBleHByZXNzaW9uIHBhc3NlZCBoZXJlIGlzIGludGVycG9sYXRlZCBpbnRvIGEgc2luZ2xlXG4gICAgICogc3RyaW5nIG9wZW5pbmcgYW4gU1FMIGluamVjdGlvbiB2dWxuZXJhYmlsaXR5LiBETyBOT1QgcGFzcyB1bmNoZWNrZWQgdXNlciBpbnB1dFxuICAgICAqIGludG8gdGhlIHF1ZXJ5IG9yIHJhdyBleHByZXNzaW9uIHBhc3NlZCB0byB0aGlzIG1ldGhvZCFcbiAgICAgKi9cbiAgICBhcyhxdWVyeSkge1xuICAgICAgICBjb25zdCBxdWVyeU5vZGUgPSBxdWVyeVxuICAgICAgICAgICAgLndpdGhQbHVnaW4obmV3IEltbWVkaWF0ZVZhbHVlUGx1Z2luKCkpXG4gICAgICAgICAgICAudG9PcGVyYXRpb25Ob2RlKCk7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlVmlld0J1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVWaWV3Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIGFzOiBxdWVyeU5vZGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IudHJhbnNmb3JtUXVlcnkodGhpcy4jcHJvcHMubm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmV4ZWN1dGVRdWVyeSh0aGlzLmNvbXBpbGUoKSk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jcmVhdGUtdmlldy1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgU2NoZW1hYmxlSWRlbnRpZmllck5vZGUgfSBmcm9tICcuL3NjaGVtYWJsZS1pZGVudGlmaWVyLW5vZGUuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IENyZWF0ZVZpZXdOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdDcmVhdGVWaWV3Tm9kZSc7XG4gICAgfSxcbiAgICBjcmVhdGUobmFtZSkge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIGtpbmQ6ICdDcmVhdGVWaWV3Tm9kZScsXG4gICAgICAgICAgICBuYW1lOiBTY2hlbWFibGVJZGVudGlmaWVyTm9kZS5jcmVhdGUobmFtZSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoKGNyZWF0ZVZpZXcsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmNyZWF0ZVZpZXcsXG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vaW1tZWRpYXRlLXZhbHVlLXBsdWdpbi5kLnRzXCIgLz5cbmltcG9ydCB7IEltbWVkaWF0ZVZhbHVlVHJhbnNmb3JtZXIgfSBmcm9tICcuL2ltbWVkaWF0ZS12YWx1ZS10cmFuc2Zvcm1lci5qcyc7XG4vKipcbiAqIFRyYW5zZm9ybXMgYWxsIFZhbHVlTm9kZXMgdG8gaW1tZWRpYXRlLlxuICpcbiAqIFdBUk5JTkchIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkuIFVzZXJzIHNob3VsZCBuZXZlciB1c2UgdGhpcy5cbiAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVscGVyLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgSW1tZWRpYXRlVmFsdWVQbHVnaW4ge1xuICAgICN0cmFuc2Zvcm1lciA9IG5ldyBJbW1lZGlhdGVWYWx1ZVRyYW5zZm9ybWVyKCk7XG4gICAgdHJhbnNmb3JtUXVlcnkoYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy4jdHJhbnNmb3JtZXIudHJhbnNmb3JtTm9kZShhcmdzLm5vZGUsIGFyZ3MucXVlcnlJZCk7XG4gICAgfVxuICAgIHRyYW5zZm9ybVJlc3VsdChhcmdzKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYXJncy5yZXN1bHQpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZHJvcC12aWV3LWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBEcm9wVmlld05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9kcm9wLXZpZXctbm9kZS5qcyc7XG5leHBvcnQgY2xhc3MgRHJvcFZpZXdCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBtYXRlcmlhbGl6ZWQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRHJvcFZpZXdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogRHJvcFZpZXdOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgbWF0ZXJpYWxpemVkOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZkV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wVmlld0J1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBEcm9wVmlld05vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBpZkV4aXN0czogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2FzY2FkZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wVmlld0J1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBEcm9wVmlld05vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBjYXNjYWRlOiB0cnVlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIHRvT3BlcmF0aW9uTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLnRyYW5zZm9ybVF1ZXJ5KHRoaXMuI3Byb3BzLm5vZGUsIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBjb21waWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IuY29tcGlsZVF1ZXJ5KHRoaXMudG9PcGVyYXRpb25Ob2RlKCksIHRoaXMuI3Byb3BzLnF1ZXJ5SWQpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLiNwcm9wcy5leGVjdXRvci5leGVjdXRlUXVlcnkodGhpcy5jb21waWxlKCkpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZHJvcC12aWV3LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBTY2hlbWFibGVJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4vc2NoZW1hYmxlLWlkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgRHJvcFZpZXdOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdEcm9wVmlld05vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnRHJvcFZpZXdOb2RlJyxcbiAgICAgICAgICAgIG5hbWU6IFNjaGVtYWJsZUlkZW50aWZpZXJOb2RlLmNyZWF0ZShuYW1lKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGgoZHJvcFZpZXcsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIC4uLmRyb3BWaWV3LFxuICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICB9KTtcbiAgICB9LFxufSk7XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2NyZWF0ZS10eXBlLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBDcmVhdGVUeXBlTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NyZWF0ZS10eXBlLW5vZGUuanMnO1xuZXhwb3J0IGNsYXNzIENyZWF0ZVR5cGVCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5ub2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhbnVtIHR5cGUuXG4gICAgICpcbiAgICAgKiAjIyMgRXhhbXBsZXNcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogZGIuc2NoZW1hLmNyZWF0ZVR5cGUoJ3NwZWNpZXMnKS5hc0VudW0oWydjYXQnLCAnZG9nJywgJ2Zyb2cnXSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc0VudW0odmFsdWVzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ3JlYXRlVHlwZUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBDcmVhdGVUeXBlTm9kZS5jbG9uZVdpdGhFbnVtKHRoaXMuI3Byb3BzLm5vZGUsIHZhbHVlcyksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTaW1wbHkgY2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHBhc3NpbmcgYHRoaXNgIGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBgJGNhbGxgIHJldHVybnNcbiAgICAgKiB3aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiByZXR1cm5zLlxuICAgICAqL1xuICAgICRjYWxsKGZ1bmMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGhpcyk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmV4ZWN1dGVRdWVyeSh0aGlzLmNvbXBpbGUoKSk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jcmVhdGUtdHlwZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgVmFsdWVMaXN0Tm9kZSB9IGZyb20gJy4vdmFsdWUtbGlzdC1ub2RlLmpzJztcbmltcG9ydCB7IFZhbHVlTm9kZSB9IGZyb20gJy4vdmFsdWUtbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQ3JlYXRlVHlwZU5vZGUgPSBmcmVlemUoe1xuICAgIGlzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUua2luZCA9PT0gJ0NyZWF0ZVR5cGVOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShuYW1lKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0NyZWF0ZVR5cGVOb2RlJyxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xvbmVXaXRoRW51bShjcmVhdGVUeXBlLCB2YWx1ZXMpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICAuLi5jcmVhdGVUeXBlLFxuICAgICAgICAgICAgZW51bTogVmFsdWVMaXN0Tm9kZS5jcmVhdGUodmFsdWVzLm1hcChWYWx1ZU5vZGUuY3JlYXRlSW1tZWRpYXRlKSksXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZHJvcC10eXBlLWJ1aWxkZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBEcm9wVHlwZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9kcm9wLXR5cGUtbm9kZS5qcyc7XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgY2xhc3MgRHJvcFR5cGVCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBpZkV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wVHlwZUJ1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBEcm9wVHlwZU5vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICBpZkV4aXN0czogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2ltcGx5IGNhbGxzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwYXNzaW5nIGB0aGlzYCBhcyB0aGUgb25seSBhcmd1bWVudC4gYCRjYWxsYCByZXR1cm5zXG4gICAgICogd2hhdCB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcmV0dXJucy5cbiAgICAgKi9cbiAgICAkY2FsbChmdW5jKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMpO1xuICAgIH1cbiAgICB0b09wZXJhdGlvbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5ub2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgY29tcGlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLnRvT3BlcmF0aW9uTm9kZSgpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jcHJvcHMuZXhlY3V0b3IuZXhlY3V0ZVF1ZXJ5KHRoaXMuY29tcGlsZSgpKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2Ryb3AtdHlwZS1ub2RlLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IERyb3BUeXBlTm9kZSA9IGZyZWV6ZSh7XG4gICAgaXMobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5raW5kID09PSAnRHJvcFR5cGVOb2RlJztcbiAgICB9LFxuICAgIGNyZWF0ZShuYW1lKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAga2luZDogJ0Ryb3BUeXBlTm9kZScsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGNsb25lV2l0aChkcm9wVHlwZSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uZHJvcFR5cGUsXG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIH0pO1xuICAgIH0sXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vaWRlbnRpZmllci1wYXJzZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBTY2hlbWFibGVJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3NjaGVtYWJsZS1pZGVudGlmaWVyLW5vZGUuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2NoZW1hYmxlSWRlbnRpZmllcihpZCkge1xuICAgIGNvbnN0IFNDSEVNQV9TRVBBUkFUT1IgPSAnLic7XG4gICAgaWYgKGlkLmluY2x1ZGVzKFNDSEVNQV9TRVBBUkFUT1IpKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gaWQuc3BsaXQoU0NIRU1BX1NFUEFSQVRPUikubWFwKHRyaW0pO1xuICAgICAgICBpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gU2NoZW1hYmxlSWRlbnRpZmllck5vZGUuY3JlYXRlV2l0aFNjaGVtYShwYXJ0c1swXSwgcGFydHNbMV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHNjaGVtYWJsZSBpZGVudGlmaWVyICR7aWR9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBTY2hlbWFibGVJZGVudGlmaWVyTm9kZS5jcmVhdGUoaWQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gICAgcmV0dXJuIHN0ci50cmltKCk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3JlZnJlc2gtbWF0ZXJpYWxpemVkLXZpZXctYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmltcG9ydCB7IFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3JlZnJlc2gtbWF0ZXJpYWxpemVkLXZpZXctbm9kZS5qcyc7XG5leHBvcnQgY2xhc3MgUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdCdWlsZGVyIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBcImNvbmN1cnJlbnRseVwiIG1vZGlmaWVyLlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgdG8gcmVmcmVzaCB0aGUgdmlldyB3aXRob3V0IGxvY2tpbmcgb3V0IGNvbmN1cnJlbnQgc2VsZWN0cyBvbiB0aGUgbWF0ZXJpYWxpemVkIHZpZXcuXG4gICAgICpcbiAgICAgKiBXQVJOSU5HIVxuICAgICAqIFRoaXMgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGUgXCJ3aXRoIG5vIGRhdGFcIiBtb2RpZmllci5cbiAgICAgKi9cbiAgICBjb25jdXJyZW50bHkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdCdWlsZGVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgbm9kZTogUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdOb2RlLmNsb25lV2l0aCh0aGlzLiNwcm9wcy5ub2RlLCB7XG4gICAgICAgICAgICAgICAgY29uY3VycmVudGx5OiB0cnVlLFxuICAgICAgICAgICAgICAgIHdpdGhOb0RhdGE6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBcIndpdGggZGF0YVwiIG1vZGlmaWVyLlxuICAgICAqXG4gICAgICogSWYgc3BlY2lmaWVkIChvciBkZWZhdWx0cykgdGhlIGJhY2tpbmcgcXVlcnkgaXMgZXhlY3V0ZWQgdG8gcHJvdmlkZSB0aGUgbmV3IGRhdGEsIGFuZCB0aGUgbWF0ZXJpYWxpemVkIHZpZXcgaXMgbGVmdCBpbiBhIHNjYW5uYWJsZSBzdGF0ZVxuICAgICAqL1xuICAgIHdpdGhEYXRhKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3QnVpbGRlcih7XG4gICAgICAgICAgICAuLi50aGlzLiNwcm9wcyxcbiAgICAgICAgICAgIG5vZGU6IFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3Tm9kZS5jbG9uZVdpdGgodGhpcy4jcHJvcHMubm9kZSwge1xuICAgICAgICAgICAgICAgIHdpdGhOb0RhdGE6IGZhbHNlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBcIndpdGggbm8gZGF0YVwiIG1vZGlmaWVyLlxuICAgICAqXG4gICAgICogSWYgc3BlY2lmaWVkLCBubyBuZXcgZGF0YSBpcyBnZW5lcmF0ZWQgYW5kIHRoZSBtYXRlcmlhbGl6ZWQgdmlldyBpcyBsZWZ0IGluIGFuIHVuc2Nhbm5hYmxlIHN0YXRlLlxuICAgICAqXG4gICAgICogV0FSTklORyFcbiAgICAgKiBUaGlzIGNhbm5vdCBiZSB1c2VkIHdpdGggdGhlIFwiY29uY3VycmVudGx5XCIgbW9kaWZpZXIuXG4gICAgICovXG4gICAgd2l0aE5vRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWZyZXNoTWF0ZXJpYWxpemVkVmlld0J1aWxkZXIoe1xuICAgICAgICAgICAgLi4udGhpcy4jcHJvcHMsXG4gICAgICAgICAgICBub2RlOiBSZWZyZXNoTWF0ZXJpYWxpemVkVmlld05vZGUuY2xvbmVXaXRoKHRoaXMuI3Byb3BzLm5vZGUsIHtcbiAgICAgICAgICAgICAgICB3aXRoTm9EYXRhOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbmN1cnJlbnRseTogZmFsc2UsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpbXBseSBjYWxscyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gcGFzc2luZyBgdGhpc2AgYXMgdGhlIG9ubHkgYXJndW1lbnQuIGAkY2FsbGAgcmV0dXJuc1xuICAgICAqIHdoYXQgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHJldHVybnMuXG4gICAgICovXG4gICAgJGNhbGwoZnVuYykge1xuICAgICAgICByZXR1cm4gZnVuYyh0aGlzKTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMuZXhlY3V0b3IudHJhbnNmb3JtUXVlcnkodGhpcy4jcHJvcHMubm9kZSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGNvbXBpbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwcm9wcy5leGVjdXRvci5jb21waWxlUXVlcnkodGhpcy50b09wZXJhdGlvbk5vZGUoKSwgdGhpcy4jcHJvcHMucXVlcnlJZCk7XG4gICAgfVxuICAgIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI3Byb3BzLmV4ZWN1dG9yLmV4ZWN1dGVRdWVyeSh0aGlzLmNvbXBpbGUoKSk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9yZWZyZXNoLW1hdGVyaWFsaXplZC12aWV3LW5vZGUuZC50c1wiIC8+XG5pbXBvcnQgeyBmcmVlemUgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBTY2hlbWFibGVJZGVudGlmaWVyTm9kZSB9IGZyb20gJy4vc2NoZW1hYmxlLWlkZW50aWZpZXItbm9kZS5qcyc7XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdOb2RlID0gZnJlZXplKHtcbiAgICBpcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmtpbmQgPT09ICdSZWZyZXNoTWF0ZXJpYWxpemVkVmlld05vZGUnO1xuICAgIH0sXG4gICAgY3JlYXRlKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh7XG4gICAgICAgICAgICBraW5kOiAnUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdOb2RlJyxcbiAgICAgICAgICAgIG5hbWU6IFNjaGVtYWJsZUlkZW50aWZpZXJOb2RlLmNyZWF0ZShuYW1lKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9uZVdpdGgoY3JlYXRlVmlldywgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBmcmVlemUoe1xuICAgICAgICAgICAgLi4uY3JlYXRlVmlldyxcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9keW5hbWljLmQudHNcIiAvPlxuaW1wb3J0IHsgRHluYW1pY1JlZmVyZW5jZUJ1aWxkZXIgfSBmcm9tICcuL2R5bmFtaWMtcmVmZXJlbmNlLWJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgRHluYW1pY1RhYmxlQnVpbGRlciB9IGZyb20gJy4vZHluYW1pYy10YWJsZS1idWlsZGVyLmpzJztcbmV4cG9ydCBjbGFzcyBEeW5hbWljTW9kdWxlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgZHluYW1pYyByZWZlcmVuY2UgdG8gYSBjb2x1bW4gdGhhdCBpcyBub3Qga25vdyBhdCBjb21waWxlIHRpbWUuXG4gICAgICpcbiAgICAgKiBLeXNlbHkgaXMgYnVpbHQgaW4gYSB3YXkgdGhhdCBieSBkZWZhdWx0IHlvdSBjYW4ndCByZWZlciB0byB0YWJsZXMgb3IgY29sdW1uc1xuICAgICAqIHRoYXQgYXJlIG5vdCBhY3R1YWxseSB2aXNpYmxlIGluIHRoZSBjdXJyZW50IHF1ZXJ5IGFuZCBjb250ZXh0LiBUaGlzIGlzIGFsbFxuICAgICAqIGRvbmUgYnkgVHlwZVNjcmlwdCBhdCBjb21waWxlIHRpbWUsIHdoaWNoIG1lYW5zIHRoYXQgeW91IG5lZWQgdG8ga25vdyB0aGVcbiAgICAgKiBjb2x1bW5zIGFuZCB0YWJsZXMgYXQgY29tcGlsZSB0aW1lLiBUaGlzIGlzIG5vdCBhbHdheXMgdGhlIGNhc2Ugb2YgY291cnNlLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbWVhbnQgdG8gYmUgdXNlZCBpbiB0aG9zZSBjYXNlcyB3aGVyZSB0aGUgY29sdW1uIG5hbWVzXG4gICAgICogY29tZSBmcm9tIHRoZSB1c2VyIGlucHV0IG9yIGFyZSBub3Qgb3RoZXJ3aXNlIGtub3duIGF0IGNvbXBpbGUgdGltZS5cbiAgICAgKlxuICAgICAqIFdBUk5JTkchIFVubGlrZSB2YWx1ZXMsIGNvbHVtbiBuYW1lcyBhcmUgbm90IGVzY2FwZWQgYnkgdGhlIGRhdGFiYXNlIGVuZ2luZVxuICAgICAqIG9yIEt5c2VseSBhbmQgaWYgeW91IHBhc3MgaW4gdW5jaGVja2VkIGNvbHVtbiBuYW1lcyB1c2luZyB0aGlzIG1ldGhvZCwgeW91XG4gICAgICogY3JlYXRlIGFuIFNRTCBpbmplY3Rpb24gdnVsbmVyYWJpbGl0eS4gQWx3YXlzIF9fYWx3YXlzX18gdmFsaWRhdGUgdGhlIHVzZXJcbiAgICAgKiBpbnB1dCBiZWZvcmUgcGFzc2luZyBpdCB0byB0aGlzIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIFRoZXJlIGFyZSBjb3VwbGUgb2YgZXhhbXBsZXMgYmVsb3cgZm9yIHNvbWUgdXNlIGNhc2VzLCBidXQgeW91IGNhbiBwYXNzXG4gICAgICogYHJlZmAgdG8gb3RoZXIgbWV0aG9kcyBhcyB3ZWxsLiBJZiB0aGUgdHlwZXMgYWxsb3cgeW91IHRvIHBhc3MgYSBgcmVmYFxuICAgICAqIHZhbHVlIHRvIHNvbWUgcGxhY2UsIGl0IHNob3VsZCB3b3JrLlxuICAgICAqXG4gICAgICogIyMjIEV4YW1wbGVzXG4gICAgICpcbiAgICAgKiBGaWx0ZXIgYnkgYSBjb2x1bW4gbm90IGtub3cgYXQgY29tcGlsZSB0aW1lOlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBhc3luYyBmdW5jdGlvbiBzb21lUXVlcnkoZmlsdGVyQ29sdW1uOiBzdHJpbmcsIGZpbHRlclZhbHVlOiBzdHJpbmcpIHtcbiAgICAgKiAgIGNvbnN0IHsgcmVmIH0gPSBkYi5keW5hbWljXG4gICAgICpcbiAgICAgKiAgIHJldHVybiBhd2FpdCBkYlxuICAgICAqICAgICAuc2VsZWN0RnJvbSgncGVyc29uJylcbiAgICAgKiAgICAgLnNlbGVjdEFsbCgpXG4gICAgICogICAgIC53aGVyZShyZWYoZmlsdGVyQ29sdW1uKSwgJz0nLCBmaWx0ZXJWYWx1ZSlcbiAgICAgKiAgICAgLmV4ZWN1dGUoKVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHNvbWVRdWVyeSgnZmlyc3RfbmFtZScsICdBcm5vbGQnKVxuICAgICAqIHNvbWVRdWVyeSgncGVyc29uLmxhc3RfbmFtZScsICdBbmlzdG9uJylcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIE9yZGVyIGJ5IGEgY29sdW1uIG5vdCBrbm93IGF0IGNvbXBpbGUgdGltZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogYXN5bmMgZnVuY3Rpb24gc29tZVF1ZXJ5KG9yZGVyQnk6IHN0cmluZykge1xuICAgICAqICAgY29uc3QgeyByZWYgfSA9IGRiLmR5bmFtaWNcbiAgICAgKlxuICAgICAqICAgcmV0dXJuIGF3YWl0IGRiXG4gICAgICogICAgIC5zZWxlY3RGcm9tKCdwZXJzb24nKVxuICAgICAqICAgICAuc2VsZWN0KCdwZXJzb24uZmlyc3RfbmFtZSBhcyBmbicpXG4gICAgICogICAgIC5vcmRlckJ5KHJlZihvcmRlckJ5KSlcbiAgICAgKiAgICAgLmV4ZWN1dGUoKVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIHNvbWVRdWVyeSgnZm4nKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogSW4gdGhpcyBleGFtcGxlIHdlIGFkZCBzZWxlY3Rpb25zIGR5bmFtaWNhbGx5OlxuICAgICAqXG4gICAgICogYGBgdHNcbiAgICAgKiBjb25zdCB7IHJlZiB9ID0gZGIuZHluYW1pY1xuICAgICAqXG4gICAgICogLy8gU29tZSBjb2x1bW4gbmFtZSBwcm92aWRlZCBieSB0aGUgdXNlci4gVmFsdWUgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZS5cbiAgICAgKiBjb25zdCBjb2x1bW5Gcm9tVXNlcklucHV0OiBQb3NzaWJsZUNvbHVtbnMgPSAnYmlydGhkYXRlJztcbiAgICAgKlxuICAgICAqIC8vIEEgdHlwZSB0aGF0IGxpc3RzIGFsbCBwb3NzaWJsZSB2YWx1ZXMgYGNvbHVtbkZyb21Vc2VySW5wdXRgIGNhbiBoYXZlLlxuICAgICAqIC8vIFlvdSBjYW4gdXNlIGBrZXlvZiBQZXJzb25gIGlmIGFueSBjb2x1bW4gb2YgYW4gaW50ZXJmYWNlIGlzIGFsbG93ZWQuXG4gICAgICogdHlwZSBQb3NzaWJsZUNvbHVtbnMgPSAnbGFzdF9uYW1lJyB8ICdmaXJzdF9uYW1lJyB8ICdiaXJ0aGRhdGUnXG4gICAgICpcbiAgICAgKiBjb25zdCBbcGVyc29uXSA9IGF3YWl0IGRiLnNlbGVjdEZyb20oJ3BlcnNvbicpXG4gICAgICogICAuc2VsZWN0KFtcbiAgICAgKiAgICAgcmVmPFBvc3NpYmxlQ29sdW1ucz4oY29sdW1uRnJvbVVzZXJJbnB1dCksXG4gICAgICogICAgICdpZCdcbiAgICAgKiAgIF0pXG4gICAgICogICAuZXhlY3V0ZSgpXG4gICAgICpcbiAgICAgKiAvLyBUaGUgcmVzdWx0aW5nIHR5cGUgY29udGFpbnMgYWxsIGBQb3NzaWJsZUNvbHVtbnNgIGFzIG9wdGlvbmFsIGZpZWxkc1xuICAgICAqIC8vIGJlY2F1c2Ugd2UgY2Fubm90IGtub3cgd2hpY2ggZmllbGQgd2FzIGFjdHVhbGx5IHNlbGVjdGVkIGJlZm9yZVxuICAgICAqIC8vIHJ1bm5pbmcgdGhlIGNvZGUuXG4gICAgICogY29uc3QgbGFzdE5hbWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBwZXJzb24/Lmxhc3RfbmFtZVxuICAgICAqIGNvbnN0IGZpcnN0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gcGVyc29uPy5maXJzdF9uYW1lXG4gICAgICogY29uc3QgYmlydGhEYXRlOiBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHBlcnNvbj8uYmlydGhkYXRlXG4gICAgICpcbiAgICAgKiAvLyBUaGUgcmVzdWx0IHR5cGUgYWxzbyBjb250YWlucyB0aGUgY29tcGlsZSB0aW1lIHNlbGVjdGlvbiBgaWRgLlxuICAgICAqIHBlcnNvbj8uaWRcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZWYocmVmZXJlbmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRHluYW1pY1JlZmVyZW5jZUJ1aWxkZXIocmVmZXJlbmNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHRhYmxlIHJlZmVyZW5jZSB0byBhIHRhYmxlIHRoYXQncyBub3QgZnVsbHkga25vd24gYXQgY29tcGlsZSB0aW1lLlxuICAgICAqXG4gICAgICogVGhlIHR5cGUgYFRgIGlzIGFsbG93ZWQgdG8gYmUgYSB1bmlvbiBvZiBtdWx0aXBsZSB0YWJsZXMuXG4gICAgICpcbiAgICAgKiA8IS0tIHNpdGVFeGFtcGxlKFwic2VsZWN0XCIsIFwiR2VuZXJpYyBmaW5kIHF1ZXJ5XCIsIDEzMCkgLS0+XG4gICAgICpcbiAgICAgKiBBIGdlbmVyaWMgdHlwZS1zYWZlIGhlbHBlciBmdW5jdGlvbiBmb3IgZmluZGluZyBhIHJvdyBieSBhIGNvbHVtbiB2YWx1ZTpcbiAgICAgKlxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgU2VsZWN0VHlwZSB9IGZyb20gJ2t5c2VseSdcbiAgICAgKiBpbXBvcnQgeyBEYXRhYmFzZSB9IGZyb20gJ3R5cGUtZWRpdG9yJ1xuICAgICAqXG4gICAgICogYXN5bmMgZnVuY3Rpb24gZ2V0Um93QnlDb2x1bW48XG4gICAgICogICBUIGV4dGVuZHMga2V5b2YgRGF0YWJhc2UsXG4gICAgICogICBDIGV4dGVuZHMga2V5b2YgRGF0YWJhc2VbVF0gJiBzdHJpbmcsXG4gICAgICogICBWIGV4dGVuZHMgU2VsZWN0VHlwZTxEYXRhYmFzZVtUXVtDXT4sXG4gICAgICogPih0OiBULCBjOiBDLCB2OiBWKSB7XG4gICAgICogICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgZHluYW1pYyBtb2R1bGUgc2luY2UgdGhlIHRhYmxlIG5hbWVcbiAgICAgKiAgIC8vIGlzIG5vdCBrbm93biBhdCBjb21waWxlIHRpbWUuXG4gICAgICogICBjb25zdCB7IHRhYmxlLCByZWYgfSA9IGRiLmR5bmFtaWNcbiAgICAgKlxuICAgICAqICAgcmV0dXJuIGF3YWl0IGRiXG4gICAgICogICAgIC5zZWxlY3RGcm9tKHRhYmxlKHQpLmFzKCd0JykpXG4gICAgICogICAgIC5zZWxlY3RBbGwoKVxuICAgICAqICAgICAud2hlcmUocmVmKGMpLCAnPScsIHYpXG4gICAgICogICAgIC5vcmRlckJ5KCd0LmlkJylcbiAgICAgKiAgICAgLmV4ZWN1dGVUYWtlRmlyc3RPclRocm93KClcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBjb25zdCBwZXJzb24gPSBhd2FpdCBnZXRSb3dCeUNvbHVtbigncGVyc29uJywgJ2ZpcnN0X25hbWUnLCAnQXJub2xkJylcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICB0YWJsZSh0YWJsZSkge1xuICAgICAgICByZXR1cm4gbmV3IER5bmFtaWNUYWJsZUJ1aWxkZXIodGFibGUpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vZGVmYXVsdC1jb25uZWN0aW9uLXByb3ZpZGVyLmQudHNcIiAvPlxuZXhwb3J0IGNsYXNzIERlZmF1bHRDb25uZWN0aW9uUHJvdmlkZXIge1xuICAgICNkcml2ZXI7XG4gICAgY29uc3RydWN0b3IoZHJpdmVyKSB7XG4gICAgICAgIHRoaXMuI2RyaXZlciA9IGRyaXZlcjtcbiAgICB9XG4gICAgYXN5bmMgcHJvdmlkZUNvbm5lY3Rpb24oY29uc3VtZXIpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IHRoaXMuI2RyaXZlci5hY3F1aXJlQ29ubmVjdGlvbigpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGNvbnN1bWVyKGNvbm5lY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4jZHJpdmVyLnJlbGVhc2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kZWZhdWx0LXF1ZXJ5LWV4ZWN1dG9yLmQudHNcIiAvPlxuaW1wb3J0IHsgUXVlcnlFeGVjdXRvckJhc2UgfSBmcm9tICcuL3F1ZXJ5LWV4ZWN1dG9yLWJhc2UuanMnO1xuZXhwb3J0IGNsYXNzIERlZmF1bHRRdWVyeUV4ZWN1dG9yIGV4dGVuZHMgUXVlcnlFeGVjdXRvckJhc2Uge1xuICAgICNjb21waWxlcjtcbiAgICAjYWRhcHRlcjtcbiAgICAjY29ubmVjdGlvblByb3ZpZGVyO1xuICAgIGNvbnN0cnVjdG9yKGNvbXBpbGVyLCBhZGFwdGVyLCBjb25uZWN0aW9uUHJvdmlkZXIsIHBsdWdpbnMgPSBbXSkge1xuICAgICAgICBzdXBlcihwbHVnaW5zKTtcbiAgICAgICAgdGhpcy4jY29tcGlsZXIgPSBjb21waWxlcjtcbiAgICAgICAgdGhpcy4jYWRhcHRlciA9IGFkYXB0ZXI7XG4gICAgICAgIHRoaXMuI2Nvbm5lY3Rpb25Qcm92aWRlciA9IGNvbm5lY3Rpb25Qcm92aWRlcjtcbiAgICB9XG4gICAgZ2V0IGFkYXB0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNhZGFwdGVyO1xuICAgIH1cbiAgICBjb21waWxlUXVlcnkobm9kZSwgcXVlcnlJZCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jY29tcGlsZXIuY29tcGlsZVF1ZXJ5KG5vZGUsIHF1ZXJ5SWQpO1xuICAgIH1cbiAgICBwcm92aWRlQ29ubmVjdGlvbihjb25zdW1lcikge1xuICAgICAgICByZXR1cm4gdGhpcy4jY29ubmVjdGlvblByb3ZpZGVyLnByb3ZpZGVDb25uZWN0aW9uKGNvbnN1bWVyKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbnMocGx1Z2lucykge1xuICAgICAgICByZXR1cm4gbmV3IERlZmF1bHRRdWVyeUV4ZWN1dG9yKHRoaXMuI2NvbXBpbGVyLCB0aGlzLiNhZGFwdGVyLCB0aGlzLiNjb25uZWN0aW9uUHJvdmlkZXIsIFsuLi50aGlzLnBsdWdpbnMsIC4uLnBsdWdpbnNdKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbihwbHVnaW4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0UXVlcnlFeGVjdXRvcih0aGlzLiNjb21waWxlciwgdGhpcy4jYWRhcHRlciwgdGhpcy4jY29ubmVjdGlvblByb3ZpZGVyLCBbLi4udGhpcy5wbHVnaW5zLCBwbHVnaW5dKTtcbiAgICB9XG4gICAgd2l0aFBsdWdpbkF0RnJvbnQocGx1Z2luKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVmYXVsdFF1ZXJ5RXhlY3V0b3IodGhpcy4jY29tcGlsZXIsIHRoaXMuI2FkYXB0ZXIsIHRoaXMuI2Nvbm5lY3Rpb25Qcm92aWRlciwgW3BsdWdpbiwgLi4udGhpcy5wbHVnaW5zXSk7XG4gICAgfVxuICAgIHdpdGhDb25uZWN0aW9uUHJvdmlkZXIoY29ubmVjdGlvblByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGVmYXVsdFF1ZXJ5RXhlY3V0b3IodGhpcy4jY29tcGlsZXIsIHRoaXMuI2FkYXB0ZXIsIGNvbm5lY3Rpb25Qcm92aWRlciwgWy4uLnRoaXMucGx1Z2luc10pO1xuICAgIH1cbiAgICB3aXRob3V0UGx1Z2lucygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEZWZhdWx0UXVlcnlFeGVjdXRvcih0aGlzLiNjb21waWxlciwgdGhpcy4jYWRhcHRlciwgdGhpcy4jY29ubmVjdGlvblByb3ZpZGVyLCBbXSk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9ydW50aW1lLWRyaXZlci5kLnRzXCIgLz5cbmltcG9ydCB7IHBlcmZvcm1hbmNlTm93IH0gZnJvbSAnLi4vdXRpbC9wZXJmb3JtYW5jZS1ub3cuanMnO1xuLyoqXG4gKiBBIHNtYWxsIHdyYXBwZXIgYXJvdW5kIHtAbGluayBEcml2ZXJ9IHRoYXQgbWFrZXMgc3VyZSB0aGUgZHJpdmVyIGlzXG4gKiBpbml0aWFsaXplZCBiZWZvcmUgaXQgaXMgdXNlZCwgb25seSBpbml0aWFsaXplZCBhbmQgZGVzdHJveWVkXG4gKiBvbmNlIGV0Yy5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bnRpbWVEcml2ZXIge1xuICAgICNkcml2ZXI7XG4gICAgI2xvZztcbiAgICAjaW5pdFByb21pc2U7XG4gICAgI2luaXREb25lO1xuICAgICNkZXN0cm95UHJvbWlzZTtcbiAgICAjY29ubmVjdGlvbnMgPSBuZXcgV2Vha1NldCgpO1xuICAgIGNvbnN0cnVjdG9yKGRyaXZlciwgbG9nKSB7XG4gICAgICAgIHRoaXMuI2luaXREb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuI2RyaXZlciA9IGRyaXZlcjtcbiAgICAgICAgdGhpcy4jbG9nID0gbG9nO1xuICAgIH1cbiAgICBhc3luYyBpbml0KCkge1xuICAgICAgICBpZiAodGhpcy4jZGVzdHJveVByb21pc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZHJpdmVyIGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLiNpbml0UHJvbWlzZSkge1xuICAgICAgICAgICAgdGhpcy4jaW5pdFByb21pc2UgPSB0aGlzLiNkcml2ZXJcbiAgICAgICAgICAgICAgICAuaW5pdCgpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuI2luaXREb25lID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLiNpbml0UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuI2luaXRQcm9taXNlO1xuICAgIH1cbiAgICBhc3luYyBhY3F1aXJlQ29ubmVjdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuI2Rlc3Ryb3lQcm9taXNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RyaXZlciBoYXMgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy4jaW5pdERvbmUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBhd2FpdCB0aGlzLiNkcml2ZXIuYWNxdWlyZUNvbm5lY3Rpb24oKTtcbiAgICAgICAgaWYgKCF0aGlzLiNjb25uZWN0aW9ucy5oYXMoY29ubmVjdGlvbikpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiNuZWVkc0xvZ2dpbmcoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuI2FkZExvZ2dpbmcoY29ubmVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLiNjb25uZWN0aW9ucy5hZGQoY29ubmVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gICAgfVxuICAgIGFzeW5jIHJlbGVhc2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy4jZHJpdmVyLnJlbGVhc2VDb25uZWN0aW9uKGNvbm5lY3Rpb24pO1xuICAgIH1cbiAgICBiZWdpblRyYW5zYWN0aW9uKGNvbm5lY3Rpb24sIHNldHRpbmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNkcml2ZXIuYmVnaW5UcmFuc2FjdGlvbihjb25uZWN0aW9uLCBzZXR0aW5ncyk7XG4gICAgfVxuICAgIGNvbW1pdFRyYW5zYWN0aW9uKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RyaXZlci5jb21taXRUcmFuc2FjdGlvbihjb25uZWN0aW9uKTtcbiAgICB9XG4gICAgcm9sbGJhY2tUcmFuc2FjdGlvbihjb25uZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNkcml2ZXIucm9sbGJhY2tUcmFuc2FjdGlvbihjb25uZWN0aW9uKTtcbiAgICB9XG4gICAgc2F2ZXBvaW50KGNvbm5lY3Rpb24sIHNhdmVwb2ludE5hbWUsIGNvbXBpbGVRdWVyeSkge1xuICAgICAgICBpZiAodGhpcy4jZHJpdmVyLnNhdmVwb2ludCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2RyaXZlci5zYXZlcG9pbnQoY29ubmVjdGlvbiwgc2F2ZXBvaW50TmFtZSwgY29tcGlsZVF1ZXJ5KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBgc2F2ZXBvaW50YCBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcicpO1xuICAgIH1cbiAgICByb2xsYmFja1RvU2F2ZXBvaW50KGNvbm5lY3Rpb24sIHNhdmVwb2ludE5hbWUsIGNvbXBpbGVRdWVyeSkge1xuICAgICAgICBpZiAodGhpcy4jZHJpdmVyLnJvbGxiYWNrVG9TYXZlcG9pbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNkcml2ZXIucm9sbGJhY2tUb1NhdmVwb2ludChjb25uZWN0aW9uLCBzYXZlcG9pbnROYW1lLCBjb21waWxlUXVlcnkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGByb2xsYmFja1RvU2F2ZXBvaW50YCBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcicpO1xuICAgIH1cbiAgICByZWxlYXNlU2F2ZXBvaW50KGNvbm5lY3Rpb24sIHNhdmVwb2ludE5hbWUsIGNvbXBpbGVRdWVyeSkge1xuICAgICAgICBpZiAodGhpcy4jZHJpdmVyLnJlbGVhc2VTYXZlcG9pbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiNkcml2ZXIucmVsZWFzZVNhdmVwb2ludChjb25uZWN0aW9uLCBzYXZlcG9pbnROYW1lLCBjb21waWxlUXVlcnkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGByZWxlYXNlU2F2ZXBvaW50YCBtZXRob2QgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcicpO1xuICAgIH1cbiAgICBhc3luYyBkZXN0cm95KCkge1xuICAgICAgICBpZiAoIXRoaXMuI2luaXRQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy4jaW5pdFByb21pc2U7XG4gICAgICAgIGlmICghdGhpcy4jZGVzdHJveVByb21pc2UpIHtcbiAgICAgICAgICAgIHRoaXMuI2Rlc3Ryb3lQcm9taXNlID0gdGhpcy4jZHJpdmVyLmRlc3Ryb3koKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy4jZGVzdHJveVByb21pc2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLiNkZXN0cm95UHJvbWlzZTtcbiAgICB9XG4gICAgI25lZWRzTG9nZ2luZygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLiNsb2cuaXNMZXZlbEVuYWJsZWQoJ3F1ZXJ5JykgfHwgdGhpcy4jbG9nLmlzTGV2ZWxFbmFibGVkKCdlcnJvcicpKTtcbiAgICB9XG4gICAgLy8gVGhpcyBtZXRob2QgbW9ua2V5IHBhdGNoZXMgdGhlIGRhdGFiYXNlIGNvbm5lY3Rpb24ncyBleGVjdXRlUXVlcnkgbWV0aG9kXG4gICAgLy8gYnkgYWRkaW5nIGxvZ2dpbmcgY29kZSBhcm91bmQgaXQuIE1vbmtleSBwYXRjaGluZyBpcyBub3QgcHJldHR5LCBidXQgaXQnc1xuICAgIC8vIHRoZSBiZXN0IG9wdGlvbiBpbiB0aGlzIGNhc2UuXG4gICAgI2FkZExvZ2dpbmcoY29ubmVjdGlvbikge1xuICAgICAgICBjb25zdCBleGVjdXRlUXVlcnkgPSBjb25uZWN0aW9uLmV4ZWN1dGVRdWVyeTtcbiAgICAgICAgY29uc3Qgc3RyZWFtUXVlcnkgPSBjb25uZWN0aW9uLnN0cmVhbVF1ZXJ5O1xuICAgICAgICBjb25zdCBkaXMgPSB0aGlzO1xuICAgICAgICBjb25uZWN0aW9uLmV4ZWN1dGVRdWVyeSA9IGFzeW5jIChjb21waWxlZFF1ZXJ5KSA9PiB7XG4gICAgICAgICAgICBsZXQgY2F1Z2h0RXJyb3I7XG4gICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZU5vdygpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgZXhlY3V0ZVF1ZXJ5LmNhbGwoY29ubmVjdGlvbiwgY29tcGlsZWRRdWVyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgICAgIGF3YWl0IGRpcy4jbG9nRXJyb3IoZXJyb3IsIGNvbXBpbGVkUXVlcnksIHN0YXJ0VGltZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNhdWdodEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGRpcy4jbG9nUXVlcnkoY29tcGlsZWRRdWVyeSwgc3RhcnRUaW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbm5lY3Rpb24uc3RyZWFtUXVlcnkgPSBhc3luYyBmdW5jdGlvbiogKGNvbXBpbGVkUXVlcnksIGNodW5rU2l6ZSkge1xuICAgICAgICAgICAgbGV0IGNhdWdodEVycm9yO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCByZXN1bHQgb2Ygc3RyZWFtUXVlcnkuY2FsbChjb25uZWN0aW9uLCBjb21waWxlZFF1ZXJ5LCBjaHVua1NpemUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgICAgIGF3YWl0IGRpcy4jbG9nRXJyb3IoZXJyb3IsIGNvbXBpbGVkUXVlcnksIHN0YXJ0VGltZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNhdWdodEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGRpcy4jbG9nUXVlcnkoY29tcGlsZWRRdWVyeSwgc3RhcnRUaW1lLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jICNsb2dFcnJvcihlcnJvciwgY29tcGlsZWRRdWVyeSwgc3RhcnRUaW1lKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI2xvZy5lcnJvcigoKSA9PiAoe1xuICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIHF1ZXJ5OiBjb21waWxlZFF1ZXJ5LFxuICAgICAgICAgICAgcXVlcnlEdXJhdGlvbk1pbGxpczogdGhpcy4jY2FsY3VsYXRlRHVyYXRpb25NaWxsaXMoc3RhcnRUaW1lKSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBhc3luYyAjbG9nUXVlcnkoY29tcGlsZWRRdWVyeSwgc3RhcnRUaW1lLCBpc1N0cmVhbSA9IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuI2xvZy5xdWVyeSgoKSA9PiAoe1xuICAgICAgICAgICAgbGV2ZWw6ICdxdWVyeScsXG4gICAgICAgICAgICBpc1N0cmVhbSxcbiAgICAgICAgICAgIHF1ZXJ5OiBjb21waWxlZFF1ZXJ5LFxuICAgICAgICAgICAgcXVlcnlEdXJhdGlvbk1pbGxpczogdGhpcy4jY2FsY3VsYXRlRHVyYXRpb25NaWxsaXMoc3RhcnRUaW1lKSxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICAjY2FsY3VsYXRlRHVyYXRpb25NaWxsaXMoc3RhcnRUaW1lKSB7XG4gICAgICAgIHJldHVybiBwZXJmb3JtYW5jZU5vdygpIC0gc3RhcnRUaW1lO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcGVyZm9ybWFuY2Utbm93LmQudHNcIiAvPlxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBwZXJmb3JtYW5jZU5vdygpIHtcbiAgICBpZiAodHlwZW9mIHBlcmZvcm1hbmNlICE9PSAndW5kZWZpbmVkJyAmJiBpc0Z1bmN0aW9uKHBlcmZvcm1hbmNlLm5vdykpIHtcbiAgICAgICAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9zaW5nbGUtY29ubmVjdGlvbi1wcm92aWRlci5kLnRzXCIgLz5cbmNvbnN0IGlnbm9yZUVycm9yID0gKCkgPT4geyB9O1xuZXhwb3J0IGNsYXNzIFNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlciB7XG4gICAgI2Nvbm5lY3Rpb247XG4gICAgI3J1bm5pbmdQcm9taXNlO1xuICAgIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgdGhpcy4jY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgfVxuICAgIGFzeW5jIHByb3ZpZGVDb25uZWN0aW9uKGNvbnN1bWVyKSB7XG4gICAgICAgIHdoaWxlICh0aGlzLiNydW5uaW5nUHJvbWlzZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy4jcnVubmluZ1Byb21pc2UuY2F0Y2goaWdub3JlRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGAjcnVubmluZ1Byb21pc2VgIG11c3QgYmUgc2V0IHRvIHVuZGVmaW5lZCBiZWZvcmUgaXQnc1xuICAgICAgICAvLyByZXNvbHZlZCBvciByZWplY3RlZC4gT3RoZXJ3aXNlIHRoZSB3aGlsZSBsb29wIGFib3ZlXG4gICAgICAgIC8vIHdpbGwgbWlzYmVoYXZlLlxuICAgICAgICB0aGlzLiNydW5uaW5nUHJvbWlzZSA9IHRoaXMuI3J1bihjb25zdW1lcikuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNydW5uaW5nUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLiNydW5uaW5nUHJvbWlzZTtcbiAgICB9XG4gICAgLy8gUnVuIHRoZSBydW5uZXIgaW4gYW4gYXN5bmMgZnVuY3Rpb24gdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3RcbiAgICAvLyB0aHJvdyBzeW5jaHJvbm91cyBlcnJvcnMuXG4gICAgYXN5bmMgI3J1bihydW5uZXIpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJ1bm5lcih0aGlzLiNjb25uZWN0aW9uKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2RyaXZlci5kLnRzXCIgLz5cbmV4cG9ydCBjb25zdCBUUkFOU0FDVElPTl9BQ0NFU1NfTU9ERVMgPSBbJ3JlYWQgb25seScsICdyZWFkIHdyaXRlJ107XG5leHBvcnQgY29uc3QgVFJBTlNBQ1RJT05fSVNPTEFUSU9OX0xFVkVMUyA9IFtcbiAgICAncmVhZCB1bmNvbW1pdHRlZCcsXG4gICAgJ3JlYWQgY29tbWl0dGVkJyxcbiAgICAncmVwZWF0YWJsZSByZWFkJyxcbiAgICAnc2VyaWFsaXphYmxlJyxcbiAgICAnc25hcHNob3QnLFxuXTtcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRyYW5zYWN0aW9uU2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgICBpZiAoc2V0dGluZ3MuYWNjZXNzTW9kZSAmJlxuICAgICAgICAhVFJBTlNBQ1RJT05fQUNDRVNTX01PREVTLmluY2x1ZGVzKHNldHRpbmdzLmFjY2Vzc01vZGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCB0cmFuc2FjdGlvbiBhY2Nlc3MgbW9kZSAke3NldHRpbmdzLmFjY2Vzc01vZGV9YCk7XG4gICAgfVxuICAgIGlmIChzZXR0aW5ncy5pc29sYXRpb25MZXZlbCAmJlxuICAgICAgICAhVFJBTlNBQ1RJT05fSVNPTEFUSU9OX0xFVkVMUy5pbmNsdWRlcyhzZXR0aW5ncy5pc29sYXRpb25MZXZlbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHRyYW5zYWN0aW9uIGlzb2xhdGlvbiBsZXZlbCAke3NldHRpbmdzLmlzb2xhdGlvbkxldmVsfWApO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vbG9nLmQudHNcIiAvPlxuaW1wb3J0IHsgZnJlZXplLCBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9vYmplY3QtdXRpbHMuanMnO1xuZXhwb3J0IGNvbnN0IExPR19MRVZFTFMgPSBmcmVlemUoWydxdWVyeScsICdlcnJvciddKTtcbmV4cG9ydCBjbGFzcyBMb2cge1xuICAgICNsZXZlbHM7XG4gICAgI2xvZ2dlcjtcbiAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY29uZmlnKSkge1xuICAgICAgICAgICAgdGhpcy4jbG9nZ2VyID0gY29uZmlnO1xuICAgICAgICAgICAgdGhpcy4jbGV2ZWxzID0gZnJlZXplKHtcbiAgICAgICAgICAgICAgICBxdWVyeTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlcnJvcjogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy4jbG9nZ2VyID0gZGVmYXVsdExvZ2dlcjtcbiAgICAgICAgICAgIHRoaXMuI2xldmVscyA9IGZyZWV6ZSh7XG4gICAgICAgICAgICAgICAgcXVlcnk6IGNvbmZpZy5pbmNsdWRlcygncXVlcnknKSxcbiAgICAgICAgICAgICAgICBlcnJvcjogY29uZmlnLmluY2x1ZGVzKCdlcnJvcicpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNMZXZlbEVuYWJsZWQobGV2ZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2xldmVsc1tsZXZlbF07XG4gICAgfVxuICAgIGFzeW5jIHF1ZXJ5KGdldEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLiNsZXZlbHMucXVlcnkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuI2xvZ2dlcihnZXRFdmVudCgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBlcnJvcihnZXRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy4jbGV2ZWxzLmVycm9yKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLiNsb2dnZXIoZ2V0RXZlbnQoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0TG9nZ2VyKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmxldmVsID09PSAncXVlcnknKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGBreXNlbHk6cXVlcnk6JHtldmVudC5pc1N0cmVhbSA/ICdzdHJlYW06JyA6ICcnfWA7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke3ByZWZpeH0gJHtldmVudC5xdWVyeS5zcWx9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke3ByZWZpeH0gZHVyYXRpb246ICR7ZXZlbnQucXVlcnlEdXJhdGlvbk1pbGxpcy50b0ZpeGVkKDEpfW1zYCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50LmxldmVsID09PSAnZXJyb3InKSB7XG4gICAgICAgIGlmIChldmVudC5lcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBreXNlbHk6ZXJyb3I6ICR7ZXZlbnQuZXJyb3Iuc3RhY2sgPz8gZXZlbnQuZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGt5c2VseTplcnJvcjogJHtKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXJyb3I6IGV2ZW50LmVycm9yLFxuICAgICAgICAgICAgICAgIHF1ZXJ5OiBldmVudC5xdWVyeS5zcWwsXG4gICAgICAgICAgICAgICAgcXVlcnlEdXJhdGlvbk1pbGxpczogZXZlbnQucXVlcnlEdXJhdGlvbk1pbGxpcyxcbiAgICAgICAgICAgIH0pfWApO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9jb21waWxhYmxlLmQudHNcIiAvPlxuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNPYmplY3QgfSBmcm9tICcuL29iamVjdC11dGlscy5qcyc7XG5leHBvcnQgZnVuY3Rpb24gaXNDb21waWxhYmxlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHZhbHVlKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLmNvbXBpbGUpO1xufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9yYXctYnVpbGRlci5kLnRzXCIgLz5cbmltcG9ydCB7IEFsaWFzTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2FsaWFzLW5vZGUuanMnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi4vdXRpbC9vYmplY3QtdXRpbHMuanMnO1xuaW1wb3J0IHsgTk9PUF9RVUVSWV9FWEVDVVRPUiB9IGZyb20gJy4uL3F1ZXJ5LWV4ZWN1dG9yL25vb3AtcXVlcnktZXhlY3V0b3IuanMnO1xuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9pZGVudGlmaWVyLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNPcGVyYXRpb25Ob2RlU291cmNlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmNsYXNzIFJhd0J1aWxkZXJJbXBsIHtcbiAgICAjcHJvcHM7XG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgdGhpcy4jcHJvcHMgPSBmcmVlemUocHJvcHMpO1xuICAgIH1cbiAgICBnZXQgZXhwcmVzc2lvblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBpc1Jhd0J1aWxkZXIoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhcyhhbGlhcykge1xuICAgICAgICByZXR1cm4gbmV3IEFsaWFzZWRSYXdCdWlsZGVySW1wbCh0aGlzLCBhbGlhcyk7XG4gICAgfVxuICAgICRjYXN0VG8oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmF3QnVpbGRlckltcGwoeyAuLi50aGlzLiNwcm9wcyB9KTtcbiAgICB9XG4gICAgJG5vdE51bGwoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmF3QnVpbGRlckltcGwodGhpcy4jcHJvcHMpO1xuICAgIH1cbiAgICB3aXRoUGx1Z2luKHBsdWdpbikge1xuICAgICAgICByZXR1cm4gbmV3IFJhd0J1aWxkZXJJbXBsKHtcbiAgICAgICAgICAgIC4uLnRoaXMuI3Byb3BzLFxuICAgICAgICAgICAgcGx1Z2luczogdGhpcy4jcHJvcHMucGx1Z2lucyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBmcmVlemUoWy4uLnRoaXMuI3Byb3BzLnBsdWdpbnMsIHBsdWdpbl0pXG4gICAgICAgICAgICAgICAgOiBmcmVlemUoW3BsdWdpbl0pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jdG9PcGVyYXRpb25Ob2RlKHRoaXMuI2dldEV4ZWN1dG9yKCkpO1xuICAgIH1cbiAgICBjb21waWxlKGV4ZWN1dG9yUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2NvbXBpbGUodGhpcy4jZ2V0RXhlY3V0b3IoZXhlY3V0b3JQcm92aWRlcikpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKGV4ZWN1dG9yUHJvdmlkZXIpIHtcbiAgICAgICAgY29uc3QgZXhlY3V0b3IgPSB0aGlzLiNnZXRFeGVjdXRvcihleGVjdXRvclByb3ZpZGVyKTtcbiAgICAgICAgcmV0dXJuIGV4ZWN1dG9yLmV4ZWN1dGVRdWVyeSh0aGlzLiNjb21waWxlKGV4ZWN1dG9yKSk7XG4gICAgfVxuICAgICNnZXRFeGVjdXRvcihleGVjdXRvclByb3ZpZGVyKSB7XG4gICAgICAgIGNvbnN0IGV4ZWN1dG9yID0gZXhlY3V0b3JQcm92aWRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGV4ZWN1dG9yUHJvdmlkZXIuZ2V0RXhlY3V0b3IoKVxuICAgICAgICAgICAgOiBOT09QX1FVRVJZX0VYRUNVVE9SO1xuICAgICAgICByZXR1cm4gdGhpcy4jcHJvcHMucGx1Z2lucyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGV4ZWN1dG9yLndpdGhQbHVnaW5zKHRoaXMuI3Byb3BzLnBsdWdpbnMpXG4gICAgICAgICAgICA6IGV4ZWN1dG9yO1xuICAgIH1cbiAgICAjdG9PcGVyYXRpb25Ob2RlKGV4ZWN1dG9yKSB7XG4gICAgICAgIHJldHVybiBleGVjdXRvci50cmFuc2Zvcm1RdWVyeSh0aGlzLiNwcm9wcy5yYXdOb2RlLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG4gICAgI2NvbXBpbGUoZXhlY3V0b3IpIHtcbiAgICAgICAgcmV0dXJuIGV4ZWN1dG9yLmNvbXBpbGVRdWVyeSh0aGlzLiN0b09wZXJhdGlvbk5vZGUoZXhlY3V0b3IpLCB0aGlzLiNwcm9wcy5xdWVyeUlkKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmF3QnVpbGRlcihwcm9wcykge1xuICAgIHJldHVybiBuZXcgUmF3QnVpbGRlckltcGwocHJvcHMpO1xufVxuY2xhc3MgQWxpYXNlZFJhd0J1aWxkZXJJbXBsIHtcbiAgICAjcmF3QnVpbGRlcjtcbiAgICAjYWxpYXM7XG4gICAgY29uc3RydWN0b3IocmF3QnVpbGRlciwgYWxpYXMpIHtcbiAgICAgICAgdGhpcy4jcmF3QnVpbGRlciA9IHJhd0J1aWxkZXI7XG4gICAgICAgIHRoaXMuI2FsaWFzID0gYWxpYXM7XG4gICAgfVxuICAgIGdldCBleHByZXNzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcmF3QnVpbGRlcjtcbiAgICB9XG4gICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jYWxpYXM7XG4gICAgfVxuICAgIGdldCByYXdCdWlsZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4jcmF3QnVpbGRlcjtcbiAgICB9XG4gICAgdG9PcGVyYXRpb25Ob2RlKCkge1xuICAgICAgICByZXR1cm4gQWxpYXNOb2RlLmNyZWF0ZSh0aGlzLiNyYXdCdWlsZGVyLnRvT3BlcmF0aW9uTm9kZSgpLCBpc09wZXJhdGlvbk5vZGVTb3VyY2UodGhpcy4jYWxpYXMpXG4gICAgICAgICAgICA/IHRoaXMuI2FsaWFzLnRvT3BlcmF0aW9uTm9kZSgpXG4gICAgICAgICAgICA6IElkZW50aWZpZXJOb2RlLmNyZWF0ZSh0aGlzLiNhbGlhcykpO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vc3FsLmQudHNcIiAvPlxuaW1wb3J0IHsgSWRlbnRpZmllck5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9pZGVudGlmaWVyLW5vZGUuanMnO1xuaW1wb3J0IHsgaXNPcGVyYXRpb25Ob2RlU291cmNlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0aW9uLW5vZGUtc291cmNlLmpzJztcbmltcG9ydCB7IFJhd05vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9yYXctbm9kZS5qcyc7XG5pbXBvcnQgeyBWYWx1ZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS92YWx1ZS1ub2RlLmpzJztcbmltcG9ydCB7IHBhcnNlU3RyaW5nUmVmZXJlbmNlIH0gZnJvbSAnLi4vcGFyc2VyL3JlZmVyZW5jZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VUYWJsZSB9IGZyb20gJy4uL3BhcnNlci90YWJsZS1wYXJzZXIuanMnO1xuaW1wb3J0IHsgcGFyc2VWYWx1ZUV4cHJlc3Npb24gfSBmcm9tICcuLi9wYXJzZXIvdmFsdWUtcGFyc2VyLmpzJztcbmltcG9ydCB7IGNyZWF0ZVF1ZXJ5SWQgfSBmcm9tICcuLi91dGlsL3F1ZXJ5LWlkLmpzJztcbmltcG9ydCB7IGNyZWF0ZVJhd0J1aWxkZXIgfSBmcm9tICcuL3Jhdy1idWlsZGVyLmpzJztcbmV4cG9ydCBjb25zdCBzcWwgPSBPYmplY3QuYXNzaWduKChzcWxGcmFnbWVudHMsIC4uLnBhcmFtZXRlcnMpID0+IHtcbiAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgcmF3Tm9kZTogUmF3Tm9kZS5jcmVhdGUoc3FsRnJhZ21lbnRzLCBwYXJhbWV0ZXJzPy5tYXAocGFyc2VQYXJhbWV0ZXIpID8/IFtdKSxcbiAgICB9KTtcbn0sIHtcbiAgICByZWYoY29sdW1uUmVmZXJlbmNlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVSYXdCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIHJhd05vZGU6IFJhd05vZGUuY3JlYXRlV2l0aENoaWxkKHBhcnNlU3RyaW5nUmVmZXJlbmNlKGNvbHVtblJlZmVyZW5jZSkpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHZhbCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhDaGlsZChwYXJzZVZhbHVlRXhwcmVzc2lvbih2YWx1ZSkpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbCh2YWx1ZSk7XG4gICAgfSxcbiAgICB0YWJsZSh0YWJsZVJlZmVyZW5jZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZVdpdGhDaGlsZChwYXJzZVRhYmxlKHRhYmxlUmVmZXJlbmNlKSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgaWQoLi4uaWRzKSB7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50cyA9IG5ldyBBcnJheShpZHMubGVuZ3RoICsgMSkuZmlsbCgnLicpO1xuICAgICAgICBmcmFnbWVudHNbMF0gPSAnJztcbiAgICAgICAgZnJhZ21lbnRzW2ZyYWdtZW50cy5sZW5ndGggLSAxXSA9ICcnO1xuICAgICAgICByZXR1cm4gY3JlYXRlUmF3QnVpbGRlcih7XG4gICAgICAgICAgICBxdWVyeUlkOiBjcmVhdGVRdWVyeUlkKCksXG4gICAgICAgICAgICByYXdOb2RlOiBSYXdOb2RlLmNyZWF0ZShmcmFnbWVudHMsIGlkcy5tYXAoSWRlbnRpZmllck5vZGUuY3JlYXRlKSksXG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgbGl0KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVSYXdCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIHJhd05vZGU6IFJhd05vZGUuY3JlYXRlV2l0aENoaWxkKFZhbHVlTm9kZS5jcmVhdGVJbW1lZGlhdGUodmFsdWUpKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBsaXRlcmFsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpdCh2YWx1ZSk7XG4gICAgfSxcbiAgICByYXcoc3FsKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVSYXdCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIHJhd05vZGU6IFJhd05vZGUuY3JlYXRlV2l0aFNxbChzcWwpLFxuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGpvaW4oYXJyYXksIHNlcGFyYXRvciA9IHNxbCBgLCBgKSB7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gbmV3IEFycmF5KE1hdGgubWF4KDIgKiBhcnJheS5sZW5ndGggLSAxLCAwKSk7XG4gICAgICAgIGNvbnN0IHNlcCA9IHNlcGFyYXRvci50b09wZXJhdGlvbk5vZGUoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgbm9kZXNbMiAqIGldID0gcGFyc2VQYXJhbWV0ZXIoYXJyYXlbaV0pO1xuICAgICAgICAgICAgaWYgKGkgIT09IGFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBub2Rlc1syICogaSArIDFdID0gc2VwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVSYXdCdWlsZGVyKHtcbiAgICAgICAgICAgIHF1ZXJ5SWQ6IGNyZWF0ZVF1ZXJ5SWQoKSxcbiAgICAgICAgICAgIHJhd05vZGU6IFJhd05vZGUuY3JlYXRlV2l0aENoaWxkcmVuKG5vZGVzKSxcbiAgICAgICAgfSk7XG4gICAgfSxcbn0pO1xuZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXIocGFyYW0pIHtcbiAgICBpZiAoaXNPcGVyYXRpb25Ob2RlU291cmNlKHBhcmFtKSkge1xuICAgICAgICByZXR1cm4gcGFyYW0udG9PcGVyYXRpb25Ob2RlKCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZVZhbHVlRXhwcmVzc2lvbihwYXJhbSk7XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2RlZmF1bHQtcXVlcnktY29tcGlsZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBDcmVhdGVUYWJsZU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9jcmVhdGUtdGFibGUtbm9kZS5qcyc7XG5pbXBvcnQgeyBJbnNlcnRRdWVyeU5vZGUgfSBmcm9tICcuLi9vcGVyYXRpb24tbm9kZS9pbnNlcnQtcXVlcnktbm9kZS5qcyc7XG5pbXBvcnQgeyBPcGVyYXRpb25Ob2RlVmlzaXRvciB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL29wZXJhdGlvbi1ub2RlLXZpc2l0b3IuanMnO1xuaW1wb3J0IHsgT3BlcmF0b3JOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvb3BlcmF0b3Itbm9kZS5qcyc7XG5pbXBvcnQgeyBQYXJlbnNOb2RlIH0gZnJvbSAnLi4vb3BlcmF0aW9uLW5vZGUvcGFyZW5zLW5vZGUuanMnO1xuaW1wb3J0IHsgUmF3Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3Jhdy1ub2RlLmpzJztcbmltcG9ydCB7IGZyZWV6ZSwgaXNTdHJpbmcsIGlzTnVtYmVyLCBpc0Jvb2xlYW4sIGlzTnVsbCwgaXNEYXRlLCBpc0JpZ0ludCwgfSBmcm9tICcuLi91dGlsL29iamVjdC11dGlscy5qcyc7XG5pbXBvcnQgeyBDcmVhdGVWaWV3Tm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL2NyZWF0ZS12aWV3LW5vZGUuanMnO1xuaW1wb3J0IHsgU2V0T3BlcmF0aW9uTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3NldC1vcGVyYXRpb24tbm9kZS5qcyc7XG5pbXBvcnQgeyBXaGVuTm9kZSB9IGZyb20gJy4uL29wZXJhdGlvbi1ub2RlL3doZW4tbm9kZS5qcyc7XG5pbXBvcnQgeyBsb2dPbmNlIH0gZnJvbSAnLi4vdXRpbC9sb2ctb25jZS5qcyc7XG5jb25zdCBMSVRfV1JBUF9SRUdFWCA9IC8nL2c7XG5leHBvcnQgY2xhc3MgRGVmYXVsdFF1ZXJ5Q29tcGlsZXIgZXh0ZW5kcyBPcGVyYXRpb25Ob2RlVmlzaXRvciB7XG4gICAgI3NxbCA9ICcnO1xuICAgICNwYXJhbWV0ZXJzID0gW107XG4gICAgZ2V0IG51bVBhcmFtZXRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiNwYXJhbWV0ZXJzLmxlbmd0aDtcbiAgICB9XG4gICAgY29tcGlsZVF1ZXJ5KG5vZGUsIHF1ZXJ5SWQpIHtcbiAgICAgICAgdGhpcy4jc3FsID0gJyc7XG4gICAgICAgIHRoaXMuI3BhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5ub2RlU3RhY2suc3BsaWNlKDAsIHRoaXMubm9kZVN0YWNrLmxlbmd0aCk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUpO1xuICAgICAgICByZXR1cm4gZnJlZXplKHtcbiAgICAgICAgICAgIHF1ZXJ5OiBub2RlLFxuICAgICAgICAgICAgcXVlcnlJZCxcbiAgICAgICAgICAgIHNxbDogdGhpcy5nZXRTcWwoKSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IFsuLi50aGlzLiNwYXJhbWV0ZXJzXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldFNxbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI3NxbDtcbiAgICB9XG4gICAgdmlzaXRTZWxlY3RRdWVyeShub2RlKSB7XG4gICAgICAgIGNvbnN0IHdyYXBJblBhcmVucyA9IHRoaXMucGFyZW50Tm9kZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAhUGFyZW5zTm9kZS5pcyh0aGlzLnBhcmVudE5vZGUpICYmXG4gICAgICAgICAgICAhSW5zZXJ0UXVlcnlOb2RlLmlzKHRoaXMucGFyZW50Tm9kZSkgJiZcbiAgICAgICAgICAgICFDcmVhdGVUYWJsZU5vZGUuaXModGhpcy5wYXJlbnROb2RlKSAmJlxuICAgICAgICAgICAgIUNyZWF0ZVZpZXdOb2RlLmlzKHRoaXMucGFyZW50Tm9kZSkgJiZcbiAgICAgICAgICAgICFTZXRPcGVyYXRpb25Ob2RlLmlzKHRoaXMucGFyZW50Tm9kZSk7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudE5vZGUgPT09IHVuZGVmaW5lZCAmJiBub2RlLmV4cGxhaW4pIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZXhwbGFpbik7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3cmFwSW5QYXJlbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2l0aCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS53aXRoKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ3NlbGVjdCcpO1xuICAgICAgICBpZiAobm9kZS5kaXN0aW5jdE9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlRGlzdGluY3RPbihub2RlLmRpc3RpbmN0T24pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmZyb250TW9kaWZpZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZnJvbnRNb2RpZmllcnMsICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudG9wKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50b3ApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnNlbGVjdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuc2VsZWN0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZnJvbSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuam9pbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuam9pbnMsICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2hlcmUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndoZXJlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5ncm91cEJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5ncm91cEJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5oYXZpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmhhdmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuc2V0T3BlcmF0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5zZXRPcGVyYXRpb25zLCAnICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9yZGVyQnkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9yZGVyQnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmxpbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5saW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub2Zmc2V0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmZldGNoKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5mZXRjaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZW5kTW9kaWZpZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KHRoaXMuc29ydFNlbGVjdE1vZGlmaWVycyhbLi4ubm9kZS5lbmRNb2RpZmllcnNdKSwgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod3JhcEluUGFyZW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0RnJvbShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdmcm9tICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZnJvbXMpO1xuICAgIH1cbiAgICB2aXNpdFNlbGVjdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuc2VsZWN0aW9uKTtcbiAgICB9XG4gICAgdmlzaXRDb2x1bW4obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgfVxuICAgIGNvbXBpbGVEaXN0aW5jdE9uKGV4cHJlc3Npb25zKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkaXN0aW5jdCBvbiAoJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3QoZXhwcmVzc2lvbnMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICBjb21waWxlTGlzdChub2Rlcywgc2VwYXJhdG9yID0gJywgJykge1xuICAgICAgICBjb25zdCBsYXN0SW5kZXggPSBub2Rlcy5sZW5ndGggLSAxO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBsYXN0SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZXNbaV0pO1xuICAgICAgICAgICAgaWYgKGkgPCBsYXN0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZChzZXBhcmF0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0V2hlcmUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnd2hlcmUgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2hlcmUpO1xuICAgIH1cbiAgICB2aXNpdEhhdmluZyhub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdoYXZpbmcgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuaGF2aW5nKTtcbiAgICB9XG4gICAgdmlzaXRJbnNlcnRRdWVyeShub2RlKSB7XG4gICAgICAgIGNvbnN0IHdyYXBJblBhcmVucyA9IHRoaXMucGFyZW50Tm9kZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAhUGFyZW5zTm9kZS5pcyh0aGlzLnBhcmVudE5vZGUpICYmXG4gICAgICAgICAgICAhUmF3Tm9kZS5pcyh0aGlzLnBhcmVudE5vZGUpICYmXG4gICAgICAgICAgICAhV2hlbk5vZGUuaXModGhpcy5wYXJlbnROb2RlKTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50Tm9kZSA9PT0gdW5kZWZpbmVkICYmIG5vZGUuZXhwbGFpbikge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHBsYWluKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdyYXBJblBhcmVucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS53aXRoKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndpdGgpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZChub2RlLnJlcGxhY2UgPyAncmVwbGFjZScgOiAnaW5zZXJ0Jyk7XG4gICAgICAgIC8vIFRPRE86IHJlbW92ZSBpbiAwLjI5LlxuICAgICAgICBpZiAobm9kZS5pZ25vcmUpIHtcbiAgICAgICAgICAgIGxvZ09uY2UoJ2BJbnNlcnRRdWVyeU5vZGUuaWdub3JlYCBpcyBkZXByZWNhdGVkLiBVc2UgYEluc2VydFF1ZXJ5Tm9kZS5vckFjdGlvbmAgaW5zdGVhZC4nKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgaWdub3JlJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub3JBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9yQWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS50b3ApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnRvcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuaW50bykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBpbnRvICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5pbnRvKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICgnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub3V0cHV0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vdXRwdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5kZWZhdWx0VmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2RlZmF1bHQgdmFsdWVzJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub25Db25mbGljdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub25Db25mbGljdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub25EdXBsaWNhdGVLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9uRHVwbGljYXRlS2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5yZXR1cm5pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJldHVybmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdyYXBJblBhcmVucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5lbmRNb2RpZmllcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5lbmRNb2RpZmllcnMsICcgJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRWYWx1ZXMobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgndmFsdWVzICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUudmFsdWVzKTtcbiAgICB9XG4gICAgdmlzaXREZWxldGVRdWVyeShub2RlKSB7XG4gICAgICAgIGNvbnN0IHdyYXBJblBhcmVucyA9IHRoaXMucGFyZW50Tm9kZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAhUGFyZW5zTm9kZS5pcyh0aGlzLnBhcmVudE5vZGUpICYmXG4gICAgICAgICAgICAhUmF3Tm9kZS5pcyh0aGlzLnBhcmVudE5vZGUpO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlID09PSB1bmRlZmluZWQgJiYgbm9kZS5leHBsYWluKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmV4cGxhaW4pO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod3JhcEluUGFyZW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndpdGgpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2l0aCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkZWxldGUgJyk7XG4gICAgICAgIGlmIChub2RlLnRvcCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50b3ApO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmZyb20pO1xuICAgICAgICBpZiAobm9kZS5vdXRwdXQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudXNpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnVzaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5qb2lucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5qb2lucywgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS53aGVyZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2hlcmUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9yZGVyQnkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm9yZGVyQnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmxpbWl0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5saW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUucmV0dXJuaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZXR1cm5pbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3cmFwSW5QYXJlbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZW5kTW9kaWZpZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCAnICcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0UmV0dXJuaW5nKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3JldHVybmluZyAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnNlbGVjdGlvbnMpO1xuICAgIH1cbiAgICB2aXNpdEFsaWFzKG5vZGUpIHtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5ub2RlKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyBhcyAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5hbGlhcyk7XG4gICAgfVxuICAgIHZpc2l0UmVmZXJlbmNlKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJy4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgfVxuICAgIHZpc2l0U2VsZWN0QWxsKF8pIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyonKTtcbiAgICB9XG4gICAgdmlzaXRJZGVudGlmaWVyKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRMZWZ0SWRlbnRpZmllcldyYXBwZXIoKSk7XG4gICAgICAgIHRoaXMuY29tcGlsZVVud3JhcHBlZElkZW50aWZpZXIobm9kZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKHRoaXMuZ2V0UmlnaHRJZGVudGlmaWVyV3JhcHBlcigpKTtcbiAgICB9XG4gICAgY29tcGlsZVVud3JhcHBlZElkZW50aWZpZXIobm9kZSkge1xuICAgICAgICBpZiAoIWlzU3RyaW5nKG5vZGUubmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYSBub24tc3RyaW5nIGlkZW50aWZpZXIgd2FzIHBhc3NlZCB0byBjb21waWxlVW53cmFwcGVkSWRlbnRpZmllci4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCh0aGlzLnNhbml0aXplSWRlbnRpZmllcihub2RlLm5hbWUpKTtcbiAgICB9XG4gICAgdmlzaXRBbmQobm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmxlZnQpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnIGFuZCAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yaWdodCk7XG4gICAgfVxuICAgIHZpc2l0T3Iobm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmxlZnQpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnIG9yICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJpZ2h0KTtcbiAgICB9XG4gICAgdmlzaXRWYWx1ZShub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmltbWVkaWF0ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRJbW1lZGlhdGVWYWx1ZShub2RlLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kVmFsdWUobm9kZS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRWYWx1ZUxpc3Qobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUudmFsdWVzKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICB9XG4gICAgdmlzaXRUdXBsZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS52YWx1ZXMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdFByaW1pdGl2ZVZhbHVlTGlzdChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIGNvbnN0IHsgdmFsdWVzIH0gPSBub2RlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRWYWx1ZSh2YWx1ZXNbaV0pO1xuICAgICAgICAgICAgaWYgKGkgIT09IHZhbHVlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJywgJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICB9XG4gICAgdmlzaXRQYXJlbnMobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5vZGUpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdEpvaW4obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChKT0lOX1RZUEVfU1FMW25vZGUuam9pblR5cGVdKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIGlmIChub2RlLm9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRPbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdvbiAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vbik7XG4gICAgfVxuICAgIHZpc2l0UmF3KG5vZGUpIHtcbiAgICAgICAgY29uc3QgeyBzcWxGcmFnbWVudHMsIHBhcmFtZXRlcnM6IHBhcmFtcyB9ID0gbm9kZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcWxGcmFnbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKHNxbEZyYWdtZW50c1tpXSk7XG4gICAgICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShwYXJhbXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0T3BlcmF0b3Iobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChub2RlLm9wZXJhdG9yKTtcbiAgICB9XG4gICAgdmlzaXRUYWJsZShub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgIH1cbiAgICB2aXNpdFNjaGVtYWJsZUlkZW50aWZpZXIobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5zY2hlbWEpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuc2NoZW1hKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5pZGVudGlmaWVyKTtcbiAgICB9XG4gICAgdmlzaXRDcmVhdGVUYWJsZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdjcmVhdGUgJyk7XG4gICAgICAgIGlmIChub2RlLmZyb250TW9kaWZpZXJzICYmIG5vZGUuZnJvbnRNb2RpZmllcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmZyb250TW9kaWZpZXJzLCAnICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS50ZW1wb3JhcnkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCd0ZW1wb3JhcnkgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ3RhYmxlICcpO1xuICAgICAgICBpZiAobm9kZS5pZk5vdEV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIG5vdCBleGlzdHMgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIGlmIChub2RlLnNlbGVjdFF1ZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGFzICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5zZWxlY3RRdWVyeSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICgnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3QoWy4uLm5vZGUuY29sdW1ucywgLi4uKG5vZGUuY29uc3RyYWludHMgPz8gW10pXSk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICAgICAgaWYgKG5vZGUub25Db21taXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9uIGNvbW1pdCAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZChub2RlLm9uQ29tbWl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlLmVuZE1vZGlmaWVycyAmJiBub2RlLmVuZE1vZGlmaWVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCAnICcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0Q29sdW1uRGVmaW5pdGlvbihub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmlmTm90RXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgbm90IGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZGF0YVR5cGUpO1xuICAgICAgICBpZiAobm9kZS51bnNpZ25lZCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB1bnNpZ25lZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmZyb250TW9kaWZpZXJzICYmIG5vZGUuZnJvbnRNb2RpZmllcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5mcm9udE1vZGlmaWVycywgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5nZW5lcmF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmdlbmVyYXRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuaWRlbnRpdHkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgaWRlbnRpdHknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5kZWZhdWx0VG8pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRlZmF1bHRUbyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubm90TnVsbCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBub3QgbnVsbCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnVuaXF1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB1bmlxdWUnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5udWxsc05vdERpc3RpbmN0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG51bGxzIG5vdCBkaXN0aW5jdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgcHJpbWFyeSBrZXknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5hdXRvSW5jcmVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRBdXRvSW5jcmVtZW50KCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJlZmVyZW5jZXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmNoZWNrKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jaGVjayk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZW5kTW9kaWZpZXJzICYmIG5vZGUuZW5kTW9kaWZpZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuZW5kTW9kaWZpZXJzLCAnICcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldEF1dG9JbmNyZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiAnYXV0b19pbmNyZW1lbnQnO1xuICAgIH1cbiAgICB2aXNpdFJlZmVyZW5jZXMobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgncmVmZXJlbmNlcyAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgKCcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIGlmIChub2RlLm9uRGVsZXRlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9uIGRlbGV0ZSAnKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5vZGUub25EZWxldGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLm9uVXBkYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9uIHVwZGF0ZSAnKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5vZGUub25VcGRhdGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0RHJvcFRhYmxlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3AgdGFibGUgJyk7XG4gICAgICAgIGlmIChub2RlLmlmRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgICAgICBpZiAobm9kZS5jYXNjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGNhc2NhZGUnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdERhdGFUeXBlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5kYXRhVHlwZSk7XG4gICAgfVxuICAgIHZpc2l0T3JkZXJCeShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdvcmRlciBieSAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLml0ZW1zKTtcbiAgICB9XG4gICAgdmlzaXRPcmRlckJ5SXRlbShub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3JkZXJCeSk7XG4gICAgICAgIGlmIChub2RlLmNvbGxhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sbGF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5kaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRpcmVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubnVsbHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgbnVsbHMgJyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZChub2RlLm51bGxzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdEdyb3VwQnkobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZ3JvdXAgYnkgJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5pdGVtcyk7XG4gICAgfVxuICAgIHZpc2l0R3JvdXBCeUl0ZW0obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmdyb3VwQnkpO1xuICAgIH1cbiAgICB2aXNpdFVwZGF0ZVF1ZXJ5KG5vZGUpIHtcbiAgICAgICAgY29uc3Qgd3JhcEluUGFyZW5zID0gdGhpcy5wYXJlbnROb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICFQYXJlbnNOb2RlLmlzKHRoaXMucGFyZW50Tm9kZSkgJiZcbiAgICAgICAgICAgICFSYXdOb2RlLmlzKHRoaXMucGFyZW50Tm9kZSkgJiZcbiAgICAgICAgICAgICFXaGVuTm9kZS5pcyh0aGlzLnBhcmVudE5vZGUpO1xuICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlID09PSB1bmRlZmluZWQgJiYgbm9kZS5leHBsYWluKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmV4cGxhaW4pO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod3JhcEluUGFyZW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndpdGgpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2l0aCk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCd1cGRhdGUgJyk7XG4gICAgICAgIGlmIChub2RlLnRvcCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50b3ApO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS50YWJsZSkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdzZXQgJyk7XG4gICAgICAgIGlmIChub2RlLnVwZGF0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS51cGRhdGVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vdXRwdXQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZnJvbSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuam9pbnMpIHtcbiAgICAgICAgICAgIGlmICghbm9kZS5mcm9tKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSm9pbnMgaW4gYW4gdXBkYXRlIHF1ZXJ5IGFyZSBvbmx5IHN1cHBvcnRlZCBhcyBhIHBhcnQgb2YgYSBQb3N0Z3JlU1FMICd1cGRhdGUgc2V0IGZyb20gam9pbicgcXVlcnkuIElmIHlvdSB3YW50IHRvIGNyZWF0ZSBhIE15U1FMICd1cGRhdGUgam9pbiBzZXQnIHF1ZXJ5LCBzZWUgaHR0cHM6Ly9reXNlbHkuZGV2L2RvY3MvZXhhbXBsZXMvdXBkYXRlL215LXNxbC1qb2luc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuam9pbnMsICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUud2hlcmUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndoZXJlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vcmRlckJ5KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcmRlckJ5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5saW1pdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubGltaXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnJldHVybmluZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmV0dXJuaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAod3JhcEluUGFyZW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmVuZE1vZGlmaWVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmVuZE1vZGlmaWVycywgJyAnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdENvbHVtblVwZGF0ZShub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyA9ICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnZhbHVlKTtcbiAgICB9XG4gICAgdmlzaXRMaW1pdChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdsaW1pdCAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5saW1pdCk7XG4gICAgfVxuICAgIHZpc2l0T2Zmc2V0KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ29mZnNldCAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vZmZzZXQpO1xuICAgIH1cbiAgICB2aXNpdE9uQ29uZmxpY3Qobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnb24gY29uZmxpY3QnKTtcbiAgICAgICAgaWYgKG5vZGUuY29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAoJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vZGUuY29uc3RyYWludCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBvbiBjb25zdHJhaW50ICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb25zdHJhaW50KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub2RlLmluZGV4RXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAoJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmluZGV4RXhwcmVzc2lvbik7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmluZGV4V2hlcmUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmluZGV4V2hlcmUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRvTm90aGluZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBkbyBub3RoaW5nJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9kZS51cGRhdGVzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGRvIHVwZGF0ZSBzZXQgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUudXBkYXRlcyk7XG4gICAgICAgICAgICBpZiAobm9kZS51cGRhdGVXaGVyZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS51cGRhdGVXaGVyZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRPbkR1cGxpY2F0ZUtleShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdvbiBkdXBsaWNhdGUga2V5IHVwZGF0ZSAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLnVwZGF0ZXMpO1xuICAgIH1cbiAgICB2aXNpdENyZWF0ZUluZGV4KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2NyZWF0ZSAnKTtcbiAgICAgICAgaWYgKG5vZGUudW5pcXVlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgndW5pcXVlICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdpbmRleCAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZOb3RFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBub3QgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgIGlmIChub2RlLnRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9uICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUudXNpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgdXNpbmcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnVzaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICgnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubnVsbHNOb3REaXN0aW5jdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBudWxscyBub3QgZGlzdGluY3QnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS53aGVyZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2hlcmUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0RHJvcEluZGV4KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3AgaW5kZXggJyk7XG4gICAgICAgIGlmIChub2RlLmlmRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgIGlmIChub2RlLnRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG9uICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50YWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuY2FzY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBjYXNjYWRlJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRDcmVhdGVTY2hlbWEobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnY3JlYXRlIHNjaGVtYSAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZOb3RFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBub3QgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuc2NoZW1hKTtcbiAgICB9XG4gICAgdmlzaXREcm9wU2NoZW1hKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3Agc2NoZW1hICcpO1xuICAgICAgICBpZiAobm9kZS5pZkV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnNjaGVtYSk7XG4gICAgICAgIGlmIChub2RlLmNhc2NhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgY2FzY2FkZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0UHJpbWFyeUtleUNvbnN0cmFpbnQobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5uYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnY29uc3RyYWludCAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCdwcmltYXJ5IGtleSAoJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5jb2x1bW5zKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgdGhpcy5idWlsZERlZmVycmFibGUobm9kZSk7XG4gICAgfVxuICAgIGJ1aWxkRGVmZXJyYWJsZShub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmRlZmVycmFibGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKG5vZGUuZGVmZXJyYWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgZGVmZXJyYWJsZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBub3QgZGVmZXJyYWJsZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmluaXRpYWxseURlZmVycmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChub2RlLmluaXRpYWxseURlZmVycmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBpbml0aWFsbHkgZGVmZXJyZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgaW5pdGlhbGx5IGltbWVkaWF0ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0VW5pcXVlQ29uc3RyYWludChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdjb25zdHJhaW50ICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ3VuaXF1ZScpO1xuICAgICAgICBpZiAobm9kZS5udWxsc05vdERpc3RpbmN0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIG51bGxzIG5vdCBkaXN0aW5jdCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgKCcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcpJyk7XG4gICAgICAgIHRoaXMuYnVpbGREZWZlcnJhYmxlKG5vZGUpO1xuICAgIH1cbiAgICB2aXNpdENoZWNrQ29uc3RyYWludChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdjb25zdHJhaW50ICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ2NoZWNrICgnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICB9XG4gICAgdmlzaXRGb3JlaWduS2V5Q29uc3RyYWludChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdjb25zdHJhaW50ICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ2ZvcmVpZ24ga2V5ICgnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKSAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZWZlcmVuY2VzKTtcbiAgICAgICAgaWYgKG5vZGUub25EZWxldGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb24gZGVsZXRlICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5vbkRlbGV0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub25VcGRhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgb24gdXBkYXRlICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5vblVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWlsZERlZmVycmFibGUobm9kZSk7XG4gICAgfVxuICAgIHZpc2l0TGlzdChub2RlKSB7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5pdGVtcyk7XG4gICAgfVxuICAgIHZpc2l0V2l0aChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCd3aXRoICcpO1xuICAgICAgICBpZiAobm9kZS5yZWN1cnNpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdyZWN1cnNpdmUgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmV4cHJlc3Npb25zKTtcbiAgICB9XG4gICAgdmlzaXRDb21tb25UYWJsZUV4cHJlc3Npb24obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnIGFzICcpO1xuICAgICAgICBpZiAoaXNCb29sZWFuKG5vZGUubWF0ZXJpYWxpemVkKSkge1xuICAgICAgICAgICAgaWYgKCFub2RlLm1hdGVyaWFsaXplZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdub3QgJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnbWF0ZXJpYWxpemVkICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIHZpc2l0Q29tbW9uVGFibGVFeHByZXNzaW9uTmFtZShub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgICAgICBpZiAobm9kZS5jb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdEFsdGVyVGFibGUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnYWx0ZXIgdGFibGUgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudGFibGUpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICBpZiAobm9kZS5yZW5hbWVUbykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3JlbmFtZSB0byAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmVuYW1lVG8pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnNldFNjaGVtYSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3NldCBzY2hlbWEgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnNldFNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuYWRkQ29uc3RyYWludCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5hZGRDb25zdHJhaW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5kcm9wQ29uc3RyYWludCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5kcm9wQ29uc3RyYWludCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUucmVuYW1lQ29uc3RyYWludCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yZW5hbWVDb25zdHJhaW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5jb2x1bW5BbHRlcmF0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5jb21waWxlQ29sdW1uQWx0ZXJhdGlvbnMobm9kZS5jb2x1bW5BbHRlcmF0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuYWRkSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuYWRkSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmRyb3BJbmRleCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5kcm9wSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0QWRkQ29sdW1uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2FkZCBjb2x1bW4gJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29sdW1uKTtcbiAgICB9XG4gICAgdmlzaXRSZW5hbWVDb2x1bW4obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgncmVuYW1lIGNvbHVtbiAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb2x1bW4pO1xuICAgICAgICB0aGlzLmFwcGVuZCgnIHRvICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJlbmFtZVRvKTtcbiAgICB9XG4gICAgdmlzaXREcm9wQ29sdW1uKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3AgY29sdW1uICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgfVxuICAgIHZpc2l0QWx0ZXJDb2x1bW4obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnYWx0ZXIgY29sdW1uICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIGlmIChub2RlLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbm5vdW5jZXNOZXdDb2x1bW5EYXRhVHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3R5cGUgJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRhdGFUeXBlKTtcbiAgICAgICAgICAgIGlmIChub2RlLmRhdGFUeXBlRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCd1c2luZyAnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRhdGFUeXBlRXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuc2V0RGVmYXVsdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3NldCBkZWZhdWx0ICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5zZXREZWZhdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5kcm9wRGVmYXVsdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3AgZGVmYXVsdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnNldE5vdE51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdzZXQgbm90IG51bGwnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5kcm9wTm90TnVsbCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2Ryb3Agbm90IG51bGwnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE1vZGlmeUNvbHVtbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdtb2RpZnkgY29sdW1uICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbHVtbik7XG4gICAgfVxuICAgIHZpc2l0QWRkQ29uc3RyYWludChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdhZGQgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuY29uc3RyYWludCk7XG4gICAgfVxuICAgIHZpc2l0RHJvcENvbnN0cmFpbnQobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCBjb25zdHJhaW50ICcpO1xuICAgICAgICBpZiAobm9kZS5pZkV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbnN0cmFpbnROYW1lKTtcbiAgICAgICAgaWYgKG5vZGUubW9kaWZpZXIgPT09ICdjYXNjYWRlJykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBjYXNjYWRlJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9kZS5tb2RpZmllciA9PT0gJ3Jlc3RyaWN0Jykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyByZXN0cmljdCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0UmVuYW1lQ29uc3RyYWludChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdyZW5hbWUgY29uc3RyYWludCAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vbGROYW1lKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyB0byAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uZXdOYW1lKTtcbiAgICB9XG4gICAgdmlzaXRTZXRPcGVyYXRpb24obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChub2RlLm9wZXJhdG9yKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgaWYgKG5vZGUuYWxsKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnYWxsICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIHZpc2l0Q3JlYXRlVmlldyhub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdjcmVhdGUgJyk7XG4gICAgICAgIGlmIChub2RlLm9yUmVwbGFjZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ29yIHJlcGxhY2UgJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubWF0ZXJpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnbWF0ZXJpYWxpemVkICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnRlbXBvcmFyeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3RlbXBvcmFyeSAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgndmlldyAnKTtcbiAgICAgICAgaWYgKG5vZGUuaWZOb3RFeGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdpZiBub3QgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIGlmIChub2RlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuY29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKSAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5hcykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2FzICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5hcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRSZWZyZXNoTWF0ZXJpYWxpemVkVmlldyhub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdyZWZyZXNoIG1hdGVyaWFsaXplZCB2aWV3ICcpO1xuICAgICAgICBpZiAobm9kZS5jb25jdXJyZW50bHkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdjb25jdXJyZW50bHkgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5uYW1lKTtcbiAgICAgICAgaWYgKG5vZGUud2l0aE5vRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB3aXRoIG5vIGRhdGEnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgd2l0aCBkYXRhJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXREcm9wVmlldyhub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkcm9wICcpO1xuICAgICAgICBpZiAobm9kZS5tYXRlcmlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdtYXRlcmlhbGl6ZWQgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ3ZpZXcgJyk7XG4gICAgICAgIGlmIChub2RlLmlmRXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnaWYgZXhpc3RzICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgIGlmIChub2RlLmNhc2NhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgY2FzY2FkZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0R2VuZXJhdGVkKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2dlbmVyYXRlZCAnKTtcbiAgICAgICAgaWYgKG5vZGUuYWx3YXlzKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnYWx3YXlzICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmJ5RGVmYXVsdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2J5IGRlZmF1bHQgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ2FzICcpO1xuICAgICAgICBpZiAobm9kZS5pZGVudGl0eSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lkZW50aXR5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUuZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJygnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbik7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLnN0b3JlZCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBzdG9yZWQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdERlZmF1bHRWYWx1ZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkZWZhdWx0ICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIHZpc2l0U2VsZWN0TW9kaWZpZXIobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5yYXdNb2RpZmllcikge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5yYXdNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZChTRUxFQ1RfTU9ESUZJRVJfU1FMW25vZGUubW9kaWZpZXJdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vZikge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyBvZiAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5vZiwgJywgJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRDcmVhdGVUeXBlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ2NyZWF0ZSB0eXBlICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgICAgICBpZiAobm9kZS5lbnVtKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGFzIGVudW0gJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmVudW0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0RHJvcFR5cGUobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZHJvcCB0eXBlICcpO1xuICAgICAgICBpZiAobm9kZS5pZkV4aXN0cykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2lmIGV4aXN0cyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLm5hbWUpO1xuICAgIH1cbiAgICB2aXNpdEV4cGxhaW4obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnZXhwbGFpbicpO1xuICAgICAgICBpZiAobm9kZS5vcHRpb25zIHx8IG5vZGUuZm9ybWF0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRMZWZ0RXhwbGFpbk9wdGlvbnNXcmFwcGVyKCkpO1xuICAgICAgICAgICAgaWYgKG5vZGUub3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKHRoaXMuZ2V0RXhwbGFpbk9wdGlvbnNEZWxpbWl0ZXIoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGUuZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2Zvcm1hdCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKHRoaXMuZ2V0RXhwbGFpbk9wdGlvbkFzc2lnbm1lbnQoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmQobm9kZS5mb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5nZXRSaWdodEV4cGxhaW5PcHRpb25zV3JhcHBlcigpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdERlZmF1bHRJbnNlcnRWYWx1ZShfKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdkZWZhdWx0Jyk7XG4gICAgfVxuICAgIHZpc2l0QWdncmVnYXRlRnVuY3Rpb24obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChub2RlLmZ1bmMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKCcpO1xuICAgICAgICBpZiAobm9kZS5kaXN0aW5jdCkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ2Rpc3RpbmN0ICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5hZ2dyZWdhdGVkKTtcbiAgICAgICAgaWYgKG5vZGUub3JkZXJCeSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3JkZXJCeSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgaWYgKG5vZGUud2l0aGluR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgd2l0aGluIGdyb3VwICgnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUud2l0aGluR3JvdXApO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5maWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgZmlsdGVyKCcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5maWx0ZXIpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5vdmVyKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vdmVyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE92ZXIobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnb3ZlcignKTtcbiAgICAgICAgaWYgKG5vZGUucGFydGl0aW9uQnkpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucGFydGl0aW9uQnkpO1xuICAgICAgICAgICAgaWYgKG5vZGUub3JkZXJCeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub3JkZXJCeSkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcmRlckJ5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdFBhcnRpdGlvbkJ5KG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3BhcnRpdGlvbiBieSAnKTtcbiAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLml0ZW1zKTtcbiAgICB9XG4gICAgdmlzaXRQYXJ0aXRpb25CeUl0ZW0obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnBhcnRpdGlvbkJ5KTtcbiAgICB9XG4gICAgdmlzaXRCaW5hcnlPcGVyYXRpb24obm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmxlZnRPcGVyYW5kKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcGVyYXRvcik7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmlnaHRPcGVyYW5kKTtcbiAgICB9XG4gICAgdmlzaXRVbmFyeU9wZXJhdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3BlcmF0b3IpO1xuICAgICAgICBpZiAoIXRoaXMuaXNNaW51c09wZXJhdG9yKG5vZGUub3BlcmF0b3IpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUub3BlcmFuZCk7XG4gICAgfVxuICAgIGlzTWludXNPcGVyYXRvcihub2RlKSB7XG4gICAgICAgIHJldHVybiBPcGVyYXRvck5vZGUuaXMobm9kZSkgJiYgbm9kZS5vcGVyYXRvciA9PT0gJy0nO1xuICAgIH1cbiAgICB2aXNpdFVzaW5nKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoJ3VzaW5nICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUudGFibGVzKTtcbiAgICB9XG4gICAgdmlzaXRGdW5jdGlvbihub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5vZGUuZnVuYyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKCcoJyk7XG4gICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmFwcGVuZCgnKScpO1xuICAgIH1cbiAgICB2aXNpdENhc2Uobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnY2FzZScpO1xuICAgICAgICBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLndoZW4pIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUud2hlbiwgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5lbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGVsc2UgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmVsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKCcgZW5kJyk7XG4gICAgICAgIGlmIChub2RlLmlzU3RhdGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnIGNhc2UnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdFdoZW4obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnd2hlbiAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5jb25kaXRpb24pO1xuICAgICAgICBpZiAobm9kZS5yZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgdGhlbiAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUucmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdEpTT05SZWZlcmVuY2Uobm9kZSkge1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJlZmVyZW5jZSk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudHJhdmVyc2FsKTtcbiAgICB9XG4gICAgdmlzaXRKU09OUGF0aChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLmluT3BlcmF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUuaW5PcGVyYXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoXCInJFwiKTtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoTGVnIG9mIG5vZGUucGF0aExlZ3MpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKHBhdGhMZWcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwZW5kKFwiJ1wiKTtcbiAgICB9XG4gICAgdmlzaXRKU09OUGF0aExlZyhub2RlKSB7XG4gICAgICAgIGNvbnN0IGlzQXJyYXlMb2NhdGlvbiA9IG5vZGUudHlwZSA9PT0gJ0FycmF5TG9jYXRpb24nO1xuICAgICAgICB0aGlzLmFwcGVuZChpc0FycmF5TG9jYXRpb24gPyAnWycgOiAnLicpO1xuICAgICAgICB0aGlzLmFwcGVuZChTdHJpbmcobm9kZS52YWx1ZSkpO1xuICAgICAgICBpZiAoaXNBcnJheUxvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnXScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0SlNPTk9wZXJhdG9yQ2hhaW4obm9kZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gbm9kZS52YWx1ZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID09PSBsZW4gLSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vcGVyYXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZCgnLT4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudmFsdWVzW2ldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE1lcmdlUXVlcnkobm9kZSkge1xuICAgICAgICBpZiAobm9kZS53aXRoKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLndpdGgpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnbWVyZ2UgJyk7XG4gICAgICAgIGlmIChub2RlLnRvcCkge1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS50b3ApO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnaW50byAnKTtcbiAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5pbnRvKTtcbiAgICAgICAgaWYgKG5vZGUudXNpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnVzaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS53aGVucykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyAnKTtcbiAgICAgICAgICAgIHRoaXMuY29tcGlsZUxpc3Qobm9kZS53aGVucywgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS5yZXR1cm5pbmcpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgJyk7XG4gICAgICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJldHVybmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUub3V0cHV0KSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy52aXNpdE5vZGUobm9kZS5vdXRwdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlLmVuZE1vZGlmaWVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGVuZCgnICcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmVuZE1vZGlmaWVycywgJyAnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2aXNpdE1hdGNoZWQobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5ub3QpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdub3QgJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcHBlbmQoJ21hdGNoZWQnKTtcbiAgICAgICAgaWYgKG5vZGUuYnlTb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgYnkgc291cmNlJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaXRBZGRJbmRleChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdhZGQgJyk7XG4gICAgICAgIGlmIChub2RlLnVuaXF1ZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJ3VuaXF1ZSAnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGVuZCgnaW5kZXggJyk7XG4gICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUubmFtZSk7XG4gICAgICAgIGlmIChub2RlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCcgKCcpO1xuICAgICAgICAgICAgdGhpcy5jb21waWxlTGlzdChub2RlLmNvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZS51c2luZykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoJyB1c2luZyAnKTtcbiAgICAgICAgICAgIHRoaXMudmlzaXROb2RlKG5vZGUudXNpbmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0Q2FzdChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdjYXN0KCcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pO1xuICAgICAgICB0aGlzLmFwcGVuZCgnIGFzICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmRhdGFUeXBlKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoJyknKTtcbiAgICB9XG4gICAgdmlzaXRGZXRjaChub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdmZXRjaCBuZXh0ICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLnJvd0NvdW50KTtcbiAgICAgICAgdGhpcy5hcHBlbmQoYCByb3dzICR7bm9kZS5tb2RpZmllcn1gKTtcbiAgICB9XG4gICAgdmlzaXRPdXRwdXQobm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnb3V0cHV0ICcpO1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KG5vZGUuc2VsZWN0aW9ucyk7XG4gICAgfVxuICAgIHZpc2l0VG9wKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoYHRvcCgke25vZGUuZXhwcmVzc2lvbn0pYCk7XG4gICAgICAgIGlmIChub2RlLm1vZGlmaWVycykge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQoYCAke25vZGUubW9kaWZpZXJzfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZpc2l0T3JBY3Rpb24obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZChub2RlLmFjdGlvbik7XG4gICAgfVxuICAgIHZpc2l0Q29sbGF0ZShub2RlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKCdjb2xsYXRlICcpO1xuICAgICAgICB0aGlzLnZpc2l0Tm9kZShub2RlLmNvbGxhdGlvbik7XG4gICAgfVxuICAgIGFwcGVuZChzdHIpIHtcbiAgICAgICAgdGhpcy4jc3FsICs9IHN0cjtcbiAgICB9XG4gICAgYXBwZW5kVmFsdWUocGFyYW1ldGVyKSB7XG4gICAgICAgIHRoaXMuYWRkUGFyYW1ldGVyKHBhcmFtZXRlcik7XG4gICAgICAgIHRoaXMuYXBwZW5kKHRoaXMuZ2V0Q3VycmVudFBhcmFtZXRlclBsYWNlaG9sZGVyKCkpO1xuICAgIH1cbiAgICBnZXRMZWZ0SWRlbnRpZmllcldyYXBwZXIoKSB7XG4gICAgICAgIHJldHVybiAnXCInO1xuICAgIH1cbiAgICBnZXRSaWdodElkZW50aWZpZXJXcmFwcGVyKCkge1xuICAgICAgICByZXR1cm4gJ1wiJztcbiAgICB9XG4gICAgZ2V0Q3VycmVudFBhcmFtZXRlclBsYWNlaG9sZGVyKCkge1xuICAgICAgICByZXR1cm4gJyQnICsgdGhpcy5udW1QYXJhbWV0ZXJzO1xuICAgIH1cbiAgICBnZXRMZWZ0RXhwbGFpbk9wdGlvbnNXcmFwcGVyKCkge1xuICAgICAgICByZXR1cm4gJygnO1xuICAgIH1cbiAgICBnZXRFeHBsYWluT3B0aW9uQXNzaWdubWVudCgpIHtcbiAgICAgICAgcmV0dXJuICcgJztcbiAgICB9XG4gICAgZ2V0RXhwbGFpbk9wdGlvbnNEZWxpbWl0ZXIoKSB7XG4gICAgICAgIHJldHVybiAnLCAnO1xuICAgIH1cbiAgICBnZXRSaWdodEV4cGxhaW5PcHRpb25zV3JhcHBlcigpIHtcbiAgICAgICAgcmV0dXJuICcpJztcbiAgICB9XG4gICAgc2FuaXRpemVJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgICAgICAgY29uc3QgbGVmdFdyYXAgPSB0aGlzLmdldExlZnRJZGVudGlmaWVyV3JhcHBlcigpO1xuICAgICAgICBjb25zdCByaWdodFdyYXAgPSB0aGlzLmdldFJpZ2h0SWRlbnRpZmllcldyYXBwZXIoKTtcbiAgICAgICAgbGV0IHNhbml0aXplZCA9ICcnO1xuICAgICAgICBmb3IgKGNvbnN0IGMgb2YgaWRlbnRpZmllcikge1xuICAgICAgICAgICAgc2FuaXRpemVkICs9IGM7XG4gICAgICAgICAgICBpZiAoYyA9PT0gbGVmdFdyYXApIHtcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWQgKz0gbGVmdFdyYXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjID09PSByaWdodFdyYXApIHtcbiAgICAgICAgICAgICAgICBzYW5pdGl6ZWQgKz0gcmlnaHRXcmFwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gICAgfVxuICAgIHNhbml0aXplU3RyaW5nTGl0ZXJhbCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZShMSVRfV1JBUF9SRUdFWCwgXCInJ1wiKTtcbiAgICB9XG4gICAgYWRkUGFyYW1ldGVyKHBhcmFtZXRlcikge1xuICAgICAgICB0aGlzLiNwYXJhbWV0ZXJzLnB1c2gocGFyYW1ldGVyKTtcbiAgICB9XG4gICAgYXBwZW5kSW1tZWRpYXRlVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRTdHJpbmdMaXRlcmFsKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc051bWJlcih2YWx1ZSkgfHwgaXNCb29sZWFuKHZhbHVlKSB8fCBpc0JpZ0ludCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzTnVsbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKCdudWxsJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmRJbW1lZGlhdGVWYWx1ZSh2YWx1ZS50b0lTT1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBpbW1lZGlhdGUgdmFsdWUgJHt2YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhcHBlbmRTdHJpbmdMaXRlcmFsKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKFwiJ1wiKTtcbiAgICAgICAgdGhpcy5hcHBlbmQodGhpcy5zYW5pdGl6ZVN0cmluZ0xpdGVyYWwodmFsdWUpKTtcbiAgICAgICAgdGhpcy5hcHBlbmQoXCInXCIpO1xuICAgIH1cbiAgICBzb3J0U2VsZWN0TW9kaWZpZXJzKGFycikge1xuICAgICAgICBhcnIuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQubW9kaWZpZXIgJiYgcmlnaHQubW9kaWZpZXJcbiAgICAgICAgICAgID8gU0VMRUNUX01PRElGSUVSX1BSSU9SSVRZW2xlZnQubW9kaWZpZXJdIC1cbiAgICAgICAgICAgICAgICBTRUxFQ1RfTU9ESUZJRVJfUFJJT1JJVFlbcmlnaHQubW9kaWZpZXJdXG4gICAgICAgICAgICA6IDEpO1xuICAgICAgICByZXR1cm4gZnJlZXplKGFycik7XG4gICAgfVxuICAgIGNvbXBpbGVDb2x1bW5BbHRlcmF0aW9ucyhjb2x1bW5BbHRlcmF0aW9ucykge1xuICAgICAgICB0aGlzLmNvbXBpbGVMaXN0KGNvbHVtbkFsdGVyYXRpb25zKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogY29udHJvbHMgd2hldGhlciB0aGUgZGlhbGVjdCBhZGRzIGEgXCJ0eXBlXCIga2V5d29yZCBiZWZvcmUgYSBjb2x1bW4ncyBuZXcgZGF0YVxuICAgICAqIHR5cGUgaW4gYW4gQUxURVIgVEFCTEUgc3RhdGVtZW50LlxuICAgICAqL1xuICAgIGFubm91bmNlc05ld0NvbHVtbkRhdGFUeXBlKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5jb25zdCBTRUxFQ1RfTU9ESUZJRVJfU1FMID0gZnJlZXplKHtcbiAgICBGb3JLZXlTaGFyZTogJ2ZvciBrZXkgc2hhcmUnLFxuICAgIEZvck5vS2V5VXBkYXRlOiAnZm9yIG5vIGtleSB1cGRhdGUnLFxuICAgIEZvclVwZGF0ZTogJ2ZvciB1cGRhdGUnLFxuICAgIEZvclNoYXJlOiAnZm9yIHNoYXJlJyxcbiAgICBOb1dhaXQ6ICdub3dhaXQnLFxuICAgIFNraXBMb2NrZWQ6ICdza2lwIGxvY2tlZCcsXG4gICAgRGlzdGluY3Q6ICdkaXN0aW5jdCcsXG59KTtcbmNvbnN0IFNFTEVDVF9NT0RJRklFUl9QUklPUklUWSA9IGZyZWV6ZSh7XG4gICAgRm9yS2V5U2hhcmU6IDEsXG4gICAgRm9yTm9LZXlVcGRhdGU6IDEsXG4gICAgRm9yVXBkYXRlOiAxLFxuICAgIEZvclNoYXJlOiAxLFxuICAgIE5vV2FpdDogMixcbiAgICBTa2lwTG9ja2VkOiAyLFxuICAgIERpc3RpbmN0OiAwLFxufSk7XG5jb25zdCBKT0lOX1RZUEVfU1FMID0gZnJlZXplKHtcbiAgICBJbm5lckpvaW46ICdpbm5lciBqb2luJyxcbiAgICBMZWZ0Sm9pbjogJ2xlZnQgam9pbicsXG4gICAgUmlnaHRKb2luOiAncmlnaHQgam9pbicsXG4gICAgRnVsbEpvaW46ICdmdWxsIGpvaW4nLFxuICAgIENyb3NzSm9pbjogJ2Nyb3NzIGpvaW4nLFxuICAgIExhdGVyYWxJbm5lckpvaW46ICdpbm5lciBqb2luIGxhdGVyYWwnLFxuICAgIExhdGVyYWxMZWZ0Sm9pbjogJ2xlZnQgam9pbiBsYXRlcmFsJyxcbiAgICBMYXRlcmFsQ3Jvc3NKb2luOiAnY3Jvc3Mgam9pbiBsYXRlcmFsJyxcbiAgICBPdXRlckFwcGx5OiAnb3V0ZXIgYXBwbHknLFxuICAgIENyb3NzQXBwbHk6ICdjcm9zcyBhcHBseScsXG4gICAgVXNpbmc6ICd1c2luZycsXG59KTtcbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vb3BlcmF0aW9uLW5vZGUtdmlzaXRvci5kLnRzXCIgLz5cbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWwvb2JqZWN0LXV0aWxzLmpzJztcbmV4cG9ydCBjbGFzcyBPcGVyYXRpb25Ob2RlVmlzaXRvciB7XG4gICAgbm9kZVN0YWNrID0gW107XG4gICAgZ2V0IHBhcmVudE5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVTdGFja1t0aGlzLm5vZGVTdGFjay5sZW5ndGggLSAyXTtcbiAgICB9XG4gICAgI3Zpc2l0b3JzID0gZnJlZXplKHtcbiAgICAgICAgQWxpYXNOb2RlOiB0aGlzLnZpc2l0QWxpYXMuYmluZCh0aGlzKSxcbiAgICAgICAgQ29sdW1uTm9kZTogdGhpcy52aXNpdENvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBJZGVudGlmaWVyTm9kZTogdGhpcy52aXNpdElkZW50aWZpZXIuYmluZCh0aGlzKSxcbiAgICAgICAgU2NoZW1hYmxlSWRlbnRpZmllck5vZGU6IHRoaXMudmlzaXRTY2hlbWFibGVJZGVudGlmaWVyLmJpbmQodGhpcyksXG4gICAgICAgIFJhd05vZGU6IHRoaXMudmlzaXRSYXcuYmluZCh0aGlzKSxcbiAgICAgICAgUmVmZXJlbmNlTm9kZTogdGhpcy52aXNpdFJlZmVyZW5jZS5iaW5kKHRoaXMpLFxuICAgICAgICBTZWxlY3RRdWVyeU5vZGU6IHRoaXMudmlzaXRTZWxlY3RRdWVyeS5iaW5kKHRoaXMpLFxuICAgICAgICBTZWxlY3Rpb25Ob2RlOiB0aGlzLnZpc2l0U2VsZWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIFRhYmxlTm9kZTogdGhpcy52aXNpdFRhYmxlLmJpbmQodGhpcyksXG4gICAgICAgIEZyb21Ob2RlOiB0aGlzLnZpc2l0RnJvbS5iaW5kKHRoaXMpLFxuICAgICAgICBTZWxlY3RBbGxOb2RlOiB0aGlzLnZpc2l0U2VsZWN0QWxsLmJpbmQodGhpcyksXG4gICAgICAgIEFuZE5vZGU6IHRoaXMudmlzaXRBbmQuYmluZCh0aGlzKSxcbiAgICAgICAgT3JOb2RlOiB0aGlzLnZpc2l0T3IuYmluZCh0aGlzKSxcbiAgICAgICAgVmFsdWVOb2RlOiB0aGlzLnZpc2l0VmFsdWUuYmluZCh0aGlzKSxcbiAgICAgICAgVmFsdWVMaXN0Tm9kZTogdGhpcy52aXNpdFZhbHVlTGlzdC5iaW5kKHRoaXMpLFxuICAgICAgICBQcmltaXRpdmVWYWx1ZUxpc3ROb2RlOiB0aGlzLnZpc2l0UHJpbWl0aXZlVmFsdWVMaXN0LmJpbmQodGhpcyksXG4gICAgICAgIFBhcmVuc05vZGU6IHRoaXMudmlzaXRQYXJlbnMuYmluZCh0aGlzKSxcbiAgICAgICAgSm9pbk5vZGU6IHRoaXMudmlzaXRKb2luLmJpbmQodGhpcyksXG4gICAgICAgIE9wZXJhdG9yTm9kZTogdGhpcy52aXNpdE9wZXJhdG9yLmJpbmQodGhpcyksXG4gICAgICAgIFdoZXJlTm9kZTogdGhpcy52aXNpdFdoZXJlLmJpbmQodGhpcyksXG4gICAgICAgIEluc2VydFF1ZXJ5Tm9kZTogdGhpcy52aXNpdEluc2VydFF1ZXJ5LmJpbmQodGhpcyksXG4gICAgICAgIERlbGV0ZVF1ZXJ5Tm9kZTogdGhpcy52aXNpdERlbGV0ZVF1ZXJ5LmJpbmQodGhpcyksXG4gICAgICAgIFJldHVybmluZ05vZGU6IHRoaXMudmlzaXRSZXR1cm5pbmcuYmluZCh0aGlzKSxcbiAgICAgICAgQ3JlYXRlVGFibGVOb2RlOiB0aGlzLnZpc2l0Q3JlYXRlVGFibGUuYmluZCh0aGlzKSxcbiAgICAgICAgQWRkQ29sdW1uTm9kZTogdGhpcy52aXNpdEFkZENvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBDb2x1bW5EZWZpbml0aW9uTm9kZTogdGhpcy52aXNpdENvbHVtbkRlZmluaXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgRHJvcFRhYmxlTm9kZTogdGhpcy52aXNpdERyb3BUYWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICBEYXRhVHlwZU5vZGU6IHRoaXMudmlzaXREYXRhVHlwZS5iaW5kKHRoaXMpLFxuICAgICAgICBPcmRlckJ5Tm9kZTogdGhpcy52aXNpdE9yZGVyQnkuYmluZCh0aGlzKSxcbiAgICAgICAgT3JkZXJCeUl0ZW1Ob2RlOiB0aGlzLnZpc2l0T3JkZXJCeUl0ZW0uYmluZCh0aGlzKSxcbiAgICAgICAgR3JvdXBCeU5vZGU6IHRoaXMudmlzaXRHcm91cEJ5LmJpbmQodGhpcyksXG4gICAgICAgIEdyb3VwQnlJdGVtTm9kZTogdGhpcy52aXNpdEdyb3VwQnlJdGVtLmJpbmQodGhpcyksXG4gICAgICAgIFVwZGF0ZVF1ZXJ5Tm9kZTogdGhpcy52aXNpdFVwZGF0ZVF1ZXJ5LmJpbmQodGhpcyksXG4gICAgICAgIENvbHVtblVwZGF0ZU5vZGU6IHRoaXMudmlzaXRDb2x1bW5VcGRhdGUuYmluZCh0aGlzKSxcbiAgICAgICAgTGltaXROb2RlOiB0aGlzLnZpc2l0TGltaXQuYmluZCh0aGlzKSxcbiAgICAgICAgT2Zmc2V0Tm9kZTogdGhpcy52aXNpdE9mZnNldC5iaW5kKHRoaXMpLFxuICAgICAgICBPbkNvbmZsaWN0Tm9kZTogdGhpcy52aXNpdE9uQ29uZmxpY3QuYmluZCh0aGlzKSxcbiAgICAgICAgT25EdXBsaWNhdGVLZXlOb2RlOiB0aGlzLnZpc2l0T25EdXBsaWNhdGVLZXkuYmluZCh0aGlzKSxcbiAgICAgICAgQ3JlYXRlSW5kZXhOb2RlOiB0aGlzLnZpc2l0Q3JlYXRlSW5kZXguYmluZCh0aGlzKSxcbiAgICAgICAgRHJvcEluZGV4Tm9kZTogdGhpcy52aXNpdERyb3BJbmRleC5iaW5kKHRoaXMpLFxuICAgICAgICBMaXN0Tm9kZTogdGhpcy52aXNpdExpc3QuYmluZCh0aGlzKSxcbiAgICAgICAgUHJpbWFyeUtleUNvbnN0cmFpbnROb2RlOiB0aGlzLnZpc2l0UHJpbWFyeUtleUNvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgVW5pcXVlQ29uc3RyYWludE5vZGU6IHRoaXMudmlzaXRVbmlxdWVDb25zdHJhaW50LmJpbmQodGhpcyksXG4gICAgICAgIFJlZmVyZW5jZXNOb2RlOiB0aGlzLnZpc2l0UmVmZXJlbmNlcy5iaW5kKHRoaXMpLFxuICAgICAgICBDaGVja0NvbnN0cmFpbnROb2RlOiB0aGlzLnZpc2l0Q2hlY2tDb25zdHJhaW50LmJpbmQodGhpcyksXG4gICAgICAgIFdpdGhOb2RlOiB0aGlzLnZpc2l0V2l0aC5iaW5kKHRoaXMpLFxuICAgICAgICBDb21tb25UYWJsZUV4cHJlc3Npb25Ob2RlOiB0aGlzLnZpc2l0Q29tbW9uVGFibGVFeHByZXNzaW9uLmJpbmQodGhpcyksXG4gICAgICAgIENvbW1vblRhYmxlRXhwcmVzc2lvbk5hbWVOb2RlOiB0aGlzLnZpc2l0Q29tbW9uVGFibGVFeHByZXNzaW9uTmFtZS5iaW5kKHRoaXMpLFxuICAgICAgICBIYXZpbmdOb2RlOiB0aGlzLnZpc2l0SGF2aW5nLmJpbmQodGhpcyksXG4gICAgICAgIENyZWF0ZVNjaGVtYU5vZGU6IHRoaXMudmlzaXRDcmVhdGVTY2hlbWEuYmluZCh0aGlzKSxcbiAgICAgICAgRHJvcFNjaGVtYU5vZGU6IHRoaXMudmlzaXREcm9wU2NoZW1hLmJpbmQodGhpcyksXG4gICAgICAgIEFsdGVyVGFibGVOb2RlOiB0aGlzLnZpc2l0QWx0ZXJUYWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wQ29sdW1uTm9kZTogdGhpcy52aXNpdERyb3BDb2x1bW4uYmluZCh0aGlzKSxcbiAgICAgICAgUmVuYW1lQ29sdW1uTm9kZTogdGhpcy52aXNpdFJlbmFtZUNvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBBbHRlckNvbHVtbk5vZGU6IHRoaXMudmlzaXRBbHRlckNvbHVtbi5iaW5kKHRoaXMpLFxuICAgICAgICBNb2RpZnlDb2x1bW5Ob2RlOiB0aGlzLnZpc2l0TW9kaWZ5Q29sdW1uLmJpbmQodGhpcyksXG4gICAgICAgIEFkZENvbnN0cmFpbnROb2RlOiB0aGlzLnZpc2l0QWRkQ29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wQ29uc3RyYWludE5vZGU6IHRoaXMudmlzaXREcm9wQ29uc3RyYWludC5iaW5kKHRoaXMpLFxuICAgICAgICBSZW5hbWVDb25zdHJhaW50Tm9kZTogdGhpcy52aXNpdFJlbmFtZUNvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgRm9yZWlnbktleUNvbnN0cmFpbnROb2RlOiB0aGlzLnZpc2l0Rm9yZWlnbktleUNvbnN0cmFpbnQuYmluZCh0aGlzKSxcbiAgICAgICAgQ3JlYXRlVmlld05vZGU6IHRoaXMudmlzaXRDcmVhdGVWaWV3LmJpbmQodGhpcyksXG4gICAgICAgIFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3Tm9kZTogdGhpcy52aXNpdFJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3LmJpbmQodGhpcyksXG4gICAgICAgIERyb3BWaWV3Tm9kZTogdGhpcy52aXNpdERyb3BWaWV3LmJpbmQodGhpcyksXG4gICAgICAgIEdlbmVyYXRlZE5vZGU6IHRoaXMudmlzaXRHZW5lcmF0ZWQuYmluZCh0aGlzKSxcbiAgICAgICAgRGVmYXVsdFZhbHVlTm9kZTogdGhpcy52aXNpdERlZmF1bHRWYWx1ZS5iaW5kKHRoaXMpLFxuICAgICAgICBPbk5vZGU6IHRoaXMudmlzaXRPbi5iaW5kKHRoaXMpLFxuICAgICAgICBWYWx1ZXNOb2RlOiB0aGlzLnZpc2l0VmFsdWVzLmJpbmQodGhpcyksXG4gICAgICAgIFNlbGVjdE1vZGlmaWVyTm9kZTogdGhpcy52aXNpdFNlbGVjdE1vZGlmaWVyLmJpbmQodGhpcyksXG4gICAgICAgIENyZWF0ZVR5cGVOb2RlOiB0aGlzLnZpc2l0Q3JlYXRlVHlwZS5iaW5kKHRoaXMpLFxuICAgICAgICBEcm9wVHlwZU5vZGU6IHRoaXMudmlzaXREcm9wVHlwZS5iaW5kKHRoaXMpLFxuICAgICAgICBFeHBsYWluTm9kZTogdGhpcy52aXNpdEV4cGxhaW4uYmluZCh0aGlzKSxcbiAgICAgICAgRGVmYXVsdEluc2VydFZhbHVlTm9kZTogdGhpcy52aXNpdERlZmF1bHRJbnNlcnRWYWx1ZS5iaW5kKHRoaXMpLFxuICAgICAgICBBZ2dyZWdhdGVGdW5jdGlvbk5vZGU6IHRoaXMudmlzaXRBZ2dyZWdhdGVGdW5jdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICBPdmVyTm9kZTogdGhpcy52aXNpdE92ZXIuYmluZCh0aGlzKSxcbiAgICAgICAgUGFydGl0aW9uQnlOb2RlOiB0aGlzLnZpc2l0UGFydGl0aW9uQnkuYmluZCh0aGlzKSxcbiAgICAgICAgUGFydGl0aW9uQnlJdGVtTm9kZTogdGhpcy52aXNpdFBhcnRpdGlvbkJ5SXRlbS5iaW5kKHRoaXMpLFxuICAgICAgICBTZXRPcGVyYXRpb25Ob2RlOiB0aGlzLnZpc2l0U2V0T3BlcmF0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIEJpbmFyeU9wZXJhdGlvbk5vZGU6IHRoaXMudmlzaXRCaW5hcnlPcGVyYXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgVW5hcnlPcGVyYXRpb25Ob2RlOiB0aGlzLnZpc2l0VW5hcnlPcGVyYXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgVXNpbmdOb2RlOiB0aGlzLnZpc2l0VXNpbmcuYmluZCh0aGlzKSxcbiAgICAgICAgRnVuY3Rpb25Ob2RlOiB0aGlzLnZpc2l0RnVuY3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgQ2FzZU5vZGU6IHRoaXMudmlzaXRDYXNlLmJpbmQodGhpcyksXG4gICAgICAgIFdoZW5Ob2RlOiB0aGlzLnZpc2l0V2hlbi5iaW5kKHRoaXMpLFxuICAgICAgICBKU09OUmVmZXJlbmNlTm9kZTogdGhpcy52aXNpdEpTT05SZWZlcmVuY2UuYmluZCh0aGlzKSxcbiAgICAgICAgSlNPTlBhdGhOb2RlOiB0aGlzLnZpc2l0SlNPTlBhdGguYmluZCh0aGlzKSxcbiAgICAgICAgSlNPTlBhdGhMZWdOb2RlOiB0aGlzLnZpc2l0SlNPTlBhdGhMZWcuYmluZCh0aGlzKSxcbiAgICAgICAgSlNPTk9wZXJhdG9yQ2hhaW5Ob2RlOiB0aGlzLnZpc2l0SlNPTk9wZXJhdG9yQ2hhaW4uYmluZCh0aGlzKSxcbiAgICAgICAgVHVwbGVOb2RlOiB0aGlzLnZpc2l0VHVwbGUuYmluZCh0aGlzKSxcbiAgICAgICAgTWVyZ2VRdWVyeU5vZGU6IHRoaXMudmlzaXRNZXJnZVF1ZXJ5LmJpbmQodGhpcyksXG4gICAgICAgIE1hdGNoZWROb2RlOiB0aGlzLnZpc2l0TWF0Y2hlZC5iaW5kKHRoaXMpLFxuICAgICAgICBBZGRJbmRleE5vZGU6IHRoaXMudmlzaXRBZGRJbmRleC5iaW5kKHRoaXMpLFxuICAgICAgICBDYXN0Tm9kZTogdGhpcy52aXNpdENhc3QuYmluZCh0aGlzKSxcbiAgICAgICAgRmV0Y2hOb2RlOiB0aGlzLnZpc2l0RmV0Y2guYmluZCh0aGlzKSxcbiAgICAgICAgVG9wTm9kZTogdGhpcy52aXNpdFRvcC5iaW5kKHRoaXMpLFxuICAgICAgICBPdXRwdXROb2RlOiB0aGlzLnZpc2l0T3V0cHV0LmJpbmQodGhpcyksXG4gICAgICAgIE9yQWN0aW9uTm9kZTogdGhpcy52aXNpdE9yQWN0aW9uLmJpbmQodGhpcyksXG4gICAgICAgIENvbGxhdGVOb2RlOiB0aGlzLnZpc2l0Q29sbGF0ZS5iaW5kKHRoaXMpLFxuICAgIH0pO1xuICAgIHZpc2l0Tm9kZSA9IChub2RlKSA9PiB7XG4gICAgICAgIHRoaXMubm9kZVN0YWNrLnB1c2gobm9kZSk7XG4gICAgICAgIHRoaXMuI3Zpc2l0b3JzW25vZGUua2luZF0obm9kZSk7XG4gICAgICAgIHRoaXMubm9kZVN0YWNrLnBvcCgpO1xuICAgIH07XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL2R1bW15LWRyaXZlci5kLnRzXCIgLz5cbi8qKlxuICogQSBkcml2ZXIgdGhhdCBkb2VzIGFic29sdXRlbHkgbm90aGluZy5cbiAqXG4gKiBZb3UgY2FuIHVzZSB0aGlzIHRvIGNyZWF0ZSBLeXNlbHkgaW5zdGFuY2VzIHNvbGVseSBmb3IgYnVpbGRpbmcgcXVlcmllc1xuICpcbiAqICMjIyBFeGFtcGxlc1xuICpcbiAqIFRoaXMgZXhhbXBsZSBjcmVhdGVzIGEgS3lzZWx5IGluc3RhbmNlIGZvciBidWlsZGluZyBwb3N0Z3JlcyBxdWVyaWVzOlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQge1xuICogICBEdW1teURyaXZlcixcbiAqICAgS3lzZWx5LFxuICogICBQb3N0Z3Jlc0FkYXB0ZXIsXG4gKiAgIFBvc3RncmVzSW50cm9zcGVjdG9yLFxuICogICBQb3N0Z3Jlc1F1ZXJ5Q29tcGlsZXJcbiAqIH0gZnJvbSAna3lzZWx5J1xuICogaW1wb3J0IHR5cGUgeyBEYXRhYmFzZSB9IGZyb20gJ3R5cGUtZWRpdG9yJyAvLyBpbWFnaW5hcnkgbW9kdWxlXG4gKlxuICogY29uc3QgZGIgPSBuZXcgS3lzZWx5PERhdGFiYXNlPih7XG4gKiAgIGRpYWxlY3Q6IHtcbiAqICAgICBjcmVhdGVBZGFwdGVyOiAoKSA9PiBuZXcgUG9zdGdyZXNBZGFwdGVyKCksXG4gKiAgICAgY3JlYXRlRHJpdmVyOiAoKSA9PiBuZXcgRHVtbXlEcml2ZXIoKSxcbiAqICAgICBjcmVhdGVJbnRyb3NwZWN0b3I6IChkYjogS3lzZWx5PGFueT4pID0+IG5ldyBQb3N0Z3Jlc0ludHJvc3BlY3RvcihkYiksXG4gKiAgICAgY3JlYXRlUXVlcnlDb21waWxlcjogKCkgPT4gbmV3IFBvc3RncmVzUXVlcnlDb21waWxlcigpLFxuICogICB9LFxuICogfSlcbiAqIGBgYFxuICpcbiAqIFlvdSBjYW4gdXNlIGl0IHRvIGJ1aWxkIGEgcXVlcnkgYW5kIGNvbXBpbGUgaXQgdG8gU1FMIGJ1dCB0cnlpbmcgdG9cbiAqIGV4ZWN1dGUgdGhlIHF1ZXJ5IHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IHsgc3FsIH0gPSBkYi5zZWxlY3RGcm9tKCdwZXJzb24nKS5zZWxlY3RBbGwoKS5jb21waWxlKClcbiAqIGNvbnNvbGUubG9nKHNxbCkgLy8gc2VsZWN0ICogZnJvbSBcInBlcnNvblwiXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIER1bW15RHJpdmVyIHtcbiAgICBhc3luYyBpbml0KCkge1xuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuXG4gICAgfVxuICAgIGFzeW5jIGFjcXVpcmVDb25uZWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IER1bW15Q29ubmVjdGlvbigpO1xuICAgIH1cbiAgICBhc3luYyBiZWdpblRyYW5zYWN0aW9uKCkge1xuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuXG4gICAgfVxuICAgIGFzeW5jIGNvbW1pdFRyYW5zYWN0aW9uKCkge1xuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuXG4gICAgfVxuICAgIGFzeW5jIHJvbGxiYWNrVHJhbnNhY3Rpb24oKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZS5cbiAgICB9XG4gICAgYXN5bmMgcmVsZWFzZUNvbm5lY3Rpb24oKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZS5cbiAgICB9XG4gICAgYXN5bmMgZGVzdHJveSgpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBkbyBoZXJlLlxuICAgIH1cbiAgICBhc3luYyByZWxlYXNlU2F2ZXBvaW50KCkge1xuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuXG4gICAgfVxuICAgIGFzeW5jIHJvbGxiYWNrVG9TYXZlcG9pbnQoKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZS5cbiAgICB9XG4gICAgYXN5bmMgc2F2ZXBvaW50KCkge1xuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuXG4gICAgfVxufVxuY2xhc3MgRHVtbXlDb25uZWN0aW9uIHtcbiAgICBhc3luYyBleGVjdXRlUXVlcnkoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3dzOiBbXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgKnN0cmVhbVF1ZXJ5KCkge1xuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuXG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9kaWFsZWN0LWFkYXB0ZXItYmFzZS5kLnRzXCIgLz5cbi8qKlxuICogQSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBgRGlhbGVjdEFkYXB0ZXJgIHdpdGggc2Vuc2libGUgZGVmYXVsdCB2YWx1ZXMuXG4gKiBUaGlyZC1wYXJ0eSBkaWFsZWN0cyBjYW4gZXh0ZW5kIHRoaXMgaW5zdGVhZCBvZiBpbXBsZW1lbnRpbmcgdGhlIGBEaWFsZWN0QWRhcHRlcmBcbiAqIGludGVyZmFjZSBmcm9tIHNjcmF0Y2guIFRoYXQgd2F5IGFsbCBuZXcgc2V0dGluZ3Mgd2lsbCBnZXQgZGVmYXVsdCB2YWx1ZXMgd2hlblxuICogdGhleSBhcmUgYWRkZWQgYW5kIHRoZXJlIHdpbGwgYmUgbGVzcyBicmVha2luZyBjaGFuZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgRGlhbGVjdEFkYXB0ZXJCYXNlIHtcbiAgICBnZXQgc3VwcG9ydHNDcmVhdGVJZk5vdEV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBzdXBwb3J0c1RyYW5zYWN0aW9uYWxEZGwoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IHN1cHBvcnRzUmV0dXJuaW5nKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdldCBzdXBwb3J0c091dHB1dCgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vc3FsaXRlLXF1ZXJ5LWNvbXBpbGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgRGVmYXVsdFF1ZXJ5Q29tcGlsZXIgfSBmcm9tICcuLi8uLi9xdWVyeS1jb21waWxlci9kZWZhdWx0LXF1ZXJ5LWNvbXBpbGVyLmpzJztcbmNvbnN0IElEX1dSQVBfUkVHRVggPSAvXCIvZztcbmV4cG9ydCBjbGFzcyBTcWxpdGVRdWVyeUNvbXBpbGVyIGV4dGVuZHMgRGVmYXVsdFF1ZXJ5Q29tcGlsZXIge1xuICAgIHZpc2l0T3JBY3Rpb24obm9kZSkge1xuICAgICAgICB0aGlzLmFwcGVuZCgnb3IgJyk7XG4gICAgICAgIHRoaXMuYXBwZW5kKG5vZGUuYWN0aW9uKTtcbiAgICB9XG4gICAgZ2V0Q3VycmVudFBhcmFtZXRlclBsYWNlaG9sZGVyKCkge1xuICAgICAgICByZXR1cm4gJz8nO1xuICAgIH1cbiAgICBnZXRMZWZ0RXhwbGFpbk9wdGlvbnNXcmFwcGVyKCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGdldFJpZ2h0RXhwbGFpbk9wdGlvbnNXcmFwcGVyKCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGdldExlZnRJZGVudGlmaWVyV3JhcHBlcigpIHtcbiAgICAgICAgcmV0dXJuICdcIic7XG4gICAgfVxuICAgIGdldFJpZ2h0SWRlbnRpZmllcldyYXBwZXIoKSB7XG4gICAgICAgIHJldHVybiAnXCInO1xuICAgIH1cbiAgICBnZXRBdXRvSW5jcmVtZW50KCkge1xuICAgICAgICByZXR1cm4gJ2F1dG9pbmNyZW1lbnQnO1xuICAgIH1cbiAgICBzYW5pdGl6ZUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gaWRlbnRpZmllci5yZXBsYWNlKElEX1dSQVBfUkVHRVgsICdcIlwiJyk7XG4gICAgfVxuICAgIHZpc2l0RGVmYXVsdEluc2VydFZhbHVlKF8pIHtcbiAgICAgICAgLy8gc3FsaXRlIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYGRlZmF1bHRgIGtleXdvcmQgaW4gaW5zZXJ0cy5cbiAgICAgICAgdGhpcy5hcHBlbmQoJ251bGwnKTtcbiAgICB9XG59XG4iLCAiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIuL3NxbGl0ZS1hZGFwdGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgRGlhbGVjdEFkYXB0ZXJCYXNlIH0gZnJvbSAnLi4vZGlhbGVjdC1hZGFwdGVyLWJhc2UuanMnO1xuZXhwb3J0IGNsYXNzIFNxbGl0ZUFkYXB0ZXIgZXh0ZW5kcyBEaWFsZWN0QWRhcHRlckJhc2Uge1xuICAgIGdldCBzdXBwb3J0c1RyYW5zYWN0aW9uYWxEZGwoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IHN1cHBvcnRzUmV0dXJuaW5nKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYXN5bmMgYWNxdWlyZU1pZ3JhdGlvbkxvY2soX2RiLCBfb3B0KSB7XG4gICAgICAgIC8vIFNRTGl0ZSBvbmx5IGhhcyBvbmUgY29ubmVjdGlvbiB0aGF0J3MgcmVzZXJ2ZWQgYnkgdGhlIG1pZ3JhdGlvbiBzeXN0ZW1cbiAgICAgICAgLy8gZm9yIHRoZSB3aG9sZSB0aW1lIGJldHdlZW4gYWNxdWlyZU1pZ3JhdGlvbkxvY2sgYW5kIHJlbGVhc2VNaWdyYXRpb25Mb2NrLlxuICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuXG4gICAgfVxuICAgIGFzeW5jIHJlbGVhc2VNaWdyYXRpb25Mb2NrKF9kYiwgX29wdCkge1xuICAgICAgICAvLyBTUUxpdGUgb25seSBoYXMgb25lIGNvbm5lY3Rpb24gdGhhdCdzIHJlc2VydmVkIGJ5IHRoZSBtaWdyYXRpb24gc3lzdGVtXG4gICAgICAgIC8vIGZvciB0aGUgd2hvbGUgdGltZSBiZXR3ZWVuIGFjcXVpcmVNaWdyYXRpb25Mb2NrIGFuZCByZWxlYXNlTWlncmF0aW9uTG9jay5cbiAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLlxuICAgIH1cbn1cbiIsICIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIi4vcG9zdGdyZXMtcXVlcnktY29tcGlsZXIuZC50c1wiIC8+XG5pbXBvcnQgeyBEZWZhdWx0UXVlcnlDb21waWxlciB9IGZyb20gJy4uLy4uL3F1ZXJ5LWNvbXBpbGVyL2RlZmF1bHQtcXVlcnktY29tcGlsZXIuanMnO1xuY29uc3QgSURfV1JBUF9SRUdFWCA9IC9cIi9nO1xuZXhwb3J0IGNsYXNzIFBvc3RncmVzUXVlcnlDb21waWxlciBleHRlbmRzIERlZmF1bHRRdWVyeUNvbXBpbGVyIHtcbiAgICBzYW5pdGl6ZUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICAgICAgICByZXR1cm4gaWRlbnRpZmllci5yZXBsYWNlKElEX1dSQVBfUkVHRVgsICdcIlwiJyk7XG4gICAgfVxufVxuIiwgIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiLi9wb3N0Z3Jlcy1hZGFwdGVyLmQudHNcIiAvPlxuaW1wb3J0IHsgc3FsIH0gZnJvbSAnLi4vLi4vcmF3LWJ1aWxkZXIvc3FsLmpzJztcbmltcG9ydCB7IERpYWxlY3RBZGFwdGVyQmFzZSB9IGZyb20gJy4uL2RpYWxlY3QtYWRhcHRlci1iYXNlLmpzJztcbi8vIFJhbmRvbSBpZCBmb3Igb3VyIHRyYW5zYWN0aW9uIGxvY2suXG5jb25zdCBMT0NLX0lEID0gQmlnSW50KCczODUzMzE0NzkxMDYyMzA5MTA3Jyk7XG5leHBvcnQgY2xhc3MgUG9zdGdyZXNBZGFwdGVyIGV4dGVuZHMgRGlhbGVjdEFkYXB0ZXJCYXNlIHtcbiAgICBnZXQgc3VwcG9ydHNUcmFuc2FjdGlvbmFsRGRsKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IHN1cHBvcnRzUmV0dXJuaW5nKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYXN5bmMgYWNxdWlyZU1pZ3JhdGlvbkxvY2soZGIsIF9vcHQpIHtcbiAgICAgICAgLy8gQWNxdWlyZSBhIHRyYW5zYWN0aW9uIGxldmVsIGFkdmlzb3J5IGxvY2suXG4gICAgICAgIGF3YWl0IHNxbCBgc2VsZWN0IHBnX2Fkdmlzb3J5X3hhY3RfbG9jaygke3NxbC5saXQoTE9DS19JRCl9KWAuZXhlY3V0ZShkYik7XG4gICAgfVxuICAgIGFzeW5jIHJlbGVhc2VNaWdyYXRpb25Mb2NrKF9kYiwgX29wdCkge1xuICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuIGBwZ19hZHZpc29yeV94YWN0X2xvY2tgIGlzIGF1dG9tYXRpY2FsbHkgcmVsZWFzZWQgYXQgdGhlXG4gICAgICAgIC8vIGVuZCBvZiB0aGUgdHJhbnNhY3Rpb24gYW5kIHNpbmNlIGBzdXBwb3J0c1RyYW5zYWN0aW9uYWxEZGxgIHRydWUsIHdlIGtub3dcbiAgICAgICAgLy8gdGhlIGBkYmAgaW5zdGFuY2UgcGFzc2VkIHRvIGFjcXVpcmVNaWdyYXRpb25Mb2NrIGlzIGFjdHVhbGx5IGEgdHJhbnNhY3Rpb24uXG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7d0NBQUFBLElDQUFDLElDQUFDLElDQUFDLElDQUFDLElDQUFDLElBVU8sU0FBU0MsRUFBWUMsRUFBSyxDQUM3QixPQUFPLE9BQU9BLEVBQVEsS0FBZUEsSUFBUSxNQUNqRCxDQUNPLFNBQVNDLEVBQVNELEVBQUssQ0FDMUIsT0FBTyxPQUFPQSxHQUFRLFFBQzFCLENBQ08sU0FBU0UsR0FBU0YsRUFBSyxDQUMxQixPQUFPLE9BQU9BLEdBQVEsUUFDMUIsQ0FDTyxTQUFTRyxHQUFVSCxFQUFLLENBQzNCLE9BQU8sT0FBT0EsR0FBUSxTQUMxQixDQUNPLFNBQVNJLEdBQU9KLEVBQUssQ0FDeEIsT0FBT0EsSUFBUSxJQUNuQixDQUNPLFNBQVNLLEdBQU9MLEVBQUssQ0FDeEIsT0FBT0EsYUFBZSxJQUMxQixDQUNPLFNBQVNNLEdBQVNOLEVBQUssQ0FDMUIsT0FBTyxPQUFPQSxHQUFRLFFBQzFCLENBTU8sU0FBU08sRUFBV0MsRUFBSyxDQUM1QixPQUFPLE9BQU9BLEdBQVEsVUFDMUIsQ0FDTyxTQUFTQyxFQUFTRCxFQUFLLENBQzFCLE9BQU8sT0FBT0EsR0FBUSxVQUFZQSxJQUFRLElBQzlDLENBb0JPLFNBQVNFLEVBQU9DLEVBQUssQ0FDeEIsT0FBTyxPQUFPLE9BQU9BLENBQUcsQ0FDNUIsQ0FDTyxTQUFTQyxHQUFRQyxFQUFLLENBQ3pCLE9BQUlDLEVBQWdCRCxDQUFHLEVBQ1pBLEVBR0EsQ0FBQ0EsQ0FBRyxDQUVuQixDQVNPLFNBQVNFLEVBQWdCQyxFQUFLLENBQ2pDLE9BQU8sTUFBTSxRQUFRQSxDQUFHLENBQzVCLENBQ08sU0FBU0MsRUFBS0MsRUFBSyxDQUN0QixPQUFPQSxDQUNYLENEaEZPLElBQU1DLEVBQWlC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eEMsRUFBUVcsQ0FBTSxFQUVqQyxPQUFPUCxFQUNMb0MsRUFBVyxTQUFTLFFBQVUsTUFBUXBDLEVBQUcsS0FBS08sRUFBUSxNQUFNLEVBQUlBLEVBQ2hFNEIsRUFDQXRCLEdBQWVWLEVBQU9pQyxDQUFVLENBQ2xDLENBQ0YsRUFHS1gsR0FBMEJTLEVBQUssUUFBU3RDLENBQU8sQ0FDeEQiLAogICJuYW1lcyI6IFsiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaXNVbmRlZmluZWQiLCAib2JqIiwgImlzU3RyaW5nIiwgImlzTnVtYmVyIiwgImlzQm9vbGVhbiIsICJpc051bGwiLCAiaXNEYXRlIiwgImlzQmlnSW50IiwgImlzRnVuY3Rpb24iLCAib2JqIiwgImlzT2JqZWN0IiwgImZyZWV6ZSIsICJvYmoiLCAiYXNBcnJheSIsICJhcmciLCAiaXNSZWFkb25seUFycmF5IiwgImlzUmVhZG9ubHlBcnJheSIsICJhcmciLCAibm9vcCIsICJvYmoiLCAiQWx0ZXJUYWJsZU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAidGFibGUiLCAicHJvcHMiLCAiY29sdW1uQWx0ZXJhdGlvbiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJJZGVudGlmaWVyTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJuYW1lIiwgIkNyZWF0ZUluZGV4Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJuYW1lIiwgIklkZW50aWZpZXJOb2RlIiwgInByb3BzIiwgImNvbHVtbnMiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiQ3JlYXRlU2NoZW1hTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJzY2hlbWEiLCAicGFyYW1zIiwgIklkZW50aWZpZXJOb2RlIiwgImNyZWF0ZVNjaGVtYSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJPTl9DT01NSVRfQUNUSU9OUyIsICJDcmVhdGVUYWJsZU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAidGFibGUiLCAiY3JlYXRlVGFibGUiLCAiY29sdW1uIiwgImNvbnN0cmFpbnQiLCAibW9kaWZpZXIiLCAicGFyYW1zIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlNjaGVtYWJsZUlkZW50aWZpZXJOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImlkZW50aWZpZXIiLCAiSWRlbnRpZmllck5vZGUiLCAic2NoZW1hIiwgIkRyb3BJbmRleE5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAibmFtZSIsICJwYXJhbXMiLCAiU2NoZW1hYmxlSWRlbnRpZmllck5vZGUiLCAiZHJvcEluZGV4IiwgInByb3BzIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkRyb3BTY2hlbWFOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInNjaGVtYSIsICJwYXJhbXMiLCAiSWRlbnRpZmllck5vZGUiLCAiZHJvcFNjaGVtYSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJEcm9wVGFibGVOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInRhYmxlIiwgInBhcmFtcyIsICJkcm9wSW5kZXgiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiQWxpYXNOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImFsaWFzIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlRhYmxlTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJ0YWJsZSIsICJTY2hlbWFibGVJZGVudGlmaWVyTm9kZSIsICJzY2hlbWEiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaXNPcGVyYXRpb25Ob2RlU291cmNlIiwgIm9iaiIsICJpc09iamVjdCIsICJpc0Z1bmN0aW9uIiwgImlzRXhwcmVzc2lvbiIsICJvYmoiLCAiaXNPYmplY3QiLCAiaXNPcGVyYXRpb25Ob2RlU291cmNlIiwgImlzQWxpYXNlZEV4cHJlc3Npb24iLCAiaXNTdHJpbmciLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiU2VsZWN0TW9kaWZpZXJOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIm1vZGlmaWVyIiwgIm9mIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkFuZE5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAibGVmdCIsICJyaWdodCIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJPck5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAibGVmdCIsICJyaWdodCIsICJPbk5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiZmlsdGVyIiwgIm9uTm9kZSIsICJvcGVyYXRvciIsICJvcGVyYXRpb24iLCAiQW5kTm9kZSIsICJPck5vZGUiLCAiSm9pbk5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiam9pblR5cGUiLCAidGFibGUiLCAib24iLCAiT25Ob2RlIiwgImpvaW5Ob2RlIiwgIm9wZXJhdGlvbiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJCaW5hcnlPcGVyYXRpb25Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImxlZnRPcGVyYW5kIiwgIm9wZXJhdG9yIiwgInJpZ2h0T3BlcmFuZCIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJDT01QQVJJU09OX09QRVJBVE9SUyIsICJBUklUSE1FVElDX09QRVJBVE9SUyIsICJKU09OX09QRVJBVE9SUyIsICJCSU5BUllfT1BFUkFUT1JTIiwgIlVOQVJZX0ZJTFRFUl9PUEVSQVRPUlMiLCAiVU5BUllfT1BFUkFUT1JTIiwgIk9QRVJBVE9SUyIsICJPcGVyYXRvck5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAib3BlcmF0b3IiLCAiaXNKU09OT3BlcmF0b3IiLCAib3AiLCAiaXNTdHJpbmciLCAiSlNPTl9PUEVSQVRPUlMiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiQ29sdW1uTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJjb2x1bW4iLCAiSWRlbnRpZmllck5vZGUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiU2VsZWN0QWxsTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJSZWZlcmVuY2VOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImNvbHVtbiIsICJ0YWJsZSIsICJTZWxlY3RBbGxOb2RlIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkR5bmFtaWNSZWZlcmVuY2VCdWlsZGVyIiwgIiNkeW5hbWljUmVmZXJlbmNlIiwgInJlZmVyZW5jZSIsICJwYXJzZVNpbXBsZVJlZmVyZW5jZUV4cHJlc3Npb24iLCAiaXNEeW5hbWljUmVmZXJlbmNlQnVpbGRlciIsICJvYmoiLCAiaXNPYmplY3QiLCAiaXNPcGVyYXRpb25Ob2RlU291cmNlIiwgImlzU3RyaW5nIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIk9yZGVyQnlJdGVtTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJvcmRlckJ5IiwgImRpcmVjdGlvbiIsICJwcm9wcyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJSYXdOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInNxbEZyYWdtZW50cyIsICJwYXJhbWV0ZXJzIiwgInNxbCIsICJjaGlsZCIsICJjaGlsZHJlbiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJDb2xsYXRlTm9kZSIsICJub2RlIiwgImNvbGxhdGlvbiIsICJmcmVlemUiLCAiSWRlbnRpZmllck5vZGUiLCAiT3JkZXJCeUl0ZW1CdWlsZGVyIiwgIl9PcmRlckJ5SXRlbUJ1aWxkZXIiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJPcmRlckJ5SXRlbU5vZGUiLCAiUmF3Tm9kZSIsICJjb2xsYXRpb24iLCAiQ29sbGF0ZU5vZGUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiTE9HR0VEX01FU1NBR0VTIiwgImxvZ09uY2UiLCAibWVzc2FnZSIsICJpc09yZGVyQnlEaXJlY3Rpb24iLCAidGhpbmciLCAicGFyc2VPcmRlckJ5IiwgImFyZ3MiLCAicGFyc2VPcmRlckJ5SXRlbSIsICJvcmRlckJ5IiwgImxvZ09uY2UiLCAiaXRlbSIsICJleHByIiwgIm1vZGlmaWVycyIsICJwYXJzZWRSZWYiLCAicGFyc2VPcmRlckJ5RXhwcmVzc2lvbiIsICJPcmRlckJ5SXRlbU5vZGUiLCAicGFyc2VPcmRlckJ5V2l0aE1vZGlmaWVycyIsICJpc0V4cHJlc3Npb25PckZhY3RvcnkiLCAicGFyc2VFeHByZXNzaW9uIiwgImlzRHluYW1pY1JlZmVyZW5jZUJ1aWxkZXIiLCAicmVmIiwgImRpcmVjdGlvbiIsICJwYXJzZVN0cmluZ1JlZmVyZW5jZSIsICJSYXdOb2RlIiwgImlzRXhwcmVzc2lvbiIsICJub2RlIiwgIk9yZGVyQnlJdGVtQnVpbGRlciIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJKU09OUmVmZXJlbmNlTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJyZWZlcmVuY2UiLCAidHJhdmVyc2FsIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkpTT05PcGVyYXRvckNoYWluTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJvcGVyYXRvciIsICJ2YWx1ZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJKU09OUGF0aE5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiaW5PcGVyYXRvciIsICJqc29uUGF0aE5vZGUiLCAicGF0aExlZyIsICJwYXJzZVNpbXBsZVJlZmVyZW5jZUV4cHJlc3Npb24iLCAiZXhwIiwgImlzU3RyaW5nIiwgInBhcnNlU3RyaW5nUmVmZXJlbmNlIiwgInBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbk9yTGlzdCIsICJhcmciLCAiaXNSZWFkb25seUFycmF5IiwgIml0IiwgInBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbiIsICJpc0V4cHJlc3Npb25PckZhY3RvcnkiLCAicGFyc2VFeHByZXNzaW9uIiwgInBhcnNlSlNPTlJlZmVyZW5jZSIsICJyZWYiLCAib3AiLCAicmVmZXJlbmNlTm9kZSIsICJpc0pTT05PcGVyYXRvciIsICJKU09OUmVmZXJlbmNlTm9kZSIsICJKU09OT3BlcmF0b3JDaGFpbk5vZGUiLCAiT3BlcmF0b3JOb2RlIiwgIm9wV2l0aG91dExhc3RDaGFyIiwgIkpTT05QYXRoTm9kZSIsICJDT0xVTU5fU0VQQVJBVE9SIiwgIlJlZmVyZW5jZU5vZGUiLCAiQ29sdW1uTm9kZSIsICJwYXJ0cyIsICJ0cmltIiwgInBhcnNlU3RyaW5nUmVmZXJlbmNlV2l0aFRhYmxlQW5kU2NoZW1hIiwgInBhcnNlU3RyaW5nUmVmZXJlbmNlV2l0aFRhYmxlIiwgInBhcnNlQWxpYXNlZFN0cmluZ1JlZmVyZW5jZSIsICJBTElBU19TRVBBUkFUT1IiLCAiY29sdW1uUmVmIiwgImFsaWFzIiwgIkFsaWFzTm9kZSIsICJJZGVudGlmaWVyTm9kZSIsICJwYXJzZUNvbHVtbk5hbWUiLCAiY29sdW1uIiwgInBhcnNlT3JkZXJlZENvbHVtbk5hbWUiLCAiT1JERVJfU0VQQVJBVE9SIiwgImNvbHVtbk5hbWUiLCAib3JkZXIiLCAiaXNPcmRlckJ5RGlyZWN0aW9uIiwgInBhcnNlT3JkZXJCeSIsICJzY2hlbWEiLCAidGFibGUiLCAiVGFibGVOb2RlIiwgInN0ciIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJQcmltaXRpdmVWYWx1ZUxpc3ROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInZhbHVlcyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJWYWx1ZUxpc3ROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInZhbHVlcyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJWYWx1ZU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAidmFsdWUiLCAicGFyc2VWYWx1ZUV4cHJlc3Npb25Pckxpc3QiLCAiYXJnIiwgImlzUmVhZG9ubHlBcnJheSIsICJwYXJzZVZhbHVlRXhwcmVzc2lvbkxpc3QiLCAicGFyc2VWYWx1ZUV4cHJlc3Npb24iLCAiZXhwIiwgImlzRXhwcmVzc2lvbk9yRmFjdG9yeSIsICJwYXJzZUV4cHJlc3Npb24iLCAiVmFsdWVOb2RlIiwgImlzU2FmZUltbWVkaWF0ZVZhbHVlIiwgInZhbHVlIiwgImlzTnVtYmVyIiwgImlzQm9vbGVhbiIsICJpc051bGwiLCAicGFyc2VTYWZlSW1tZWRpYXRlVmFsdWUiLCAiVmFsdWVMaXN0Tm9kZSIsICJpdCIsICJQcmltaXRpdmVWYWx1ZUxpc3ROb2RlIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlBhcmVuc05vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAicGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbiIsICJhcmdzIiwgInBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb24iLCAicGFyc2VWYWx1ZUV4cHJlc3Npb24iLCAibGVmdCIsICJvcGVyYXRvciIsICJyaWdodCIsICJpc0lzT3BlcmF0b3IiLCAibmVlZHNJc09wZXJhdG9yIiwgIkJpbmFyeU9wZXJhdGlvbk5vZGUiLCAicGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uIiwgInBhcnNlT3BlcmF0b3IiLCAiVmFsdWVOb2RlIiwgInBhcnNlVmFsdWVFeHByZXNzaW9uT3JMaXN0IiwgInBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24iLCAicGFyc2VGaWx0ZXJPYmplY3QiLCAib2JqIiwgImNvbWJpbmF0b3IiLCAicGFyc2VGaWx0ZXJMaXN0IiwgInYiLCAiaXNVbmRlZmluZWQiLCAiayIsICJsaXN0IiwgIndpdGhQYXJlbnMiLCAiY29tYmluZSIsICJBbmROb2RlIiwgIk9yTm9kZSIsICJPcGVyYXRvck5vZGUiLCAibm9kZSIsICJ0b09wZXJhdGlvbk5vZGUiLCAiaSIsICJQYXJlbnNOb2RlIiwgInZhbHVlIiwgImlzTnVsbCIsICJpc0Jvb2xlYW4iLCAiaXNTdHJpbmciLCAiT1BFUkFUT1JTIiwgImlzT3BlcmF0aW9uTm9kZVNvdXJjZSIsICJub2RlT3JTb3VyY2UiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiT3JkZXJCeU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiaXRlbXMiLCAib3JkZXJCeSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJQYXJ0aXRpb25CeU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiaXRlbXMiLCAicGFydGl0aW9uQnkiLCAiT3Zlck5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAib3Zlck5vZGUiLCAiaXRlbXMiLCAiT3JkZXJCeU5vZGUiLCAiUGFydGl0aW9uQnlOb2RlIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkZyb21Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImZyb21zIiwgImZyb20iLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiR3JvdXBCeU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiaXRlbXMiLCAiZ3JvdXBCeSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJIYXZpbmdOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImZpbHRlciIsICJoYXZpbmdOb2RlIiwgIm9wZXJhdG9yIiwgIm9wZXJhdGlvbiIsICJBbmROb2RlIiwgIk9yTm9kZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJJbnNlcnRRdWVyeU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiaW50byIsICJ3aXRoTm9kZSIsICJyZXBsYWNlIiwgImluc2VydFF1ZXJ5IiwgInByb3BzIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkxpc3ROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIml0ZW1zIiwgIlVwZGF0ZVF1ZXJ5Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJ0YWJsZXMiLCAid2l0aE5vZGUiLCAiTGlzdE5vZGUiLCAidXBkYXRlUXVlcnkiLCAiZnJvbUl0ZW1zIiwgIkZyb21Ob2RlIiwgInVwZGF0ZXMiLCAibGltaXQiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiVXNpbmdOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInRhYmxlcyIsICJ1c2luZyIsICJEZWxldGVRdWVyeU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiZnJvbUl0ZW1zIiwgIndpdGhOb2RlIiwgIkZyb21Ob2RlIiwgIml0ZW1zIiwgIlF1ZXJ5Tm9kZSIsICJkZWxldGVOb2RlIiwgImxpbWl0IiwgInRhYmxlcyIsICJVc2luZ05vZGUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiV2hlcmVOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImZpbHRlciIsICJ3aGVyZU5vZGUiLCAib3BlcmF0b3IiLCAib3BlcmF0aW9uIiwgIkFuZE5vZGUiLCAiT3JOb2RlIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlJldHVybmluZ05vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAic2VsZWN0aW9ucyIsICJyZXR1cm5pbmciLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiRXhwbGFpbk5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiZm9ybWF0IiwgIm9wdGlvbnMiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiV2hlbk5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiY29uZGl0aW9uIiwgIndoZW5Ob2RlIiwgInJlc3VsdCIsICJNZXJnZVF1ZXJ5Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJpbnRvIiwgIndpdGhOb2RlIiwgIm1lcmdlTm9kZSIsICJ1c2luZyIsICJ3aGVuIiwgInRoZW4iLCAiV2hlbk5vZGUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiT3V0cHV0Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJzZWxlY3Rpb25zIiwgIm91dHB1dCIsICJRdWVyeU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiU2VsZWN0UXVlcnlOb2RlIiwgIkluc2VydFF1ZXJ5Tm9kZSIsICJVcGRhdGVRdWVyeU5vZGUiLCAiRGVsZXRlUXVlcnlOb2RlIiwgIk1lcmdlUXVlcnlOb2RlIiwgIm1vZGlmaWVyIiwgIm9wZXJhdGlvbiIsICJXaGVyZU5vZGUiLCAiam9pbiIsICJzZWxlY3Rpb25zIiwgIlJldHVybmluZ05vZGUiLCAiZm9ybWF0IiwgIm9wdGlvbnMiLCAiRXhwbGFpbk5vZGUiLCAidG9wIiwgIk91dHB1dE5vZGUiLCAiaXRlbXMiLCAiT3JkZXJCeU5vZGUiLCAiU2VsZWN0UXVlcnlOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIndpdGhOb2RlIiwgImZyb21JdGVtcyIsICJGcm9tTm9kZSIsICJzZWxlY3QiLCAic2VsZWN0aW9ucyIsICJleHByZXNzaW9ucyIsICJtb2RpZmllciIsICJpdGVtcyIsICJRdWVyeU5vZGUiLCAic2VsZWN0Tm9kZSIsICJHcm91cEJ5Tm9kZSIsICJsaW1pdCIsICJvZmZzZXQiLCAiZmV0Y2giLCAib3BlcmF0aW9uIiwgIkhhdmluZ05vZGUiLCAic2V0T3BlcmF0aW9ucyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJKb2luQnVpbGRlciIsICJfSm9pbkJ1aWxkZXIiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJhcmdzIiwgIkpvaW5Ob2RlIiwgInBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24iLCAibGhzIiwgIm9wIiwgInJocyIsICJwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uIiwgIlJhd05vZGUiLCAiZnVuYyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJQYXJ0aXRpb25CeUl0ZW1Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInBhcnRpdGlvbkJ5IiwgInBhcnNlUGFydGl0aW9uQnkiLCAicGFydGl0aW9uQnkiLCAicGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uT3JMaXN0IiwgIlBhcnRpdGlvbkJ5SXRlbU5vZGUiLCAiT3ZlckJ1aWxkZXIiLCAiX092ZXJCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiYXJncyIsICJPdmVyTm9kZSIsICJwYXJzZU9yZGVyQnkiLCAiUXVlcnlOb2RlIiwgInBhcnRpdGlvbkJ5IiwgInBhcnNlUGFydGl0aW9uQnkiLCAiZnVuYyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJTZWxlY3Rpb25Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInNlbGVjdGlvbiIsICJTZWxlY3RBbGxOb2RlIiwgInRhYmxlIiwgIlJlZmVyZW5jZU5vZGUiLCAicGFyc2VTZWxlY3RBcmciLCAic2VsZWN0aW9uIiwgImlzRnVuY3Rpb24iLCAiZXhwcmVzc2lvbkJ1aWxkZXIiLCAiaXNSZWFkb25seUFycmF5IiwgIml0IiwgInBhcnNlU2VsZWN0RXhwcmVzc2lvbiIsICJpc1N0cmluZyIsICJTZWxlY3Rpb25Ob2RlIiwgInBhcnNlQWxpYXNlZFN0cmluZ1JlZmVyZW5jZSIsICJpc0R5bmFtaWNSZWZlcmVuY2VCdWlsZGVyIiwgInBhcnNlQWxpYXNlZEV4cHJlc3Npb24iLCAicGFyc2VTZWxlY3RBbGwiLCAidGFibGUiLCAicGFyc2VTZWxlY3RBbGxBcmciLCAicGFyc2VUYWJsZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJWYWx1ZXNOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInZhbHVlcyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJEZWZhdWx0SW5zZXJ0VmFsdWVOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInBhcnNlSW5zZXJ0RXhwcmVzc2lvbiIsICJhcmciLCAib2JqZWN0T3JMaXN0IiwgImlzRnVuY3Rpb24iLCAiZXhwcmVzc2lvbkJ1aWxkZXIiLCAibGlzdCIsICJpc1JlYWRvbmx5QXJyYXkiLCAiZnJlZXplIiwgInBhcnNlSW5zZXJ0Q29sdW1uc0FuZFZhbHVlcyIsICJyb3dzIiwgImNvbHVtbnMiLCAicGFyc2VDb2x1bW5OYW1lc0FuZEluZGV4ZXMiLCAiQ29sdW1uTm9kZSIsICJWYWx1ZXNOb2RlIiwgInJvdyIsICJwYXJzZVJvd1ZhbHVlcyIsICJjb2xzIiwgImNvbCIsICJyb3dDb2x1bW5zIiwgInJvd1ZhbHVlcyIsICJoYXNVbmRlZmluZWRPckNvbXBsZXhDb2x1bW5zIiwgImluZGV4ZWRSb3dDb2x1bW5zIiwgImNvbHVtbklkeCIsICJpc1VuZGVmaW5lZCIsICJ2YWx1ZSIsICJpc0V4cHJlc3Npb25PckZhY3RvcnkiLCAiZGVmYXVsdFZhbHVlIiwgIkRlZmF1bHRJbnNlcnRWYWx1ZU5vZGUiLCAiVmFsdWVMaXN0Tm9kZSIsICJpdCIsICJwYXJzZVZhbHVlRXhwcmVzc2lvbiIsICJQcmltaXRpdmVWYWx1ZUxpc3ROb2RlIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkNvbHVtblVwZGF0ZU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiY29sdW1uIiwgInZhbHVlIiwgInBhcnNlVXBkYXRlIiwgImFyZ3MiLCAiQ29sdW1uVXBkYXRlTm9kZSIsICJwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb24iLCAicGFyc2VWYWx1ZUV4cHJlc3Npb24iLCAicGFyc2VVcGRhdGVPYmplY3RFeHByZXNzaW9uIiwgInVwZGF0ZSIsICJ1cGRhdGVPYmoiLCAiaXNGdW5jdGlvbiIsICJleHByZXNzaW9uQnVpbGRlciIsICJfIiwgInZhbHVlIiwgImtleSIsICJDb2x1bW5Ob2RlIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIk9uRHVwbGljYXRlS2V5Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJ1cGRhdGVzIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkluc2VydFJlc3VsdCIsICJpbnNlcnRJZCIsICJudW1JbnNlcnRlZE9yVXBkYXRlZFJvd3MiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiTm9SZXN1bHRFcnJvciIsICJub2RlIiwgImlzTm9SZXN1bHRFcnJvckNvbnN0cnVjdG9yIiwgImZuIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIk9uQ29uZmxpY3ROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInByb3BzIiwgIm9wZXJhdGlvbiIsICJXaGVyZU5vZGUiLCAiT25Db25mbGljdEJ1aWxkZXIiLCAiX09uQ29uZmxpY3RCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiY29sdW1uIiwgImNvbHVtbk5vZGUiLCAiQ29sdW1uTm9kZSIsICJPbkNvbmZsaWN0Tm9kZSIsICJjb2x1bW5zIiwgImNvbHVtbk5vZGVzIiwgImNvbnN0cmFpbnROYW1lIiwgIklkZW50aWZpZXJOb2RlIiwgImV4cHJlc3Npb24iLCAiYXJncyIsICJwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uIiwgImxocyIsICJvcCIsICJyaHMiLCAicGFyc2VSZWZlcmVudGlhbEJpbmFyeU9wZXJhdGlvbiIsICJPbkNvbmZsaWN0RG9Ob3RoaW5nQnVpbGRlciIsICJ1cGRhdGUiLCAiT25Db25mbGljdFVwZGF0ZUJ1aWxkZXIiLCAicGFyc2VVcGRhdGVPYmplY3RFeHByZXNzaW9uIiwgImZ1bmMiLCAiX09uQ29uZmxpY3RVcGRhdGVCdWlsZGVyIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlRvcE5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiZXhwcmVzc2lvbiIsICJtb2RpZmllcnMiLCAicGFyc2VUb3AiLCAiZXhwcmVzc2lvbiIsICJtb2RpZmllcnMiLCAiaXNOdW1iZXIiLCAiaXNCaWdJbnQiLCAiaXNVbmRlZmluZWQiLCAiaXNUb3BNb2RpZmllcnMiLCAiVG9wTm9kZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJPckFjdGlvbk5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiYWN0aW9uIiwgIkluc2VydFF1ZXJ5QnVpbGRlciIsICJfSW5zZXJ0UXVlcnlCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiaW5zZXJ0IiwgImNvbHVtbnMiLCAidmFsdWVzIiwgInBhcnNlSW5zZXJ0RXhwcmVzc2lvbiIsICJJbnNlcnRRdWVyeU5vZGUiLCAiQ29sdW1uTm9kZSIsICJleHByZXNzaW9uIiwgInBhcnNlRXhwcmVzc2lvbiIsICJtb2RpZmllciIsICJRdWVyeU5vZGUiLCAiT3JBY3Rpb25Ob2RlIiwgIm1vZGlmaWVycyIsICJwYXJzZVRvcCIsICJjYWxsYmFjayIsICJPbkNvbmZsaWN0QnVpbGRlciIsICJPbkNvbmZsaWN0Tm9kZSIsICJ1cGRhdGUiLCAiT25EdXBsaWNhdGVLZXlOb2RlIiwgInBhcnNlVXBkYXRlT2JqZWN0RXhwcmVzc2lvbiIsICJzZWxlY3Rpb24iLCAicGFyc2VTZWxlY3RBcmciLCAicGFyc2VTZWxlY3RBbGwiLCAiYXJncyIsICJ0YWJsZSIsICJmdW5jIiwgImNvbmRpdGlvbiIsICJwbHVnaW4iLCAiY29tcGlsZWRRdWVyeSIsICJyZXN1bHQiLCAiYWRhcHRlciIsICJxdWVyeSIsICJJbnNlcnRSZXN1bHQiLCAiZXJyb3JDb25zdHJ1Y3RvciIsICJOb1Jlc3VsdEVycm9yIiwgImlzTm9SZXN1bHRFcnJvckNvbnN0cnVjdG9yIiwgImNodW5rU2l6ZSIsICJzdHJlYW0iLCAiaXRlbSIsICJmb3JtYXQiLCAib3B0aW9ucyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJEZWxldGVSZXN1bHQiLCAibnVtRGVsZXRlZFJvd3MiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiTGltaXROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImxpbWl0IiwgIkRlbGV0ZVF1ZXJ5QnVpbGRlciIsICJfRGVsZXRlUXVlcnlCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiYXJncyIsICJRdWVyeU5vZGUiLCAicGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbiIsICJsaHMiLCAib3AiLCAicmhzIiwgInBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24iLCAiZXhwcmVzc2lvbiIsICJtb2RpZmllcnMiLCAicGFyc2VUb3AiLCAidGFibGVzIiwgIkRlbGV0ZVF1ZXJ5Tm9kZSIsICJwYXJzZVRhYmxlRXhwcmVzc2lvbk9yTGlzdCIsICIjam9pbiIsICJqb2luVHlwZSIsICJwYXJzZUpvaW4iLCAic2VsZWN0aW9uIiwgInBhcnNlU2VsZWN0QXJnIiwgInRhYmxlIiwgInBhcnNlU2VsZWN0QWxsIiwgInBhcnNlT3JkZXJCeSIsICJsaW1pdCIsICJMaW1pdE5vZGUiLCAicGFyc2VWYWx1ZUV4cHJlc3Npb24iLCAibW9kaWZpZXIiLCAiZnVuYyIsICJjb25kaXRpb24iLCAicGx1Z2luIiwgImNvbXBpbGVkUXVlcnkiLCAicmVzdWx0IiwgImFkYXB0ZXIiLCAicXVlcnkiLCAiRGVsZXRlUmVzdWx0IiwgImVycm9yQ29uc3RydWN0b3IiLCAiTm9SZXN1bHRFcnJvciIsICJpc05vUmVzdWx0RXJyb3JDb25zdHJ1Y3RvciIsICJjaHVua1NpemUiLCAic3RyZWFtIiwgIml0ZW0iLCAiZm9ybWF0IiwgIm9wdGlvbnMiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiVXBkYXRlUmVzdWx0IiwgIm51bVVwZGF0ZWRSb3dzIiwgIm51bUNoYW5nZWRSb3dzIiwgIlVwZGF0ZVF1ZXJ5QnVpbGRlciIsICJfVXBkYXRlUXVlcnlCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiYXJncyIsICJRdWVyeU5vZGUiLCAicGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbiIsICJsaHMiLCAib3AiLCAicmhzIiwgInBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24iLCAiZXhwcmVzc2lvbiIsICJtb2RpZmllcnMiLCAicGFyc2VUb3AiLCAiZnJvbSIsICJVcGRhdGVRdWVyeU5vZGUiLCAicGFyc2VUYWJsZUV4cHJlc3Npb25Pckxpc3QiLCAiI2pvaW4iLCAiam9pblR5cGUiLCAicGFyc2VKb2luIiwgInBhcnNlT3JkZXJCeSIsICJsaW1pdCIsICJMaW1pdE5vZGUiLCAicGFyc2VWYWx1ZUV4cHJlc3Npb24iLCAicGFyc2VVcGRhdGUiLCAic2VsZWN0aW9uIiwgInBhcnNlU2VsZWN0QXJnIiwgInRhYmxlIiwgInBhcnNlU2VsZWN0QWxsIiwgIm1vZGlmaWVyIiwgImZ1bmMiLCAiY29uZGl0aW9uIiwgInBsdWdpbiIsICJjb21waWxlZFF1ZXJ5IiwgInJlc3VsdCIsICJhZGFwdGVyIiwgInF1ZXJ5IiwgIlVwZGF0ZVJlc3VsdCIsICJlcnJvckNvbnN0cnVjdG9yIiwgIk5vUmVzdWx0RXJyb3IiLCAiaXNOb1Jlc3VsdEVycm9yQ29uc3RydWN0b3IiLCAiY2h1bmtTaXplIiwgInN0cmVhbSIsICJpdGVtIiwgImZvcm1hdCIsICJvcHRpb25zIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkNvbW1vblRhYmxlRXhwcmVzc2lvbk5hbWVOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInRhYmxlTmFtZSIsICJjb2x1bW5OYW1lcyIsICJUYWJsZU5vZGUiLCAiQ29sdW1uTm9kZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJDb21tb25UYWJsZUV4cHJlc3Npb25Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIm5hbWUiLCAiZXhwcmVzc2lvbiIsICJwcm9wcyIsICJDVEVCdWlsZGVyIiwgIl9DVEVCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiQ29tbW9uVGFibGVFeHByZXNzaW9uTm9kZSIsICJwYXJzZUNvbW1vblRhYmxlRXhwcmVzc2lvbiIsICJuYW1lT3JCdWlsZGVyQ2FsbGJhY2siLCAiZXhwcmVzc2lvbiIsICJleHByZXNzaW9uTm9kZSIsICJjcmVhdGVRdWVyeUNyZWF0b3IiLCAiaXNGdW5jdGlvbiIsICJjdGVCdWlsZGVyRmFjdG9yeSIsICJDb21tb25UYWJsZUV4cHJlc3Npb25Ob2RlIiwgInBhcnNlQ29tbW9uVGFibGVFeHByZXNzaW9uTmFtZSIsICJuYW1lIiwgIkNURUJ1aWxkZXIiLCAicGFydHMiLCAidGFibGUiLCAiY29sdW1ucyIsICJpdCIsICJDb21tb25UYWJsZUV4cHJlc3Npb25OYW1lTm9kZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJXaXRoTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJleHByZXNzaW9uIiwgInBhcmFtcyIsICJ3aXRoTm9kZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJDSEFSUyIsICJyYW5kb21TdHJpbmciLCAibGVuZ3RoIiwgImNoYXJzIiwgImkiLCAicmFuZG9tQ2hhciIsICJjcmVhdGVRdWVyeUlkIiwgIkxhenlRdWVyeUlkIiwgIiNxdWVyeUlkIiwgInJhbmRvbVN0cmluZyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJPcGVyYXRpb25Ob2RlVHJhbnNmb3JtZXIiLCAiI3RyYW5zZm9ybWVycyIsICJmcmVlemUiLCAibm9kZSIsICJxdWVyeUlkIiwgIm91dCIsICJsaXN0IiwgIl9xdWVyeUlkIiwgIlJPT1RfT1BFUkFUSU9OX05PREVTIiwgImZyZWV6ZSIsICJTQ0hFTUFMRVNTX0ZVTkNUSU9OUyIsICJXaXRoU2NoZW1hVHJhbnNmb3JtZXIiLCAiT3BlcmF0aW9uTm9kZVRyYW5zZm9ybWVyIiwgIiNzY2hlbWEiLCAiI3NjaGVtYWJsZUlkcyIsICIjY3RlcyIsICJzY2hlbWEiLCAibm9kZSIsICJxdWVyeUlkIiwgIiNpc1Jvb3RPcGVyYXRpb25Ob2RlIiwgImN0ZXMiLCAiI2NvbGxlY3RDVEVzIiwgImN0ZSIsICJ0YWJsZXMiLCAiI2NvbGxlY3RTY2hlbWFibGVJZHMiLCAidGFibGUiLCAidHJhbnNmb3JtZWQiLCAiSWRlbnRpZmllck5vZGUiLCAiVGFibGVOb2RlIiwgIiN0cmFuc2Zvcm1UYWJsZUFyZ3NXaXRob3V0U2NoZW1hcyIsICJhcmdzS2V5IiwgImFyZyIsICJzY2hlbWFibGVJZHMiLCAiU2NoZW1hYmxlSWRlbnRpZmllck5vZGUiLCAiI2NvbGxlY3RTY2hlbWFibGVJZCIsICJmcm9tIiwgIiNjb2xsZWN0U2NoZW1hYmxlSWRzRnJvbVRhYmxlRXhwciIsICJqb2luIiwgIkpvaW5Ob2RlIiwgIiNjb2xsZWN0Q1RFSWRzIiwgIkFsaWFzTm9kZSIsICJMaXN0Tm9kZSIsICJpZCIsICJleHByIiwgImN0ZUlkIiwgIldpdGhTY2hlbWFQbHVnaW4iLCAiI3RyYW5zZm9ybWVyIiwgInNjaGVtYSIsICJXaXRoU2NoZW1hVHJhbnNmb3JtZXIiLCAiYXJncyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJNYXRjaGVkTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJub3QiLCAiYnlTb3VyY2UiLCAicGFyc2VNZXJnZVdoZW4iLCAidHlwZSIsICJhcmdzIiwgInJlZlJpZ2h0IiwgIldoZW5Ob2RlIiwgInBhcnNlRmlsdGVyTGlzdCIsICJNYXRjaGVkTm9kZSIsICJwYXJzZVJlZmVyZW50aWFsQmluYXJ5T3BlcmF0aW9uIiwgInBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24iLCAicGFyc2VNZXJnZVRoZW4iLCAicmVzdWx0IiwgImlzU3RyaW5nIiwgIlJhd05vZGUiLCAiaXNPcGVyYXRpb25Ob2RlU291cmNlIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkRlZmVycmVkIiwgIiNwcm9taXNlIiwgIiNyZXNvbHZlIiwgIiNyZWplY3QiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAidmFsdWUiLCAicmVhc29uIiwgInByb3ZpZGVDb250cm9sbGVkQ29ubmVjdGlvbiIsICJjb25uZWN0aW9uUHJvdmlkZXIiLCAiY29ubmVjdGlvbkRlZmVyIiwgIkRlZmVycmVkIiwgImNvbm5lY3Rpb25SZWxlYXNlRGVmZXIiLCAiY29ubmVjdGlvbiIsICJleCIsICJmcmVlemUiLCAiTk9fUExVR0lOUyIsICJmcmVlemUiLCAiUXVlcnlFeGVjdXRvckJhc2UiLCAiI3BsdWdpbnMiLCAicGx1Z2lucyIsICJub2RlIiwgInF1ZXJ5SWQiLCAicGx1Z2luIiwgInRyYW5zZm9ybWVkTm9kZSIsICJjb21waWxlZFF1ZXJ5IiwgImNvbm5lY3Rpb24iLCAicmVzdWx0IiwgImxvZ09uY2UiLCAiI3RyYW5zZm9ybVJlc3VsdCIsICJjaHVua1NpemUiLCAicmVsZWFzZSIsICJwcm92aWRlQ29udHJvbGxlZENvbm5lY3Rpb24iLCAiTm9vcFF1ZXJ5RXhlY3V0b3IiLCAiX05vb3BRdWVyeUV4ZWN1dG9yIiwgIlF1ZXJ5RXhlY3V0b3JCYXNlIiwgInBsdWdpbiIsICJwbHVnaW5zIiwgIk5PT1BfUVVFUllfRVhFQ1VUT1IiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiTWVyZ2VSZXN1bHQiLCAibnVtQ2hhbmdlZFJvd3MiLCAiTWVyZ2VRdWVyeUJ1aWxkZXIiLCAiX01lcmdlUXVlcnlCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAibW9kaWZpZXIiLCAiUXVlcnlOb2RlIiwgImV4cHJlc3Npb24iLCAibW9kaWZpZXJzIiwgInBhcnNlVG9wIiwgImFyZ3MiLCAiV2hlbmVhYmxlTWVyZ2VRdWVyeUJ1aWxkZXIiLCAiTWVyZ2VRdWVyeU5vZGUiLCAicGFyc2VKb2luIiwgInBhcnNlU2VsZWN0QXJnIiwgInRhYmxlIiwgInBhcnNlU2VsZWN0QWxsIiwgIl9XaGVuZWFibGVNZXJnZVF1ZXJ5QnVpbGRlciIsICIjd2hlbk1hdGNoZWQiLCAibGhzIiwgIm9wIiwgInJocyIsICJyZWZSaWdodCIsICJNYXRjaGVkVGhlbmFibGVNZXJnZVF1ZXJ5QnVpbGRlciIsICJwYXJzZU1lcmdlV2hlbiIsICIjd2hlbk5vdE1hdGNoZWQiLCAiYnlTb3VyY2UiLCAiQnVpbGRlciIsICJOb3RNYXRjaGVkVGhlbmFibGVNZXJnZVF1ZXJ5QnVpbGRlciIsICJmdW5jIiwgImNvbmRpdGlvbiIsICJjb21waWxlZFF1ZXJ5IiwgInJlc3VsdCIsICJhZGFwdGVyIiwgInF1ZXJ5IiwgIk1lcmdlUmVzdWx0IiwgImVycm9yQ29uc3RydWN0b3IiLCAiTm9SZXN1bHRFcnJvciIsICJpc05vUmVzdWx0RXJyb3JDb25zdHJ1Y3RvciIsICJwYXJzZU1lcmdlVGhlbiIsICJzZXQiLCAiVXBkYXRlUXVlcnlCdWlsZGVyIiwgIk5PT1BfUVVFUllfRVhFQ1VUT1IiLCAiVXBkYXRlUXVlcnlOb2RlIiwgInViIiwgImluc2VydCIsICJjb2x1bW5zIiwgInZhbHVlcyIsICJwYXJzZUluc2VydEV4cHJlc3Npb24iLCAiSW5zZXJ0UXVlcnlOb2RlIiwgIlF1ZXJ5Q3JlYXRvciIsICJfUXVlcnlDcmVhdG9yIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiZnJvbSIsICJjcmVhdGVTZWxlY3RRdWVyeUJ1aWxkZXIiLCAiY3JlYXRlUXVlcnlJZCIsICJTZWxlY3RRdWVyeU5vZGUiLCAicGFyc2VUYWJsZUV4cHJlc3Npb25Pckxpc3QiLCAic2VsZWN0aW9uIiwgInBhcnNlU2VsZWN0QXJnIiwgInRhYmxlIiwgIkluc2VydFF1ZXJ5QnVpbGRlciIsICJJbnNlcnRRdWVyeU5vZGUiLCAicGFyc2VUYWJsZSIsICJEZWxldGVRdWVyeUJ1aWxkZXIiLCAiRGVsZXRlUXVlcnlOb2RlIiwgInRhYmxlcyIsICJVcGRhdGVRdWVyeUJ1aWxkZXIiLCAiVXBkYXRlUXVlcnlOb2RlIiwgInRhcmdldFRhYmxlIiwgIk1lcmdlUXVlcnlCdWlsZGVyIiwgIk1lcmdlUXVlcnlOb2RlIiwgInBhcnNlQWxpYXNlZFRhYmxlIiwgIm5hbWVPckJ1aWxkZXIiLCAiZXhwcmVzc2lvbiIsICJjdGUiLCAicGFyc2VDb21tb25UYWJsZUV4cHJlc3Npb24iLCAiV2l0aE5vZGUiLCAicGx1Z2luIiwgInNjaGVtYSIsICJXaXRoU2NoZW1hUGx1Z2luIiwgImNyZWF0ZVF1ZXJ5Q3JlYXRvciIsICJRdWVyeUNyZWF0b3IiLCAiTk9PUF9RVUVSWV9FWEVDVVRPUiIsICJjcmVhdGVKb2luQnVpbGRlciIsICJqb2luVHlwZSIsICJ0YWJsZSIsICJKb2luQnVpbGRlciIsICJKb2luTm9kZSIsICJwYXJzZVRhYmxlRXhwcmVzc2lvbiIsICJjcmVhdGVPdmVyQnVpbGRlciIsICJPdmVyQnVpbGRlciIsICJPdmVyTm9kZSIsICJwYXJzZUpvaW4iLCAiam9pblR5cGUiLCAiYXJncyIsICJwYXJzZVNpbmdsZU9uSm9pbiIsICJwYXJzZUNhbGxiYWNrSm9pbiIsICJwYXJzZU9ubGVzc0pvaW4iLCAiZnJvbSIsICJjYWxsYmFjayIsICJjcmVhdGVKb2luQnVpbGRlciIsICJsaHNDb2x1bW4iLCAicmhzQ29sdW1uIiwgIkpvaW5Ob2RlIiwgInBhcnNlVGFibGVFeHByZXNzaW9uIiwgInBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24iLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiT2Zmc2V0Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJvZmZzZXQiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiR3JvdXBCeUl0ZW1Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImdyb3VwQnkiLCAicGFyc2VHcm91cEJ5IiwgImdyb3VwQnkiLCAiaXNGdW5jdGlvbiIsICJleHByZXNzaW9uQnVpbGRlciIsICJwYXJzZVJlZmVyZW5jZUV4cHJlc3Npb25Pckxpc3QiLCAiR3JvdXBCeUl0ZW1Ob2RlIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlNldE9wZXJhdGlvbk5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAib3BlcmF0b3IiLCAiZXhwcmVzc2lvbiIsICJhbGwiLCAicGFyc2VTZXRPcGVyYXRpb25zIiwgIm9wZXJhdG9yIiwgImV4cHJlc3Npb24iLCAiYWxsIiwgImlzRnVuY3Rpb24iLCAiY3JlYXRlRXhwcmVzc2lvbkJ1aWxkZXIiLCAiaXNSZWFkb25seUFycmF5IiwgImV4cHIiLCAiU2V0T3BlcmF0aW9uTm9kZSIsICJwYXJzZUV4cHJlc3Npb24iLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiRXhwcmVzc2lvbldyYXBwZXIiLCAiX0V4cHJlc3Npb25XcmFwcGVyIiwgIiNub2RlIiwgIm5vZGUiLCAiYWxpYXMiLCAiQWxpYXNlZEV4cHJlc3Npb25XcmFwcGVyIiwgImFyZ3MiLCAiT3JXcmFwcGVyIiwgIk9yTm9kZSIsICJwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uIiwgIkFuZFdyYXBwZXIiLCAiQW5kTm9kZSIsICIjZXhwciIsICIjYWxpYXMiLCAiZXhwciIsICJBbGlhc05vZGUiLCAiaXNPcGVyYXRpb25Ob2RlU291cmNlIiwgIklkZW50aWZpZXJOb2RlIiwgIl9PcldyYXBwZXIiLCAiUGFyZW5zTm9kZSIsICJfQW5kV3JhcHBlciIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJGZXRjaE5vZGUiLCAibm9kZSIsICJyb3dDb3VudCIsICJtb2RpZmllciIsICJWYWx1ZU5vZGUiLCAicGFyc2VGZXRjaCIsICJyb3dDb3VudCIsICJtb2RpZmllciIsICJpc051bWJlciIsICJpc0JpZ0ludCIsICJpc0ZldGNoTW9kaWZpZXIiLCAiRmV0Y2hOb2RlIiwgInZhbHVlIiwgIlNlbGVjdFF1ZXJ5QnVpbGRlckltcGwiLCAiX1NlbGVjdFF1ZXJ5QnVpbGRlckltcGwiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJhcmdzIiwgIlF1ZXJ5Tm9kZSIsICJwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uIiwgImxocyIsICJvcCIsICJyaHMiLCAicGFyc2VSZWZlcmVudGlhbEJpbmFyeU9wZXJhdGlvbiIsICJTZWxlY3RRdWVyeU5vZGUiLCAic2VsZWN0aW9uIiwgInBhcnNlU2VsZWN0QXJnIiwgInBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbk9yTGlzdCIsICJtb2RpZmllciIsICJTZWxlY3RNb2RpZmllck5vZGUiLCAib2YiLCAiYXNBcnJheSIsICJwYXJzZVRhYmxlIiwgInRhYmxlIiwgInBhcnNlU2VsZWN0QWxsIiwgIiNqb2luIiwgImpvaW5UeXBlIiwgInBhcnNlSm9pbiIsICJwYXJzZU9yZGVyQnkiLCAiZ3JvdXBCeSIsICJwYXJzZUdyb3VwQnkiLCAibGltaXQiLCAiTGltaXROb2RlIiwgInBhcnNlVmFsdWVFeHByZXNzaW9uIiwgIm9mZnNldCIsICJPZmZzZXROb2RlIiwgInJvd0NvdW50IiwgInBhcnNlRmV0Y2giLCAiZXhwcmVzc2lvbiIsICJtb2RpZmllcnMiLCAicGFyc2VUb3AiLCAicGFyc2VTZXRPcGVyYXRpb25zIiwgImFsaWFzIiwgIkFsaWFzZWRTZWxlY3RRdWVyeUJ1aWxkZXJJbXBsIiwgImZ1bmMiLCAiY29uZGl0aW9uIiwgIkV4cHJlc3Npb25XcmFwcGVyIiwgInBsdWdpbiIsICJjb21waWxlZFF1ZXJ5IiwgInJlc3VsdCIsICJlcnJvckNvbnN0cnVjdG9yIiwgIk5vUmVzdWx0RXJyb3IiLCAiaXNOb1Jlc3VsdEVycm9yQ29uc3RydWN0b3IiLCAiY2h1bmtTaXplIiwgInN0cmVhbSIsICJpdGVtIiwgImZvcm1hdCIsICJvcHRpb25zIiwgImNyZWF0ZVNlbGVjdFF1ZXJ5QnVpbGRlciIsICIjcXVlcnlCdWlsZGVyIiwgIiNhbGlhcyIsICJxdWVyeUJ1aWxkZXIiLCAiQWxpYXNOb2RlIiwgIklkZW50aWZpZXJOb2RlIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJhZ2dyZWdhdGVGdW5jdGlvbiIsICJhZ2dyZWdhdGVkIiwgImFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSIsICJvcmRlckl0ZW1zIiwgIndpdGhpbkdyb3VwIiwgInByb3AiLCAiT3JkZXJCeU5vZGUiLCAiZmlsdGVyIiwgIldoZXJlTm9kZSIsICJvdmVyIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkZ1bmN0aW9uTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJmdW5jIiwgImFyZ3MiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyIiwgIl9BZ2dyZWdhdGVGdW5jdGlvbkJ1aWxkZXIiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJhbGlhcyIsICJBbGlhc2VkQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyIiwgIkFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSIsICJhcmdzIiwgIlF1ZXJ5Tm9kZSIsICJwYXJzZU9yZGVyQnkiLCAicGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbiIsICJsaHMiLCAib3AiLCAicmhzIiwgInBhcnNlUmVmZXJlbnRpYWxCaW5hcnlPcGVyYXRpb24iLCAib3ZlciIsICJidWlsZGVyIiwgImNyZWF0ZU92ZXJCdWlsZGVyIiwgImZ1bmMiLCAiI2FnZ3JlZ2F0ZUZ1bmN0aW9uQnVpbGRlciIsICIjYWxpYXMiLCAiYWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyIiwgIkFsaWFzTm9kZSIsICJJZGVudGlmaWVyTm9kZSIsICJjcmVhdGVGdW5jdGlvbk1vZHVsZSIsICJmbiIsICJuYW1lIiwgImFyZ3MiLCAiRXhwcmVzc2lvbldyYXBwZXIiLCAiRnVuY3Rpb25Ob2RlIiwgInBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbk9yTGlzdCIsICJhZ2ciLCAiQWdncmVnYXRlRnVuY3Rpb25CdWlsZGVyIiwgIkFnZ3JlZ2F0ZUZ1bmN0aW9uTm9kZSIsICJjb2x1bW4iLCAidmFsdWVzIiwgInRhYmxlIiwgInBhcnNlU2VsZWN0QWxsIiwgImlzU3RyaW5nIiwgInBhcnNlVGFibGUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiVW5hcnlPcGVyYXRpb25Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIm9wZXJhdG9yIiwgIm9wZXJhbmQiLCAicGFyc2VVbmFyeU9wZXJhdGlvbiIsICJvcGVyYXRvciIsICJvcGVyYW5kIiwgIlVuYXJ5T3BlcmF0aW9uTm9kZSIsICJPcGVyYXRvck5vZGUiLCAicGFyc2VSZWZlcmVuY2VFeHByZXNzaW9uIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkNhc2VOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInZhbHVlIiwgImNhc2VOb2RlIiwgIndoZW4iLCAidGhlbiIsICJXaGVuTm9kZSIsICJwcm9wcyIsICJDYXNlQnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgImFyZ3MiLCAiQ2FzZVRoZW5CdWlsZGVyIiwgIkNhc2VOb2RlIiwgIldoZW5Ob2RlIiwgInBhcnNlVmFsdWVCaW5hcnlPcGVyYXRpb25PckV4cHJlc3Npb24iLCAidmFsdWVFeHByZXNzaW9uIiwgIkNhc2VXaGVuQnVpbGRlciIsICJpc1NhZmVJbW1lZGlhdGVWYWx1ZSIsICJwYXJzZVNhZmVJbW1lZGlhdGVWYWx1ZSIsICJwYXJzZVZhbHVlRXhwcmVzc2lvbiIsICJDYXNlRW5kQnVpbGRlciIsICJFeHByZXNzaW9uV3JhcHBlciIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJKU09OUGF0aExlZ05vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAidHlwZSIsICJ2YWx1ZSIsICJKU09OUGF0aEJ1aWxkZXIiLCAiI25vZGUiLCAibm9kZSIsICJpbmRleCIsICIjY3JlYXRlQnVpbGRlcldpdGhQYXRoTGVnIiwgImtleSIsICJsZWdUeXBlIiwgInZhbHVlIiwgIkpTT05SZWZlcmVuY2VOb2RlIiwgIlRyYXZlcnNlZEpTT05QYXRoQnVpbGRlciIsICJKU09OUGF0aE5vZGUiLCAiSlNPTlBhdGhMZWdOb2RlIiwgIkpTT05PcGVyYXRvckNoYWluTm9kZSIsICJWYWx1ZU5vZGUiLCAiX1RyYXZlcnNlZEpTT05QYXRoQnVpbGRlciIsICJhbGlhcyIsICJBbGlhc2VkSlNPTlBhdGhCdWlsZGVyIiwgIiNqc29uUGF0aCIsICIjYWxpYXMiLCAianNvblBhdGgiLCAiQWxpYXNOb2RlIiwgImlzT3BlcmF0aW9uTm9kZVNvdXJjZSIsICJJZGVudGlmaWVyTm9kZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJUdXBsZU5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAidmFsdWVzIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlNJTVBMRV9DT0xVTU5fREFUQV9UWVBFUyIsICJDT0xVTU5fREFUQV9UWVBFX1JFR0VYIiwgIkRhdGFUeXBlTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJkYXRhVHlwZSIsICJpc0NvbHVtbkRhdGFUeXBlIiwgInIiLCAicGFyc2VEYXRhVHlwZUV4cHJlc3Npb24iLCAiZGF0YVR5cGUiLCAiaXNPcGVyYXRpb25Ob2RlU291cmNlIiwgImlzQ29sdW1uRGF0YVR5cGUiLCAiRGF0YVR5cGVOb2RlIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkNhc3ROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImV4cHJlc3Npb24iLCAiZGF0YVR5cGUiLCAiY3JlYXRlRXhwcmVzc2lvbkJ1aWxkZXIiLCAiZXhlY3V0b3IiLCAiTk9PUF9RVUVSWV9FWEVDVVRPUiIsICJiaW5hcnkiLCAibGhzIiwgIm9wIiwgInJocyIsICJFeHByZXNzaW9uV3JhcHBlciIsICJwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uIiwgInVuYXJ5IiwgImV4cHIiLCAicGFyc2VVbmFyeU9wZXJhdGlvbiIsICJlYiIsICJ0YWJsZSIsICJjcmVhdGVTZWxlY3RRdWVyeUJ1aWxkZXIiLCAiY3JlYXRlUXVlcnlJZCIsICJTZWxlY3RRdWVyeU5vZGUiLCAicGFyc2VUYWJsZUV4cHJlc3Npb25Pckxpc3QiLCAicmVmZXJlbmNlIiwgIkNhc2VCdWlsZGVyIiwgIkNhc2VOb2RlIiwgImlzVW5kZWZpbmVkIiwgInBhcnNlUmVmZXJlbmNlRXhwcmVzc2lvbiIsICJwYXJzZVN0cmluZ1JlZmVyZW5jZSIsICJKU09OUGF0aEJ1aWxkZXIiLCAicGFyc2VKU09OUmVmZXJlbmNlIiwgIkpTT05QYXRoTm9kZSIsICJwYXJzZVRhYmxlIiwgInZhbHVlIiwgInBhcnNlVmFsdWVFeHByZXNzaW9uIiwgInZhbHVlcyIsICJUdXBsZU5vZGUiLCAicGFyc2VTYWZlSW1tZWRpYXRlVmFsdWUiLCAic3RhcnQiLCAiZW5kIiwgIkJpbmFyeU9wZXJhdGlvbk5vZGUiLCAiT3BlcmF0b3JOb2RlIiwgIkFuZE5vZGUiLCAiZXhwcnMiLCAiaXNSZWFkb25seUFycmF5IiwgInBhcnNlRmlsdGVyTGlzdCIsICJwYXJzZUZpbHRlck9iamVjdCIsICJhcmdzIiwgIm5vZGUiLCAicGFyc2VWYWx1ZUJpbmFyeU9wZXJhdGlvbk9yRXhwcmVzc2lvbiIsICJQYXJlbnNOb2RlIiwgImRhdGFUeXBlIiwgIkNhc3ROb2RlIiwgInBhcnNlRGF0YVR5cGVFeHByZXNzaW9uIiwgInNjaGVtYSIsICJXaXRoU2NoZW1hUGx1Z2luIiwgImNyZWF0ZUZ1bmN0aW9uTW9kdWxlIiwgImV4cHJlc3Npb25CdWlsZGVyIiwgIl8iLCAicGFyc2VFeHByZXNzaW9uIiwgImV4cCIsICJpc09wZXJhdGlvbk5vZGVTb3VyY2UiLCAiaXNGdW5jdGlvbiIsICJleHByZXNzaW9uQnVpbGRlciIsICJwYXJzZUFsaWFzZWRFeHByZXNzaW9uIiwgImlzRXhwcmVzc2lvbk9yRmFjdG9yeSIsICJvYmoiLCAiaXNFeHByZXNzaW9uIiwgImlzQWxpYXNlZEV4cHJlc3Npb24iLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiRHluYW1pY1RhYmxlQnVpbGRlciIsICIjdGFibGUiLCAidGFibGUiLCAiYWxpYXMiLCAiQWxpYXNlZER5bmFtaWNUYWJsZUJ1aWxkZXIiLCAiI2FsaWFzIiwgIkFsaWFzTm9kZSIsICJwYXJzZVRhYmxlIiwgIklkZW50aWZpZXJOb2RlIiwgImlzQWxpYXNlZER5bmFtaWNUYWJsZUJ1aWxkZXIiLCAib2JqIiwgImlzT2JqZWN0IiwgImlzT3BlcmF0aW9uTm9kZVNvdXJjZSIsICJpc1N0cmluZyIsICJwYXJzZVRhYmxlRXhwcmVzc2lvbk9yTGlzdCIsICJ0YWJsZSIsICJpc1JlYWRvbmx5QXJyYXkiLCAiaXQiLCAicGFyc2VUYWJsZUV4cHJlc3Npb24iLCAiaXNTdHJpbmciLCAicGFyc2VBbGlhc2VkVGFibGUiLCAiaXNBbGlhc2VkRHluYW1pY1RhYmxlQnVpbGRlciIsICJwYXJzZUFsaWFzZWRFeHByZXNzaW9uIiwgImZyb20iLCAiQUxJQVNfU0VQQVJBVE9SIiwgImFsaWFzIiwgInRyaW0iLCAiQWxpYXNOb2RlIiwgInBhcnNlVGFibGUiLCAiSWRlbnRpZmllck5vZGUiLCAiU0NIRU1BX1NFUEFSQVRPUiIsICJzY2hlbWEiLCAiVGFibGVOb2RlIiwgInN0ciIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJBZGRDb2x1bW5Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImNvbHVtbiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJDb2x1bW5EZWZpbml0aW9uTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJjb2x1bW4iLCAiZGF0YVR5cGUiLCAiQ29sdW1uTm9kZSIsICJtb2RpZmllciIsICJwcm9wcyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJEcm9wQ29sdW1uTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJjb2x1bW4iLCAiQ29sdW1uTm9kZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJSZW5hbWVDb2x1bW5Ob2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImNvbHVtbiIsICJuZXdDb2x1bW4iLCAiQ29sdW1uTm9kZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJDaGVja0NvbnN0cmFpbnROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImV4cHJlc3Npb24iLCAiY29uc3RyYWludE5hbWUiLCAiSWRlbnRpZmllck5vZGUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiT05fTU9ESUZZX0ZPUkVJR05fQUNUSU9OUyIsICJSZWZlcmVuY2VzTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJ0YWJsZSIsICJjb2x1bW5zIiwgInJlZmVyZW5jZXMiLCAib25EZWxldGUiLCAib25VcGRhdGUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAicGFyc2VEZWZhdWx0VmFsdWVFeHByZXNzaW9uIiwgInZhbHVlIiwgImlzT3BlcmF0aW9uTm9kZVNvdXJjZSIsICJWYWx1ZU5vZGUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiR2VuZXJhdGVkTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJwYXJhbXMiLCAiZXhwcmVzc2lvbiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJEZWZhdWx0VmFsdWVOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImRlZmF1bHRWYWx1ZSIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJwYXJzZU9uTW9kaWZ5Rm9yZWlnbkFjdGlvbiIsICJhY3Rpb24iLCAiT05fTU9ESUZZX0ZPUkVJR05fQUNUSU9OUyIsICJDb2x1bW5EZWZpbml0aW9uQnVpbGRlciIsICJfQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIiLCAiI25vZGUiLCAibm9kZSIsICJDb2x1bW5EZWZpbml0aW9uTm9kZSIsICJyZWYiLCAicmVmZXJlbmNlcyIsICJwYXJzZVN0cmluZ1JlZmVyZW5jZSIsICJTZWxlY3RBbGxOb2RlIiwgIlJlZmVyZW5jZXNOb2RlIiwgIm9uRGVsZXRlIiwgInBhcnNlT25Nb2RpZnlGb3JlaWduQWN0aW9uIiwgIm9uVXBkYXRlIiwgInZhbHVlIiwgIkRlZmF1bHRWYWx1ZU5vZGUiLCAicGFyc2VEZWZhdWx0VmFsdWVFeHByZXNzaW9uIiwgImV4cHJlc3Npb24iLCAiQ2hlY2tDb25zdHJhaW50Tm9kZSIsICJHZW5lcmF0ZWROb2RlIiwgIm1vZGlmaWVyIiwgImZ1bmMiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiTW9kaWZ5Q29sdW1uTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJjb2x1bW4iLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiRm9yZWlnbktleUNvbnN0cmFpbnROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgInNvdXJjZUNvbHVtbnMiLCAidGFyZ2V0VGFibGUiLCAidGFyZ2V0Q29sdW1ucyIsICJjb25zdHJhaW50TmFtZSIsICJSZWZlcmVuY2VzTm9kZSIsICJJZGVudGlmaWVyTm9kZSIsICJwcm9wcyIsICJGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIiLCAiX0ZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlciIsICIjbm9kZSIsICJub2RlIiwgIm9uRGVsZXRlIiwgIkZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZSIsICJwYXJzZU9uTW9kaWZ5Rm9yZWlnbkFjdGlvbiIsICJvblVwZGF0ZSIsICJmdW5jIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkFkZENvbnN0cmFpbnROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImNvbnN0cmFpbnQiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiVW5pcXVlQ29uc3RyYWludE5vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAiY29sdW1ucyIsICJjb25zdHJhaW50TmFtZSIsICJudWxsc05vdERpc3RpbmN0IiwgIkNvbHVtbk5vZGUiLCAiSWRlbnRpZmllck5vZGUiLCAicHJvcHMiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiRHJvcENvbnN0cmFpbnROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgImNvbnN0cmFpbnROYW1lIiwgIklkZW50aWZpZXJOb2RlIiwgImRyb3BDb25zdHJhaW50IiwgInByb3BzIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkFsdGVyQ29sdW1uTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJjb2x1bW4iLCAicHJvcCIsICJ2YWx1ZSIsICJDb2x1bW5Ob2RlIiwgIkFsdGVyQ29sdW1uQnVpbGRlciIsICIjY29sdW1uIiwgImNvbHVtbiIsICJkYXRhVHlwZSIsICJBbHRlcmVkQ29sdW1uQnVpbGRlciIsICJBbHRlckNvbHVtbk5vZGUiLCAicGFyc2VEYXRhVHlwZUV4cHJlc3Npb24iLCAidmFsdWUiLCAicGFyc2VEZWZhdWx0VmFsdWVFeHByZXNzaW9uIiwgImZ1bmMiLCAiI2FsdGVyQ29sdW1uTm9kZSIsICJhbHRlckNvbHVtbk5vZGUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiQWx0ZXJUYWJsZUV4ZWN1dG9yIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiQWx0ZXJUYWJsZUFkZEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlciIsICJfQWx0ZXJUYWJsZUFkZEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgIm9uRGVsZXRlIiwgIm9uVXBkYXRlIiwgImZ1bmMiLCAiQWx0ZXJUYWJsZU5vZGUiLCAiQWRkQ29uc3RyYWludE5vZGUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiQWx0ZXJUYWJsZURyb3BDb25zdHJhaW50QnVpbGRlciIsICJfQWx0ZXJUYWJsZURyb3BDb25zdHJhaW50QnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgIkFsdGVyVGFibGVOb2RlIiwgIkRyb3BDb25zdHJhaW50Tm9kZSIsICJmdW5jIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlByaW1hcnlLZXlDb25zdHJhaW50Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJjb2x1bW5zIiwgImNvbnN0cmFpbnROYW1lIiwgIkNvbHVtbk5vZGUiLCAiSWRlbnRpZmllck5vZGUiLCAicHJvcHMiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiQWRkSW5kZXhOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIm5hbWUiLCAiSWRlbnRpZmllck5vZGUiLCAicHJvcHMiLCAiY29sdW1ucyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJBbHRlclRhYmxlQWRkSW5kZXhCdWlsZGVyIiwgIl9BbHRlclRhYmxlQWRkSW5kZXhCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiQWx0ZXJUYWJsZU5vZGUiLCAiQWRkSW5kZXhOb2RlIiwgImNvbHVtbiIsICJwYXJzZU9yZGVyZWRDb2x1bW5OYW1lIiwgImNvbHVtbnMiLCAiZXhwcmVzc2lvbiIsICJpbmRleFR5cGUiLCAiUmF3Tm9kZSIsICJmdW5jIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlVuaXF1ZUNvbnN0cmFpbnROb2RlQnVpbGRlciIsICJfVW5pcXVlQ29uc3RyYWludE5vZGVCdWlsZGVyIiwgIiNub2RlIiwgIm5vZGUiLCAiVW5pcXVlQ29uc3RyYWludE5vZGUiLCAiZnVuYyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJQcmltYXJ5S2V5Q29uc3RyYWludEJ1aWxkZXIiLCAiX1ByaW1hcnlLZXlDb25zdHJhaW50QnVpbGRlciIsICIjbm9kZSIsICJub2RlIiwgIlByaW1hcnlLZXlDb25zdHJhaW50Tm9kZSIsICJmdW5jIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkNoZWNrQ29uc3RyYWludEJ1aWxkZXIiLCAiI25vZGUiLCAibm9kZSIsICJmdW5jIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlJlbmFtZUNvbnN0cmFpbnROb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIm9sZE5hbWUiLCAibmV3TmFtZSIsICJJZGVudGlmaWVyTm9kZSIsICJBbHRlclRhYmxlQnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgIm5ld1RhYmxlTmFtZSIsICJBbHRlclRhYmxlRXhlY3V0b3IiLCAiQWx0ZXJUYWJsZU5vZGUiLCAicGFyc2VUYWJsZSIsICJuZXdTY2hlbWEiLCAiSWRlbnRpZmllck5vZGUiLCAiY29sdW1uIiwgImFsdGVyYXRpb24iLCAiYnVpbGRlciIsICJBbHRlckNvbHVtbkJ1aWxkZXIiLCAiQWx0ZXJUYWJsZUNvbHVtbkFsdGVyaW5nQnVpbGRlciIsICJEcm9wQ29sdW1uTm9kZSIsICJuZXdDb2x1bW4iLCAiUmVuYW1lQ29sdW1uTm9kZSIsICJjb2x1bW5OYW1lIiwgImRhdGFUeXBlIiwgImJ1aWxkIiwgIm5vb3AiLCAiQ29sdW1uRGVmaW5pdGlvbkJ1aWxkZXIiLCAiQ29sdW1uRGVmaW5pdGlvbk5vZGUiLCAicGFyc2VEYXRhVHlwZUV4cHJlc3Npb24iLCAiQWRkQ29sdW1uTm9kZSIsICJNb2RpZnlDb2x1bW5Ob2RlIiwgImNvbnN0cmFpbnROYW1lIiwgImNvbHVtbnMiLCAidW5pcXVlQ29uc3RyYWludEJ1aWxkZXIiLCAiVW5pcXVlQ29uc3RyYWludE5vZGVCdWlsZGVyIiwgIlVuaXF1ZUNvbnN0cmFpbnROb2RlIiwgIkFkZENvbnN0cmFpbnROb2RlIiwgImNoZWNrRXhwcmVzc2lvbiIsICJjb25zdHJhaW50QnVpbGRlciIsICJDaGVja0NvbnN0cmFpbnRCdWlsZGVyIiwgIkNoZWNrQ29uc3RyYWludE5vZGUiLCAidGFyZ2V0VGFibGUiLCAidGFyZ2V0Q29sdW1ucyIsICJGb3JlaWduS2V5Q29uc3RyYWludEJ1aWxkZXIiLCAiRm9yZWlnbktleUNvbnN0cmFpbnROb2RlIiwgIkNvbHVtbk5vZGUiLCAiQWx0ZXJUYWJsZUFkZEZvcmVpZ25LZXlDb25zdHJhaW50QnVpbGRlciIsICJQcmltYXJ5S2V5Q29uc3RyYWludEJ1aWxkZXIiLCAiUHJpbWFyeUtleUNvbnN0cmFpbnROb2RlIiwgIkFsdGVyVGFibGVEcm9wQ29uc3RyYWludEJ1aWxkZXIiLCAiRHJvcENvbnN0cmFpbnROb2RlIiwgIm9sZE5hbWUiLCAibmV3TmFtZSIsICJSZW5hbWVDb25zdHJhaW50Tm9kZSIsICJpbmRleE5hbWUiLCAiQWx0ZXJUYWJsZUFkZEluZGV4QnVpbGRlciIsICJBZGRJbmRleE5vZGUiLCAiRHJvcEluZGV4Tm9kZSIsICJmdW5jIiwgIl9BbHRlclRhYmxlQ29sdW1uQWx0ZXJpbmdCdWlsZGVyIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkltbWVkaWF0ZVZhbHVlVHJhbnNmb3JtZXIiLCAiT3BlcmF0aW9uTm9kZVRyYW5zZm9ybWVyIiwgIm5vZGUiLCAiVmFsdWVMaXN0Tm9kZSIsICJWYWx1ZU5vZGUiLCAiQ3JlYXRlSW5kZXhCdWlsZGVyIiwgIl9DcmVhdGVJbmRleEJ1aWxkZXIiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJDcmVhdGVJbmRleE5vZGUiLCAidGFibGUiLCAicGFyc2VUYWJsZSIsICJjb2x1bW4iLCAicGFyc2VPcmRlcmVkQ29sdW1uTmFtZSIsICJjb2x1bW5zIiwgImV4cHJlc3Npb24iLCAiaW5kZXhUeXBlIiwgIlJhd05vZGUiLCAiYXJncyIsICJ0cmFuc2Zvcm1lciIsICJJbW1lZGlhdGVWYWx1ZVRyYW5zZm9ybWVyIiwgIlF1ZXJ5Tm9kZSIsICJwYXJzZVZhbHVlQmluYXJ5T3BlcmF0aW9uT3JFeHByZXNzaW9uIiwgImZ1bmMiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiQ3JlYXRlU2NoZW1hQnVpbGRlciIsICJfQ3JlYXRlU2NoZW1hQnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgIkNyZWF0ZVNjaGVtYU5vZGUiLCAiZnVuYyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJwYXJzZU9uQ29tbWl0QWN0aW9uIiwgImFjdGlvbiIsICJPTl9DT01NSVRfQUNUSU9OUyIsICJDcmVhdGVUYWJsZUJ1aWxkZXIiLCAiX0NyZWF0ZVRhYmxlQnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgIkNyZWF0ZVRhYmxlTm9kZSIsICJvbkNvbW1pdCIsICJwYXJzZU9uQ29tbWl0QWN0aW9uIiwgImNvbHVtbk5hbWUiLCAiZGF0YVR5cGUiLCAiYnVpbGQiLCAibm9vcCIsICJjb2x1bW5CdWlsZGVyIiwgIkNvbHVtbkRlZmluaXRpb25CdWlsZGVyIiwgIkNvbHVtbkRlZmluaXRpb25Ob2RlIiwgInBhcnNlRGF0YVR5cGVFeHByZXNzaW9uIiwgImNvbnN0cmFpbnROYW1lIiwgImNvbHVtbnMiLCAiY29uc3RyYWludEJ1aWxkZXIiLCAiUHJpbWFyeUtleUNvbnN0cmFpbnRCdWlsZGVyIiwgIlByaW1hcnlLZXlDb25zdHJhaW50Tm9kZSIsICJ1bmlxdWVDb25zdHJhaW50QnVpbGRlciIsICJVbmlxdWVDb25zdHJhaW50Tm9kZUJ1aWxkZXIiLCAiVW5pcXVlQ29uc3RyYWludE5vZGUiLCAiY2hlY2tFeHByZXNzaW9uIiwgIkNoZWNrQ29uc3RyYWludEJ1aWxkZXIiLCAiQ2hlY2tDb25zdHJhaW50Tm9kZSIsICJ0YXJnZXRUYWJsZSIsICJ0YXJnZXRDb2x1bW5zIiwgImJ1aWxkZXIiLCAiRm9yZWlnbktleUNvbnN0cmFpbnRCdWlsZGVyIiwgIkZvcmVpZ25LZXlDb25zdHJhaW50Tm9kZSIsICJDb2x1bW5Ob2RlIiwgInBhcnNlVGFibGUiLCAibW9kaWZpZXIiLCAiZXhwcmVzc2lvbiIsICJwYXJzZUV4cHJlc3Npb24iLCAiZnVuYyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJEcm9wSW5kZXhCdWlsZGVyIiwgIl9Ecm9wSW5kZXhCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAidGFibGUiLCAiRHJvcEluZGV4Tm9kZSIsICJwYXJzZVRhYmxlIiwgImZ1bmMiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiRHJvcFNjaGVtYUJ1aWxkZXIiLCAiX0Ryb3BTY2hlbWFCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiRHJvcFNjaGVtYU5vZGUiLCAiZnVuYyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJEcm9wVGFibGVCdWlsZGVyIiwgIl9Ecm9wVGFibGVCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiRHJvcFRhYmxlTm9kZSIsICJmdW5jIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkNyZWF0ZVZpZXdOb2RlIiwgImZyZWV6ZSIsICJub2RlIiwgIm5hbWUiLCAiU2NoZW1hYmxlSWRlbnRpZmllck5vZGUiLCAiY3JlYXRlVmlldyIsICJwYXJhbXMiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiSW1tZWRpYXRlVmFsdWVQbHVnaW4iLCAiI3RyYW5zZm9ybWVyIiwgIkltbWVkaWF0ZVZhbHVlVHJhbnNmb3JtZXIiLCAiYXJncyIsICJDcmVhdGVWaWV3QnVpbGRlciIsICJfQ3JlYXRlVmlld0J1aWxkZXIiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJDcmVhdGVWaWV3Tm9kZSIsICJjb2x1bW5zIiwgInBhcnNlQ29sdW1uTmFtZSIsICJxdWVyeSIsICJxdWVyeU5vZGUiLCAiSW1tZWRpYXRlVmFsdWVQbHVnaW4iLCAiZnVuYyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJEcm9wVmlld05vZGUiLCAiZnJlZXplIiwgIm5vZGUiLCAibmFtZSIsICJTY2hlbWFibGVJZGVudGlmaWVyTm9kZSIsICJkcm9wVmlldyIsICJwYXJhbXMiLCAiRHJvcFZpZXdCdWlsZGVyIiwgIl9Ecm9wVmlld0J1aWxkZXIiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJEcm9wVmlld05vZGUiLCAiZnVuYyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJDcmVhdGVUeXBlTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJuYW1lIiwgImNyZWF0ZVR5cGUiLCAidmFsdWVzIiwgIlZhbHVlTGlzdE5vZGUiLCAiVmFsdWVOb2RlIiwgIkNyZWF0ZVR5cGVCdWlsZGVyIiwgIl9DcmVhdGVUeXBlQnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgInZhbHVlcyIsICJDcmVhdGVUeXBlTm9kZSIsICJmdW5jIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkRyb3BUeXBlTm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJuYW1lIiwgImRyb3BUeXBlIiwgInBhcmFtcyIsICJEcm9wVHlwZUJ1aWxkZXIiLCAiX0Ryb3BUeXBlQnVpbGRlciIsICIjcHJvcHMiLCAicHJvcHMiLCAiZnJlZXplIiwgIkRyb3BUeXBlTm9kZSIsICJmdW5jIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgInBhcnNlU2NoZW1hYmxlSWRlbnRpZmllciIsICJpZCIsICJTQ0hFTUFfU0VQQVJBVE9SIiwgInBhcnRzIiwgInRyaW0iLCAiU2NoZW1hYmxlSWRlbnRpZmllck5vZGUiLCAic3RyIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3Tm9kZSIsICJmcmVlemUiLCAibm9kZSIsICJuYW1lIiwgIlNjaGVtYWJsZUlkZW50aWZpZXJOb2RlIiwgImNyZWF0ZVZpZXciLCAicGFyYW1zIiwgIlJlZnJlc2hNYXRlcmlhbGl6ZWRWaWV3QnVpbGRlciIsICJfUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdCdWlsZGVyIiwgIiNwcm9wcyIsICJwcm9wcyIsICJmcmVlemUiLCAiUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdOb2RlIiwgImZ1bmMiLCAiU2NoZW1hTW9kdWxlIiwgIl9TY2hlbWFNb2R1bGUiLCAiI2V4ZWN1dG9yIiwgImV4ZWN1dG9yIiwgInRhYmxlIiwgIkNyZWF0ZVRhYmxlQnVpbGRlciIsICJjcmVhdGVRdWVyeUlkIiwgIkNyZWF0ZVRhYmxlTm9kZSIsICJwYXJzZVRhYmxlIiwgIkRyb3BUYWJsZUJ1aWxkZXIiLCAiRHJvcFRhYmxlTm9kZSIsICJpbmRleE5hbWUiLCAiQ3JlYXRlSW5kZXhCdWlsZGVyIiwgIkNyZWF0ZUluZGV4Tm9kZSIsICJEcm9wSW5kZXhCdWlsZGVyIiwgIkRyb3BJbmRleE5vZGUiLCAic2NoZW1hIiwgIkNyZWF0ZVNjaGVtYUJ1aWxkZXIiLCAiQ3JlYXRlU2NoZW1hTm9kZSIsICJEcm9wU2NoZW1hQnVpbGRlciIsICJEcm9wU2NoZW1hTm9kZSIsICJBbHRlclRhYmxlQnVpbGRlciIsICJBbHRlclRhYmxlTm9kZSIsICJ2aWV3TmFtZSIsICJDcmVhdGVWaWV3QnVpbGRlciIsICJDcmVhdGVWaWV3Tm9kZSIsICJSZWZyZXNoTWF0ZXJpYWxpemVkVmlld0J1aWxkZXIiLCAiUmVmcmVzaE1hdGVyaWFsaXplZFZpZXdOb2RlIiwgIkRyb3BWaWV3QnVpbGRlciIsICJEcm9wVmlld05vZGUiLCAidHlwZU5hbWUiLCAiQ3JlYXRlVHlwZUJ1aWxkZXIiLCAiQ3JlYXRlVHlwZU5vZGUiLCAicGFyc2VTY2hlbWFibGVJZGVudGlmaWVyIiwgIkRyb3BUeXBlQnVpbGRlciIsICJEcm9wVHlwZU5vZGUiLCAicGx1Z2luIiwgIldpdGhTY2hlbWFQbHVnaW4iLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiRHluYW1pY01vZHVsZSIsICJyZWZlcmVuY2UiLCAiRHluYW1pY1JlZmVyZW5jZUJ1aWxkZXIiLCAidGFibGUiLCAiRHluYW1pY1RhYmxlQnVpbGRlciIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJEZWZhdWx0Q29ubmVjdGlvblByb3ZpZGVyIiwgIiNkcml2ZXIiLCAiZHJpdmVyIiwgImNvbnN1bWVyIiwgImNvbm5lY3Rpb24iLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiRGVmYXVsdFF1ZXJ5RXhlY3V0b3IiLCAiX0RlZmF1bHRRdWVyeUV4ZWN1dG9yIiwgIlF1ZXJ5RXhlY3V0b3JCYXNlIiwgIiNjb21waWxlciIsICIjYWRhcHRlciIsICIjY29ubmVjdGlvblByb3ZpZGVyIiwgImNvbXBpbGVyIiwgImFkYXB0ZXIiLCAiY29ubmVjdGlvblByb3ZpZGVyIiwgInBsdWdpbnMiLCAibm9kZSIsICJxdWVyeUlkIiwgImNvbnN1bWVyIiwgInBsdWdpbiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJwZXJmb3JtYW5jZU5vdyIsICJpc0Z1bmN0aW9uIiwgIlJ1bnRpbWVEcml2ZXIiLCAiI2RyaXZlciIsICIjbG9nIiwgIiNpbml0UHJvbWlzZSIsICIjaW5pdERvbmUiLCAiI2Rlc3Ryb3lQcm9taXNlIiwgIiNjb25uZWN0aW9ucyIsICJkcml2ZXIiLCAibG9nIiwgImVyciIsICJjb25uZWN0aW9uIiwgIiNuZWVkc0xvZ2dpbmciLCAiI2FkZExvZ2dpbmciLCAic2V0dGluZ3MiLCAic2F2ZXBvaW50TmFtZSIsICJjb21waWxlUXVlcnkiLCAiZXhlY3V0ZVF1ZXJ5IiwgInN0cmVhbVF1ZXJ5IiwgImRpcyIsICJjb21waWxlZFF1ZXJ5IiwgImNhdWdodEVycm9yIiwgInN0YXJ0VGltZSIsICJwZXJmb3JtYW5jZU5vdyIsICJlcnJvciIsICIjbG9nRXJyb3IiLCAiI2xvZ1F1ZXJ5IiwgImNodW5rU2l6ZSIsICJyZXN1bHQiLCAiI2NhbGN1bGF0ZUR1cmF0aW9uTWlsbGlzIiwgImlzU3RyZWFtIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgImlnbm9yZUVycm9yIiwgIlNpbmdsZUNvbm5lY3Rpb25Qcm92aWRlciIsICIjY29ubmVjdGlvbiIsICIjcnVubmluZ1Byb21pc2UiLCAiY29ubmVjdGlvbiIsICJjb25zdW1lciIsICIjcnVuIiwgInJ1bm5lciIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJUUkFOU0FDVElPTl9BQ0NFU1NfTU9ERVMiLCAiVFJBTlNBQ1RJT05fSVNPTEFUSU9OX0xFVkVMUyIsICJ2YWxpZGF0ZVRyYW5zYWN0aW9uU2V0dGluZ3MiLCAic2V0dGluZ3MiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiTE9HX0xFVkVMUyIsICJmcmVlemUiLCAiTG9nIiwgIiNsZXZlbHMiLCAiI2xvZ2dlciIsICJjb25maWciLCAiaXNGdW5jdGlvbiIsICJkZWZhdWx0TG9nZ2VyIiwgImxldmVsIiwgImdldEV2ZW50IiwgImV2ZW50IiwgInByZWZpeCIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJpc0NvbXBpbGFibGUiLCAidmFsdWUiLCAiaXNPYmplY3QiLCAiaXNGdW5jdGlvbiIsICJLeXNlbHkiLCAiX0t5c2VseSIsICJRdWVyeUNyZWF0b3IiLCAiI3Byb3BzIiwgImFyZ3MiLCAic3VwZXJQcm9wcyIsICJwcm9wcyIsICJpc0t5c2VseVByb3BzIiwgImRpYWxlY3QiLCAiZHJpdmVyIiwgImNvbXBpbGVyIiwgImFkYXB0ZXIiLCAibG9nIiwgIkxvZyIsICJydW50aW1lRHJpdmVyIiwgIlJ1bnRpbWVEcml2ZXIiLCAiY29ubmVjdGlvblByb3ZpZGVyIiwgIkRlZmF1bHRDb25uZWN0aW9uUHJvdmlkZXIiLCAiZXhlY3V0b3IiLCAiRGVmYXVsdFF1ZXJ5RXhlY3V0b3IiLCAiZnJlZXplIiwgIlNjaGVtYU1vZHVsZSIsICJEeW5hbWljTW9kdWxlIiwgInZhbHVlIiwgIkNhc2VCdWlsZGVyIiwgIkNhc2VOb2RlIiwgImlzVW5kZWZpbmVkIiwgInBhcnNlRXhwcmVzc2lvbiIsICJjcmVhdGVGdW5jdGlvbk1vZHVsZSIsICJUcmFuc2FjdGlvbkJ1aWxkZXIiLCAiQ29udHJvbGxlZFRyYW5zYWN0aW9uQnVpbGRlciIsICJDb25uZWN0aW9uQnVpbGRlciIsICJwbHVnaW4iLCAic2NoZW1hIiwgIldpdGhTY2hlbWFQbHVnaW4iLCAicXVlcnkiLCAicXVlcnlJZCIsICJsb2dPbmNlIiwgImNvbXBpbGVkUXVlcnkiLCAiaXNDb21waWxhYmxlIiwgIlRyYW5zYWN0aW9uIiwgIl9UcmFuc2FjdGlvbiIsICJvYmoiLCAiaXNPYmplY3QiLCAiY2FsbGJhY2siLCAiY29ubmVjdGlvbiIsICJTaW5nbGVDb25uZWN0aW9uUHJvdmlkZXIiLCAiZGIiLCAiX1RyYW5zYWN0aW9uQnVpbGRlciIsICJhY2Nlc3NNb2RlIiwgImlzb2xhdGlvbkxldmVsIiwgImt5c2VseVByb3BzIiwgInNldHRpbmdzIiwgInZhbGlkYXRlVHJhbnNhY3Rpb25TZXR0aW5ncyIsICJ0cmFuc2FjdGlvbiIsICJ0cmFuc2FjdGlvbkJlZ3VuIiwgInJlc3VsdCIsICJlcnJvciIsICJfQ29udHJvbGxlZFRyYW5zYWN0aW9uQnVpbGRlciIsICJwcm92aWRlQ29udHJvbGxlZENvbm5lY3Rpb24iLCAiQ29udHJvbGxlZFRyYW5zYWN0aW9uIiwgIl9Db250cm9sbGVkVHJhbnNhY3Rpb24iLCAiI2NvbXBpbGVRdWVyeSIsICIjc3RhdGUiLCAic3RhdGUiLCAiTm90Q29tbWl0dGVkT3JSb2xsZWRCYWNrQXNzZXJ0aW5nRXhlY3V0b3IiLCAidHJhbnNhY3Rpb25Qcm9wcyIsICJjcmVhdGVRdWVyeUlkIiwgIm5vZGUiLCAiYXNzZXJ0Tm90Q29tbWl0dGVkT3JSb2xsZWRCYWNrIiwgIkNvbW1hbmQiLCAic2F2ZXBvaW50TmFtZSIsICIjY2IiLCAiY2IiLCAiX05vdENvbW1pdHRlZE9yUm9sbGVkQmFja0Fzc2VydGluZ0V4ZWN1dG9yIiwgIiNleGVjdXRvciIsICJjb25zdW1lciIsICJjaHVua1NpemUiLCAicGx1Z2lucyIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJSYXdCdWlsZGVySW1wbCIsICJfUmF3QnVpbGRlckltcGwiLCAiI3Byb3BzIiwgInByb3BzIiwgImZyZWV6ZSIsICJhbGlhcyIsICJBbGlhc2VkUmF3QnVpbGRlckltcGwiLCAicGx1Z2luIiwgIiN0b09wZXJhdGlvbk5vZGUiLCAiI2dldEV4ZWN1dG9yIiwgImV4ZWN1dG9yUHJvdmlkZXIiLCAiI2NvbXBpbGUiLCAiZXhlY3V0b3IiLCAiTk9PUF9RVUVSWV9FWEVDVVRPUiIsICJjcmVhdGVSYXdCdWlsZGVyIiwgIiNyYXdCdWlsZGVyIiwgIiNhbGlhcyIsICJyYXdCdWlsZGVyIiwgIkFsaWFzTm9kZSIsICJpc09wZXJhdGlvbk5vZGVTb3VyY2UiLCAiSWRlbnRpZmllck5vZGUiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAic3FsIiwgInNxbEZyYWdtZW50cyIsICJwYXJhbWV0ZXJzIiwgImNyZWF0ZVJhd0J1aWxkZXIiLCAiY3JlYXRlUXVlcnlJZCIsICJSYXdOb2RlIiwgInBhcnNlUGFyYW1ldGVyIiwgImNvbHVtblJlZmVyZW5jZSIsICJwYXJzZVN0cmluZ1JlZmVyZW5jZSIsICJ2YWx1ZSIsICJwYXJzZVZhbHVlRXhwcmVzc2lvbiIsICJ0YWJsZVJlZmVyZW5jZSIsICJwYXJzZVRhYmxlIiwgImlkcyIsICJmcmFnbWVudHMiLCAiSWRlbnRpZmllck5vZGUiLCAiVmFsdWVOb2RlIiwgImFycmF5IiwgInNlcGFyYXRvciIsICJub2RlcyIsICJzZXAiLCAiaSIsICJwYXJhbSIsICJpc09wZXJhdGlvbk5vZGVTb3VyY2UiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiT3BlcmF0aW9uTm9kZVZpc2l0b3IiLCAiI3Zpc2l0b3JzIiwgImZyZWV6ZSIsICJub2RlIiwgIkxJVF9XUkFQX1JFR0VYIiwgIkRlZmF1bHRRdWVyeUNvbXBpbGVyIiwgIk9wZXJhdGlvbk5vZGVWaXNpdG9yIiwgIiNzcWwiLCAiI3BhcmFtZXRlcnMiLCAibm9kZSIsICJxdWVyeUlkIiwgImZyZWV6ZSIsICJ3cmFwSW5QYXJlbnMiLCAiUGFyZW5zTm9kZSIsICJJbnNlcnRRdWVyeU5vZGUiLCAiQ3JlYXRlVGFibGVOb2RlIiwgIkNyZWF0ZVZpZXdOb2RlIiwgIlNldE9wZXJhdGlvbk5vZGUiLCAiZXhwcmVzc2lvbnMiLCAibm9kZXMiLCAic2VwYXJhdG9yIiwgImxhc3RJbmRleCIsICJpIiwgIlJhd05vZGUiLCAiV2hlbk5vZGUiLCAibG9nT25jZSIsICJfIiwgImlzU3RyaW5nIiwgInZhbHVlcyIsICJKT0lOX1RZUEVfU1FMIiwgInNxbEZyYWdtZW50cyIsICJwYXJhbXMiLCAiaXNCb29sZWFuIiwgIlNFTEVDVF9NT0RJRklFUl9TUUwiLCAiT3BlcmF0b3JOb2RlIiwgInBhdGhMZWciLCAiaXNBcnJheUxvY2F0aW9uIiwgImxlbiIsICJzdHIiLCAicGFyYW1ldGVyIiwgImlkZW50aWZpZXIiLCAibGVmdFdyYXAiLCAicmlnaHRXcmFwIiwgInNhbml0aXplZCIsICJjIiwgInZhbHVlIiwgImlzTnVtYmVyIiwgImlzQmlnSW50IiwgImlzTnVsbCIsICJpc0RhdGUiLCAiYXJyIiwgImxlZnQiLCAicmlnaHQiLCAiU0VMRUNUX01PRElGSUVSX1BSSU9SSVRZIiwgImNvbHVtbkFsdGVyYXRpb25zIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIkR1bW15RHJpdmVyIiwgIkR1bW15Q29ubmVjdGlvbiIsICJpbml0X2RlZmluZV9BQ0NFTEVSQVRFX1NDSEVNQV9CWV9QUk9WSURFUiIsICJEaWFsZWN0QWRhcHRlckJhc2UiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiSURfV1JBUF9SRUdFWCIsICJTcWxpdGVRdWVyeUNvbXBpbGVyIiwgIkRlZmF1bHRRdWVyeUNvbXBpbGVyIiwgIm5vZGUiLCAiaWRlbnRpZmllciIsICJfIiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIlNxbGl0ZUFkYXB0ZXIiLCAiRGlhbGVjdEFkYXB0ZXJCYXNlIiwgIl9kYiIsICJfb3B0IiwgImluaXRfZGVmaW5lX0FDQ0VMRVJBVEVfU0NIRU1BX0JZX1BST1ZJREVSIiwgIklEX1dSQVBfUkVHRVgiLCAiUG9zdGdyZXNRdWVyeUNvbXBpbGVyIiwgIkRlZmF1bHRRdWVyeUNvbXBpbGVyIiwgImlkZW50aWZpZXIiLCAiaW5pdF9kZWZpbmVfQUNDRUxFUkFURV9TQ0hFTUFfQllfUFJPVklERVIiLCAiTE9DS19JRCIsICJQb3N0Z3Jlc0FkYXB0ZXIiLCAiRGlhbGVjdEFkYXB0ZXJCYXNlIiwgImRiIiwgIl9vcHQiLCAic3FsIiwgIl9kYiIsICJnZXRCdWlsZGVyIiwgInJlcXVpcmVtZW50cyIsICJLeXNlbHkiLCAiRHVtbXlEcml2ZXIiLCAiSW1tZWRpYXRlVmFsdWVQbHVnaW4iLCAiI3RyYW5zZm9ybWVyIiwgIkltbWVkaWF0ZVZhbHVlVHJhbnNmb3JtZXIiLCAiYXJncyIsICJPcGVyYXRpb25Ob2RlVHJhbnNmb3JtZXIiLCAibm9kZSIsICJWYWx1ZUxpc3ROb2RlIiwgIlZhbHVlTm9kZSIsICJhc1F1ZXJ5IiwgInF1ZXJ5IiwgImNvbXBpbGUiLCAiY29tcGlsZWFibGUiLCAib3B0aW9ucyIsICJjb21waWxlZFF1ZXJ5IiwgImFwcGx5SW5mZXJyZWRSb3dGaWx0ZXJzIiwgInJvd3MiLCAiY29sdW1ucyIsICJyb3dGaWx0ZXJzIiwgImluZmVyUm93RmlsdGVycyIsICJxYiIsICJlYiIsICJyb3dGaWx0ZXIiLCAiY29sdW1uTmFtZSIsICJ2YWx1ZSIsICJpbmZlckZpbHRlck9iamVjdCIsICJyb3ciLCAiZmlsdGVyIiwgImNvbHVtbiIsICJpc0luUHJpbWFyeUtleSIsICJyZWZzIiwgInZhbHVlcyIsICJleHByZXNzaW9uQnVpbGRlciIsICJ2YWx1ZXNGb3JSb3ciLCAidHJhbnNmb3JtVmFsdWUiLCAidHVwbGVGcm9tIiwgImxocyIsICJyaHMiLCAiaXRlbXMiLCAic3FsIiwgImFwcGx5VHJhbnNmb3JtYXRpb25zIiwgIl9jb250ZXh0IiwgInRyYW5zZm9ybVZhbHVlcyIsICJvYmoiLCAia2V5IiwgImRhdGF0eXBlIiwgImdldFNlbGVjdEZpbHRlckV4cHJlc3Npb24iLCAiZmlsdGVycyIsICJvckdyb3Vwc09mQW5kQnVpbGRlcnMiLCAiY3VycmVudEFuZEdyb3VwQnVpbGRlcnMiLCAiaSIsICJidWlsZEJhc2VFeHByZXNzaW9uQnVpbGRlciIsICJhbmRFeHByZXNzaW9ucyIsICJncm91cCIsICJidWlsZGVyIiwgInNwZWMiLCAib3BlcmF0b3IiLCAiY29sdW1uTWV0YSJdCn0K