@datagrok-libraries/bio 4.4.4 → 4.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"friendlyName": "Datagrok bio library",
|
|
7
|
-
"version": "4.4.
|
|
7
|
+
"version": "4.4.5",
|
|
8
8
|
"description": "",
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@datagrok-libraries/utils": "^1.
|
|
10
|
+
"@datagrok-libraries/utils": "^1.10.1",
|
|
11
11
|
"@phylocanvas/phylocanvas.gl": "^1.44.0",
|
|
12
12
|
"cash-dom": "latest",
|
|
13
|
-
"datagrok-api": "^1.
|
|
13
|
+
"datagrok-api": "^1.7.0",
|
|
14
14
|
"dayjs": "latest",
|
|
15
15
|
"rxjs": "^6.5.5",
|
|
16
16
|
"wu": "latest"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-logo.d.ts","sourceRoot":"","sources":["web-logo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAUtC,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAK3C,OAAO,QAAQ,uBAAuB,CAAC;IACrC,UAAU,IAAI;QACZ,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACzC;CACF;AAOD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,iBAAiB;QACzB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;KAC3D;CACF;AAED,oBAAY,YAAY,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AACnD,oBAAY,WAAW,GAAG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAA;AACrE,oBAAY,YAAY,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;AAerD,qBAAa,mBAAmB;IAC9B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IAEd,kCAAkC;IAClC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC;gBAEJ,KAAK,GAAE,MAAU,EAAE,MAAM,GAAE,EAAE,CAAC,IAA8B;CAIzE;AAED,qBAAa,YAAY;IACvB,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAA;KAAE,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;;;OAKG;gBACS,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAA;KAAO,EAAE,QAAQ,GAAE,MAAU,EAAE,gBAAgB,GAAE,MAAU;CAM9H;AAGD,qBAAa,OAAQ,SAAQ,EAAE,CAAC,QAAQ;IACtC,OAAc,WAAW,SAAiB;IAC1C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAc;IAExC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,WAAW,CAAkB;IAGrC,SAAS,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,CAAQ;IAEvC,OAAO,CAAC,IAAI,CAAC,CAAiB;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAElD,OAAO,CAAC,UAAU,CAAc;IAEhC,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,QAAQ,CAA6B;IAE7C,OAAO,CAAC,SAAS,CAAsB;IAEvC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,YAAY,CAAa;IAGjC,OAAO,CAAC,cAAc,CAAS;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAc;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAK;IAC3B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IAE9B,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,aAAa,CAAc;IAEnC,OAAO,CAAC,WAAW,CAAc;IAEjC,0DAA0D;IAC1D,OAAO,KAAK,MAAM,GAKjB;IAED,kGAAkG;IAClG,OAAO,KAAK,uBAAuB,GAElC;IAED,OAAO,KAAK,mBAAmB,GAS9B;IAED,yEAAyE;IACzE,OAAO,KAAK,sBAAsB,GAKjC;IAED,kCAAkC;IAClC,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,CAAC,QAAQ,CAAsB;;YAiDxB,IAAI;IAkHlB,uCAAuC;IACvC,OAAO,CAAC,iBAAiB;IAMzB;OACG;IACH,OAAO,CAAC,YAAY;IA0BpB;OACG;IACH,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,iBAAiB;IAIzB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAU3C;OACG;IACH,OAAO,CAAC,SAAS;IAgBjB,yCAAyC;IACzB,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI;IAqC9D,oDAAoD;IACpC,eAAe;IAqB/B,kDAAkD;IAC5B,MAAM;IAc5B,oCAAoC;IACpC,SAAS,CAAC,aAAa,CAAC,aAAa,SAAM,GAAG,MAAM;IAOpD,iDAAiD;IAEjD,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC;IAcpF,4CAA4C;IAC5C,SAAS,CAAC,qBAAqB;IAM/B,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM;IA+F9B;;OAEG;IACH,MAAM,CAAC,MAAM,UAAO;IAsFpB,oEAAoE;IACpE,OAAO,CAAC,QAAQ;IAoFhB;;;;OAIG;WACW,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,GAAE,MAAU,GAAG,UAAU;IA4B1E,eAAe,IAAI,MAAM;IAIhC;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,WAAW;IAwB1F;;;;;OAKG;WACW,qBAAqB,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM;WAoCjG,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI;IAW9D,OAAO,CAAC,MAAM,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"web-logo.d.ts","sourceRoot":"","sources":["web-logo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAUtC,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAK3C,OAAO,QAAQ,uBAAuB,CAAC;IACrC,UAAU,IAAI;QACZ,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACzC;CACF;AAOD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,iBAAiB;QACzB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;KAC3D;CACF;AAED,oBAAY,YAAY,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC;AACnD,oBAAY,WAAW,GAAG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAA;AACrE,oBAAY,YAAY,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;AAerD,qBAAa,mBAAmB;IAC9B,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IAEd,kCAAkC;IAClC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC;gBAEJ,KAAK,GAAE,MAAU,EAAE,MAAM,GAAE,EAAE,CAAC,IAA8B;CAIzE;AAED,qBAAa,YAAY;IACvB,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAA;KAAE,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;;;OAKG;gBACS,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAA;KAAO,EAAE,QAAQ,GAAE,MAAU,EAAE,gBAAgB,GAAE,MAAU;CAM9H;AAGD,qBAAa,OAAQ,SAAQ,EAAE,CAAC,QAAQ;IACtC,OAAc,WAAW,SAAiB;IAC1C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAc;IAExC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;IACvC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,WAAW,CAAkB;IAGrC,SAAS,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,CAAQ;IAEvC,OAAO,CAAC,IAAI,CAAC,CAAiB;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAElD,OAAO,CAAC,UAAU,CAAc;IAEhC,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,QAAQ,CAA6B;IAE7C,OAAO,CAAC,SAAS,CAAsB;IAEvC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,YAAY,CAAa;IAGjC,OAAO,CAAC,cAAc,CAAS;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAc;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAK;IAC3B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IAE9B,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,aAAa,CAAc;IAEnC,OAAO,CAAC,WAAW,CAAc;IAEjC,0DAA0D;IAC1D,OAAO,KAAK,MAAM,GAKjB;IAED,kGAAkG;IAClG,OAAO,KAAK,uBAAuB,GAElC;IAED,OAAO,KAAK,mBAAmB,GAS9B;IAED,yEAAyE;IACzE,OAAO,KAAK,sBAAsB,GAKjC;IAED,kCAAkC;IAClC,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,CAAC,QAAQ,CAAsB;;YAiDxB,IAAI;IAkHlB,uCAAuC;IACvC,OAAO,CAAC,iBAAiB;IAMzB;OACG;IACH,OAAO,CAAC,YAAY;IA0BpB;OACG;IACH,OAAO,CAAC,eAAe;IA6BvB,OAAO,CAAC,iBAAiB;IAIzB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAU3C;OACG;IACH,OAAO,CAAC,SAAS;IAgBjB,yCAAyC;IACzB,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI;IAqC9D,oDAAoD;IACpC,eAAe;IAqB/B,kDAAkD;IAC5B,MAAM;IAc5B,oCAAoC;IACpC,SAAS,CAAC,aAAa,CAAC,aAAa,SAAM,GAAG,MAAM;IAOpD,iDAAiD;IAEjD,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC;IAcpF,4CAA4C;IAC5C,SAAS,CAAC,qBAAqB;IAM/B,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM;IA+F9B;;OAEG;IACH,MAAM,CAAC,MAAM,UAAO;IAsFpB,oEAAoE;IACpE,OAAO,CAAC,QAAQ;IAoFhB;;;;OAIG;WACW,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,GAAE,MAAU,GAAG,UAAU;IA4B1E,eAAe,IAAI,MAAM;IAIhC;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,WAAW;IAwB1F;;;;;OAKG;WACW,qBAAqB,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM;WAoCjG,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI;IAW9D,OAAO,CAAC,MAAM,CAAC,SAAS,CAAyB;IAEjD,8FAA8F;IAC9F,OAAO,CAAC,MAAM,CAAC,UAAU,CAKvB;IAEF;;;OAGG;WACW,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE;IAcjD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAqC;IAC1D,OAAO,CAAC,MAAM,CAAC,SAAS,CAAoB;IAE5C;;;;OAIG;WACW,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE;IAkBhD;;;;OAIG;WACW,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,SAAqB,GAAG,YAAY;IAM9G;;;;;OAKG;WACW,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,SAAqB,GAAG,YAAY;IAahH;;;OAGG;WACW,oBAAoB,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,YAAY;IAShE,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAY;IAE5C,+CAA+C;WACjC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,MAAM;CAMhF"}
|
package/src/viewers/web-logo.js
CHANGED
|
@@ -768,13 +768,7 @@ export class WebLogo extends DG.JsViewer {
|
|
|
768
768
|
let mRes;
|
|
769
769
|
const m = ma[0];
|
|
770
770
|
if (m.length > 1) {
|
|
771
|
-
|
|
772
|
-
mRes = WebLogo.aaSynonyms[m];
|
|
773
|
-
}
|
|
774
|
-
else {
|
|
775
|
-
mRes = '';
|
|
776
|
-
console.debug(`Long monomer '${m}' has not a short synonym.`);
|
|
777
|
-
}
|
|
771
|
+
mRes = ma[1];
|
|
778
772
|
}
|
|
779
773
|
else {
|
|
780
774
|
mRes = m;
|
|
@@ -851,7 +845,7 @@ export class WebLogo extends DG.JsViewer {
|
|
|
851
845
|
}
|
|
852
846
|
WebLogo.residuesSet = 'nucleotides';
|
|
853
847
|
WebLogo.viewerCount = -1;
|
|
854
|
-
WebLogo.monomerRe = /\[(\w+)|(\w)|(-)/g;
|
|
848
|
+
WebLogo.monomerRe = /\[(\w+)\]|(\w)|(-)/g;
|
|
855
849
|
/** Only some of the synonyms. These were obtained from the clustered oligopeptide dataset. */
|
|
856
850
|
WebLogo.aaSynonyms = {
|
|
857
851
|
'[MeNle]': 'L',
|
|
@@ -862,4 +856,4 @@ WebLogo.aaSynonyms = {
|
|
|
862
856
|
WebLogo.helmRe = /(PEPTIDE1|DNA1|RNA1)\{([^}]+)}/g;
|
|
863
857
|
WebLogo.helmPp1Re = /\[([^\[\]]+)]/g;
|
|
864
858
|
WebLogo.longMonomerPartRe = /(\w+)/g;
|
|
865
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWxvZ28uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWItbG9nby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUMvRixPQUFPLEVBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBQyxXQUFXLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFHOUMsT0FBTyxFQUFXLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBUzlELElBQUssY0FHSjtBQUhELFdBQUssY0FBYztJQUNqQixxQ0FBbUIsQ0FBQTtJQUNuQiwrQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUhJLGNBQWMsS0FBZCxjQUFjLFFBR2xCO0FBWUQ7OztHQUdHO0FBQ0gsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixHQUFHLFVBQVMsS0FBaUIsRUFBRSxDQUFTO0lBQ25GLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQzFDLE9BQU8sSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENB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O0FBOTdCYSxtQkFBVyxHQUFHLGFBQWEsQ0FBQztBQUMzQixtQkFBVyxHQUFXLENBQUMsQ0FBQyxDQUFDO0FBKzBCekIsaUJBQVMsR0FBRyxtQkFBbUIsQ0FBQztBQUUvQyw4RkFBOEY7QUFDL0Usa0JBQVUsR0FBK0I7SUFDdEQsU0FBUyxFQUFFLEdBQUc7SUFDZCxPQUFPLEVBQUUsR0FBRztJQUNaLE9BQU8sRUFBRSxHQUFHO0lBQ1osT0FBTyxFQUFFLEdBQUc7Q0FDYixDQUFDO0FBeUJhLGNBQU0sR0FBRyxpQ0FBaUMsQ0FBQztBQUMzQyxpQkFBUyxHQUFHLGdCQUFnQixDQUFDO0FBb0U3Qix5QkFBaUIsR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5pbXBvcnQgd3UgZnJvbSAnd3UnO1xuaW1wb3J0ICogYXMgcnhqcyBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtWZWN0b3J9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3R5cGUtZGVjbGFyYXRpb25zJztcbmltcG9ydCB7dmVjdG9yTGVuZ3RoLCB2ZWN0b3JEb3RQcm9kdWN0fSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5pbXBvcnQge0FtaW5vYWNpZHMsIEFtaW5vYWNpZHNQYWxldHRlc30gZnJvbSAnLi4vYW1pbm9hY2lkcyc7XG5pbXBvcnQge051Y2xlb3RpZGVzLCBOdWNsZW90aWRlc1BhbGV0dGVzfSBmcm9tICcuLi9udWNsZW90aWRlcyc7XG5pbXBvcnQge1Vua25vd25TZXFQYWxldHRlc30gZnJvbSAnLi4vdW5rbm93bic7XG5pbXBvcnQge1NlcVBhbGV0dGV9IGZyb20gJy4uL3NlcS1wYWxldHRlcyc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge05PVEFUSU9OLCBVbml0c0hhbmRsZXJ9IGZyb20gJy4uL3V0aWxzL3VuaXRzLWhhbmRsZXInO1xuaW1wb3J0IHtTbGlkZXJPcHRpb25zfSBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5kZWNsYXJlIG1vZHVsZSAnZGF0YWdyb2stYXBpL3NyYy9ncmlkJyB7XG4gIGludGVyZmFjZSBSZWN0IHtcbiAgICBjb250YWlucyh4OiBudW1iZXIsIHk6IG51bWJlcik6IGJvb2xlYW47XG4gIH1cbn1cblxuZW51bSBQb3NpdGlvbkhlaWdodCB7XG4gIEVudHJvcHkgPSAnRW50cm9weScsXG4gIGZ1bGwgPSAnMTAwJScsXG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxDYW52YXNFbGVtZW50IHtcbiAgICBnZXRDdXJzb3JQb3NpdGlvbihldmVudDogTW91c2VFdmVudCwgcjogbnVtYmVyKTogREcuUG9pbnQ7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgTW9ub21lckZyZXFzID0geyBbbTogc3RyaW5nXTogbnVtYmVyIH07XG5leHBvcnQgdHlwZSBTZXFDb2xTdGF0cyA9IHsgZnJlcTogTW9ub21lckZyZXFzLCBzYW1lTGVuZ3RoOiBib29sZWFuIH1cbmV4cG9ydCB0eXBlIFNwbGl0dGVyRnVuYyA9IChzZXE6IHN0cmluZykgPT4gc3RyaW5nW107XG5cbi8qKkBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSByIGRldmljZVBpeGVsUmF0aW9uXG4gKiBAcmV0dXJuIHtERy5Qb2ludH0gY2FudmFzIHJlbGF0ZWQgY3Vyc29yIHBvc2l0aW9uXG4gKi9cbkhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS5nZXRDdXJzb3JQb3NpdGlvbiA9IGZ1bmN0aW9uKGV2ZW50OiBNb3VzZUV2ZW50LCByOiBudW1iZXIpOiBERy5Qb2ludCB7XG4gIGNvbnN0IHJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4gbmV3IERHLlBvaW50KChldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0KSAqIHIsIChldmVudC5jbGllbnRZIC0gcmVjdC50b3ApICogcik7XG59O1xuXG5ERy5SZWN0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKHg6IG51bWJlciwgeTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiB0aGlzLmxlZnQgPD0geCAmJiB4IDw9IHRoaXMucmlnaHQgJiYgdGhpcy50b3AgPD0geSAmJiB5IDw9IHRoaXMuYm90dG9tO1xufTtcblxuZXhwb3J0IGNsYXNzIFBvc2l0aW9uTW9ub21lckluZm8ge1xuICAvKiogU2VxdWVuY2VzIGNvdW50IHdpdGggbW9ub21lciBpbiBwb3NpdGlvbiAqL1xuICBjb3VudDogbnVtYmVyO1xuXG4gIC8qKiBSZW1lbWJlciBzY3JlZW4gY29vcmRzIHJlY3QgKi9cbiAgYm91bmRzOiBERy5SZWN0O1xuXG4gIGNvbnN0cnVjdG9yKGNvdW50OiBudW1iZXIgPSAwLCBib3VuZHM6IERHLlJlY3QgPSBuZXcgREcuUmVjdCgwLCAwLCAwLCAwKSkge1xuICAgIHRoaXMuY291bnQgPSBjb3VudDtcbiAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUG9zaXRpb25JbmZvIHtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgZnJlcTogeyBbbTogc3RyaW5nXTogUG9zaXRpb25Nb25vbWVySW5mbyB9O1xuICByb3dDb3VudDogbnVtYmVyO1xuICBzdW1Gb3JIZWlnaHRDYWxjOiBudW1iZXI7XG5cbiAgLyoqIGZyZXEgPSB7fSwgcm93Q291bnQgPSAwXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgcG9zaXRpb24gKCcxMTFBJywgJzExMS4xJywgZXRjKVxuICAgKiBAcGFyYW0ge251bWJlcn0gc3VtRm9ySGVpZ2h0Q2FsYyBTdW0gb2YgYWxsIG1vbm9tZXIgY291bnRzIGZvciBoZWlnaHQgY2FsY3VsYXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd0NvdW50IENvdW50IG9mIGVsZW1lbnRzIGluIGNvbHVtblxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBmcmVxIGZyZXF1ZW5jeSBvZiBtb25vbWVycyBpbiBwb3NpdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBmcmVxOiB7IFttOiBzdHJpbmddOiBQb3NpdGlvbk1vbm9tZXJJbmZvIH0gPSB7fSwgcm93Q291bnQ6IG51bWJlciA9IDAsIHN1bUZvckhlaWdodENhbGM6IG51bWJlciA9IDApIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuZnJlcSA9IGZyZXE7XG4gICAgdGhpcy5yb3dDb3VudCA9IHJvd0NvdW50O1xuICAgIHRoaXMuc3VtRm9ySGVpZ2h0Q2FsYyA9IHN1bUZvckhlaWdodENhbGM7XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgV2ViTG9nbyBleHRlbmRzIERHLkpzVmlld2VyIHtcbiAgcHVibGljIHN0YXRpYyByZXNpZHVlc1NldCA9ICdudWNsZW90aWRlcyc7XG4gIHByaXZhdGUgc3RhdGljIHZpZXdlckNvdW50OiBudW1iZXIgPSAtMTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdlcklkOiBudW1iZXIgPSAtMTtcbiAgcHJpdmF0ZSB1bml0c0hhbmRsZXI6IFVuaXRzSGFuZGxlciB8IG51bGw7XG4gIHByaXZhdGUgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBwcml2YXRlIHJlYWRvbmx5IGNvbG9yU2NoZW1lOiBDb2xvclNjaGVtZSA9IENvbG9yU2NoZW1lc1tOdWNsZW90aWRlc1dlYkxvZ28ucmVzaWR1ZXNTZXRdO1xuICBwcm90ZWN0ZWQgY3A6IFNlcVBhbGV0dGUgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIGhvc3Q/OiBIVE1MRGl2RWxlbWVudDtcbiAgcHJpdmF0ZSBtc2dIb3N0PzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgcHJpdmF0ZSBzbGlkZXI6IERHLlJhbmdlU2xpZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHRleHRCYXNlbGluZTogQ2FudmFzVGV4dEJhc2VsaW5lO1xuXG4gIHByaXZhdGUgYXhpc0hlaWdodDogbnVtYmVyID0gMTI7XG5cbiAgcHJpdmF0ZSBzZXFDb2w6IERHLkNvbHVtbjxzdHJpbmc+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3BsaXR0ZXI6IFNwbGl0dGVyRnVuYyB8IG51bGwgPSBudWxsO1xuICAvLyBwcml2YXRlIG1heExlbmd0aDogbnVtYmVyID0gMTAwO1xuICBwcml2YXRlIHBvc2l0aW9uczogUG9zaXRpb25JbmZvW10gPSBbXTtcblxuICBwcml2YXRlIHJvd3NNYXNrZWQ6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgcm93c051bGw6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgdmlzaWJsZVNsaWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGFsbG93UmVzaXplOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBjdXJyZW50UmFuZ2U6IG51bWJlciA9IDA7XG5cbiAgLy8gVmlld2VyJ3MgcHJvcGVydGllcyAobGlrZWx5IHRoZXkgc2hvdWxkIGJlIHB1YmxpYyBzbyB0aGF0IHRoZXkgY2FuIGJlIHNldCBvdXRzaWRlKVxuICBwcml2YXRlIF9wb3NpdGlvbldpZHRoOiBudW1iZXI7XG4gIHB1YmxpYyBwb3NpdGlvbldpZHRoOiBudW1iZXI7XG4gIHB1YmxpYyBtaW5IZWlnaHQ6IG51bWJlcjtcbiAgcHVibGljIGJhY2tncm91bmRDb2xvcjogbnVtYmVyID0gMHhGRkZGRkZGRjtcbiAgcHVibGljIG1heEhlaWdodDogbnVtYmVyO1xuICBwdWJsaWMgc2tpcEVtcHR5U2VxdWVuY2VzOiBib29sZWFuO1xuICBwdWJsaWMgc2VxdWVuY2VDb2x1bW5OYW1lOiBzdHJpbmcgfCBudWxsO1xuICBwdWJsaWMgcG9zaXRpb25NYXJnaW5TdGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgcG9zaXRpb25NYXJnaW46IG51bWJlciA9IDA7XG4gIHB1YmxpYyBzdGFydFBvc2l0aW9uTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHVibGljIGVuZFBvc2l0aW9uTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHVibGljIGZpeFdpZHRoOiBib29sZWFuO1xuICBwdWJsaWMgdmVydGljYWxBbGlnbm1lbnQ6IHN0cmluZyB8IG51bGw7XG4gIHB1YmxpYyBob3Jpem9udGFsQWxpZ25tZW50OiBzdHJpbmcgfCBudWxsO1xuICBwdWJsaWMgZml0QXJlYTogYm9vbGVhbjtcbiAgcHVibGljIHNocmlua0VtcHR5VGFpbDogYm9vbGVhbjtcbiAgcHVibGljIHNraXBFbXB0eVBvc2l0aW9uczogYm9vbGVhbjtcbiAgcHVibGljIHBvc2l0aW9uSGVpZ2h0OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBwb3NpdGlvbk5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByaXZhdGUgc3RhcnRQb3NpdGlvbjogbnVtYmVyID0gLTE7XG5cbiAgcHJpdmF0ZSBlbmRQb3NpdGlvbjogbnVtYmVyID0gLTE7XG5cbiAgLyoqIEZvciBzdGFydFBvc2l0aW9uIGVxdWFscyB0byBlbmRQb3NpdGlvbiBMZW5ndGggaXMgMSAqL1xuICBwcml2YXRlIGdldCBMZW5ndGgoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5za2lwRW1wdHlQb3NpdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9ucy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXJ0UG9zaXRpb24gPD0gdGhpcy5lbmRQb3NpdGlvbiA/IHRoaXMuZW5kUG9zaXRpb24gLSB0aGlzLnN0YXJ0UG9zaXRpb24gKyAxIDogMDtcbiAgfVxuXG4gIC8qKiBDYWxjdWxhdGUgbmV3IHBvc2l0aW9uIGRhdGEgYmFzaWMgb24ge0BsaW5rIHBvc2l0aW9uTWFyZ2luU3RhdGV9IGFuZCB7QGxpbmsgcG9zaXRpb25NYXJnaW59ICovXG4gIHByaXZhdGUgZ2V0IHBvc2l0aW9uV2lkdGhXaXRoTWFyZ2luKCkge1xuICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbldpZHRoICsgdGhpcy5wb3NpdGlvbk1hcmdpblZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcG9zaXRpb25NYXJnaW5WYWx1ZSgpIHtcbiAgICBpZiAoKHRoaXMucG9zaXRpb25NYXJnaW5TdGF0ZSA9PT0gJ2F1dG8nKSAmJiAodGhpcy51bml0c0hhbmRsZXI/LmdldEFscGhhYmV0SXNNdWx0aWNoYXIoKSA9PT0gdHJ1ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uTWFyZ2luO1xuICAgIH1cbiAgICBpZiAodGhpcy5wb3NpdGlvbk1hcmdpblN0YXRlID09PSAnZW5hYmxlJykge1xuICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb25NYXJnaW47XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKiogQ291bnQgb2YgcG9zaXRpb24gcmVuZGVyZWQgZm9yIGNhbGN1bGF0aW9ucyBjb3VudE9mUmVuZGVyUG9zaXRpb25zICovXG4gIHByaXZhdGUgZ2V0IGNvdW50T2ZSZW5kZXJQb3NpdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaG9zdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdC5jbGllbnRXaWR0aCAvIHRoaXMucG9zaXRpb25XaWR0aFdpdGhNYXJnaW47XG4gIH1cblxuICAvKiogUG9zaXRpb24gb2Ygc3RhcnQgcmVuZGVyaW5nICovXG4gIHByaXZhdGUgZ2V0IGZpcnN0VmlzaWJsZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLnZpc2libGVTbGlkZXIpID8gTWF0aC5mbG9vcih0aGlzLnNsaWRlci5taW4pIDogMDtcbiAgfVxuXG4gIHByaXZhdGUgdmlld1N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMudmlld2VySWQgPSBXZWJMb2dvLnZpZXdlckNvdW50O1xuICAgIFdlYkxvZ28udmlld2VyQ291bnQgKz0gMTtcblxuICAgIHRoaXMudGV4dEJhc2VsaW5lID0gJ3RvcCc7XG4gICAgdGhpcy51bml0c0hhbmRsZXIgPSBudWxsO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmludCgnYmFja2dyb3VuZENvbG9yJywgMHhGRkZGRkZGRik7XG4gICAgdGhpcy5fcG9zaXRpb25XaWR0aCA9IHRoaXMucG9zaXRpb25XaWR0aCA9IHRoaXMuZmxvYXQoJ3Bvc2l0aW9uV2lkdGgnLCAxNi8qLFxuICAgICAge2VkaXRvcjogJ3NsaWRlcicsIG1pbjogNCwgbWF4OiA2NCwgcG9zdGZpeDogJ3B4J30qLyk7XG4gICAgdGhpcy5taW5IZWlnaHQgPSB0aGlzLmZsb2F0KCdtaW5IZWlnaHQnLCA1MC8qLFxuICAgICAge2VkaXRvcjogJ3NsaWRlcicsIG1pbjogMjUsIG1heDogMjUwLCBwb3N0Zml4OiAncHgnfSovKTtcbiAgICB0aGlzLm1heEhlaWdodCA9IHRoaXMuZmxvYXQoJ21heEhlaWdodCcsIDEwMC8qLFxuICAgICAge2VkaXRvcjogJ3NsaWRlcicsIG1pbjogMjUsIG1heDogNTAwLCBwb3N0Zml4OiAncHgnfSovKTtcblxuICAgIHRoaXMuc2tpcEVtcHR5U2VxdWVuY2VzID0gdGhpcy5ib29sKCdza2lwRW1wdHlTZXF1ZW5jZXMnLCB0cnVlKTtcbiAgICB0aGlzLnNlcXVlbmNlQ29sdW1uTmFtZSA9IHRoaXMuc3RyaW5nKCdzZXF1ZW5jZUNvbHVtbk5hbWUnLCBudWxsKTtcblxuICAgIHRoaXMuc3RhcnRQb3NpdGlvbk5hbWUgPSB0aGlzLnN0cmluZygnc3RhcnRQb3NpdGlvbk5hbWUnLCBudWxsKTtcbiAgICB0aGlzLmVuZFBvc2l0aW9uTmFtZSA9IHRoaXMuc3RyaW5nKCdlbmRQb3NpdGlvbk5hbWUnLCBudWxsKTtcblxuICAgIHRoaXMuZml4V2lkdGggPSB0aGlzLmJvb2woJ2ZpeFdpZHRoJywgZmFsc2UpO1xuXG4gICAgdGhpcy52ZXJ0aWNhbEFsaWdubWVudCA9IHRoaXMuc3RyaW5nKCd2ZXJ0aWNhbEFsaWdubWVudCcsICdtaWRkbGUnLFxuICAgICAge2Nob2ljZXM6IFsndG9wJywgJ21pZGRsZScsICdib3R0b20nXX0pO1xuICAgIHRoaXMuaG9yaXpvbnRhbEFsaWdubWVudCA9IHRoaXMuc3RyaW5nKCdob3Jpem9udGFsQWxpZ25tZW50JywgJ2NlbnRlcicsXG4gICAgICB7Y2hvaWNlczogWydsZWZ0JywgJ2NlbnRlcicsICdyaWdodCddfSk7XG4gICAgdGhpcy5maXRBcmVhID0gdGhpcy5ib29sKCdmaXRBcmVhJywgdHJ1ZSk7XG4gICAgdGhpcy5zaHJpbmtFbXB0eVRhaWwgPSB0aGlzLmJvb2woJ3Nocmlua0VtcHR5VGFpbCcsIHRydWUpO1xuICAgIHRoaXMuc2tpcEVtcHR5UG9zaXRpb25zID0gdGhpcy5ib29sKCdza2lwRW1wdHlQb3NpdGlvbnMnLCBmYWxzZSk7XG4gICAgdGhpcy5wb3NpdGlvbk1hcmdpblN0YXRlID0gdGhpcy5zdHJpbmcoJ3Bvc2l0aW9uTWFyZ2luU3RhdGUnLCAnYXV0bycsXG4gICAgICB7Y2hvaWNlczogWydhdXRvJywgJ2VuYWJsZScsICdvZmYnXX0pO1xuICAgIGxldCBkZWZhdWx0VmFsdWVGb3JQb3NpdGlvbk1hcmdpbiA9IDA7XG4gICAgaWYgKHRoaXMucG9zaXRpb25NYXJnaW5TdGF0ZSA9PT0gJ2F1dG8nKSB7XG4gICAgICBkZWZhdWx0VmFsdWVGb3JQb3NpdGlvbk1hcmdpbiA9IDQ7XG4gICAgfVxuICAgIHRoaXMucG9zaXRpb25NYXJnaW4gPSB0aGlzLmludCgncG9zaXRpb25NYXJnaW4nLCBkZWZhdWx0VmFsdWVGb3JQb3NpdGlvbk1hcmdpbiwge21pbjogMCwgbWF4OiAxNn0pO1xuICAgIHRoaXMucG9zaXRpb25IZWlnaHQgPSB0aGlzLnN0cmluZygncG9zaXRpb25IZWlnaHQnLCBQb3NpdGlvbkhlaWdodC5mdWxsLCB7Y2hvaWNlczogW1Bvc2l0aW9uSGVpZ2h0LmZ1bGwsIFBvc2l0aW9uSGVpZ2h0LkVudHJvcHldfSk7XG5cbiAgICBjb25zdCBzdHlsZTogU2xpZGVyT3B0aW9ucyA9IHtzdHlsZTogJ2JhcmJlbGwnfTtcbiAgICB0aGlzLnNsaWRlciA9IHVpLnJhbmdlU2xpZGVyKDAsIDEwMCwgMCwgMjAsIGZhbHNlLCBzdHlsZSk7XG4gICAgdGhpcy5jYW52YXMgPSB1aS5jYW52YXMoKTtcbiAgICB0aGlzLmNhbnZhcy5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgY29uc29sZS5lcnJvcignV2ViTG9nbyBzZWNvbmQgaW5pdGlhbGl6YXRpb24hJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5oZWxwVXJsID0gJy9oZWxwL3Zpc3VhbGl6ZS92aWV3ZXJzL3dlYi1sb2dvLm1kJztcblxuICAgIHRoaXMubXNnSG9zdCA9IHVpLmRpdignTm8gbWVzc2FnZScpO1xuICAgIHRoaXMubXNnSG9zdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgdGhpcy5jYW52YXMgPSB1aS5jYW52YXMoKTtcbiAgICB0aGlzLmNhbnZhcy5zdHlsZS53aWR0aCA9ICcxMDAlJztcblxuICAgIC8vdGhpcy5zbGlkZXIuc2V0U2hvd0hhbmRsZXMoZmFsc2UpO1xuICAgIHRoaXMuc2xpZGVyLnJvb3Quc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHRoaXMuc2xpZGVyLnJvb3Quc3R5bGUuekluZGV4ID0gJzk5OSc7XG4gICAgdGhpcy5zbGlkZXIucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIHRoaXMuc2xpZGVyLnJvb3Quc3R5bGUuaGVpZ2h0ID0gJzAuN2VtJztcblxuICAgIHRoaXMudmlzaWJsZVNsaWRlciA9IGZhbHNlO1xuXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcztcbiAgICB0aGlzLnNsaWRlci5vblZhbHVlc0NoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmIChwYXJlbnQuc2xpZGVyID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKChwYXJlbnQuYWxsb3dSZXNpemUpICYmIChwYXJlbnQuc2xpZGVyLm1heCAtIHBhcmVudC5zbGlkZXIubWluICE9IHBhcmVudC5jdXJyZW50UmFuZ2UpICYmIChwYXJlbnQuc2xpZGVyLm1heCAtIHBhcmVudC5zbGlkZXIubWluIDwgcGFyZW50Lkxlbmd0aCkpIHtcbiAgICAgICAgY29uc3Qgd2lkdGhTbGlkZXIgPSBwYXJlbnQuc2xpZGVyLm1heCAtIHBhcmVudC5zbGlkZXIubWluICsgMTtcbiAgICAgICAgY29uc3QgeFNjYWxlOiBudW1iZXIgPSAocGFyZW50LnJvb3QuY2xpZW50V2lkdGggLSB3aWR0aFNsaWRlciAqIHBhcmVudC5wb3NpdGlvbk1hcmdpblZhbHVlKSAvICh3aWR0aFNsaWRlciAqIHBhcmVudC5fcG9zaXRpb25XaWR0aCk7XG4gICAgICAgIHBhcmVudC5fcG9zaXRpb25XaWR0aCA9IHBhcmVudC5fcG9zaXRpb25XaWR0aCAqIHhTY2FsZTtcbiAgICAgICAgcGFyZW50LmN1cnJlbnRSYW5nZSA9IHBhcmVudC5zbGlkZXIubWF4IC0gcGFyZW50LnNsaWRlci5taW4gKyAxO1xuICAgICAgfVxuICAgICAgcGFyZW50LnJlbmRlcih0cnVlKTtcbiAgICB9KTtcblxuXG4gICAgdGhpcy5ob3N0ID0gdWkuZGl2KFt0aGlzLm1zZ0hvc3QsIHRoaXMuY2FudmFzXSk7XG5cbiAgICB0aGlzLmhvc3Quc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcbiAgICB0aGlzLmhvc3Quc3R5bGUuYWxpZ25JdGVtcyA9ICdjZW50ZXInO1xuICAgIHRoaXMuaG9zdC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdvdmVyZmxvdycsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG5cbiAgICBjb25zdCBnZXRNb25vbWVyID0gKHA6IERHLlBvaW50KTogW251bWJlciwgc3RyaW5nIHwgbnVsbCwgUG9zaXRpb25Nb25vbWVySW5mbyB8IG51bGxdID0+IHtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRYID0gcC54ICsgdGhpcy5maXJzdFZpc2libGVJbmRleCAqIHRoaXMucG9zaXRpb25XaWR0aFdpdGhNYXJnaW47XG4gICAgICBjb25zdCBqUG9zID0gTWF0aC5mbG9vcihwLnggLyB0aGlzLnBvc2l0aW9uV2lkdGhXaXRoTWFyZ2luICsgdGhpcy5maXJzdFZpc2libGVJbmRleCk7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb25zW2pQb3NdO1xuXG4gICAgICBpZiAocG9zaXRpb24gPT09IHZvaWQgMClcbiAgICAgICAgcmV0dXJuIFtqUG9zLCBudWxsLCBudWxsXTtcblxuICAgICAgY29uc3QgbW9ub21lcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gT2JqZWN0LmtleXMocG9zaXRpb24uZnJlcSlcbiAgICAgICAgLmZpbmQoKG0pID0+IHBvc2l0aW9uLmZyZXFbbV0uYm91bmRzLmNvbnRhaW5zKGNhbGN1bGF0ZWRYLCBwLnkpKTtcbiAgICAgIGlmIChtb25vbWVyID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBbalBvcywgbnVsbCwgbnVsbF07XG5cbiAgICAgIHJldHVybiBbalBvcywgbW9ub21lciwgcG9zaXRpb24uZnJlcVttb25vbWVyXV07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvcnJlY3RNb25vbWVyRmlsdGVyID0gKGlSb3c6IG51bWJlciwgbW9ub21lcjogc3RyaW5nLCBqUG9zOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHNlcSA9IHRoaXMuc2VxQ29sIS5nZXQoaVJvdyk7XG4gICAgICBjb25zdCBzZXFNID0gc2VxID8gdGhpcy5zcGxpdHRlciEoc2VxKVt0aGlzLnN0YXJ0UG9zaXRpb24gKyBqUG9zXSA6IG51bGw7XG4gICAgICByZXR1cm4gKChzZXFNID09PSBtb25vbWVyKSB8fCAoc2VxTSA9PT0gJycgJiYgbW9ub21lciA9PT0gJy0nKSkgJiYgdGhpcy5kYXRhRnJhbWUuZmlsdGVyLmdldChpUm93KTtcbiAgICB9O1xuXG4gICAgcnhqcy5mcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdtb3VzZW1vdmUnKS5zdWJzY3JpYmUoKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBlIGFzIE1vdXNlRXZlbnQ7XG5cbiAgICAgIGNvbnN0IHI6IG51bWJlciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgY29uc3QgY3Vyc29yUDogREcuUG9pbnQgPSB0aGlzLmNhbnZhcy5nZXRDdXJzb3JQb3NpdGlvbihhcmdzLCByKTtcbiAgICAgIGNvbnN0IFtqUG9zLCBtb25vbWVyXSA9IGdldE1vbm9tZXIoY3Vyc29yUCk7XG4gICAgICBpZiAodGhpcy5kYXRhRnJhbWUgJiYgdGhpcy5zZXFDb2wgJiYgdGhpcy5zcGxpdHRlciAmJiBtb25vbWVyKSB7XG4gICAgICAgIGNvbnN0IHJvd0NvdW50ID0gd3UuY291bnQoKS50YWtlKHRoaXMuZGF0YUZyYW1lLnJvd0NvdW50KS5maWx0ZXIoZnVuY3Rpb24oaVJvdykge1xuICAgICAgICAgIHJldHVybiBjb3JyZWN0TW9ub21lckZpbHRlcihpUm93LCBtb25vbWVyLCBqUG9zKTtcbiAgICAgICAgfSkucmVkdWNlPG51bWJlcj4oKGNvdW50LCBpUm93KSA9PiBjb3VudCArIDEsIDApO1xuICAgICAgICB1aS50b29sdGlwLnNob3codWkuZGl2KFt1aS5kaXYoYCR7bW9ub21lcn1gKSwgdWkuZGl2KGAke3Jvd0NvdW50fSByb3dzYCldKSwgYXJncy54ICsgMTYsIGFyZ3MueSArIDE2KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVpLnRvb2x0aXAuaGlkZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcnhqcy5mcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdtb3VzZWRvd24nKS5zdWJzY3JpYmUoKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBlIGFzIE1vdXNlRXZlbnQ7XG4gICAgICBjb25zdCByOiBudW1iZXIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgIGNvbnN0IFtqUG9zLCBtb25vbWVyXSA9IGdldE1vbm9tZXIodGhpcy5jYW52YXMuZ2V0Q3Vyc29yUG9zaXRpb24oYXJncywgcikpO1xuXG4gICAgICAvLyBwcmV2ZW50cyBkZXNlbGVjdCBhbGwgcm93cyBpZiB3ZSBtaXNzIG1vbm9tZXIgYm91bmRzXG4gICAgICBpZiAodGhpcy5kYXRhRnJhbWUgJiYgdGhpcy5zZXFDb2wgJiYgdGhpcy5zcGxpdHRlciAmJiBtb25vbWVyKSB7XG4gICAgICAgIHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi5pbml0KGZ1bmN0aW9uKGlSb3cpIHtcbiAgICAgICAgICByZXR1cm4gY29ycmVjdE1vbm9tZXJGaWx0ZXIoaVJvdywgbW9ub21lciwgalBvcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcnhqcy5mcm9tRXZlbnQ8V2hlZWxFdmVudD4odGhpcy5jYW52YXMsICd3aGVlbCcpLnN1YnNjcmliZSgoZTogV2hlZWxFdmVudCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnZpc2libGVTbGlkZXIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IGNvdW50T2ZTY3JvbGxQb3NpdGlvbnMgPSAoZS5kZWx0YVkgLyAxMDApICogTWF0aC5tYXgoTWF0aC5mbG9vcigodGhpcy5jb3VudE9mUmVuZGVyUG9zaXRpb25zKSAvIDIpLCAxKTtcbiAgICAgIHRoaXMuc2xpZGVyLnNjcm9sbEJ5KHRoaXMuc2xpZGVyLm1pbiArIGNvdW50T2ZTY3JvbGxQb3NpdGlvbnMpO1xuXG4gICAgfSk7XG5cbiAgICB0aGlzLnZpZXdTdWJzLnB1c2godWkub25TaXplQ2hhbmdlZCh0aGlzLnJvb3QpLnN1YnNjcmliZSh0aGlzLnJvb3RPblNpemVDaGFuZ2VkLmJpbmQodGhpcykpKTtcblxuICAgIHRoaXMucm9vdC5hcHBlbmQodGhpcy5ob3N0KTtcbiAgICB0aGlzLnJvb3QuYXBwZW5kKHRoaXMuc2xpZGVyLnJvb3QpO1xuXG4gICAgdGhpcy5fY2FsY3VsYXRlKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTtcbiAgICB0aGlzLnNldFNsaWRlcigpO1xuICAgIHRoaXMucmVuZGVyKGZhbHNlKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVyIG9mIGNoYW5naW5nIHNpemUgV2ViTG9nbyAqL1xuICBwcml2YXRlIHJvb3RPblNpemVDaGFuZ2VkKCk6IHZvaWQge1xuICAgIHRoaXMuX2NhbGN1bGF0ZSh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyk7XG4gICAgdGhpcy5zZXRTbGlkZXIoKTtcbiAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgfVxuXG4gIC8qKiBBc3NpZ25zIHtAbGluayBzZXFDb2x9IGFuZCB7QGxpbmsgY3B9IGJhc2VkIG9uIHtAbGluayBzZXF1ZW5jZUNvbHVtbk5hbWV9IGFuZCBjYWxscyB7QGxpbmsgcmVuZGVyfSgpLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVTZXFDb2woKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YUZyYW1lKSB7XG4gICAgICB0aGlzLnNlcUNvbCA9IHRoaXMuc2VxdWVuY2VDb2x1bW5OYW1lID8gdGhpcy5kYXRhRnJhbWUuY29sKHRoaXMuc2VxdWVuY2VDb2x1bW5OYW1lKSA6IG51bGw7XG4gICAgICBpZiAodGhpcy5zZXFDb2wgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNlcUNvbCA9IFdlYkxvZ28ucGlja1VwU2VxQ29sKHRoaXMuZGF0YUZyYW1lKTtcbiAgICAgICAgdGhpcy5zZXF1ZW5jZUNvbHVtbk5hbWUgPSB0aGlzLnNlcUNvbCA/IHRoaXMuc2VxQ29sLm5hbWUgOiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VxQ29sKSB7XG4gICAgICAgIGNvbnN0IHVuaXRzOiBzdHJpbmcgPSB0aGlzLnNlcUNvbCEuZ2V0VGFnKERHLlRBR1MuVU5JVFMpO1xuICAgICAgICBjb25zdCBzZXBhcmF0b3I6IHN0cmluZyA9IHRoaXMuc2VxQ29sIS5nZXRUYWcoVW5pdHNIYW5kbGVyLlRBR1Muc2VwYXJhdG9yKTtcbiAgICAgICAgdGhpcy5zcGxpdHRlciA9IFdlYkxvZ28uZ2V0U3BsaXR0ZXIodW5pdHMsIHNlcGFyYXRvcik7XG4gICAgICAgIHRoaXMudW5pdHNIYW5kbGVyID0gbmV3IFVuaXRzSGFuZGxlcih0aGlzLnNlcUNvbCk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnMoKTtcbiAgICAgICAgdGhpcy5jcCA9IFdlYkxvZ28ucGlja1VwUGFsZXR0ZSh0aGlzLnNlcUNvbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNwbGl0dGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbk5hbWVzID0gW107XG4gICAgICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IC0xO1xuICAgICAgICB0aGlzLmVuZFBvc2l0aW9uID0gLTE7XG4gICAgICAgIHRoaXMuY3AgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgLyoqIFVwZGF0ZXMge0BsaW5rIHBvc2l0aW9uTmFtZXN9IGFuZCBjYWxjdWxhdGVzIHtAbGluayBzdGFydFBvc2l0aW9ufSBhbmQge0BsaW5rIGVuZFBvc2l0aW9ufS5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlUG9zaXRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZXFDb2wpXG4gICAgICByZXR1cm47XG5cbiAgICBsZXQgY2F0ZWdvcmllczogKHN0cmluZyB8IG51bGwpIFtdO1xuICAgIGlmICh0aGlzLnNocmlua0VtcHR5VGFpbCkge1xuICAgICAgY29uc3QgaW5kaWNlczogSW50MzJBcnJheSA9IHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXRTZWxlY3RlZEluZGV4ZXMoKTtcbiAgICAgIGNhdGVnb3JpZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoXG4gICAgICAgIEFycmF5LmZyb20oQXJyYXkoaW5kaWNlcy5sZW5ndGgpLmtleXMoKSkubWFwKChpOiBudW1iZXIpID0+IHRoaXMuc2VxQ29sIS5nZXQoaW5kaWNlc1tpXSkpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhdGVnb3JpZXMgPSB0aGlzLnNlcUNvbC5jYXRlZ29yaWVzO1xuICAgIH1cbiAgICBjb25zdCBtYXhMZW5ndGggPSBjYXRlZ29yaWVzLmxlbmd0aCA+IDAgPyBNYXRoLm1heCguLi5jYXRlZ29yaWVzLm1hcChcbiAgICAgIChzKSA9PiBzICE9PSBudWxsID8gdGhpcy5zcGxpdHRlciEocykubGVuZ3RoIDogMCkpIDogMDtcblxuICAgIC8vIEdldCBwb3NpdGlvbiBuYW1lcyBmcm9tIGRhdGEgY29sdW1uIHRhZyAncG9zaXRpb25OYW1lcydcbiAgICBjb25zdCBwb3NpdGlvbk5hbWVzVHh0ID0gdGhpcy5zZXFDb2wuZ2V0VGFnKCdwb3NpdGlvbk5hbWVzJyk7XG4gICAgLy8gRmFsbGJhY2sgaWYgJ3Bvc2l0aW9uTmFtZXMnIHRhZyBpcyBub3QgcHJvdmlkZWRcbiAgICB0aGlzLnBvc2l0aW9uTmFtZXMgPSBwb3NpdGlvbk5hbWVzVHh0ID8gcG9zaXRpb25OYW1lc1R4dC5zcGxpdCgnLCAnKS5tYXAoKG4pID0+IG4udHJpbSgpKSA6XG4gICAgICBbLi4uQXJyYXkobWF4TGVuZ3RoKS5rZXlzKCldLm1hcCgoalBvcykgPT4gYCR7alBvcyArIDF9YCk7XG5cbiAgICB0aGlzLnN0YXJ0UG9zaXRpb24gPSAodGhpcy5zdGFydFBvc2l0aW9uTmFtZSAmJiB0aGlzLnBvc2l0aW9uTmFtZXMgJiZcbiAgICAgIHRoaXMucG9zaXRpb25OYW1lcy5pbmNsdWRlcyh0aGlzLnN0YXJ0UG9zaXRpb25OYW1lKSkgP1xuICAgICAgdGhpcy5wb3NpdGlvbk5hbWVzLmluZGV4T2YodGhpcy5zdGFydFBvc2l0aW9uTmFtZSkgOiAwO1xuICAgIHRoaXMuZW5kUG9zaXRpb24gPSAodGhpcy5lbmRQb3NpdGlvbk5hbWUgJiYgdGhpcy5wb3NpdGlvbk5hbWVzICYmXG4gICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5jbHVkZXModGhpcy5lbmRQb3NpdGlvbk5hbWUpKSA/XG4gICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5kZXhPZih0aGlzLmVuZFBvc2l0aW9uTmFtZSkgOiAobWF4TGVuZ3RoIC0gMSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSXNIaWRlU2xpZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpeFdpZHRoIHx8IE1hdGguZmxvb3IodGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnBvc2l0aW9uV2lkdGhXaXRoTWFyZ2luKSA+PSB0aGlzLkxlbmd0aDtcbiAgfVxuXG4gIHNldFNsaWRlclZpc2liaWxpdHkodmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICB0aGlzLnNsaWRlci5yb290LnN0eWxlLmRpc3BsYXkgPSAnaW5oZXJpdCc7XG4gICAgICB0aGlzLnZpc2libGVTbGlkZXIgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNsaWRlci5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB0aGlzLnZpc2libGVTbGlkZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogU2V0cyB7QGxpbmsgc2xpZGVyfSwgbmVlZGVkIHRvIHNldCBzbGlkZXIgb3B0aW9ucyBhbmQgdG8gdXBkYXRlIHNsaWRlciBwb3NpdGlvbi5cbiAgICovXG4gIHByaXZhdGUgc2V0U2xpZGVyKCk6IHZvaWQge1xuICAgIGlmICgodGhpcy5zbGlkZXIgIT0gbnVsbCkgJiYgKHRoaXMuY2FudmFzICE9IG51bGwpKSB7XG4gICAgICBsZXQgZGlmZkVuZFNjcm9sbEFuZFNsaWRlck1pbiA9IE1hdGguZmxvb3IodGhpcy5zbGlkZXIubWluICsgdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnBvc2l0aW9uV2lkdGhXaXRoTWFyZ2luKSAtIHRoaXMuTGVuZ3RoO1xuICAgICAgZGlmZkVuZFNjcm9sbEFuZFNsaWRlck1pbiA9IGRpZmZFbmRTY3JvbGxBbmRTbGlkZXJNaW4gPiAwID8gZGlmZkVuZFNjcm9sbEFuZFNsaWRlck1pbiA6IDA7XG4gICAgICBsZXQgbmV3TWluID0gTWF0aC5mbG9vcih0aGlzLnNsaWRlci5taW4gLSBkaWZmRW5kU2Nyb2xsQW5kU2xpZGVyTWluKTtcbiAgICAgIGxldCBuZXdNYXggPSBNYXRoLmZsb29yKHRoaXMuc2xpZGVyLm1pbiAtIGRpZmZFbmRTY3JvbGxBbmRTbGlkZXJNaW4pICsgTWF0aC5mbG9vcih0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucG9zaXRpb25XaWR0aFdpdGhNYXJnaW4pO1xuICAgICAgaWYgKHRoaXMuY2hlY2tJc0hpZGVTbGlkZXIoKSkge1xuICAgICAgICBuZXdNaW4gPSAwO1xuICAgICAgICBuZXdNYXggPSB0aGlzLkxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICB0aGlzLnNsaWRlci5zZXRWYWx1ZXMoMCwgdGhpcy5MZW5ndGgsXG4gICAgICAgIG5ld01pbiwgbmV3TWF4KTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKiBIYW5kbGVyIG9mIHByb3BlcnR5IGNoYW5nZSBldmVudHMuICovXG4gIHB1YmxpYyBvdmVycmlkZSBvblByb3BlcnR5Q2hhbmdlZChwcm9wZXJ0eTogREcuUHJvcGVydHkpOiB2b2lkIHtcbiAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlZChwcm9wZXJ0eSk7XG5cbiAgICBzd2l0Y2ggKHByb3BlcnR5Lm5hbWUpIHtcbiAgICBjYXNlICdzZXF1ZW5jZUNvbHVtbk5hbWUnOlxuICAgICAgdGhpcy51cGRhdGVTZXFDb2woKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3N0YXJ0UG9zaXRpb25OYW1lJzpcbiAgICAgIHRoaXMudXBkYXRlU2VxQ29sKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmRQb3NpdGlvbk5hbWUnOlxuICAgICAgdGhpcy51cGRhdGVTZXFDb2woKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Bvc2l0aW9uV2lkdGgnOlxuICAgICAgdGhpcy5fcG9zaXRpb25XaWR0aCA9IHRoaXMucG9zaXRpb25XaWR0aDtcbiAgICAgIHRoaXMuc2V0U2xpZGVyKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaXhXaWR0aCc6XG4gICAgICB0aGlzLnNldFNsaWRlcigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZml0QXJlYSc6XG4gICAgICB0aGlzLnNldFNsaWRlcigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2hyaW5rRW1wdHlUYWlsJzpcbiAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdza2lwRW1wdHlQb3NpdGlvbnMnOlxuICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnMoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Bvc2l0aW9uTWFyZ2luJzpcbiAgICAgIHRoaXMuc2V0U2xpZGVyKCk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgfVxuXG4gIC8qKiBBZGQgZmlsdGVyIGhhbmRsZXJzIHdoZW4gdGFibGUgaXMgYSBhdHRhY2hlZCAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9uVGFibGVBdHRhY2hlZCgpIHtcbiAgICBzdXBlci5vblRhYmxlQXR0YWNoZWQoKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhRnJhbWVUeHQ6IHN0cmluZyA9IHRoaXMuZGF0YUZyYW1lID8gJ2RhdGEnIDogJ251bGwnO1xuICAgICAgY29uc29sZS5kZWJ1ZyhgYmlvOiBXZWJMb2dvPCR7dGhpcy52aWV3ZXJJZH0+Lm9uVGFibGVBdHRhY2hlZCggZGF0YUZyYW1lID0gJHtkYXRhRnJhbWVUeHR9ICkgc3RhcnRgKTtcblxuICAgICAgdGhpcy51cGRhdGVTZXFDb2woKTtcblxuICAgICAgaWYgKHRoaXMuZGF0YUZyYW1lICE9PSB2b2lkIDApIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2godGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLm9uQ2hhbmdlZC5zdWJzY3JpYmUoKF8pID0+IHRoaXMucmVuZGVyKCkpKTtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2godGhpcy5kYXRhRnJhbWUuZmlsdGVyLm9uQ2hhbmdlZC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9ucygpO1xuICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICBjb25zb2xlLmRlYnVnKGBiaW86IFdlYkxvZ288JHt0aGlzLnZpZXdlcklkfT4ub25UYWJsZUF0dGFjaGVkKCkgZW5kYCk7XG4gICAgfSwgMCAvKiBuZXh0IGV2ZW50IGN5Y2xlICovKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgYWxsIGhhbmRsZXJzIHdoZW4gdGFibGUgaXMgYSBkZXRhY2ggICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBkZXRhY2goKSB7XG4gICAgY29uc3QgZGF0YUZyYW1lVHh0ID0gYCR7dGhpcy5kYXRhRnJhbWUgPyAnZGF0YScgOiAnbnVsbCd9YDtcbiAgICBjb25zb2xlLmRlYnVnKGBiaW86IFdlYkxvZ288JHt0aGlzLnZpZXdlcklkfT4ub25UYWJsZUF0dGFjaGVkKCBkYXRhRnJhbWUgPSAke2RhdGFGcmFtZVR4dH0gKSBzdGFydGApO1xuICAgIHN1cGVyLmRldGFjaCgpO1xuXG4gICAgdGhpcy52aWV3U3Vicy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLmhvc3QhLnJlbW92ZSgpO1xuICAgIHRoaXMubXNnSG9zdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhvc3QgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgY29uc29sZS5kZWJ1ZyhgYmlvOiBXZWJMb2dvPCR7dGhpcy52aWV3ZXJJZH0+Lm9uVGFibGVBdHRhY2hlZCgpIGVuZGApO1xuICB9XG5cbiAgLyoqIEhlbHBlciBmdW5jdGlvbiBmb3IgcmVuZGVyaW5nICovXG4gIHByb3RlY3RlZCBfbnVsbFNlcXVlbmNlKGZpbGxlclJlc2lkdWUgPSAnWCcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5za2lwRW1wdHlTZXF1ZW5jZXMpXG4gICAgICByZXR1cm4gbmV3IEFycmF5KHRoaXMuTGVuZ3RoKS5maWxsKGZpbGxlclJlc2lkdWUpLmpvaW4oJycpO1xuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLyoqIEhlbHBlciBmdW5jdGlvbiBmb3IgcmVtb3ZlIGVtcHR5IHBvc2l0aW9ucyAqL1xuICAvLyBUT0RPOiB1c2UgdGhpcyBmdW5jdGlvbiBpbiBmcm9tIGNvcmVcbiAgcHJvdGVjdGVkIHJlbW92ZVdoZXJlKGFycmF5OiBBcnJheTxhbnk+LCBwcmVkaWNhdGU6IChUOiBhbnkpID0+IGJvb2xlYW4pOiBBcnJheTxhbnk+IHtcbiAgICBsZXQgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgIGxldCB1cGRhdGVJdGVyYXRvciA9IDA7XG4gICAgZm9yIChsZXQgZGVsZXRlSXRlcmF0b3IgPSAwOyBkZWxldGVJdGVyYXRvciA8IGxlbmd0aDsgZGVsZXRlSXRlcmF0b3IrKykge1xuICAgICAgaWYgKCFwcmVkaWNhdGUoYXJyYXlbZGVsZXRlSXRlcmF0b3JdKSkge1xuICAgICAgICBhcnJheVt1cGRhdGVJdGVyYXRvcl0gPSBhcnJheVtkZWxldGVJdGVyYXRvcl07XG4gICAgICAgIHVwZGF0ZUl0ZXJhdG9yKys7XG4gICAgICB9XG4gICAgfVxuICAgIGFycmF5Lmxlbmd0aCA9IHVwZGF0ZUl0ZXJhdG9yO1xuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG5cbiAgLyoqIEZ1bmN0aW9uIGZvciByZW1vdmluZyBlbXB0eSBwb3NpdGlvbnMgKi9cbiAgcHJvdGVjdGVkIF9yZW1vdmVFbXB0eVBvc2l0aW9ucygpIHtcbiAgICBpZiAodGhpcy5za2lwRW1wdHlQb3NpdGlvbnMpIHtcbiAgICAgIHRoaXMucmVtb3ZlV2hlcmUodGhpcy5wb3NpdGlvbnMsIGl0ZW0gPT4gaXRlbT8uZnJlcVsnLSddPy5jb3VudCA9PT0gaXRlbS5yb3dDb3VudCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9jYWxjdWxhdGUocjogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmhvc3QgfHwgIXRoaXMuc2VxQ29sIHx8ICF0aGlzLmRhdGFGcmFtZSlcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLnVuaXRzSGFuZGxlciA9IG5ldyBVbml0c0hhbmRsZXIodGhpcy5zZXFDb2wpO1xuXG4gICAgdGhpcy5jYWxjU2l6ZSgpO1xuXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBuZXcgQXJyYXkodGhpcy5zdGFydFBvc2l0aW9uIDw9IHRoaXMuZW5kUG9zaXRpb24gPyB0aGlzLmVuZFBvc2l0aW9uIC0gdGhpcy5zdGFydFBvc2l0aW9uICsgMSA6IDApO1xuICAgIGZvciAobGV0IGpQb3MgPSAwOyBqUG9zIDwgdGhpcy5MZW5ndGg7IGpQb3MrKykge1xuICAgICAgY29uc3QgcG9zTmFtZTogc3RyaW5nID0gdGhpcy5wb3NpdGlvbk5hbWVzW3RoaXMuc3RhcnRQb3NpdGlvbiArIGpQb3NdO1xuICAgICAgdGhpcy5wb3NpdGlvbnNbalBvc10gPSBuZXcgUG9zaXRpb25JbmZvKHBvc05hbWUpO1xuICAgIH1cblxuICAgIC8vIDIwMjItMDUtMDUgYXNrYWxraW4gaW5zdHJ1Y3RlZCB0byBzaG93IFdlYkxvZ28gYmFzZWQgb24gZmlsdGVyIChub3Qgc2VsZWN0aW9uKVxuICAgIGNvbnN0IGluZGljZXMgPSB0aGlzLmRhdGFGcmFtZS5maWx0ZXIuZ2V0U2VsZWN0ZWRJbmRleGVzKCk7XG4gICAgLy8gY29uc3QgaW5kaWNlcyA9IHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi50cnVlQ291bnQgPiAwID8gdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLmdldFNlbGVjdGVkSW5kZXhlcygpIDpcbiAgICAvLyAgIHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXRTZWxlY3RlZEluZGV4ZXMoKTtcblxuICAgIHRoaXMucm93c01hc2tlZCA9IGluZGljZXMubGVuZ3RoO1xuICAgIHRoaXMucm93c051bGwgPSAwO1xuXG4gICAgZm9yIChjb25zdCBpIG9mIGluZGljZXMpIHtcbiAgICAgIGxldCBzOiBzdHJpbmcgPSA8c3RyaW5nPih0aGlzLnNlcUNvbC5nZXQoaSkpO1xuXG4gICAgICBpZiAoIXMpIHtcbiAgICAgICAgcyA9IHRoaXMuX251bGxTZXF1ZW5jZSgpO1xuICAgICAgICArK3RoaXMucm93c051bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlcU06IHN0cmluZ1tdID0gdGhpcy5zcGxpdHRlciEocyk7XG4gICAgICBmb3IgKGxldCBqUG9zID0gMDsgalBvcyA8IHRoaXMuTGVuZ3RoOyBqUG9zKyspIHtcbiAgICAgICAgY29uc3QgcG1JbmZvID0gdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcTtcbiAgICAgICAgY29uc3QgbTogc3RyaW5nID0gc2VxTVt0aGlzLnN0YXJ0UG9zaXRpb24gKyBqUG9zXSB8fCAnLSc7XG4gICAgICAgIGlmICghKG0gaW4gcG1JbmZvKSlcbiAgICAgICAgICBwbUluZm9bbV0gPSBuZXcgUG9zaXRpb25Nb25vbWVySW5mbygpO1xuICAgICAgICBwbUluZm9bbV0uY291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyNyZWdpb24gUG9saXNoIGZyZXEgY291bnRzXG4gICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICAvLyBkZWxldGUgdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcVsnLSddO1xuXG4gICAgICB0aGlzLnBvc2l0aW9uc1tqUG9zXS5yb3dDb3VudCA9IDA7XG4gICAgICBmb3IgKGNvbnN0IG0gaW4gdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcSlcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNbalBvc10ucm93Q291bnQgKz0gdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcVttXS5jb3VudDtcbiAgICAgIGlmICh0aGlzLnBvc2l0aW9uSGVpZ2h0ID09IFBvc2l0aW9uSGVpZ2h0LkVudHJvcHkpIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNbalBvc10uc3VtRm9ySGVpZ2h0Q2FsYyA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgbSBpbiB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxKSB7XG4gICAgICAgICAgY29uc3QgcG4gPSB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxW21dLmNvdW50IC8gdGhpcy5wb3NpdGlvbnNbalBvc10ucm93Q291bnQ7XG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnNbalBvc10uc3VtRm9ySGVpZ2h0Q2FsYyArPSAtcG4gKiBNYXRoLmxvZzIocG4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuICAgIHRoaXMuX3JlbW92ZUVtcHR5UG9zaXRpb25zKCk7XG5cbiAgICBjb25zdCBhYnNvbHV0ZU1heEhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAtIHRoaXMuYXhpc0hlaWdodCAqIHI7XG5cbiAgICAvLyNyZWdpb24gQ2FsY3VsYXRlIHNjcmVlblxuICAgIGZvciAobGV0IGpQb3MgPSAwOyBqUG9zIDwgdGhpcy5MZW5ndGg7IGpQb3MrKykge1xuICAgICAgY29uc3QgZnJlcTogeyBbYzogc3RyaW5nXTogUG9zaXRpb25Nb25vbWVySW5mbyB9ID0gdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcTtcbiAgICAgIGNvbnN0IHJvd0NvdW50ID0gdGhpcy5wb3NpdGlvbnNbalBvc10ucm93Q291bnQ7XG4gICAgICBjb25zdCBhbHBoYWJldFNpemUgPSB0aGlzLmdldEFscGhhYmV0U2l6ZSgpO1xuICAgICAgaWYgKCh0aGlzLnBvc2l0aW9uSGVpZ2h0ID09IFBvc2l0aW9uSGVpZ2h0LkVudHJvcHkpICYmIChhbHBoYWJldFNpemUgPT0gbnVsbCkpIHtcbiAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcignV2ViTG9nbzogYWxwaGFiZXQgaXMgdW5kZWZpbmVkLicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXhIZWlnaHQgPSAodGhpcy5wb3NpdGlvbkhlaWdodCA9PSBQb3NpdGlvbkhlaWdodC5FbnRyb3B5KSA/IChhYnNvbHV0ZU1heEhlaWdodCAqIChNYXRoLmxvZzIoYWxwaGFiZXRTaXplKSAtICh0aGlzLnBvc2l0aW9uc1tqUG9zXS5zdW1Gb3JIZWlnaHRDYWxjKSkgLyBNYXRoLmxvZzIoYWxwaGFiZXRTaXplKSkgOiBhYnNvbHV0ZU1heEhlaWdodDtcblxuICAgICAgbGV0IHk6IG51bWJlciA9IHRoaXMuYXhpc0hlaWdodCAqIHIgKyAoYWJzb2x1dGVNYXhIZWlnaHQgLSBtYXhIZWlnaHQgLSAxKTtcblxuICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGZyZXEpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGFbMF0gIT09ICctJyAmJiBiWzBdICE9PSAnLScpXG4gICAgICAgICAgcmV0dXJuIGJbMV0uY291bnQgLSBhWzFdLmNvdW50O1xuICAgICAgICBlbHNlIGlmIChhWzBdID09PSAnLScgJiYgYlswXSA9PT0gJy0nKVxuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBlbHNlIGlmIChhWzBdID09PSAnLScpXG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICBlbHNlIC8qIChiWzBdID09PSAnLScpICovXG4gICAgICAgICAgcmV0dXJuICsxO1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgY29uc3QgcG1JbmZvOiBQb3NpdGlvbk1vbm9tZXJJbmZvID0gZW50cnlbMV07XG4gICAgICAgIC8vIGNvbnN0IG06IHN0cmluZyA9IGVudHJ5WzBdO1xuICAgICAgICBjb25zdCBoOiBudW1iZXIgPSBtYXhIZWlnaHQgKiBwbUluZm8uY291bnQgLyByb3dDb3VudDtcblxuICAgICAgICBwbUluZm8uYm91bmRzID0gbmV3IERHLlJlY3QoalBvcyAqIHRoaXMucG9zaXRpb25XaWR0aFdpdGhNYXJnaW4sIHksIHRoaXMuX3Bvc2l0aW9uV2lkdGgsIGgpO1xuICAgICAgICB5ICs9IGg7XG4gICAgICB9XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuXG4gIH1cblxuICAvKiogUmVuZGVyIFdlYkxvZ28gc2Vuc2l0aXZlIHRvIGNoYW5nZXMgaW4gcGFyYW1zIG9mIHJlbmRlcmluZ1xuICAgKkBwYXJhbSB7Ym9vbGVhbn0gcmVjYWxjIC0gaW5kaWNhdGVzIHRoYXQgbmVlZCB0byByZWNhbGN1bGF0ZSBkYXRhIGZvciByZW5kZXJpbmdcbiAgICovXG4gIHJlbmRlcihyZWNhbGMgPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMubXNnSG9zdCkge1xuICAgICAgaWYgKHRoaXMuc2VxQ29sICYmICF0aGlzLmNwKSB7XG4gICAgICAgIHRoaXMubXNnSG9zdCEuaW5uZXJUZXh0ID0gYFVua25vd24gcGFsZXR0ZSAoY29sdW1uIHNlbVR5cGU6ICcke3RoaXMuc2VxQ29sLnNlbVR5cGV9JykuYDtcbiAgICAgICAgdGhpcy5tc2dIb3N0IS5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1zZ0hvc3QhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNlcUNvbCB8fCAhdGhpcy5kYXRhRnJhbWUgfHwgIXRoaXMuY3AgfHwgdGhpcy5zdGFydFBvc2l0aW9uID09PSAtMSB8fCB0aGlzLmVuZFBvc2l0aW9uID09PSAtMSB8fCB0aGlzLmhvc3QgPT0gbnVsbCB8fCB0aGlzLnNsaWRlciA9PSBudWxsKVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3QgZyA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgaWYgKCFnKSByZXR1cm47XG5cbiAgICB0aGlzLnNsaWRlci5yb290LnN0eWxlLndpZHRoID0gYCR7dGhpcy5ob3N0LmNsaWVudFdpZHRofXB4YDtcblxuICAgIGNvbnN0IHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcblxuICAgIGlmIChyZWNhbGMpXG4gICAgICB0aGlzLl9jYWxjdWxhdGUocik7XG5cbiAgICBnLnJlc2V0VHJhbnNmb3JtKCk7XG4gICAgZy5maWxsU3R5bGUgPSBERy5Db2xvci50b0h0bWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IpO1xuICAgIGcuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG4gICAgZy50ZXh0QmFzZWxpbmUgPSB0aGlzLnRleHRCYXNlbGluZTtcblxuICAgIGlmICh0aGlzLmNoZWNrSXNIaWRlU2xpZGVyKCkpIHtcbiAgICAgIHRoaXMuc2V0U2xpZGVyVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U2xpZGVyVmlzaWJpbGl0eSh0cnVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhDb3VudE9mUm93c1JlbmRlcmVkID0gdGhpcy5jb3VudE9mUmVuZGVyUG9zaXRpb25zICsgMTtcbiAgICBjb25zdCBmaXJzdFZpc2libGVJbmRleCA9ICh0aGlzLnZpc2libGVTbGlkZXIpID8gTWF0aC5mbG9vcih0aGlzLnNsaWRlci5taW4pIDogMDtcbiAgICBjb25zdCBsYXN0VmlzaWJsZUluZGV4ID0gTWF0aC5taW4odGhpcy5MZW5ndGgsIGZpcnN0VmlzaWJsZUluZGV4ICsgbWF4Q291bnRPZlJvd3NSZW5kZXJlZCk7XG5cbiAgICAvLyNyZWdpb24gUGxvdCBwb3NpdGlvbk5hbWVzXG4gICAgY29uc3QgcG9zaXRpb25Gb250U2l6ZSA9IDEwICogcjtcbiAgICBnLnJlc2V0VHJhbnNmb3JtKCk7XG4gICAgZy5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgIGcudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgZy5mb250ID0gYCR7cG9zaXRpb25Gb250U2l6ZS50b0ZpeGVkKDEpfXB4IFJvYm90bywgUm9ib3RvIExvY2FsLCBzYW5zLXNlcmlmYDtcbiAgICBjb25zdCBwb3NOYW1lTWF4V2lkdGggPSBNYXRoLm1heCguLi50aGlzLnBvc2l0aW9ucy5tYXAoKHBvcykgPT4gZy5tZWFzdXJlVGV4dChwb3MubmFtZSkud2lkdGgpKTtcbiAgICBjb25zdCBoU2NhbGUgPSBwb3NOYW1lTWF4V2lkdGggPCAodGhpcy5fcG9zaXRpb25XaWR0aCAtIDIpID8gMSA6ICh0aGlzLl9wb3NpdGlvbldpZHRoIC0gMikgLyBwb3NOYW1lTWF4V2lkdGg7XG5cbiAgICBmb3IgKGxldCBqUG9zID0gdGhpcy5maXJzdFZpc2libGVJbmRleDsgalBvcyA8IGxhc3RWaXNpYmxlSW5kZXg7IGpQb3MrKykge1xuICAgICAgY29uc3QgcG9zOiBQb3NpdGlvbkluZm8gPSB0aGlzLnBvc2l0aW9uc1tqUG9zXTtcbiAgICAgIGcucmVzZXRUcmFuc2Zvcm0oKTtcbiAgICAgIGcuc2V0VHJhbnNmb3JtKFxuICAgICAgICBoU2NhbGUsIDAsIDAsIDEsXG4gICAgICAgIGpQb3MgKiB0aGlzLnBvc2l0aW9uV2lkdGhXaXRoTWFyZ2luICsgdGhpcy5fcG9zaXRpb25XaWR0aCAvIDIgLSB0aGlzLnBvc2l0aW9uV2lkdGhXaXRoTWFyZ2luICogZmlyc3RWaXNpYmxlSW5kZXgsIDApO1xuICAgICAgZy5maWxsVGV4dChwb3MubmFtZSwgMCwgMCk7XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvbiBQbG90IHBvc2l0aW9uTmFtZXNcbiAgICBjb25zdCBmb250U3R5bGUgPSAnMTZweCBSb2JvdG8sIFJvYm90byBMb2NhbCwgc2Fucy1zZXJpZic7XG4gICAgLy8gSGFja3MgdG8gc2NhbGUgdXBwZXJjYXNlIGNoYXJhY3RlcnMgdG8gdGFyZ2V0IHJlY3RhbmdsZVxuICAgIGNvbnN0IHVwcGVyY2FzZUxldHRlckFzY2VudCA9IDAuMjU7XG4gICAgY29uc3QgdXBwZXJjYXNlTGV0dGVySGVpZ2h0ID0gMTIuMjtcbiAgICBmb3IgKGxldCBqUG9zID0gdGhpcy5maXJzdFZpc2libGVJbmRleDsgalBvcyA8IGxhc3RWaXNpYmxlSW5kZXg7IGpQb3MrKykge1xuICAgICAgZm9yIChjb25zdCBbbW9ub21lciwgcG1JbmZvXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxKSkge1xuICAgICAgICBpZiAobW9ub21lciAhPT0gJy0nKSB7XG4gICAgICAgICAgY29uc3QgbW9ub21lclR4dCA9IFdlYkxvZ28ubW9ub21lclRvU2hvcnQobW9ub21lciwgNSk7XG4gICAgICAgICAgY29uc3QgYiA9IHBtSW5mby5ib3VuZHM7XG4gICAgICAgICAgY29uc3QgbGVmdCA9IGIubGVmdCAtIHRoaXMucG9zaXRpb25XaWR0aFdpdGhNYXJnaW4gKiB0aGlzLmZpcnN0VmlzaWJsZUluZGV4O1xuXG4gICAgICAgICAgZy5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgICAgIGcuc3Ryb2tlU3R5bGUgPSAnbGlnaHRncmF5JztcbiAgICAgICAgICBnLmxpbmVXaWR0aCA9IDE7XG4gICAgICAgICAgZy5yZWN0KGxlZnQsIGIudG9wLCBiLndpZHRoLCBiLmhlaWdodCk7XG4gICAgICAgICAgZy5maWxsU3R5bGUgPSB0aGlzLmNwLmdldChtb25vbWVyKSA/PyB0aGlzLmNwLmdldCgnb3RoZXInKTtcbiAgICAgICAgICBnLnRleHRBbGlnbiA9ICdsZWZ0JztcbiAgICAgICAgICBnLmZvbnQgPSBmb250U3R5bGU7XG4gICAgICAgICAgLy9nLmZpbGxSZWN0KGIubGVmdCwgYi50b3AsIGIud2lkdGgsIGIuaGVpZ2h0KTtcbiAgICAgICAgICBjb25zdCBtVG06IFRleHRNZXRyaWNzID0gZy5tZWFzdXJlVGV4dChtb25vbWVyVHh0KTtcblxuICAgICAgICAgIGcuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgYi53aWR0aCAvIG1UbS53aWR0aCwgMCwgMCwgYi5oZWlnaHQgLyB1cHBlcmNhc2VMZXR0ZXJIZWlnaHQsXG4gICAgICAgICAgICBsZWZ0LCBiLnRvcCk7XG4gICAgICAgICAgZy5maWxsVGV4dChtb25vbWVyVHh0LCAwLCAtdXBwZXJjYXNlTGV0dGVyQXNjZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBDYWxjdWxhdGUgY2FudmFzIHNpemUgYW4gcG9zaXRpb25XaWR0aCBhbmQgdXBkYXRlcyBwcm9wZXJ0aWVzICovXG4gIHByaXZhdGUgY2FsY1NpemUoKSB7XG4gICAgaWYgKCF0aGlzLmhvc3QpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCByOiBudW1iZXIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcblxuICAgIGxldCB3aWR0aDogbnVtYmVyID0gdGhpcy5MZW5ndGggKiB0aGlzLnBvc2l0aW9uV2lkdGggLyByO1xuICAgIGxldCBoZWlnaHQgPSBNYXRoLm1pbih0aGlzLm1heEhlaWdodCwgTWF0aC5tYXgodGhpcy5taW5IZWlnaHQsIHRoaXMucm9vdC5jbGllbnRIZWlnaHQpKTtcblxuICAgIGlmICgodGhpcy5maXRBcmVhKSAmJiAoIXRoaXMudmlzaWJsZVNsaWRlcikpIHtcbiAgICAgIGNvbnN0IHlTY2FsZTogbnVtYmVyID0gdGhpcy5yb290LmNsaWVudEhlaWdodCAvIGhlaWdodDtcbiAgICAgIGNvbnN0IHhTY2FsZTogbnVtYmVyID0gKHRoaXMucm9vdC5jbGllbnRXaWR0aCAtIHRoaXMuTGVuZ3RoICogdGhpcy5wb3NpdGlvbk1hcmdpblZhbHVlKSAvIHdpZHRoO1xuICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLm1heCgxLCBNYXRoLm1pbih4U2NhbGUsIHlTY2FsZSkpO1xuICAgICAgd2lkdGggPSB3aWR0aCAqIHNjYWxlO1xuICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICogc2NhbGU7XG4gICAgICB0aGlzLl9wb3NpdGlvbldpZHRoID0gdGhpcy5wb3NpdGlvbldpZHRoICogc2NhbGU7XG4gICAgfVxuXG4gICAgd2lkdGggPSB0aGlzLkxlbmd0aCAqIHRoaXMucG9zaXRpb25XaWR0aFdpdGhNYXJnaW4gLyByO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLnJvb3QuY2xpZW50V2lkdGggKiByO1xuICAgIHRoaXMuY2FudmFzLnN0eWxlLndpZHRoID0gYCR7dGhpcy5yb290LmNsaWVudFdpZHRofXB4YDtcblxuICAgIC8vIGNvbnN0IGNhbnZhc0hlaWdodDogbnVtYmVyID0gd2lkdGggPiB0aGlzLnJvb3QuY2xpZW50V2lkdGggPyBoZWlnaHQgLSA4IDogaGVpZ2h0O1xuICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgYCR7aGVpZ2h0fXB4YCk7XG4gICAgY29uc3QgY2FudmFzSGVpZ2h0OiBudW1iZXIgPSB0aGlzLmhvc3QuY2xpZW50SGVpZ2h0O1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGNhbnZhc0hlaWdodCAqIHI7XG5cbiAgICAvLyBBZGp1c3QgaG9zdCBhbmQgcm9vdCB3aWR0aFxuICAgIGlmICh0aGlzLmZpeFdpZHRoKSB7XG4gICAgICAvLyBmdWxsIHdpZHRoIGZvciBjYW52YXMgaG9zdCBhbmQgcm9vdFxuICAgICAgdGhpcy5yb290LnN0eWxlLndpZHRoID0gdGhpcy5ob3N0LnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgICAgdGhpcy5yb290LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgICB0aGlzLnJvb3Quc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cteScsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFsbG93IHNjcm9sbCBjYW52YXMgaW4gcm9vdFxuICAgICAgdGhpcy5yb290LnN0eWxlLndpZHRoID0gdGhpcy5ob3N0LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgdGhpcy5ob3N0LnN0eWxlLm92ZXJmbG93WCA9ICdhdXRvIWltcG9ydGFudCc7XG4gICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ3RleHQtYWxpZ24nLCB0aGlzLmhvcml6b250YWxBbGlnbm1lbnQpO1xuXG4gICAgICBjb25zdCBzbGlkZXJIZWlnaHQgPSB0aGlzLnZpc2libGVTbGlkZXIgPyAxMCA6IDA7XG5cbiAgICAgIC8vIHZlcnRpY2FsIGFsaWdubWVudFxuICAgICAgbGV0IGhvc3RUb3BNYXJnaW4gPSAwO1xuICAgICAgc3dpdGNoICh0aGlzLnZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICBob3N0VG9wTWFyZ2luID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICBob3N0VG9wTWFyZ2luID0gTWF0aC5tYXgoMCwgKHRoaXMucm9vdC5jbGllbnRIZWlnaHQgLSBoZWlnaHQpIC8gMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgaG9zdFRvcE1hcmdpbiA9IE1hdGgubWF4KDAsIHRoaXMucm9vdC5jbGllbnRIZWlnaHQgLSBoZWlnaHQgLSBzbGlkZXJIZWlnaHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIGhvcml6b250YWwgYWxpZ25tZW50XG4gICAgICBsZXQgaG9zdExlZnRNYXJnaW4gPSAwO1xuICAgICAgc3dpdGNoICh0aGlzLmhvcml6b250YWxBbGlnbm1lbnQpIHtcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICBob3N0TGVmdE1hcmdpbiA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgaG9zdExlZnRNYXJnaW4gPSBNYXRoLm1heCgwLCAodGhpcy5yb290LmNsaWVudFdpZHRoIC0gd2lkdGgpIC8gMikgKiByO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgaG9zdExlZnRNYXJnaW4gPSBNYXRoLm1heCgwLCB0aGlzLnJvb3QuY2xpZW50V2lkdGggLSB3aWR0aCkgKiByO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWFyZ2luLXRvcCcsIGAke2hvc3RUb3BNYXJnaW59cHhgLCAnaW1wb3J0YW50Jyk7XG4gICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ21hcmdpbi1sZWZ0JywgYCR7aG9zdExlZnRNYXJnaW59cHhgLCAnaW1wb3J0YW50Jyk7XG4gICAgICBpZiAodGhpcy5zbGlkZXIgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNsaWRlci5yb290LnN0eWxlLnNldFByb3BlcnR5KCdtYXJnaW4tdG9wJywgYCR7aG9zdFRvcE1hcmdpbiArIGNhbnZhc0hlaWdodH1weGAsICdpbXBvcnRhbnQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucm9vdC5jbGllbnRIZWlnaHQgPD0gaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgYCR7dGhpcy5yb290LmNsaWVudEhlaWdodH1weGApO1xuICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93LXknLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cteScsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFNlbGVjdHMgYSBzdWl0YWJsZSBwYWxldHRlIGJhc2VkIG9uIGNvbHVtbiBkYXRhXG4gICAqIEBwYXJhbSB7REcuQ29sdW1ufSBzZXFDb2wgQ29sdW1uIHRvIGxvb2sgZm9yIGEgcGFsZXR0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gIG1pbkxlbmd0aCBtaW5pbXVtIGxlbmd0aCBvZiBzZXF1ZW5jZSB0byBkZXRlY3QgcGFsZXR0ZSAoZW1wdHkgc3RyaW5ncyBhcmUgYWxsb3dlZClcbiAgICogQHJldHVybiB7U2VxUGFsZXR0ZX0gUGFsZXR0ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbHBoYWJldCBvZiB0aGUgc2VxdWVuY2VzIGluIHRoZSBjb2x1bW5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcGlja1VwUGFsZXR0ZShzZXFDb2w6IERHLkNvbHVtbiwgbWluTGVuZ3RoOiBudW1iZXIgPSA1KTogU2VxUGFsZXR0ZSB7XG4gICAgbGV0IHJlczogU2VxUGFsZXR0ZSB8IG51bGw7XG4gICAgc3dpdGNoIChzZXFDb2wuc2VtVHlwZSkge1xuICAgIGNhc2UgQW1pbm9hY2lkcy5TZW1UeXBlTXVsdGlwbGVBbGlnbm1lbnQ6XG4gICAgICByZXMgPSBBbWlub2FjaWRzUGFsZXR0ZXMuR3Jva0dyb3VwcztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTnVjbGVvdGlkZXMuU2VtVHlwZU11bHRpcGxlQWxpZ25tZW50OlxuICAgICAgcmVzID0gTnVjbGVvdGlkZXNQYWxldHRlcy5DaHJvbWF0b2dyYW07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc3Qgc3RhdHM6IFNlcUNvbFN0YXRzID0gV2ViTG9nby5nZXRTdGF0cyhzZXFDb2wsIG1pbkxlbmd0aCwgV2ViTG9nby5zcGxpdHRlckFzRmFzdGEpO1xuXG4gICAgY29uc3QgYWxwaGFiZXRDYW5kaWRhdGVzOiBbU2V0PHN0cmluZz4sIFNlcVBhbGV0dGVdW10gPSBbXG4gICAgICBbbmV3IFNldChPYmplY3Qua2V5cyhOdWNsZW90aWRlcy5OYW1lcykpLCBOdWNsZW90aWRlc1BhbGV0dGVzLkNocm9tYXRvZ3JhbV0sXG4gICAgICBbbmV3IFNldChPYmplY3Qua2V5cyhBbWlub2FjaWRzLk5hbWVzKSksIEFtaW5vYWNpZHNQYWxldHRlcy5Hcm9rR3JvdXBzXSxcbiAgICBdO1xuICAgIC8vIENhbGN1bGF0ZSBsaWtlbGlob29kcyBmb3IgYWxwaGFiZXRfY2FuZGlkYXRlc1xuICAgIGNvbnN0IGFscGhhYmV0Q2FuZGlkYXRlc1NpbTogbnVtYmVyW10gPSBhbHBoYWJldENhbmRpZGF0ZXNcbiAgICAgIC5tYXAoKGMpID0+IFdlYkxvZ28uZ2V0QWxwaGFiZXRTaW1pbGFyaXR5KHN0YXRzLmZyZXEsIGNbMF0pKTtcbiAgICBjb25zdCBtYXhDb3MgPSBNYXRoLm1heCguLi5hbHBoYWJldENhbmRpZGF0ZXNTaW0pO1xuICAgIGlmIChtYXhDb3MgPiAwLjU1KVxuICAgICAgcmVzID0gYWxwaGFiZXRDYW5kaWRhdGVzW2FscGhhYmV0Q2FuZGlkYXRlc1NpbS5pbmRleE9mKG1heENvcyldWzFdO1xuICAgIGVsc2VcbiAgICAgIHJlcyA9IFVua25vd25TZXFQYWxldHRlcy5Db2xvcjtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWxwaGFiZXRTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudW5pdHNIYW5kbGVyPy5nZXRBbHBoYWJldFNpemUoKSA/PyAwO1xuICB9XG5cbiAgLyoqIFN0YXRzIG9mIHNlcXVlbmNlcyB3aXRoIHNwZWNpZmllZCBzcGxpdHRlciBmdW5jLCByZXR1cm5zIHsgZnJlcSwgc2FtZUxlbmd0aCB9LlxuICAgKiBAcGFyYW0ge0RHLkNvbHVtbn0gc2VxQ29sXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW5MZW5ndGhcbiAgICogQHBhcmFtIHtTcGxpdHRlckZ1bmN9IHNwbGl0dGVyXG4gICAqIEByZXR1cm4geyBTZXFDb2xTdGF0cyB9LCBzYW1lTGVuZ3RoOiBib29sZWFuIH0gc3RhdHMgb2YgY29sdW1uIHNlcXVlbmNlc1xuICAgKi9cbiAgc3RhdGljIGdldFN0YXRzKHNlcUNvbDogREcuQ29sdW1uLCBtaW5MZW5ndGg6IG51bWJlciwgc3BsaXR0ZXI6IFNwbGl0dGVyRnVuYyk6IFNlcUNvbFN0YXRzIHtcbiAgICBjb25zdCBmcmVxOiB7IFttOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICAgIGxldCBzYW1lTGVuZ3RoID0gdHJ1ZTtcbiAgICBsZXQgZmlyc3RMZW5ndGggPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBzZXEgb2Ygc2VxQ29sLmNhdGVnb3JpZXMpIHtcbiAgICAgIGNvbnN0IG1TZXEgPSBzcGxpdHRlcihzZXEpO1xuXG4gICAgICBpZiAoZmlyc3RMZW5ndGggPT0gbnVsbClcbiAgICAgICAgZmlyc3RMZW5ndGggPSBtU2VxLmxlbmd0aDtcbiAgICAgIGVsc2UgaWYgKG1TZXEubGVuZ3RoICE9PSBmaXJzdExlbmd0aClcbiAgICAgICAgc2FtZUxlbmd0aCA9IGZhbHNlO1xuXG4gICAgICBpZiAobVNlcS5sZW5ndGggPiBtaW5MZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIG1TZXEpIHtcbiAgICAgICAgICBpZiAoIShtIGluIGZyZXEpKVxuICAgICAgICAgICAgZnJlcVttXSA9IDA7XG4gICAgICAgICAgZnJlcVttXSArPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7ZnJlcTogZnJlcSwgc2FtZUxlbmd0aDogc2FtZUxlbmd0aH07XG4gIH1cblxuICAvKiogQ2FsY3VsYXRlIHNpbWlsYXJpdHkgaW4gY3VycmVudCBzZXF1ZW5jZSBhbmQgYWxwaGFiZXQuXG4gICAqIEBwYXJhbSB7TW9ub21lckZyZXFzfSBmcmVxXG4gICAqIEBwYXJhbSB7U2V0PHN0cmluZz59IGFscGhhYmV0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBnYXBTeW1ib2xcbiAgICogQHJldHVybiB7bnVtYmVyfSBDb3NpbmUgc2ltaWxhcml0eVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRBbHBoYWJldFNpbWlsYXJpdHkoZnJlcTogTW9ub21lckZyZXFzLCBhbHBoYWJldDogU2V0PHN0cmluZz4sIGdhcFN5bWJvbDogc3RyaW5nID0gJy0nKTogbnVtYmVyIHtcbiAgICBjb25zdCBrZXlzID0gbmV3IFNldDxzdHJpbmc+KFsuLi5uZXcgU2V0KE9iamVjdC5rZXlzKGZyZXEpKSwgLi4uYWxwaGFiZXRdKTtcbiAgICBrZXlzLmRlbGV0ZShnYXBTeW1ib2wpO1xuXG4gICAgY29uc3QgZnJlcUE6IG51bWJlcltdID0gW107XG4gICAgY29uc3QgYWxwaGFiZXRBOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgbSBvZiBrZXlzKSB7XG4gICAgICBmcmVxQS5wdXNoKG0gaW4gZnJlcSA/IGZyZXFbbV0gOiAwKTtcbiAgICAgIGFscGhhYmV0QS5wdXNoKGFscGhhYmV0LmhhcyhtKSA/IDEgOiAwKTtcbiAgICB9XG4gICAgLyogVGhlcmUgd2VyZSBhIGZldyBpZGVhczogY2hpLXNxdWFyZWQsIHBlYXJzb24gY29ycmVsYXRpb24gKHZhcmlhbmNlPyksIHNjYWxhciBwcm9kdWN0ICovXG4gICAgY29uc3QgZnJlcVY6IFZlY3RvciA9IG5ldyBWZWN0b3IoZnJlcUEpO1xuICAgIGNvbnN0IGFscGhhYmV0VjogVmVjdG9yID0gbmV3IFZlY3RvcihhbHBoYWJldEEpO1xuICAgIHJldHVybiB2ZWN0b3JEb3RQcm9kdWN0KGZyZXFWLCBhbHBoYWJldFYpIC8gKHZlY3Rvckxlbmd0aChmcmVxVikgKiB2ZWN0b3JMZW5ndGgoYWxwaGFiZXRWKSk7XG4gIH1cblxuICAvLyBQcmV2aW91cyB2ZXJzaW9uIG9mIHBpY2tVcFNlcUNvbFxuICAvLyAvKiogRmlyc3QgdHJ5IHRvIGZpbmQgY29sdW1uIHdpdGggc2VtVHlwZSAnYWxpZ25lZFNlcXVlbmNlJy5cbiAgLy8gICogTmV4dCBsb29rIGZvciBjb2x1bW4gd2l0aCBkYXRhIGFscGhhYmV0IGNvcnJlc3BvbmRpbmcgdG8gYW55IG9mIHRoZSBrbm93biBwYWxldHRlcy5cbiAgLy8gICogQHBhcmFtIHtERy5EYXRhRnJhbWV9IGRhdGFGcmFtZVxuICAvLyAgKiBAcmV0dXJuIHtERy5Db2x1bW59IFRoZSBjb2x1bW4gd2Ugd2VyZSBsb29raW5nIGZvciBvciBudWxsXG4gIC8vICAqL1xuICAvLyBwcml2YXRlIHBpY2tVcFNlcUNvbChkYXRhRnJhbWU6IERHLkRhdGFGcmFtZSk6IERHLkNvbHVtbiB8IG51bGwge1xuICAvLyAgIGxldCByZXM6IERHLkNvbHVtbiB8IG51bGwgPSBkYXRhRnJhbWUuY29sdW1ucy5ieVNlbVR5cGUoJ2FsaWduZWRTZXF1ZW5jZScpO1xuICAvLyAgIGlmIChyZXMgPT0gbnVsbCkge1xuICAvLyAgICAgZm9yIChjb25zdCBjb2wgb2YgZGF0YUZyYW1lLmNvbHVtbnMpIHtcbiAgLy8gICAgICAgY29uc3QgY3AgPSBXZWJMb2dvLnBpY2tVcFBhbGV0dGUoY29sIGFzIERHLkNvbHVtbiwgNSk7XG4gIC8vICAgICAgIGlmIChjcCAhPT0gbnVsbCAmJiAhKGNwIGluc3RhbmNlb2YgVW5rbm93blNlcVBhbGV0dGUpKSB7XG4gIC8vICAgICAgICAgcmVzID0gY29sO1xuICAvLyAgICAgICAgIGJyZWFrO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiByZXM7XG4gIC8vIH1cblxuICBwdWJsaWMgc3RhdGljIHBpY2tVcFNlcUNvbChkZjogREcuRGF0YUZyYW1lKTogREcuQ29sdW1uIHwgbnVsbCB7XG4gICAgY29uc3Qgc2VtVHlwZUNvbExpc3QgPSBkZi5jb2x1bW5zLmJ5U2VtVHlwZUFsbChERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEUpO1xuICAgIGxldCByZXNDb2w6IERHLkNvbHVtbiB8IG51bGwgPSBzZW1UeXBlQ29sTGlzdC5maW5kKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IHVuaXRzID0gY29sLmdldFRhZyhERy5UQUdTLlVOSVRTKTtcbiAgICAgIHJldHVybiB1bml0cyA/IHVuaXRzLmluZGV4T2YoJ01TQScpICE9PSAtMSA6IGZhbHNlO1xuICAgIH0pID8/IG51bGw7XG4gICAgaWYgKCFyZXNDb2wgJiYgc2VtVHlwZUNvbExpc3QubGVuZ3RoID4gMClcbiAgICAgIHJlc0NvbCA9IHNlbVR5cGVDb2xMaXN0WzBdO1xuICAgIHJldHVybiByZXNDb2w7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtb25vbWVyUmUgPSAvXFxbKFxcdyspfChcXHcpfCgtKS9nO1xuXG4gIC8qKiBPbmx5IHNvbWUgb2YgdGhlIHN5bm9ueW1zLiBUaGVzZSB3ZXJlIG9idGFpbmVkIGZyb20gdGhlIGNsdXN0ZXJlZCBvbGlnb3BlcHRpZGUgZGF0YXNldC4gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYWFTeW5vbnltczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgJ1tNZU5sZV0nOiAnTCcsIC8vIE5sZSAtIG5vcmxldWNpbmVcbiAgICAnW01lQV0nOiAnQScsXG4gICAgJ1tNZUddJzogJ0cnLFxuICAgICdbTWVGXSc6ICdGJyxcbiAgfTtcblxuICAvKiogU3BsaXQgc2VxdWVuY2UgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgbW9ub21lcnMsIHNxdWFyZSBicmFja2V0cyBtdWx0aWNoYXIgbW9ub21lciBuYW1lcyBvciBnYXAgc3ltYm9sLlxuICAgKiBAcGFyYW0ge2FueX0gc2VxIG9iamVjdCB3aXRoIHNlcXVlbmNlXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBhcnJheSBvZiBtb25vbWVyc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcGxpdHRlckFzRmFzdGEoc2VxOiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHd1PFJlZ0V4cE1hdGNoQXJyYXk+KHNlcS50b1N0cmluZygpLm1hdGNoQWxsKFdlYkxvZ28ubW9ub21lclJlKSlcbiAgICAgIC5tYXAoKG1hOiBSZWdFeHBNYXRjaEFycmF5KSA9PiB7XG4gICAgICAgIGxldCBtUmVzOiBzdHJpbmc7XG4gICAgICAgIGNvbnN0IG06IHN0cmluZyA9IG1hWzBdO1xuICAgICAgICBpZiAobS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgaWYgKG0gaW4gV2ViTG9nby5hYVN5bm9ueW1zKSB7XG4gICAgICAgICAgICBtUmVzID0gV2ViTG9nby5hYVN5bm9ueW1zW21dO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtUmVzID0gJyc7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBMb25nIG1vbm9tZXIgJyR7bX0nIGhhcyBub3QgYSBzaG9ydCBzeW5vbnltLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBtUmVzID0gbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbVJlcztcbiAgICAgIH0pLnRvQXJyYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGhlbG1SZSA9IC8oUEVQVElERTF8RE5BMXxSTkExKVxceyhbXn1dKyl9L2c7XG4gIHByaXZhdGUgc3RhdGljIGhlbG1QcDFSZSA9IC9cXFsoW15cXFtcXF1dKyldL2c7XG5cbiAgLyoqIFNwbGl0cyBIZWxtIHN0cmluZyB0byBtb25vbWVycywgYnV0IGRvZXMgbm90IHJlcGxhY2UgbW9ub21lciBuYW1lcyB0byBvdGhlciBub3RhdGlvbiAoZS5nLiBmb3IgUk5BKS5cbiAgICogT25seSBmb3IgbGluZWFyIHBvbHltZXJzLCBkb2VzIG5vdCBzcGxpdCBSTkEgZm9yIHJpYm9zZSBhbmQgcGhvc3BoYXRlIG1vbm9tZXJzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VxIFNvdXJjZSBzdHJpbmcgb2YgSEVMTSBub3RhdGlvblxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3BsaXR0ZXJBc0hlbG0oc2VxOiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgV2ViTG9nby5oZWxtUmUubGFzdEluZGV4ID0gMDtcbiAgICBjb25zdCBlYTogUmVnRXhwRXhlY0FycmF5IHwgbnVsbCA9IFdlYkxvZ28uaGVsbVJlLmV4ZWMoc2VxLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IGluU2VxOiBzdHJpbmcgfCBudWxsID0gZWEgPyBlYVsyXSA6IG51bGw7XG5cbiAgICBjb25zdCBtbVBvc3RQcm9jZXNzID0gKG1tOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgV2ViTG9nby5oZWxtUHAxUmUubGFzdEluZGV4ID0gMDtcbiAgICAgIGNvbnN0IHBwMU0gPSBXZWJMb2dvLmhlbG1QcDFSZS5leGVjKG1tKTtcbiAgICAgIGlmIChwcDFNICYmIHBwMU0ubGVuZ3RoID49IDIpXG4gICAgICAgIHJldHVybiBwcDFNWzFdO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gbW07XG4gICAgfTtcblxuICAgIGNvbnN0IG1tTGlzdDogc3RyaW5nW10gPSBpblNlcSA/IGluU2VxLnNwbGl0KCcuJykgOiBbXTtcbiAgICByZXR1cm4gbW1MaXN0Lm1hcChtbVBvc3RQcm9jZXNzKTtcbiAgfVxuXG4gIC8qKiBHZXRzIG1ldGhvZCB0byBzcGxpdCBzZXF1ZW5jZSBieSBzZXBhcmF0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlcGFyYXRvclxuICAgKiBAcGFyYW0gbGltaXRcbiAgICogQHJldHVybiB7U3BsaXR0ZXJGdW5jfVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRTcGxpdHRlcldpdGhTZXBhcmF0b3Ioc2VwYXJhdG9yOiBzdHJpbmcsIGxpbWl0OiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpOiBTcGxpdHRlckZ1bmMge1xuICAgIHJldHVybiAoc2VxOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBzZXEuc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBHZXQgc3BsaXR0ZXIgbWV0aG9kIHRvIHNwbGl0IHNlcXVlbmNlcyB0byBtb25vbWVyc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlcGFyYXRvclxuICAgKiBAcGFyYW0gbGltaXRcbiAgICogQHJldHVybiB7U3BsaXR0ZXJGdW5jfVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRTcGxpdHRlcih1bml0czogc3RyaW5nLCBzZXBhcmF0b3I6IHN0cmluZywgbGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCk6IFNwbGl0dGVyRnVuYyB7XG4gICAgaWYgKHVuaXRzLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChOT1RBVElPTi5GQVNUQSkpXG4gICAgICByZXR1cm4gV2ViTG9nby5zcGxpdHRlckFzRmFzdGE7XG4gICAgZWxzZSBpZiAodW5pdHMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKE5PVEFUSU9OLlNFUEFSQVRPUikpXG4gICAgICByZXR1cm4gV2ViTG9nby5nZXRTcGxpdHRlcldpdGhTZXBhcmF0b3Ioc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgZWxzZSBpZiAodW5pdHMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKE5PVEFUSU9OLkhFTE0pKVxuICAgICAgcmV0dXJuIFdlYkxvZ28uc3BsaXR0ZXJBc0hlbG07XG4gICAgZWxzZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHVuaXRzICR7dW5pdHN9IC5gKTtcblxuICAgIC8vIFRPRE86IFNwbGl0dGVyIGZvciBIRUxNXG4gIH1cblxuICAvKiogR2VuZXJhdGUgc3BsaXR0ZXIgZnVuY3Rpb24gZm9yIHNlcXVlbmNlIGNvbHVtblxuICAgKiBAcGFyYW0ge0RHLkNvbHVtbn0gY29sXG4gICAqIEByZXR1cm4ge1NwbGl0dGVyRnVuY30gU3BsaXR0ZXIgZnVuY3Rpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0U3BsaXR0ZXJGb3JDb2x1bW4oY29sOiBERy5Db2x1bW4pOiBTcGxpdHRlckZ1bmMge1xuICAgIGlmIChjb2wuc2VtVHlwZSAhPT0gREcuU0VNVFlQRS5NQUNST01PTEVDVUxFKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBHZXQgc3BsaXR0ZXIgZm9yIHNlbVR5cGUgXCIke0RHLlNFTVRZUEUuTUFDUk9NT0xFQ1VMRX1cIiBvbmx5LmApO1xuXG4gICAgY29uc3QgdW5pdHMgPSBjb2wuZ2V0VGFnKERHLlRBR1MuVU5JVFMpO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IGNvbC5nZXRUYWcoVW5pdHNIYW5kbGVyLlRBR1Muc2VwYXJhdG9yKTtcbiAgICByZXR1cm4gV2ViTG9nby5nZXRTcGxpdHRlcih1bml0cywgc2VwYXJhdG9yKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGxvbmdNb25vbWVyUGFydFJlID0gLyhcXHcrKS9nO1xuXG4gIC8qKiBDb252ZXJ0IGxvbmcgbW9ub21lciBuYW1lcyB0byBzaG9ydCBvbmVzICovXG4gIHB1YmxpYyBzdGF0aWMgbW9ub21lclRvU2hvcnQoYW1pbm86IHN0cmluZywgbWF4TGVuZ3RoT2ZNb25vbWVyOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNob3J0QW1pbm9NYXRjaDogUmVnRXhwTWF0Y2hBcnJheSB8IG51bGwgPSBhbWluby5tYXRjaChXZWJMb2dvLmxvbmdNb25vbWVyUGFydFJlKTtcbiAgICBjb25zdCBuZWVkQWRkRG90czogYm9vbGVhbiA9IGFtaW5vLmxlbmd0aCA+IG1heExlbmd0aE9mTW9ub21lciB8fCAoc2hvcnRBbWlub01hdGNoPy5sZW5ndGggPz8gMCkgPiAxO1xuICAgIGNvbnN0IHNob3J0QW1pbm8gPSBzaG9ydEFtaW5vTWF0Y2g/LlswXSA/PyAnICc7XG4gICAgcmV0dXJuICFuZWVkQWRkRG90cyA/IHNob3J0QW1pbm8gOiBzaG9ydEFtaW5vLnN1YnN0cmluZygwLCBtYXhMZW5ndGhPZk1vbm9tZXIpICsgJ+KApic7XG4gIH1cbn1cbiJdfQ==
|
|
859
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViLWxvZ28uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWItbG9nby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUMvRixPQUFPLEVBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBQyxXQUFXLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFHOUMsT0FBTyxFQUFXLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBUzlELElBQUssY0FHSjtBQUhELFdBQUssY0FBYztJQUNqQixxQ0FBbUIsQ0FBQTtJQUNuQiwrQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUhJLGNBQWMsS0FBZCxjQUFjLFFBR2xCO0FBWUQ7OztHQUdHO0FBQ0gsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixHQUFHLFVBQVMsS0FBaUIsRUFBRSxDQUFTO0lBQ25GLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQzFDLE9BQU8sSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENB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LEVBQUUsR0FBRztJQUNaLE9BQU8sRUFBRSxHQUFHO0lBQ1osT0FBTyxFQUFFLEdBQUc7Q0FDYixDQUFDO0FBb0JhLGNBQU0sR0FBRyxpQ0FBaUMsQ0FBQztBQUMzQyxpQkFBUyxHQUFHLGdCQUFnQixDQUFDO0FBb0U3Qix5QkFBaUIsR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5pbXBvcnQgd3UgZnJvbSAnd3UnO1xuaW1wb3J0ICogYXMgcnhqcyBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtWZWN0b3J9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3R5cGUtZGVjbGFyYXRpb25zJztcbmltcG9ydCB7dmVjdG9yTGVuZ3RoLCB2ZWN0b3JEb3RQcm9kdWN0fSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5pbXBvcnQge0FtaW5vYWNpZHMsIEFtaW5vYWNpZHNQYWxldHRlc30gZnJvbSAnLi4vYW1pbm9hY2lkcyc7XG5pbXBvcnQge051Y2xlb3RpZGVzLCBOdWNsZW90aWRlc1BhbGV0dGVzfSBmcm9tICcuLi9udWNsZW90aWRlcyc7XG5pbXBvcnQge1Vua25vd25TZXFQYWxldHRlc30gZnJvbSAnLi4vdW5rbm93bic7XG5pbXBvcnQge1NlcVBhbGV0dGV9IGZyb20gJy4uL3NlcS1wYWxldHRlcyc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge05PVEFUSU9OLCBVbml0c0hhbmRsZXJ9IGZyb20gJy4uL3V0aWxzL3VuaXRzLWhhbmRsZXInO1xuaW1wb3J0IHtTbGlkZXJPcHRpb25zfSBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5kZWNsYXJlIG1vZHVsZSAnZGF0YWdyb2stYXBpL3NyYy9ncmlkJyB7XG4gIGludGVyZmFjZSBSZWN0IHtcbiAgICBjb250YWlucyh4OiBudW1iZXIsIHk6IG51bWJlcik6IGJvb2xlYW47XG4gIH1cbn1cblxuZW51bSBQb3NpdGlvbkhlaWdodCB7XG4gIEVudHJvcHkgPSAnRW50cm9weScsXG4gIGZ1bGwgPSAnMTAwJScsXG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxDYW52YXNFbGVtZW50IHtcbiAgICBnZXRDdXJzb3JQb3NpdGlvbihldmVudDogTW91c2VFdmVudCwgcjogbnVtYmVyKTogREcuUG9pbnQ7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgTW9ub21lckZyZXFzID0geyBbbTogc3RyaW5nXTogbnVtYmVyIH07XG5leHBvcnQgdHlwZSBTZXFDb2xTdGF0cyA9IHsgZnJlcTogTW9ub21lckZyZXFzLCBzYW1lTGVuZ3RoOiBib29sZWFuIH1cbmV4cG9ydCB0eXBlIFNwbGl0dGVyRnVuYyA9IChzZXE6IHN0cmluZykgPT4gc3RyaW5nW107XG5cbi8qKkBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSByIGRldmljZVBpeGVsUmF0aW9uXG4gKiBAcmV0dXJuIHtERy5Qb2ludH0gY2FudmFzIHJlbGF0ZWQgY3Vyc29yIHBvc2l0aW9uXG4gKi9cbkhUTUxDYW52YXNFbGVtZW50LnByb3RvdHlwZS5nZXRDdXJzb3JQb3NpdGlvbiA9IGZ1bmN0aW9uKGV2ZW50OiBNb3VzZUV2ZW50LCByOiBudW1iZXIpOiBERy5Qb2ludCB7XG4gIGNvbnN0IHJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICByZXR1cm4gbmV3IERHLlBvaW50KChldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0KSAqIHIsIChldmVudC5jbGllbnRZIC0gcmVjdC50b3ApICogcik7XG59O1xuXG5ERy5SZWN0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKHg6IG51bWJlciwgeTogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiB0aGlzLmxlZnQgPD0geCAmJiB4IDw9IHRoaXMucmlnaHQgJiYgdGhpcy50b3AgPD0geSAmJiB5IDw9IHRoaXMuYm90dG9tO1xufTtcblxuZXhwb3J0IGNsYXNzIFBvc2l0aW9uTW9ub21lckluZm8ge1xuICAvKiogU2VxdWVuY2VzIGNvdW50IHdpdGggbW9ub21lciBpbiBwb3NpdGlvbiAqL1xuICBjb3VudDogbnVtYmVyO1xuXG4gIC8qKiBSZW1lbWJlciBzY3JlZW4gY29vcmRzIHJlY3QgKi9cbiAgYm91bmRzOiBERy5SZWN0O1xuXG4gIGNvbnN0cnVjdG9yKGNvdW50OiBudW1iZXIgPSAwLCBib3VuZHM6IERHLlJlY3QgPSBuZXcgREcuUmVjdCgwLCAwLCAwLCAwKSkge1xuICAgIHRoaXMuY291bnQgPSBjb3VudDtcbiAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUG9zaXRpb25JbmZvIHtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgZnJlcTogeyBbbTogc3RyaW5nXTogUG9zaXRpb25Nb25vbWVySW5mbyB9O1xuICByb3dDb3VudDogbnVtYmVyO1xuICBzdW1Gb3JIZWlnaHRDYWxjOiBudW1iZXI7XG5cbiAgLyoqIGZyZXEgPSB7fSwgcm93Q291bnQgPSAwXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgcG9zaXRpb24gKCcxMTFBJywgJzExMS4xJywgZXRjKVxuICAgKiBAcGFyYW0ge251bWJlcn0gc3VtRm9ySGVpZ2h0Q2FsYyBTdW0gb2YgYWxsIG1vbm9tZXIgY291bnRzIGZvciBoZWlnaHQgY2FsY3VsYXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd0NvdW50IENvdW50IG9mIGVsZW1lbnRzIGluIGNvbHVtblxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBmcmVxIGZyZXF1ZW5jeSBvZiBtb25vbWVycyBpbiBwb3NpdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBmcmVxOiB7IFttOiBzdHJpbmddOiBQb3NpdGlvbk1vbm9tZXJJbmZvIH0gPSB7fSwgcm93Q291bnQ6IG51bWJlciA9IDAsIHN1bUZvckhlaWdodENhbGM6IG51bWJlciA9IDApIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuZnJlcSA9IGZyZXE7XG4gICAgdGhpcy5yb3dDb3VudCA9IHJvd0NvdW50O1xuICAgIHRoaXMuc3VtRm9ySGVpZ2h0Q2FsYyA9IHN1bUZvckhlaWdodENhbGM7XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgV2ViTG9nbyBleHRlbmRzIERHLkpzVmlld2VyIHtcbiAgcHVibGljIHN0YXRpYyByZXNpZHVlc1NldCA9ICdudWNsZW90aWRlcyc7XG4gIHByaXZhdGUgc3RhdGljIHZpZXdlckNvdW50OiBudW1iZXIgPSAtMTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHZpZXdlcklkOiBudW1iZXIgPSAtMTtcbiAgcHJpdmF0ZSB1bml0c0hhbmRsZXI6IFVuaXRzSGFuZGxlciB8IG51bGw7XG4gIHByaXZhdGUgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBwcml2YXRlIHJlYWRvbmx5IGNvbG9yU2NoZW1lOiBDb2xvclNjaGVtZSA9IENvbG9yU2NoZW1lc1tOdWNsZW90aWRlc1dlYkxvZ28ucmVzaWR1ZXNTZXRdO1xuICBwcm90ZWN0ZWQgY3A6IFNlcVBhbGV0dGUgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIGhvc3Q/OiBIVE1MRGl2RWxlbWVudDtcbiAgcHJpdmF0ZSBtc2dIb3N0PzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgcHJpdmF0ZSBzbGlkZXI6IERHLlJhbmdlU2xpZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHRleHRCYXNlbGluZTogQ2FudmFzVGV4dEJhc2VsaW5lO1xuXG4gIHByaXZhdGUgYXhpc0hlaWdodDogbnVtYmVyID0gMTI7XG5cbiAgcHJpdmF0ZSBzZXFDb2w6IERHLkNvbHVtbjxzdHJpbmc+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3BsaXR0ZXI6IFNwbGl0dGVyRnVuYyB8IG51bGwgPSBudWxsO1xuICAvLyBwcml2YXRlIG1heExlbmd0aDogbnVtYmVyID0gMTAwO1xuICBwcml2YXRlIHBvc2l0aW9uczogUG9zaXRpb25JbmZvW10gPSBbXTtcblxuICBwcml2YXRlIHJvd3NNYXNrZWQ6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgcm93c051bGw6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgdmlzaWJsZVNsaWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGFsbG93UmVzaXplOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBjdXJyZW50UmFuZ2U6IG51bWJlciA9IDA7XG5cbiAgLy8gVmlld2VyJ3MgcHJvcGVydGllcyAobGlrZWx5IHRoZXkgc2hvdWxkIGJlIHB1YmxpYyBzbyB0aGF0IHRoZXkgY2FuIGJlIHNldCBvdXRzaWRlKVxuICBwcml2YXRlIF9wb3NpdGlvbldpZHRoOiBudW1iZXI7XG4gIHB1YmxpYyBwb3NpdGlvbldpZHRoOiBudW1iZXI7XG4gIHB1YmxpYyBtaW5IZWlnaHQ6IG51bWJlcjtcbiAgcHVibGljIGJhY2tncm91bmRDb2xvcjogbnVtYmVyID0gMHhGRkZGRkZGRjtcbiAgcHVibGljIG1heEhlaWdodDogbnVtYmVyO1xuICBwdWJsaWMgc2tpcEVtcHR5U2VxdWVuY2VzOiBib29sZWFuO1xuICBwdWJsaWMgc2VxdWVuY2VDb2x1bW5OYW1lOiBzdHJpbmcgfCBudWxsO1xuICBwdWJsaWMgcG9zaXRpb25NYXJnaW5TdGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgcG9zaXRpb25NYXJnaW46IG51bWJlciA9IDA7XG4gIHB1YmxpYyBzdGFydFBvc2l0aW9uTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHVibGljIGVuZFBvc2l0aW9uTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHVibGljIGZpeFdpZHRoOiBib29sZWFuO1xuICBwdWJsaWMgdmVydGljYWxBbGlnbm1lbnQ6IHN0cmluZyB8IG51bGw7XG4gIHB1YmxpYyBob3Jpem9udGFsQWxpZ25tZW50OiBzdHJpbmcgfCBudWxsO1xuICBwdWJsaWMgZml0QXJlYTogYm9vbGVhbjtcbiAgcHVibGljIHNocmlua0VtcHR5VGFpbDogYm9vbGVhbjtcbiAgcHVibGljIHNraXBFbXB0eVBvc2l0aW9uczogYm9vbGVhbjtcbiAgcHVibGljIHBvc2l0aW9uSGVpZ2h0OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBwb3NpdGlvbk5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHByaXZhdGUgc3RhcnRQb3NpdGlvbjogbnVtYmVyID0gLTE7XG5cbiAgcHJpdmF0ZSBlbmRQb3NpdGlvbjogbnVtYmVyID0gLTE7XG5cbiAgLyoqIEZvciBzdGFydFBvc2l0aW9uIGVxdWFscyB0byBlbmRQb3NpdGlvbiBMZW5ndGggaXMgMSAqL1xuICBwcml2YXRlIGdldCBMZW5ndGgoKTogbnVtYmVyIHtcbiAgICBpZiAodGhpcy5za2lwRW1wdHlQb3NpdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9ucy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXJ0UG9zaXRpb24gPD0gdGhpcy5lbmRQb3NpdGlvbiA/IHRoaXMuZW5kUG9zaXRpb24gLSB0aGlzLnN0YXJ0UG9zaXRpb24gKyAxIDogMDtcbiAgfVxuXG4gIC8qKiBDYWxjdWxhdGUgbmV3IHBvc2l0aW9uIGRhdGEgYmFzaWMgb24ge0BsaW5rIHBvc2l0aW9uTWFyZ2luU3RhdGV9IGFuZCB7QGxpbmsgcG9zaXRpb25NYXJnaW59ICovXG4gIHByaXZhdGUgZ2V0IHBvc2l0aW9uV2lkdGhXaXRoTWFyZ2luKCkge1xuICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbldpZHRoICsgdGhpcy5wb3NpdGlvbk1hcmdpblZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcG9zaXRpb25NYXJnaW5WYWx1ZSgpIHtcbiAgICBpZiAoKHRoaXMucG9zaXRpb25NYXJnaW5TdGF0ZSA9PT0gJ2F1dG8nKSAmJiAodGhpcy51bml0c0hhbmRsZXI/LmdldEFscGhhYmV0SXNNdWx0aWNoYXIoKSA9PT0gdHJ1ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uTWFyZ2luO1xuICAgIH1cbiAgICBpZiAodGhpcy5wb3NpdGlvbk1hcmdpblN0YXRlID09PSAnZW5hYmxlJykge1xuICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb25NYXJnaW47XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvKiogQ291bnQgb2YgcG9zaXRpb24gcmVuZGVyZWQgZm9yIGNhbGN1bGF0aW9ucyBjb3VudE9mUmVuZGVyUG9zaXRpb25zICovXG4gIHByaXZhdGUgZ2V0IGNvdW50T2ZSZW5kZXJQb3NpdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaG9zdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdC5jbGllbnRXaWR0aCAvIHRoaXMucG9zaXRpb25XaWR0aFdpdGhNYXJnaW47XG4gIH1cblxuICAvKiogUG9zaXRpb24gb2Ygc3RhcnQgcmVuZGVyaW5nICovXG4gIHByaXZhdGUgZ2V0IGZpcnN0VmlzaWJsZUluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLnZpc2libGVTbGlkZXIpID8gTWF0aC5mbG9vcih0aGlzLnNsaWRlci5taW4pIDogMDtcbiAgfVxuXG4gIHByaXZhdGUgdmlld1N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMudmlld2VySWQgPSBXZWJMb2dvLnZpZXdlckNvdW50O1xuICAgIFdlYkxvZ28udmlld2VyQ291bnQgKz0gMTtcblxuICAgIHRoaXMudGV4dEJhc2VsaW5lID0gJ3RvcCc7XG4gICAgdGhpcy51bml0c0hhbmRsZXIgPSBudWxsO1xuXG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmludCgnYmFja2dyb3VuZENvbG9yJywgMHhGRkZGRkZGRik7XG4gICAgdGhpcy5fcG9zaXRpb25XaWR0aCA9IHRoaXMucG9zaXRpb25XaWR0aCA9IHRoaXMuZmxvYXQoJ3Bvc2l0aW9uV2lkdGgnLCAxNi8qLFxuICAgICAge2VkaXRvcjogJ3NsaWRlcicsIG1pbjogNCwgbWF4OiA2NCwgcG9zdGZpeDogJ3B4J30qLyk7XG4gICAgdGhpcy5taW5IZWlnaHQgPSB0aGlzLmZsb2F0KCdtaW5IZWlnaHQnLCA1MC8qLFxuICAgICAge2VkaXRvcjogJ3NsaWRlcicsIG1pbjogMjUsIG1heDogMjUwLCBwb3N0Zml4OiAncHgnfSovKTtcbiAgICB0aGlzLm1heEhlaWdodCA9IHRoaXMuZmxvYXQoJ21heEhlaWdodCcsIDEwMC8qLFxuICAgICAge2VkaXRvcjogJ3NsaWRlcicsIG1pbjogMjUsIG1heDogNTAwLCBwb3N0Zml4OiAncHgnfSovKTtcblxuICAgIHRoaXMuc2tpcEVtcHR5U2VxdWVuY2VzID0gdGhpcy5ib29sKCdza2lwRW1wdHlTZXF1ZW5jZXMnLCB0cnVlKTtcbiAgICB0aGlzLnNlcXVlbmNlQ29sdW1uTmFtZSA9IHRoaXMuc3RyaW5nKCdzZXF1ZW5jZUNvbHVtbk5hbWUnLCBudWxsKTtcblxuICAgIHRoaXMuc3RhcnRQb3NpdGlvbk5hbWUgPSB0aGlzLnN0cmluZygnc3RhcnRQb3NpdGlvbk5hbWUnLCBudWxsKTtcbiAgICB0aGlzLmVuZFBvc2l0aW9uTmFtZSA9IHRoaXMuc3RyaW5nKCdlbmRQb3NpdGlvbk5hbWUnLCBudWxsKTtcblxuICAgIHRoaXMuZml4V2lkdGggPSB0aGlzLmJvb2woJ2ZpeFdpZHRoJywgZmFsc2UpO1xuXG4gICAgdGhpcy52ZXJ0aWNhbEFsaWdubWVudCA9IHRoaXMuc3RyaW5nKCd2ZXJ0aWNhbEFsaWdubWVudCcsICdtaWRkbGUnLFxuICAgICAge2Nob2ljZXM6IFsndG9wJywgJ21pZGRsZScsICdib3R0b20nXX0pO1xuICAgIHRoaXMuaG9yaXpvbnRhbEFsaWdubWVudCA9IHRoaXMuc3RyaW5nKCdob3Jpem9udGFsQWxpZ25tZW50JywgJ2NlbnRlcicsXG4gICAgICB7Y2hvaWNlczogWydsZWZ0JywgJ2NlbnRlcicsICdyaWdodCddfSk7XG4gICAgdGhpcy5maXRBcmVhID0gdGhpcy5ib29sKCdmaXRBcmVhJywgdHJ1ZSk7XG4gICAgdGhpcy5zaHJpbmtFbXB0eVRhaWwgPSB0aGlzLmJvb2woJ3Nocmlua0VtcHR5VGFpbCcsIHRydWUpO1xuICAgIHRoaXMuc2tpcEVtcHR5UG9zaXRpb25zID0gdGhpcy5ib29sKCdza2lwRW1wdHlQb3NpdGlvbnMnLCBmYWxzZSk7XG4gICAgdGhpcy5wb3NpdGlvbk1hcmdpblN0YXRlID0gdGhpcy5zdHJpbmcoJ3Bvc2l0aW9uTWFyZ2luU3RhdGUnLCAnYXV0bycsXG4gICAgICB7Y2hvaWNlczogWydhdXRvJywgJ2VuYWJsZScsICdvZmYnXX0pO1xuICAgIGxldCBkZWZhdWx0VmFsdWVGb3JQb3NpdGlvbk1hcmdpbiA9IDA7XG4gICAgaWYgKHRoaXMucG9zaXRpb25NYXJnaW5TdGF0ZSA9PT0gJ2F1dG8nKSB7XG4gICAgICBkZWZhdWx0VmFsdWVGb3JQb3NpdGlvbk1hcmdpbiA9IDQ7XG4gICAgfVxuICAgIHRoaXMucG9zaXRpb25NYXJnaW4gPSB0aGlzLmludCgncG9zaXRpb25NYXJnaW4nLCBkZWZhdWx0VmFsdWVGb3JQb3NpdGlvbk1hcmdpbiwge21pbjogMCwgbWF4OiAxNn0pO1xuICAgIHRoaXMucG9zaXRpb25IZWlnaHQgPSB0aGlzLnN0cmluZygncG9zaXRpb25IZWlnaHQnLCBQb3NpdGlvbkhlaWdodC5mdWxsLCB7Y2hvaWNlczogW1Bvc2l0aW9uSGVpZ2h0LmZ1bGwsIFBvc2l0aW9uSGVpZ2h0LkVudHJvcHldfSk7XG5cbiAgICBjb25zdCBzdHlsZTogU2xpZGVyT3B0aW9ucyA9IHtzdHlsZTogJ2JhcmJlbGwnfTtcbiAgICB0aGlzLnNsaWRlciA9IHVpLnJhbmdlU2xpZGVyKDAsIDEwMCwgMCwgMjAsIGZhbHNlLCBzdHlsZSk7XG4gICAgdGhpcy5jYW52YXMgPSB1aS5jYW52YXMoKTtcbiAgICB0aGlzLmNhbnZhcy5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgY29uc29sZS5lcnJvcignV2ViTG9nbyBzZWNvbmQgaW5pdGlhbGl6YXRpb24hJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgdGhpcy5oZWxwVXJsID0gJy9oZWxwL3Zpc3VhbGl6ZS92aWV3ZXJzL3dlYi1sb2dvLm1kJztcblxuICAgIHRoaXMubXNnSG9zdCA9IHVpLmRpdignTm8gbWVzc2FnZScpO1xuICAgIHRoaXMubXNnSG9zdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgdGhpcy5jYW52YXMgPSB1aS5jYW52YXMoKTtcbiAgICB0aGlzLmNhbnZhcy5zdHlsZS53aWR0aCA9ICcxMDAlJztcblxuICAgIC8vdGhpcy5zbGlkZXIuc2V0U2hvd0hhbmRsZXMoZmFsc2UpO1xuICAgIHRoaXMuc2xpZGVyLnJvb3Quc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHRoaXMuc2xpZGVyLnJvb3Quc3R5bGUuekluZGV4ID0gJzk5OSc7XG4gICAgdGhpcy5zbGlkZXIucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIHRoaXMuc2xpZGVyLnJvb3Quc3R5bGUuaGVpZ2h0ID0gJzAuN2VtJztcblxuICAgIHRoaXMudmlzaWJsZVNsaWRlciA9IGZhbHNlO1xuXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcztcbiAgICB0aGlzLnNsaWRlci5vblZhbHVlc0NoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmIChwYXJlbnQuc2xpZGVyID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKChwYXJlbnQuYWxsb3dSZXNpemUpICYmIChwYXJlbnQuc2xpZGVyLm1heCAtIHBhcmVudC5zbGlkZXIubWluICE9IHBhcmVudC5jdXJyZW50UmFuZ2UpICYmIChwYXJlbnQuc2xpZGVyLm1heCAtIHBhcmVudC5zbGlkZXIubWluIDwgcGFyZW50Lkxlbmd0aCkpIHtcbiAgICAgICAgY29uc3Qgd2lkdGhTbGlkZXIgPSBwYXJlbnQuc2xpZGVyLm1heCAtIHBhcmVudC5zbGlkZXIubWluICsgMTtcbiAgICAgICAgY29uc3QgeFNjYWxlOiBudW1iZXIgPSAocGFyZW50LnJvb3QuY2xpZW50V2lkdGggLSB3aWR0aFNsaWRlciAqIHBhcmVudC5wb3NpdGlvbk1hcmdpblZhbHVlKSAvICh3aWR0aFNsaWRlciAqIHBhcmVudC5fcG9zaXRpb25XaWR0aCk7XG4gICAgICAgIHBhcmVudC5fcG9zaXRpb25XaWR0aCA9IHBhcmVudC5fcG9zaXRpb25XaWR0aCAqIHhTY2FsZTtcbiAgICAgICAgcGFyZW50LmN1cnJlbnRSYW5nZSA9IHBhcmVudC5zbGlkZXIubWF4IC0gcGFyZW50LnNsaWRlci5taW4gKyAxO1xuICAgICAgfVxuICAgICAgcGFyZW50LnJlbmRlcih0cnVlKTtcbiAgICB9KTtcblxuXG4gICAgdGhpcy5ob3N0ID0gdWkuZGl2KFt0aGlzLm1zZ0hvc3QsIHRoaXMuY2FudmFzXSk7XG5cbiAgICB0aGlzLmhvc3Quc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcbiAgICB0aGlzLmhvc3Quc3R5bGUuYWxpZ25JdGVtcyA9ICdjZW50ZXInO1xuICAgIHRoaXMuaG9zdC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG4gICAgdGhpcy5ob3N0LnN0eWxlLnNldFByb3BlcnR5KCdvdmVyZmxvdycsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG5cbiAgICBjb25zdCBnZXRNb25vbWVyID0gKHA6IERHLlBvaW50KTogW251bWJlciwgc3RyaW5nIHwgbnVsbCwgUG9zaXRpb25Nb25vbWVySW5mbyB8IG51bGxdID0+IHtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRYID0gcC54ICsgdGhpcy5maXJzdFZpc2libGVJbmRleCAqIHRoaXMucG9zaXRpb25XaWR0aFdpdGhNYXJnaW47XG4gICAgICBjb25zdCBqUG9zID0gTWF0aC5mbG9vcihwLnggLyB0aGlzLnBvc2l0aW9uV2lkdGhXaXRoTWFyZ2luICsgdGhpcy5maXJzdFZpc2libGVJbmRleCk7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucG9zaXRpb25zW2pQb3NdO1xuXG4gICAgICBpZiAocG9zaXRpb24gPT09IHZvaWQgMClcbiAgICAgICAgcmV0dXJuIFtqUG9zLCBudWxsLCBudWxsXTtcblxuICAgICAgY29uc3QgbW9ub21lcjogc3RyaW5nIHwgdW5kZWZpbmVkID0gT2JqZWN0LmtleXMocG9zaXRpb24uZnJlcSlcbiAgICAgICAgLmZpbmQoKG0pID0+IHBvc2l0aW9uLmZyZXFbbV0uYm91bmRzLmNvbnRhaW5zKGNhbGN1bGF0ZWRYLCBwLnkpKTtcbiAgICAgIGlmIChtb25vbWVyID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBbalBvcywgbnVsbCwgbnVsbF07XG5cbiAgICAgIHJldHVybiBbalBvcywgbW9ub21lciwgcG9zaXRpb24uZnJlcVttb25vbWVyXV07XG4gICAgfTtcblxuICAgIGNvbnN0IGNvcnJlY3RNb25vbWVyRmlsdGVyID0gKGlSb3c6IG51bWJlciwgbW9ub21lcjogc3RyaW5nLCBqUG9zOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IHNlcSA9IHRoaXMuc2VxQ29sIS5nZXQoaVJvdyk7XG4gICAgICBjb25zdCBzZXFNID0gc2VxID8gdGhpcy5zcGxpdHRlciEoc2VxKVt0aGlzLnN0YXJ0UG9zaXRpb24gKyBqUG9zXSA6IG51bGw7XG4gICAgICByZXR1cm4gKChzZXFNID09PSBtb25vbWVyKSB8fCAoc2VxTSA9PT0gJycgJiYgbW9ub21lciA9PT0gJy0nKSkgJiYgdGhpcy5kYXRhRnJhbWUuZmlsdGVyLmdldChpUm93KTtcbiAgICB9O1xuXG4gICAgcnhqcy5mcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdtb3VzZW1vdmUnKS5zdWJzY3JpYmUoKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBlIGFzIE1vdXNlRXZlbnQ7XG5cbiAgICAgIGNvbnN0IHI6IG51bWJlciA9IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgY29uc3QgY3Vyc29yUDogREcuUG9pbnQgPSB0aGlzLmNhbnZhcy5nZXRDdXJzb3JQb3NpdGlvbihhcmdzLCByKTtcbiAgICAgIGNvbnN0IFtqUG9zLCBtb25vbWVyXSA9IGdldE1vbm9tZXIoY3Vyc29yUCk7XG4gICAgICBpZiAodGhpcy5kYXRhRnJhbWUgJiYgdGhpcy5zZXFDb2wgJiYgdGhpcy5zcGxpdHRlciAmJiBtb25vbWVyKSB7XG4gICAgICAgIGNvbnN0IHJvd0NvdW50ID0gd3UuY291bnQoKS50YWtlKHRoaXMuZGF0YUZyYW1lLnJvd0NvdW50KS5maWx0ZXIoZnVuY3Rpb24oaVJvdykge1xuICAgICAgICAgIHJldHVybiBjb3JyZWN0TW9ub21lckZpbHRlcihpUm93LCBtb25vbWVyLCBqUG9zKTtcbiAgICAgICAgfSkucmVkdWNlPG51bWJlcj4oKGNvdW50LCBpUm93KSA9PiBjb3VudCArIDEsIDApO1xuICAgICAgICB1aS50b29sdGlwLnNob3codWkuZGl2KFt1aS5kaXYoYCR7bW9ub21lcn1gKSwgdWkuZGl2KGAke3Jvd0NvdW50fSByb3dzYCldKSwgYXJncy54ICsgMTYsIGFyZ3MueSArIDE2KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVpLnRvb2x0aXAuaGlkZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcnhqcy5mcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5jYW52YXMsICdtb3VzZWRvd24nKS5zdWJzY3JpYmUoKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGFyZ3MgPSBlIGFzIE1vdXNlRXZlbnQ7XG4gICAgICBjb25zdCByOiBudW1iZXIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgIGNvbnN0IFtqUG9zLCBtb25vbWVyXSA9IGdldE1vbm9tZXIodGhpcy5jYW52YXMuZ2V0Q3Vyc29yUG9zaXRpb24oYXJncywgcikpO1xuXG4gICAgICAvLyBwcmV2ZW50cyBkZXNlbGVjdCBhbGwgcm93cyBpZiB3ZSBtaXNzIG1vbm9tZXIgYm91bmRzXG4gICAgICBpZiAodGhpcy5kYXRhRnJhbWUgJiYgdGhpcy5zZXFDb2wgJiYgdGhpcy5zcGxpdHRlciAmJiBtb25vbWVyKSB7XG4gICAgICAgIHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi5pbml0KGZ1bmN0aW9uKGlSb3cpIHtcbiAgICAgICAgICByZXR1cm4gY29ycmVjdE1vbm9tZXJGaWx0ZXIoaVJvdywgbW9ub21lciwgalBvcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcnhqcy5mcm9tRXZlbnQ8V2hlZWxFdmVudD4odGhpcy5jYW52YXMsICd3aGVlbCcpLnN1YnNjcmliZSgoZTogV2hlZWxFdmVudCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnZpc2libGVTbGlkZXIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IGNvdW50T2ZTY3JvbGxQb3NpdGlvbnMgPSAoZS5kZWx0YVkgLyAxMDApICogTWF0aC5tYXgoTWF0aC5mbG9vcigodGhpcy5jb3VudE9mUmVuZGVyUG9zaXRpb25zKSAvIDIpLCAxKTtcbiAgICAgIHRoaXMuc2xpZGVyLnNjcm9sbEJ5KHRoaXMuc2xpZGVyLm1pbiArIGNvdW50T2ZTY3JvbGxQb3NpdGlvbnMpO1xuXG4gICAgfSk7XG5cbiAgICB0aGlzLnZpZXdTdWJzLnB1c2godWkub25TaXplQ2hhbmdlZCh0aGlzLnJvb3QpLnN1YnNjcmliZSh0aGlzLnJvb3RPblNpemVDaGFuZ2VkLmJpbmQodGhpcykpKTtcblxuICAgIHRoaXMucm9vdC5hcHBlbmQodGhpcy5ob3N0KTtcbiAgICB0aGlzLnJvb3QuYXBwZW5kKHRoaXMuc2xpZGVyLnJvb3QpO1xuXG4gICAgdGhpcy5fY2FsY3VsYXRlKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTtcbiAgICB0aGlzLnNldFNsaWRlcigpO1xuICAgIHRoaXMucmVuZGVyKGZhbHNlKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGVyIG9mIGNoYW5naW5nIHNpemUgV2ViTG9nbyAqL1xuICBwcml2YXRlIHJvb3RPblNpemVDaGFuZ2VkKCk6IHZvaWQge1xuICAgIHRoaXMuX2NhbGN1bGF0ZSh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyk7XG4gICAgdGhpcy5zZXRTbGlkZXIoKTtcbiAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgfVxuXG4gIC8qKiBBc3NpZ25zIHtAbGluayBzZXFDb2x9IGFuZCB7QGxpbmsgY3B9IGJhc2VkIG9uIHtAbGluayBzZXF1ZW5jZUNvbHVtbk5hbWV9IGFuZCBjYWxscyB7QGxpbmsgcmVuZGVyfSgpLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVTZXFDb2woKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YUZyYW1lKSB7XG4gICAgICB0aGlzLnNlcUNvbCA9IHRoaXMuc2VxdWVuY2VDb2x1bW5OYW1lID8gdGhpcy5kYXRhRnJhbWUuY29sKHRoaXMuc2VxdWVuY2VDb2x1bW5OYW1lKSA6IG51bGw7XG4gICAgICBpZiAodGhpcy5zZXFDb2wgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNlcUNvbCA9IFdlYkxvZ28ucGlja1VwU2VxQ29sKHRoaXMuZGF0YUZyYW1lKTtcbiAgICAgICAgdGhpcy5zZXF1ZW5jZUNvbHVtbk5hbWUgPSB0aGlzLnNlcUNvbCA/IHRoaXMuc2VxQ29sLm5hbWUgOiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VxQ29sKSB7XG4gICAgICAgIGNvbnN0IHVuaXRzOiBzdHJpbmcgPSB0aGlzLnNlcUNvbCEuZ2V0VGFnKERHLlRBR1MuVU5JVFMpO1xuICAgICAgICBjb25zdCBzZXBhcmF0b3I6IHN0cmluZyA9IHRoaXMuc2VxQ29sIS5nZXRUYWcoVW5pdHNIYW5kbGVyLlRBR1Muc2VwYXJhdG9yKTtcbiAgICAgICAgdGhpcy5zcGxpdHRlciA9IFdlYkxvZ28uZ2V0U3BsaXR0ZXIodW5pdHMsIHNlcGFyYXRvcik7XG4gICAgICAgIHRoaXMudW5pdHNIYW5kbGVyID0gbmV3IFVuaXRzSGFuZGxlcih0aGlzLnNlcUNvbCk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnMoKTtcbiAgICAgICAgdGhpcy5jcCA9IFdlYkxvZ28ucGlja1VwUGFsZXR0ZSh0aGlzLnNlcUNvbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNwbGl0dGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5wb3NpdGlvbk5hbWVzID0gW107XG4gICAgICAgIHRoaXMuc3RhcnRQb3NpdGlvbiA9IC0xO1xuICAgICAgICB0aGlzLmVuZFBvc2l0aW9uID0gLTE7XG4gICAgICAgIHRoaXMuY3AgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgLyoqIFVwZGF0ZXMge0BsaW5rIHBvc2l0aW9uTmFtZXN9IGFuZCBjYWxjdWxhdGVzIHtAbGluayBzdGFydFBvc2l0aW9ufSBhbmQge0BsaW5rIGVuZFBvc2l0aW9ufS5cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlUG9zaXRpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZXFDb2wpXG4gICAgICByZXR1cm47XG5cbiAgICBsZXQgY2F0ZWdvcmllczogKHN0cmluZyB8IG51bGwpIFtdO1xuICAgIGlmICh0aGlzLnNocmlua0VtcHR5VGFpbCkge1xuICAgICAgY29uc3QgaW5kaWNlczogSW50MzJBcnJheSA9IHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXRTZWxlY3RlZEluZGV4ZXMoKTtcbiAgICAgIGNhdGVnb3JpZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoXG4gICAgICAgIEFycmF5LmZyb20oQXJyYXkoaW5kaWNlcy5sZW5ndGgpLmtleXMoKSkubWFwKChpOiBudW1iZXIpID0+IHRoaXMuc2VxQ29sIS5nZXQoaW5kaWNlc1tpXSkpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhdGVnb3JpZXMgPSB0aGlzLnNlcUNvbC5jYXRlZ29yaWVzO1xuICAgIH1cbiAgICBjb25zdCBtYXhMZW5ndGggPSBjYXRlZ29yaWVzLmxlbmd0aCA+IDAgPyBNYXRoLm1heCguLi5jYXRlZ29yaWVzLm1hcChcbiAgICAgIChzKSA9PiBzICE9PSBudWxsID8gdGhpcy5zcGxpdHRlciEocykubGVuZ3RoIDogMCkpIDogMDtcblxuICAgIC8vIEdldCBwb3NpdGlvbiBuYW1lcyBmcm9tIGRhdGEgY29sdW1uIHRhZyAncG9zaXRpb25OYW1lcydcbiAgICBjb25zdCBwb3NpdGlvbk5hbWVzVHh0ID0gdGhpcy5zZXFDb2wuZ2V0VGFnKCdwb3NpdGlvbk5hbWVzJyk7XG4gICAgLy8gRmFsbGJhY2sgaWYgJ3Bvc2l0aW9uTmFtZXMnIHRhZyBpcyBub3QgcHJvdmlkZWRcbiAgICB0aGlzLnBvc2l0aW9uTmFtZXMgPSBwb3NpdGlvbk5hbWVzVHh0ID8gcG9zaXRpb25OYW1lc1R4dC5zcGxpdCgnLCAnKS5tYXAoKG4pID0+IG4udHJpbSgpKSA6XG4gICAgICBbLi4uQXJyYXkobWF4TGVuZ3RoKS5rZXlzKCldLm1hcCgoalBvcykgPT4gYCR7alBvcyArIDF9YCk7XG5cbiAgICB0aGlzLnN0YXJ0UG9zaXRpb24gPSAodGhpcy5zdGFydFBvc2l0aW9uTmFtZSAmJiB0aGlzLnBvc2l0aW9uTmFtZXMgJiZcbiAgICAgIHRoaXMucG9zaXRpb25OYW1lcy5pbmNsdWRlcyh0aGlzLnN0YXJ0UG9zaXRpb25OYW1lKSkgP1xuICAgICAgdGhpcy5wb3NpdGlvbk5hbWVzLmluZGV4T2YodGhpcy5zdGFydFBvc2l0aW9uTmFtZSkgOiAwO1xuICAgIHRoaXMuZW5kUG9zaXRpb24gPSAodGhpcy5lbmRQb3NpdGlvbk5hbWUgJiYgdGhpcy5wb3NpdGlvbk5hbWVzICYmXG4gICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5jbHVkZXModGhpcy5lbmRQb3NpdGlvbk5hbWUpKSA/XG4gICAgICB0aGlzLnBvc2l0aW9uTmFtZXMuaW5kZXhPZih0aGlzLmVuZFBvc2l0aW9uTmFtZSkgOiAobWF4TGVuZ3RoIC0gMSk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSXNIaWRlU2xpZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpeFdpZHRoIHx8IE1hdGguZmxvb3IodGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnBvc2l0aW9uV2lkdGhXaXRoTWFyZ2luKSA+PSB0aGlzLkxlbmd0aDtcbiAgfVxuXG4gIHNldFNsaWRlclZpc2liaWxpdHkodmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICB0aGlzLnNsaWRlci5yb290LnN0eWxlLmRpc3BsYXkgPSAnaW5oZXJpdCc7XG4gICAgICB0aGlzLnZpc2libGVTbGlkZXIgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNsaWRlci5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB0aGlzLnZpc2libGVTbGlkZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogU2V0cyB7QGxpbmsgc2xpZGVyfSwgbmVlZGVkIHRvIHNldCBzbGlkZXIgb3B0aW9ucyBhbmQgdG8gdXBkYXRlIHNsaWRlciBwb3NpdGlvbi5cbiAgICovXG4gIHByaXZhdGUgc2V0U2xpZGVyKCk6IHZvaWQge1xuICAgIGlmICgodGhpcy5zbGlkZXIgIT0gbnVsbCkgJiYgKHRoaXMuY2FudmFzICE9IG51bGwpKSB7XG4gICAgICBsZXQgZGlmZkVuZFNjcm9sbEFuZFNsaWRlck1pbiA9IE1hdGguZmxvb3IodGhpcy5zbGlkZXIubWluICsgdGhpcy5jYW52YXMud2lkdGggLyB0aGlzLnBvc2l0aW9uV2lkdGhXaXRoTWFyZ2luKSAtIHRoaXMuTGVuZ3RoO1xuICAgICAgZGlmZkVuZFNjcm9sbEFuZFNsaWRlck1pbiA9IGRpZmZFbmRTY3JvbGxBbmRTbGlkZXJNaW4gPiAwID8gZGlmZkVuZFNjcm9sbEFuZFNsaWRlck1pbiA6IDA7XG4gICAgICBsZXQgbmV3TWluID0gTWF0aC5mbG9vcih0aGlzLnNsaWRlci5taW4gLSBkaWZmRW5kU2Nyb2xsQW5kU2xpZGVyTWluKTtcbiAgICAgIGxldCBuZXdNYXggPSBNYXRoLmZsb29yKHRoaXMuc2xpZGVyLm1pbiAtIGRpZmZFbmRTY3JvbGxBbmRTbGlkZXJNaW4pICsgTWF0aC5mbG9vcih0aGlzLmNhbnZhcy53aWR0aCAvIHRoaXMucG9zaXRpb25XaWR0aFdpdGhNYXJnaW4pO1xuICAgICAgaWYgKHRoaXMuY2hlY2tJc0hpZGVTbGlkZXIoKSkge1xuICAgICAgICBuZXdNaW4gPSAwO1xuICAgICAgICBuZXdNYXggPSB0aGlzLkxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICB0aGlzLnNsaWRlci5zZXRWYWx1ZXMoMCwgdGhpcy5MZW5ndGgsXG4gICAgICAgIG5ld01pbiwgbmV3TWF4KTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKiBIYW5kbGVyIG9mIHByb3BlcnR5IGNoYW5nZSBldmVudHMuICovXG4gIHB1YmxpYyBvdmVycmlkZSBvblByb3BlcnR5Q2hhbmdlZChwcm9wZXJ0eTogREcuUHJvcGVydHkpOiB2b2lkIHtcbiAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlZChwcm9wZXJ0eSk7XG5cbiAgICBzd2l0Y2ggKHByb3BlcnR5Lm5hbWUpIHtcbiAgICBjYXNlICdzZXF1ZW5jZUNvbHVtbk5hbWUnOlxuICAgICAgdGhpcy51cGRhdGVTZXFDb2woKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3N0YXJ0UG9zaXRpb25OYW1lJzpcbiAgICAgIHRoaXMudXBkYXRlU2VxQ29sKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmRQb3NpdGlvbk5hbWUnOlxuICAgICAgdGhpcy51cGRhdGVTZXFDb2woKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Bvc2l0aW9uV2lkdGgnOlxuICAgICAgdGhpcy5fcG9zaXRpb25XaWR0aCA9IHRoaXMucG9zaXRpb25XaWR0aDtcbiAgICAgIHRoaXMuc2V0U2xpZGVyKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaXhXaWR0aCc6XG4gICAgICB0aGlzLnNldFNsaWRlcigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZml0QXJlYSc6XG4gICAgICB0aGlzLnNldFNsaWRlcigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnc2hyaW5rRW1wdHlUYWlsJzpcbiAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdza2lwRW1wdHlQb3NpdGlvbnMnOlxuICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnMoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Bvc2l0aW9uTWFyZ2luJzpcbiAgICAgIHRoaXMuc2V0U2xpZGVyKCk7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcih0cnVlKTtcbiAgfVxuXG4gIC8qKiBBZGQgZmlsdGVyIGhhbmRsZXJzIHdoZW4gdGFibGUgaXMgYSBhdHRhY2hlZCAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9uVGFibGVBdHRhY2hlZCgpIHtcbiAgICBzdXBlci5vblRhYmxlQXR0YWNoZWQoKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhRnJhbWVUeHQ6IHN0cmluZyA9IHRoaXMuZGF0YUZyYW1lID8gJ2RhdGEnIDogJ251bGwnO1xuICAgICAgY29uc29sZS5kZWJ1ZyhgYmlvOiBXZWJMb2dvPCR7dGhpcy52aWV3ZXJJZH0+Lm9uVGFibGVBdHRhY2hlZCggZGF0YUZyYW1lID0gJHtkYXRhRnJhbWVUeHR9ICkgc3RhcnRgKTtcblxuICAgICAgdGhpcy51cGRhdGVTZXFDb2woKTtcblxuICAgICAgaWYgKHRoaXMuZGF0YUZyYW1lICE9PSB2b2lkIDApIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2godGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLm9uQ2hhbmdlZC5zdWJzY3JpYmUoKF8pID0+IHRoaXMucmVuZGVyKCkpKTtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2godGhpcy5kYXRhRnJhbWUuZmlsdGVyLm9uQ2hhbmdlZC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9ucygpO1xuICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgICBjb25zb2xlLmRlYnVnKGBiaW86IFdlYkxvZ288JHt0aGlzLnZpZXdlcklkfT4ub25UYWJsZUF0dGFjaGVkKCkgZW5kYCk7XG4gICAgfSwgMCAvKiBuZXh0IGV2ZW50IGN5Y2xlICovKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgYWxsIGhhbmRsZXJzIHdoZW4gdGFibGUgaXMgYSBkZXRhY2ggICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBkZXRhY2goKSB7XG4gICAgY29uc3QgZGF0YUZyYW1lVHh0ID0gYCR7dGhpcy5kYXRhRnJhbWUgPyAnZGF0YScgOiAnbnVsbCd9YDtcbiAgICBjb25zb2xlLmRlYnVnKGBiaW86IFdlYkxvZ288JHt0aGlzLnZpZXdlcklkfT4ub25UYWJsZUF0dGFjaGVkKCBkYXRhRnJhbWUgPSAke2RhdGFGcmFtZVR4dH0gKSBzdGFydGApO1xuICAgIHN1cGVyLmRldGFjaCgpO1xuXG4gICAgdGhpcy52aWV3U3Vicy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLmhvc3QhLnJlbW92ZSgpO1xuICAgIHRoaXMubXNnSG9zdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhvc3QgPSB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgY29uc29sZS5kZWJ1ZyhgYmlvOiBXZWJMb2dvPCR7dGhpcy52aWV3ZXJJZH0+Lm9uVGFibGVBdHRhY2hlZCgpIGVuZGApO1xuICB9XG5cbiAgLyoqIEhlbHBlciBmdW5jdGlvbiBmb3IgcmVuZGVyaW5nICovXG4gIHByb3RlY3RlZCBfbnVsbFNlcXVlbmNlKGZpbGxlclJlc2lkdWUgPSAnWCcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5za2lwRW1wdHlTZXF1ZW5jZXMpXG4gICAgICByZXR1cm4gbmV3IEFycmF5KHRoaXMuTGVuZ3RoKS5maWxsKGZpbGxlclJlc2lkdWUpLmpvaW4oJycpO1xuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLyoqIEhlbHBlciBmdW5jdGlvbiBmb3IgcmVtb3ZlIGVtcHR5IHBvc2l0aW9ucyAqL1xuICAvLyBUT0RPOiB1c2UgdGhpcyBmdW5jdGlvbiBpbiBmcm9tIGNvcmVcbiAgcHJvdGVjdGVkIHJlbW92ZVdoZXJlKGFycmF5OiBBcnJheTxhbnk+LCBwcmVkaWNhdGU6IChUOiBhbnkpID0+IGJvb2xlYW4pOiBBcnJheTxhbnk+IHtcbiAgICBsZXQgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgIGxldCB1cGRhdGVJdGVyYXRvciA9IDA7XG4gICAgZm9yIChsZXQgZGVsZXRlSXRlcmF0b3IgPSAwOyBkZWxldGVJdGVyYXRvciA8IGxlbmd0aDsgZGVsZXRlSXRlcmF0b3IrKykge1xuICAgICAgaWYgKCFwcmVkaWNhdGUoYXJyYXlbZGVsZXRlSXRlcmF0b3JdKSkge1xuICAgICAgICBhcnJheVt1cGRhdGVJdGVyYXRvcl0gPSBhcnJheVtkZWxldGVJdGVyYXRvcl07XG4gICAgICAgIHVwZGF0ZUl0ZXJhdG9yKys7XG4gICAgICB9XG4gICAgfVxuICAgIGFycmF5Lmxlbmd0aCA9IHVwZGF0ZUl0ZXJhdG9yO1xuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG5cbiAgLyoqIEZ1bmN0aW9uIGZvciByZW1vdmluZyBlbXB0eSBwb3NpdGlvbnMgKi9cbiAgcHJvdGVjdGVkIF9yZW1vdmVFbXB0eVBvc2l0aW9ucygpIHtcbiAgICBpZiAodGhpcy5za2lwRW1wdHlQb3NpdGlvbnMpIHtcbiAgICAgIHRoaXMucmVtb3ZlV2hlcmUodGhpcy5wb3NpdGlvbnMsIGl0ZW0gPT4gaXRlbT8uZnJlcVsnLSddPy5jb3VudCA9PT0gaXRlbS5yb3dDb3VudCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9jYWxjdWxhdGUocjogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLmhvc3QgfHwgIXRoaXMuc2VxQ29sIHx8ICF0aGlzLmRhdGFGcmFtZSlcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLnVuaXRzSGFuZGxlciA9IG5ldyBVbml0c0hhbmRsZXIodGhpcy5zZXFDb2wpO1xuXG4gICAgdGhpcy5jYWxjU2l6ZSgpO1xuXG4gICAgdGhpcy5wb3NpdGlvbnMgPSBuZXcgQXJyYXkodGhpcy5zdGFydFBvc2l0aW9uIDw9IHRoaXMuZW5kUG9zaXRpb24gPyB0aGlzLmVuZFBvc2l0aW9uIC0gdGhpcy5zdGFydFBvc2l0aW9uICsgMSA6IDApO1xuICAgIGZvciAobGV0IGpQb3MgPSAwOyBqUG9zIDwgdGhpcy5MZW5ndGg7IGpQb3MrKykge1xuICAgICAgY29uc3QgcG9zTmFtZTogc3RyaW5nID0gdGhpcy5wb3NpdGlvbk5hbWVzW3RoaXMuc3RhcnRQb3NpdGlvbiArIGpQb3NdO1xuICAgICAgdGhpcy5wb3NpdGlvbnNbalBvc10gPSBuZXcgUG9zaXRpb25JbmZvKHBvc05hbWUpO1xuICAgIH1cblxuICAgIC8vIDIwMjItMDUtMDUgYXNrYWxraW4gaW5zdHJ1Y3RlZCB0byBzaG93IFdlYkxvZ28gYmFzZWQgb24gZmlsdGVyIChub3Qgc2VsZWN0aW9uKVxuICAgIGNvbnN0IGluZGljZXMgPSB0aGlzLmRhdGFGcmFtZS5maWx0ZXIuZ2V0U2VsZWN0ZWRJbmRleGVzKCk7XG4gICAgLy8gY29uc3QgaW5kaWNlcyA9IHRoaXMuZGF0YUZyYW1lLnNlbGVjdGlvbi50cnVlQ291bnQgPiAwID8gdGhpcy5kYXRhRnJhbWUuc2VsZWN0aW9uLmdldFNlbGVjdGVkSW5kZXhlcygpIDpcbiAgICAvLyAgIHRoaXMuZGF0YUZyYW1lLmZpbHRlci5nZXRTZWxlY3RlZEluZGV4ZXMoKTtcblxuICAgIHRoaXMucm93c01hc2tlZCA9IGluZGljZXMubGVuZ3RoO1xuICAgIHRoaXMucm93c051bGwgPSAwO1xuXG4gICAgZm9yIChjb25zdCBpIG9mIGluZGljZXMpIHtcbiAgICAgIGxldCBzOiBzdHJpbmcgPSA8c3RyaW5nPih0aGlzLnNlcUNvbC5nZXQoaSkpO1xuXG4gICAgICBpZiAoIXMpIHtcbiAgICAgICAgcyA9IHRoaXMuX251bGxTZXF1ZW5jZSgpO1xuICAgICAgICArK3RoaXMucm93c051bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlcU06IHN0cmluZ1tdID0gdGhpcy5zcGxpdHRlciEocyk7XG4gICAgICBmb3IgKGxldCBqUG9zID0gMDsgalBvcyA8IHRoaXMuTGVuZ3RoOyBqUG9zKyspIHtcbiAgICAgICAgY29uc3QgcG1JbmZvID0gdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcTtcbiAgICAgICAgY29uc3QgbTogc3RyaW5nID0gc2VxTVt0aGlzLnN0YXJ0UG9zaXRpb24gKyBqUG9zXSB8fCAnLSc7XG4gICAgICAgIGlmICghKG0gaW4gcG1JbmZvKSlcbiAgICAgICAgICBwbUluZm9bbV0gPSBuZXcgUG9zaXRpb25Nb25vbWVySW5mbygpO1xuICAgICAgICBwbUluZm9bbV0uY291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyNyZWdpb24gUG9saXNoIGZyZXEgY291bnRzXG4gICAgZm9yIChsZXQgalBvcyA9IDA7IGpQb3MgPCB0aGlzLkxlbmd0aDsgalBvcysrKSB7XG4gICAgICAvLyBkZWxldGUgdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcVsnLSddO1xuXG4gICAgICB0aGlzLnBvc2l0aW9uc1tqUG9zXS5yb3dDb3VudCA9IDA7XG4gICAgICBmb3IgKGNvbnN0IG0gaW4gdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcSlcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNbalBvc10ucm93Q291bnQgKz0gdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcVttXS5jb3VudDtcbiAgICAgIGlmICh0aGlzLnBvc2l0aW9uSGVpZ2h0ID09IFBvc2l0aW9uSGVpZ2h0LkVudHJvcHkpIHtcbiAgICAgICAgdGhpcy5wb3NpdGlvbnNbalBvc10uc3VtRm9ySGVpZ2h0Q2FsYyA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgbSBpbiB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxKSB7XG4gICAgICAgICAgY29uc3QgcG4gPSB0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxW21dLmNvdW50IC8gdGhpcy5wb3NpdGlvbnNbalBvc10ucm93Q291bnQ7XG4gICAgICAgICAgdGhpcy5wb3NpdGlvbnNbalBvc10uc3VtRm9ySGVpZ2h0Q2FsYyArPSAtcG4gKiBNYXRoLmxvZzIocG4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuICAgIHRoaXMuX3JlbW92ZUVtcHR5UG9zaXRpb25zKCk7XG5cbiAgICBjb25zdCBhYnNvbHV0ZU1heEhlaWdodCA9IHRoaXMuY2FudmFzLmhlaWdodCAtIHRoaXMuYXhpc0hlaWdodCAqIHI7XG5cbiAgICAvLyNyZWdpb24gQ2FsY3VsYXRlIHNjcmVlblxuICAgIGZvciAobGV0IGpQb3MgPSAwOyBqUG9zIDwgdGhpcy5MZW5ndGg7IGpQb3MrKykge1xuICAgICAgY29uc3QgZnJlcTogeyBbYzogc3RyaW5nXTogUG9zaXRpb25Nb25vbWVySW5mbyB9ID0gdGhpcy5wb3NpdGlvbnNbalBvc10uZnJlcTtcbiAgICAgIGNvbnN0IHJvd0NvdW50ID0gdGhpcy5wb3NpdGlvbnNbalBvc10ucm93Q291bnQ7XG4gICAgICBjb25zdCBhbHBoYWJldFNpemUgPSB0aGlzLmdldEFscGhhYmV0U2l6ZSgpO1xuICAgICAgaWYgKCh0aGlzLnBvc2l0aW9uSGVpZ2h0ID09IFBvc2l0aW9uSGVpZ2h0LkVudHJvcHkpICYmIChhbHBoYWJldFNpemUgPT0gbnVsbCkpIHtcbiAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcignV2ViTG9nbzogYWxwaGFiZXQgaXMgdW5kZWZpbmVkLicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXhIZWlnaHQgPSAodGhpcy5wb3NpdGlvbkhlaWdodCA9PSBQb3NpdGlvbkhlaWdodC5FbnRyb3B5KSA/IChhYnNvbHV0ZU1heEhlaWdodCAqIChNYXRoLmxvZzIoYWxwaGFiZXRTaXplKSAtICh0aGlzLnBvc2l0aW9uc1tqUG9zXS5zdW1Gb3JIZWlnaHRDYWxjKSkgLyBNYXRoLmxvZzIoYWxwaGFiZXRTaXplKSkgOiBhYnNvbHV0ZU1heEhlaWdodDtcblxuICAgICAgbGV0IHk6IG51bWJlciA9IHRoaXMuYXhpc0hlaWdodCAqIHIgKyAoYWJzb2x1dGVNYXhIZWlnaHQgLSBtYXhIZWlnaHQgLSAxKTtcblxuICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGZyZXEpLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGFbMF0gIT09ICctJyAmJiBiWzBdICE9PSAnLScpXG4gICAgICAgICAgcmV0dXJuIGJbMV0uY291bnQgLSBhWzFdLmNvdW50O1xuICAgICAgICBlbHNlIGlmIChhWzBdID09PSAnLScgJiYgYlswXSA9PT0gJy0nKVxuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBlbHNlIGlmIChhWzBdID09PSAnLScpXG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICBlbHNlIC8qIChiWzBdID09PSAnLScpICovXG4gICAgICAgICAgcmV0dXJuICsxO1xuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgY29uc3QgcG1JbmZvOiBQb3NpdGlvbk1vbm9tZXJJbmZvID0gZW50cnlbMV07XG4gICAgICAgIC8vIGNvbnN0IG06IHN0cmluZyA9IGVudHJ5WzBdO1xuICAgICAgICBjb25zdCBoOiBudW1iZXIgPSBtYXhIZWlnaHQgKiBwbUluZm8uY291bnQgLyByb3dDb3VudDtcblxuICAgICAgICBwbUluZm8uYm91bmRzID0gbmV3IERHLlJlY3QoalBvcyAqIHRoaXMucG9zaXRpb25XaWR0aFdpdGhNYXJnaW4sIHksIHRoaXMuX3Bvc2l0aW9uV2lkdGgsIGgpO1xuICAgICAgICB5ICs9IGg7XG4gICAgICB9XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuXG4gIH1cblxuICAvKiogUmVuZGVyIFdlYkxvZ28gc2Vuc2l0aXZlIHRvIGNoYW5nZXMgaW4gcGFyYW1zIG9mIHJlbmRlcmluZ1xuICAgKkBwYXJhbSB7Ym9vbGVhbn0gcmVjYWxjIC0gaW5kaWNhdGVzIHRoYXQgbmVlZCB0byByZWNhbGN1bGF0ZSBkYXRhIGZvciByZW5kZXJpbmdcbiAgICovXG4gIHJlbmRlcihyZWNhbGMgPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMubXNnSG9zdCkge1xuICAgICAgaWYgKHRoaXMuc2VxQ29sICYmICF0aGlzLmNwKSB7XG4gICAgICAgIHRoaXMubXNnSG9zdCEuaW5uZXJUZXh0ID0gYFVua25vd24gcGFsZXR0ZSAoY29sdW1uIHNlbVR5cGU6ICcke3RoaXMuc2VxQ29sLnNlbVR5cGV9JykuYDtcbiAgICAgICAgdGhpcy5tc2dIb3N0IS5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1zZ0hvc3QhLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNlcUNvbCB8fCAhdGhpcy5kYXRhRnJhbWUgfHwgIXRoaXMuY3AgfHwgdGhpcy5zdGFydFBvc2l0aW9uID09PSAtMSB8fCB0aGlzLmVuZFBvc2l0aW9uID09PSAtMSB8fCB0aGlzLmhvc3QgPT0gbnVsbCB8fCB0aGlzLnNsaWRlciA9PSBudWxsKVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3QgZyA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgaWYgKCFnKSByZXR1cm47XG5cbiAgICB0aGlzLnNsaWRlci5yb290LnN0eWxlLndpZHRoID0gYCR7dGhpcy5ob3N0LmNsaWVudFdpZHRofXB4YDtcblxuICAgIGNvbnN0IHIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcblxuICAgIGlmIChyZWNhbGMpXG4gICAgICB0aGlzLl9jYWxjdWxhdGUocik7XG5cbiAgICBnLnJlc2V0VHJhbnNmb3JtKCk7XG4gICAgZy5maWxsU3R5bGUgPSBERy5Db2xvci50b0h0bWwodGhpcy5iYWNrZ3JvdW5kQ29sb3IpO1xuICAgIGcuZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7XG4gICAgZy50ZXh0QmFzZWxpbmUgPSB0aGlzLnRleHRCYXNlbGluZTtcblxuICAgIGlmICh0aGlzLmNoZWNrSXNIaWRlU2xpZGVyKCkpIHtcbiAgICAgIHRoaXMuc2V0U2xpZGVyVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U2xpZGVyVmlzaWJpbGl0eSh0cnVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhDb3VudE9mUm93c1JlbmRlcmVkID0gdGhpcy5jb3VudE9mUmVuZGVyUG9zaXRpb25zICsgMTtcbiAgICBjb25zdCBmaXJzdFZpc2libGVJbmRleCA9ICh0aGlzLnZpc2libGVTbGlkZXIpID8gTWF0aC5mbG9vcih0aGlzLnNsaWRlci5taW4pIDogMDtcbiAgICBjb25zdCBsYXN0VmlzaWJsZUluZGV4ID0gTWF0aC5taW4odGhpcy5MZW5ndGgsIGZpcnN0VmlzaWJsZUluZGV4ICsgbWF4Q291bnRPZlJvd3NSZW5kZXJlZCk7XG5cbiAgICAvLyNyZWdpb24gUGxvdCBwb3NpdGlvbk5hbWVzXG4gICAgY29uc3QgcG9zaXRpb25Gb250U2l6ZSA9IDEwICogcjtcbiAgICBnLnJlc2V0VHJhbnNmb3JtKCk7XG4gICAgZy5maWxsU3R5bGUgPSAnYmxhY2snO1xuICAgIGcudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgZy5mb250ID0gYCR7cG9zaXRpb25Gb250U2l6ZS50b0ZpeGVkKDEpfXB4IFJvYm90bywgUm9ib3RvIExvY2FsLCBzYW5zLXNlcmlmYDtcbiAgICBjb25zdCBwb3NOYW1lTWF4V2lkdGggPSBNYXRoLm1heCguLi50aGlzLnBvc2l0aW9ucy5tYXAoKHBvcykgPT4gZy5tZWFzdXJlVGV4dChwb3MubmFtZSkud2lkdGgpKTtcbiAgICBjb25zdCBoU2NhbGUgPSBwb3NOYW1lTWF4V2lkdGggPCAodGhpcy5fcG9zaXRpb25XaWR0aCAtIDIpID8gMSA6ICh0aGlzLl9wb3NpdGlvbldpZHRoIC0gMikgLyBwb3NOYW1lTWF4V2lkdGg7XG5cbiAgICBmb3IgKGxldCBqUG9zID0gdGhpcy5maXJzdFZpc2libGVJbmRleDsgalBvcyA8IGxhc3RWaXNpYmxlSW5kZXg7IGpQb3MrKykge1xuICAgICAgY29uc3QgcG9zOiBQb3NpdGlvbkluZm8gPSB0aGlzLnBvc2l0aW9uc1tqUG9zXTtcbiAgICAgIGcucmVzZXRUcmFuc2Zvcm0oKTtcbiAgICAgIGcuc2V0VHJhbnNmb3JtKFxuICAgICAgICBoU2NhbGUsIDAsIDAsIDEsXG4gICAgICAgIGpQb3MgKiB0aGlzLnBvc2l0aW9uV2lkdGhXaXRoTWFyZ2luICsgdGhpcy5fcG9zaXRpb25XaWR0aCAvIDIgLSB0aGlzLnBvc2l0aW9uV2lkdGhXaXRoTWFyZ2luICogZmlyc3RWaXNpYmxlSW5kZXgsIDApO1xuICAgICAgZy5maWxsVGV4dChwb3MubmFtZSwgMCwgMCk7XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvbiBQbG90IHBvc2l0aW9uTmFtZXNcbiAgICBjb25zdCBmb250U3R5bGUgPSAnMTZweCBSb2JvdG8sIFJvYm90byBMb2NhbCwgc2Fucy1zZXJpZic7XG4gICAgLy8gSGFja3MgdG8gc2NhbGUgdXBwZXJjYXNlIGNoYXJhY3RlcnMgdG8gdGFyZ2V0IHJlY3RhbmdsZVxuICAgIGNvbnN0IHVwcGVyY2FzZUxldHRlckFzY2VudCA9IDAuMjU7XG4gICAgY29uc3QgdXBwZXJjYXNlTGV0dGVySGVpZ2h0ID0gMTIuMjtcbiAgICBmb3IgKGxldCBqUG9zID0gdGhpcy5maXJzdFZpc2libGVJbmRleDsgalBvcyA8IGxhc3RWaXNpYmxlSW5kZXg7IGpQb3MrKykge1xuICAgICAgZm9yIChjb25zdCBbbW9ub21lciwgcG1JbmZvXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnBvc2l0aW9uc1tqUG9zXS5mcmVxKSkge1xuICAgICAgICBpZiAobW9ub21lciAhPT0gJy0nKSB7XG4gICAgICAgICAgY29uc3QgbW9ub21lclR4dCA9IFdlYkxvZ28ubW9ub21lclRvU2hvcnQobW9ub21lciwgNSk7XG4gICAgICAgICAgY29uc3QgYiA9IHBtSW5mby5ib3VuZHM7XG4gICAgICAgICAgY29uc3QgbGVmdCA9IGIubGVmdCAtIHRoaXMucG9zaXRpb25XaWR0aFdpdGhNYXJnaW4gKiB0aGlzLmZpcnN0VmlzaWJsZUluZGV4O1xuXG4gICAgICAgICAgZy5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgICAgIGcuc3Ryb2tlU3R5bGUgPSAnbGlnaHRncmF5JztcbiAgICAgICAgICBnLmxpbmVXaWR0aCA9IDE7XG4gICAgICAgICAgZy5yZWN0KGxlZnQsIGIudG9wLCBiLndpZHRoLCBiLmhlaWdodCk7XG4gICAgICAgICAgZy5maWxsU3R5bGUgPSB0aGlzLmNwLmdldChtb25vbWVyKSA/PyB0aGlzLmNwLmdldCgnb3RoZXInKTtcbiAgICAgICAgICBnLnRleHRBbGlnbiA9ICdsZWZ0JztcbiAgICAgICAgICBnLmZvbnQgPSBmb250U3R5bGU7XG4gICAgICAgICAgLy9nLmZpbGxSZWN0KGIubGVmdCwgYi50b3AsIGIud2lkdGgsIGIuaGVpZ2h0KTtcbiAgICAgICAgICBjb25zdCBtVG06IFRleHRNZXRyaWNzID0gZy5tZWFzdXJlVGV4dChtb25vbWVyVHh0KTtcblxuICAgICAgICAgIGcuc2V0VHJhbnNmb3JtKFxuICAgICAgICAgICAgYi53aWR0aCAvIG1UbS53aWR0aCwgMCwgMCwgYi5oZWlnaHQgLyB1cHBlcmNhc2VMZXR0ZXJIZWlnaHQsXG4gICAgICAgICAgICBsZWZ0LCBiLnRvcCk7XG4gICAgICAgICAgZy5maWxsVGV4dChtb25vbWVyVHh0LCAwLCAtdXBwZXJjYXNlTGV0dGVyQXNjZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBDYWxjdWxhdGUgY2FudmFzIHNpemUgYW4gcG9zaXRpb25XaWR0aCBhbmQgdXBkYXRlcyBwcm9wZXJ0aWVzICovXG4gIHByaXZhdGUgY2FsY1NpemUoKSB7XG4gICAgaWYgKCF0aGlzLmhvc3QpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCByOiBudW1iZXIgPSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbztcblxuICAgIGxldCB3aWR0aDogbnVtYmVyID0gdGhpcy5MZW5ndGggKiB0aGlzLnBvc2l0aW9uV2lkdGggLyByO1xuICAgIGxldCBoZWlnaHQgPSBNYXRoLm1pbih0aGlzLm1heEhlaWdodCwgTWF0aC5tYXgodGhpcy5taW5IZWlnaHQsIHRoaXMucm9vdC5jbGllbnRIZWlnaHQpKTtcblxuICAgIGlmICgodGhpcy5maXRBcmVhKSAmJiAoIXRoaXMudmlzaWJsZVNsaWRlcikpIHtcbiAgICAgIGNvbnN0IHlTY2FsZTogbnVtYmVyID0gdGhpcy5yb290LmNsaWVudEhlaWdodCAvIGhlaWdodDtcbiAgICAgIGNvbnN0IHhTY2FsZTogbnVtYmVyID0gKHRoaXMucm9vdC5jbGllbnRXaWR0aCAtIHRoaXMuTGVuZ3RoICogdGhpcy5wb3NpdGlvbk1hcmdpblZhbHVlKSAvIHdpZHRoO1xuICAgICAgY29uc3Qgc2NhbGUgPSBNYXRoLm1heCgxLCBNYXRoLm1pbih4U2NhbGUsIHlTY2FsZSkpO1xuICAgICAgd2lkdGggPSB3aWR0aCAqIHNjYWxlO1xuICAgICAgaGVpZ2h0ID0gaGVpZ2h0ICogc2NhbGU7XG4gICAgICB0aGlzLl9wb3NpdGlvbldpZHRoID0gdGhpcy5wb3NpdGlvbldpZHRoICogc2NhbGU7XG4gICAgfVxuXG4gICAgd2lkdGggPSB0aGlzLkxlbmd0aCAqIHRoaXMucG9zaXRpb25XaWR0aFdpdGhNYXJnaW4gLyByO1xuXG4gICAgdGhpcy5jYW52YXMud2lkdGggPSB0aGlzLnJvb3QuY2xpZW50V2lkdGggKiByO1xuICAgIHRoaXMuY2FudmFzLnN0eWxlLndpZHRoID0gYCR7dGhpcy5yb290LmNsaWVudFdpZHRofXB4YDtcblxuICAgIC8vIGNvbnN0IGNhbnZhc0hlaWdodDogbnVtYmVyID0gd2lkdGggPiB0aGlzLnJvb3QuY2xpZW50V2lkdGggPyBoZWlnaHQgLSA4IDogaGVpZ2h0O1xuICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgYCR7aGVpZ2h0fXB4YCk7XG4gICAgY29uc3QgY2FudmFzSGVpZ2h0OiBudW1iZXIgPSB0aGlzLmhvc3QuY2xpZW50SGVpZ2h0O1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IGNhbnZhc0hlaWdodCAqIHI7XG5cbiAgICAvLyBBZGp1c3QgaG9zdCBhbmQgcm9vdCB3aWR0aFxuICAgIGlmICh0aGlzLmZpeFdpZHRoKSB7XG4gICAgICAvLyBmdWxsIHdpZHRoIGZvciBjYW52YXMgaG9zdCBhbmQgcm9vdFxuICAgICAgdGhpcy5yb290LnN0eWxlLndpZHRoID0gdGhpcy5ob3N0LnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgICAgdGhpcy5yb290LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgICB0aGlzLnJvb3Quc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cteScsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFsbG93IHNjcm9sbCBjYW52YXMgaW4gcm9vdFxuICAgICAgdGhpcy5yb290LnN0eWxlLndpZHRoID0gdGhpcy5ob3N0LnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgdGhpcy5ob3N0LnN0eWxlLm92ZXJmbG93WCA9ICdhdXRvIWltcG9ydGFudCc7XG4gICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ3RleHQtYWxpZ24nLCB0aGlzLmhvcml6b250YWxBbGlnbm1lbnQpO1xuXG4gICAgICBjb25zdCBzbGlkZXJIZWlnaHQgPSB0aGlzLnZpc2libGVTbGlkZXIgPyAxMCA6IDA7XG5cbiAgICAgIC8vIHZlcnRpY2FsIGFsaWdubWVudFxuICAgICAgbGV0IGhvc3RUb3BNYXJnaW4gPSAwO1xuICAgICAgc3dpdGNoICh0aGlzLnZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICBob3N0VG9wTWFyZ2luID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICBob3N0VG9wTWFyZ2luID0gTWF0aC5tYXgoMCwgKHRoaXMucm9vdC5jbGllbnRIZWlnaHQgLSBoZWlnaHQpIC8gMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgaG9zdFRvcE1hcmdpbiA9IE1hdGgubWF4KDAsIHRoaXMucm9vdC5jbGllbnRIZWlnaHQgLSBoZWlnaHQgLSBzbGlkZXJIZWlnaHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIGhvcml6b250YWwgYWxpZ25tZW50XG4gICAgICBsZXQgaG9zdExlZnRNYXJnaW4gPSAwO1xuICAgICAgc3dpdGNoICh0aGlzLmhvcml6b250YWxBbGlnbm1lbnQpIHtcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICBob3N0TGVmdE1hcmdpbiA9IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgaG9zdExlZnRNYXJnaW4gPSBNYXRoLm1heCgwLCAodGhpcy5yb290LmNsaWVudFdpZHRoIC0gd2lkdGgpIC8gMikgKiByO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgaG9zdExlZnRNYXJnaW4gPSBNYXRoLm1heCgwLCB0aGlzLnJvb3QuY2xpZW50V2lkdGggLSB3aWR0aCkgKiByO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWFyZ2luLXRvcCcsIGAke2hvc3RUb3BNYXJnaW59cHhgLCAnaW1wb3J0YW50Jyk7XG4gICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ21hcmdpbi1sZWZ0JywgYCR7aG9zdExlZnRNYXJnaW59cHhgLCAnaW1wb3J0YW50Jyk7XG4gICAgICBpZiAodGhpcy5zbGlkZXIgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNsaWRlci5yb290LnN0eWxlLnNldFByb3BlcnR5KCdtYXJnaW4tdG9wJywgYCR7aG9zdFRvcE1hcmdpbiArIGNhbnZhc0hlaWdodH1weGAsICdpbXBvcnRhbnQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucm9vdC5jbGllbnRIZWlnaHQgPD0gaGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnaGVpZ2h0JywgYCR7dGhpcy5yb290LmNsaWVudEhlaWdodH1weGApO1xuICAgICAgICB0aGlzLmhvc3Quc3R5bGUuc2V0UHJvcGVydHkoJ292ZXJmbG93LXknLCBudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaG9zdC5zdHlsZS5zZXRQcm9wZXJ0eSgnb3ZlcmZsb3cteScsICdoaWRkZW4nLCAnaW1wb3J0YW50Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFNlbGVjdHMgYSBzdWl0YWJsZSBwYWxldHRlIGJhc2VkIG9uIGNvbHVtbiBkYXRhXG4gICAqIEBwYXJhbSB7REcuQ29sdW1ufSBzZXFDb2wgQ29sdW1uIHRvIGxvb2sgZm9yIGEgcGFsZXR0ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gIG1pbkxlbmd0aCBtaW5pbXVtIGxlbmd0aCBvZiBzZXF1ZW5jZSB0byBkZXRlY3QgcGFsZXR0ZSAoZW1wdHkgc3RyaW5ncyBhcmUgYWxsb3dlZClcbiAgICogQHJldHVybiB7U2VxUGFsZXR0ZX0gUGFsZXR0ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbHBoYWJldCBvZiB0aGUgc2VxdWVuY2VzIGluIHRoZSBjb2x1bW5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcGlja1VwUGFsZXR0ZShzZXFDb2w6IERHLkNvbHVtbiwgbWluTGVuZ3RoOiBudW1iZXIgPSA1KTogU2VxUGFsZXR0ZSB7XG4gICAgbGV0IHJlczogU2VxUGFsZXR0ZSB8IG51bGw7XG4gICAgc3dpdGNoIChzZXFDb2wuc2VtVHlwZSkge1xuICAgIGNhc2UgQW1pbm9hY2lkcy5TZW1UeXBlTXVsdGlwbGVBbGlnbm1lbnQ6XG4gICAgICByZXMgPSBBbWlub2FjaWRzUGFsZXR0ZXMuR3Jva0dyb3VwcztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTnVjbGVvdGlkZXMuU2VtVHlwZU11bHRpcGxlQWxpZ25tZW50OlxuICAgICAgcmVzID0gTnVjbGVvdGlkZXNQYWxldHRlcy5DaHJvbWF0b2dyYW07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc3Qgc3RhdHM6IFNlcUNvbFN0YXRzID0gV2ViTG9nby5nZXRTdGF0cyhzZXFDb2wsIG1pbkxlbmd0aCwgV2ViTG9nby5zcGxpdHRlckFzRmFzdGEpO1xuXG4gICAgY29uc3QgYWxwaGFiZXRDYW5kaWRhdGVzOiBbU2V0PHN0cmluZz4sIFNlcVBhbGV0dGVdW10gPSBbXG4gICAgICBbbmV3IFNldChPYmplY3Qua2V5cyhOdWNsZW90aWRlcy5OYW1lcykpLCBOdWNsZW90aWRlc1BhbGV0dGVzLkNocm9tYXRvZ3JhbV0sXG4gICAgICBbbmV3IFNldChPYmplY3Qua2V5cyhBbWlub2FjaWRzLk5hbWVzKSksIEFtaW5vYWNpZHNQYWxldHRlcy5Hcm9rR3JvdXBzXSxcbiAgICBdO1xuICAgIC8vIENhbGN1bGF0ZSBsaWtlbGlob29kcyBmb3IgYWxwaGFiZXRfY2FuZGlkYXRlc1xuICAgIGNvbnN0IGFscGhhYmV0Q2FuZGlkYXRlc1NpbTogbnVtYmVyW10gPSBhbHBoYWJldENhbmRpZGF0ZXNcbiAgICAgIC5tYXAoKGMpID0+IFdlYkxvZ28uZ2V0QWxwaGFiZXRTaW1pbGFyaXR5KHN0YXRzLmZyZXEsIGNbMF0pKTtcbiAgICBjb25zdCBtYXhDb3MgPSBNYXRoLm1heCguLi5hbHBoYWJldENhbmRpZGF0ZXNTaW0pO1xuICAgIGlmIChtYXhDb3MgPiAwLjU1KVxuICAgICAgcmVzID0gYWxwaGFiZXRDYW5kaWRhdGVzW2FscGhhYmV0Q2FuZGlkYXRlc1NpbS5pbmRleE9mKG1heENvcyldWzFdO1xuICAgIGVsc2VcbiAgICAgIHJlcyA9IFVua25vd25TZXFQYWxldHRlcy5Db2xvcjtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWxwaGFiZXRTaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudW5pdHNIYW5kbGVyPy5nZXRBbHBoYWJldFNpemUoKSA/PyAwO1xuICB9XG5cbiAgLyoqIFN0YXRzIG9mIHNlcXVlbmNlcyB3aXRoIHNwZWNpZmllZCBzcGxpdHRlciBmdW5jLCByZXR1cm5zIHsgZnJlcSwgc2FtZUxlbmd0aCB9LlxuICAgKiBAcGFyYW0ge0RHLkNvbHVtbn0gc2VxQ29sXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW5MZW5ndGhcbiAgICogQHBhcmFtIHtTcGxpdHRlckZ1bmN9IHNwbGl0dGVyXG4gICAqIEByZXR1cm4geyBTZXFDb2xTdGF0cyB9LCBzYW1lTGVuZ3RoOiBib29sZWFuIH0gc3RhdHMgb2YgY29sdW1uIHNlcXVlbmNlc1xuICAgKi9cbiAgc3RhdGljIGdldFN0YXRzKHNlcUNvbDogREcuQ29sdW1uLCBtaW5MZW5ndGg6IG51bWJlciwgc3BsaXR0ZXI6IFNwbGl0dGVyRnVuYyk6IFNlcUNvbFN0YXRzIHtcbiAgICBjb25zdCBmcmVxOiB7IFttOiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICAgIGxldCBzYW1lTGVuZ3RoID0gdHJ1ZTtcbiAgICBsZXQgZmlyc3RMZW5ndGggPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBzZXEgb2Ygc2VxQ29sLmNhdGVnb3JpZXMpIHtcbiAgICAgIGNvbnN0IG1TZXEgPSBzcGxpdHRlcihzZXEpO1xuXG4gICAgICBpZiAoZmlyc3RMZW5ndGggPT0gbnVsbClcbiAgICAgICAgZmlyc3RMZW5ndGggPSBtU2VxLmxlbmd0aDtcbiAgICAgIGVsc2UgaWYgKG1TZXEubGVuZ3RoICE9PSBmaXJzdExlbmd0aClcbiAgICAgICAgc2FtZUxlbmd0aCA9IGZhbHNlO1xuXG4gICAgICBpZiAobVNlcS5sZW5ndGggPiBtaW5MZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBtIG9mIG1TZXEpIHtcbiAgICAgICAgICBpZiAoIShtIGluIGZyZXEpKVxuICAgICAgICAgICAgZnJlcVttXSA9IDA7XG4gICAgICAgICAgZnJlcVttXSArPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7ZnJlcTogZnJlcSwgc2FtZUxlbmd0aDogc2FtZUxlbmd0aH07XG4gIH1cblxuICAvKiogQ2FsY3VsYXRlIHNpbWlsYXJpdHkgaW4gY3VycmVudCBzZXF1ZW5jZSBhbmQgYWxwaGFiZXQuXG4gICAqIEBwYXJhbSB7TW9ub21lckZyZXFzfSBmcmVxXG4gICAqIEBwYXJhbSB7U2V0PHN0cmluZz59IGFscGhhYmV0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBnYXBTeW1ib2xcbiAgICogQHJldHVybiB7bnVtYmVyfSBDb3NpbmUgc2ltaWxhcml0eVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRBbHBoYWJldFNpbWlsYXJpdHkoZnJlcTogTW9ub21lckZyZXFzLCBhbHBoYWJldDogU2V0PHN0cmluZz4sIGdhcFN5bWJvbDogc3RyaW5nID0gJy0nKTogbnVtYmVyIHtcbiAgICBjb25zdCBrZXlzID0gbmV3IFNldDxzdHJpbmc+KFsuLi5uZXcgU2V0KE9iamVjdC5rZXlzKGZyZXEpKSwgLi4uYWxwaGFiZXRdKTtcbiAgICBrZXlzLmRlbGV0ZShnYXBTeW1ib2wpO1xuXG4gICAgY29uc3QgZnJlcUE6IG51bWJlcltdID0gW107XG4gICAgY29uc3QgYWxwaGFiZXRBOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgbSBvZiBrZXlzKSB7XG4gICAgICBmcmVxQS5wdXNoKG0gaW4gZnJlcSA/IGZyZXFbbV0gOiAwKTtcbiAgICAgIGFscGhhYmV0QS5wdXNoKGFscGhhYmV0LmhhcyhtKSA/IDEgOiAwKTtcbiAgICB9XG4gICAgLyogVGhlcmUgd2VyZSBhIGZldyBpZGVhczogY2hpLXNxdWFyZWQsIHBlYXJzb24gY29ycmVsYXRpb24gKHZhcmlhbmNlPyksIHNjYWxhciBwcm9kdWN0ICovXG4gICAgY29uc3QgZnJlcVY6IFZlY3RvciA9IG5ldyBWZWN0b3IoZnJlcUEpO1xuICAgIGNvbnN0IGFscGhhYmV0VjogVmVjdG9yID0gbmV3IFZlY3RvcihhbHBoYWJldEEpO1xuICAgIHJldHVybiB2ZWN0b3JEb3RQcm9kdWN0KGZyZXFWLCBhbHBoYWJldFYpIC8gKHZlY3Rvckxlbmd0aChmcmVxVikgKiB2ZWN0b3JMZW5ndGgoYWxwaGFiZXRWKSk7XG4gIH1cblxuICAvLyBQcmV2aW91cyB2ZXJzaW9uIG9mIHBpY2tVcFNlcUNvbFxuICAvLyAvKiogRmlyc3QgdHJ5IHRvIGZpbmQgY29sdW1uIHdpdGggc2VtVHlwZSAnYWxpZ25lZFNlcXVlbmNlJy5cbiAgLy8gICogTmV4dCBsb29rIGZvciBjb2x1bW4gd2l0aCBkYXRhIGFscGhhYmV0IGNvcnJlc3BvbmRpbmcgdG8gYW55IG9mIHRoZSBrbm93biBwYWxldHRlcy5cbiAgLy8gICogQHBhcmFtIHtERy5EYXRhRnJhbWV9IGRhdGFGcmFtZVxuICAvLyAgKiBAcmV0dXJuIHtERy5Db2x1bW59IFRoZSBjb2x1bW4gd2Ugd2VyZSBsb29raW5nIGZvciBvciBudWxsXG4gIC8vICAqL1xuICAvLyBwcml2YXRlIHBpY2tVcFNlcUNvbChkYXRhRnJhbWU6IERHLkRhdGFGcmFtZSk6IERHLkNvbHVtbiB8IG51bGwge1xuICAvLyAgIGxldCByZXM6IERHLkNvbHVtbiB8IG51bGwgPSBkYXRhRnJhbWUuY29sdW1ucy5ieVNlbVR5cGUoJ2FsaWduZWRTZXF1ZW5jZScpO1xuICAvLyAgIGlmIChyZXMgPT0gbnVsbCkge1xuICAvLyAgICAgZm9yIChjb25zdCBjb2wgb2YgZGF0YUZyYW1lLmNvbHVtbnMpIHtcbiAgLy8gICAgICAgY29uc3QgY3AgPSBXZWJMb2dvLnBpY2tVcFBhbGV0dGUoY29sIGFzIERHLkNvbHVtbiwgNSk7XG4gIC8vICAgICAgIGlmIChjcCAhPT0gbnVsbCAmJiAhKGNwIGluc3RhbmNlb2YgVW5rbm93blNlcVBhbGV0dGUpKSB7XG4gIC8vICAgICAgICAgcmVzID0gY29sO1xuICAvLyAgICAgICAgIGJyZWFrO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiByZXM7XG4gIC8vIH1cblxuICBwdWJsaWMgc3RhdGljIHBpY2tVcFNlcUNvbChkZjogREcuRGF0YUZyYW1lKTogREcuQ29sdW1uIHwgbnVsbCB7XG4gICAgY29uc3Qgc2VtVHlwZUNvbExpc3QgPSBkZi5jb2x1bW5zLmJ5U2VtVHlwZUFsbChERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEUpO1xuICAgIGxldCByZXNDb2w6IERHLkNvbHVtbiB8IG51bGwgPSBzZW1UeXBlQ29sTGlzdC5maW5kKChjb2wpID0+IHtcbiAgICAgIGNvbnN0IHVuaXRzID0gY29sLmdldFRhZyhERy5UQUdTLlVOSVRTKTtcbiAgICAgIHJldHVybiB1bml0cyA/IHVuaXRzLmluZGV4T2YoJ01TQScpICE9PSAtMSA6IGZhbHNlO1xuICAgIH0pID8/IG51bGw7XG4gICAgaWYgKCFyZXNDb2wgJiYgc2VtVHlwZUNvbExpc3QubGVuZ3RoID4gMClcbiAgICAgIHJlc0NvbCA9IHNlbVR5cGVDb2xMaXN0WzBdO1xuICAgIHJldHVybiByZXNDb2w7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtb25vbWVyUmUgPSAvXFxbKFxcdyspXFxdfChcXHcpfCgtKS9nO1xuXG4gIC8qKiBPbmx5IHNvbWUgb2YgdGhlIHN5bm9ueW1zLiBUaGVzZSB3ZXJlIG9idGFpbmVkIGZyb20gdGhlIGNsdXN0ZXJlZCBvbGlnb3BlcHRpZGUgZGF0YXNldC4gKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYWFTeW5vbnltczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgJ1tNZU5sZV0nOiAnTCcsIC8vIE5sZSAtIG5vcmxldWNpbmVcbiAgICAnW01lQV0nOiAnQScsXG4gICAgJ1tNZUddJzogJ0cnLFxuICAgICdbTWVGXSc6ICdGJyxcbiAgfTtcblxuICAvKiogU3BsaXQgc2VxdWVuY2UgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgbW9ub21lcnMsIHNxdWFyZSBicmFja2V0cyBtdWx0aWNoYXIgbW9ub21lciBuYW1lcyBvciBnYXAgc3ltYm9sLlxuICAgKiBAcGFyYW0ge2FueX0gc2VxIG9iamVjdCB3aXRoIHNlcXVlbmNlXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBhcnJheSBvZiBtb25vbWVyc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcGxpdHRlckFzRmFzdGEoc2VxOiBhbnkpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHd1PFJlZ0V4cE1hdGNoQXJyYXk+KHNlcS50b1N0cmluZygpLm1hdGNoQWxsKFdlYkxvZ28ubW9ub21lclJlKSlcbiAgICAgIC5tYXAoKG1hOiBSZWdFeHBNYXRjaEFycmF5KSA9PiB7XG4gICAgICAgIGxldCBtUmVzOiBzdHJpbmc7XG4gICAgICAgIGNvbnN0IG06IHN0cmluZyA9IG1hWzBdO1xuICAgICAgICBpZiAobS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgbVJlcyA9IG1hWzFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1SZXMgPSBtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtUmVzO1xuICAgICAgfSkudG9BcnJheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaGVsbVJlID0gLyhQRVBUSURFMXxETkExfFJOQTEpXFx7KFtefV0rKX0vZztcbiAgcHJpdmF0ZSBzdGF0aWMgaGVsbVBwMVJlID0gL1xcWyhbXlxcW1xcXV0rKV0vZztcblxuICAvKiogU3BsaXRzIEhlbG0gc3RyaW5nIHRvIG1vbm9tZXJzLCBidXQgZG9lcyBub3QgcmVwbGFjZSBtb25vbWVyIG5hbWVzIHRvIG90aGVyIG5vdGF0aW9uIChlLmcuIGZvciBSTkEpLlxuICAgKiBPbmx5IGZvciBsaW5lYXIgcG9seW1lcnMsIGRvZXMgbm90IHNwbGl0IFJOQSBmb3Igcmlib3NlIGFuZCBwaG9zcGhhdGUgbW9ub21lcnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXEgU291cmNlIHN0cmluZyBvZiBIRUxNIG5vdGF0aW9uXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcGxpdHRlckFzSGVsbShzZXE6IGFueSk6IHN0cmluZ1tdIHtcbiAgICBXZWJMb2dvLmhlbG1SZS5sYXN0SW5kZXggPSAwO1xuICAgIGNvbnN0IGVhOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsID0gV2ViTG9nby5oZWxtUmUuZXhlYyhzZXEudG9TdHJpbmcoKSk7XG4gICAgY29uc3QgaW5TZXE6IHN0cmluZyB8IG51bGwgPSBlYSA/IGVhWzJdIDogbnVsbDtcblxuICAgIGNvbnN0IG1tUG9zdFByb2Nlc3MgPSAobW06IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICBXZWJMb2dvLmhlbG1QcDFSZS5sYXN0SW5kZXggPSAwO1xuICAgICAgY29uc3QgcHAxTSA9IFdlYkxvZ28uaGVsbVBwMVJlLmV4ZWMobW0pO1xuICAgICAgaWYgKHBwMU0gJiYgcHAxTS5sZW5ndGggPj0gMilcbiAgICAgICAgcmV0dXJuIHBwMU1bMV07XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBtbTtcbiAgICB9O1xuXG4gICAgY29uc3QgbW1MaXN0OiBzdHJpbmdbXSA9IGluU2VxID8gaW5TZXEuc3BsaXQoJy4nKSA6IFtdO1xuICAgIHJldHVybiBtbUxpc3QubWFwKG1tUG9zdFByb2Nlc3MpO1xuICB9XG5cbiAgLyoqIEdldHMgbWV0aG9kIHRvIHNwbGl0IHNlcXVlbmNlIGJ5IHNlcGFyYXRvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yXG4gICAqIEBwYXJhbSBsaW1pdFxuICAgKiBAcmV0dXJuIHtTcGxpdHRlckZ1bmN9XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldFNwbGl0dGVyV2l0aFNlcGFyYXRvcihzZXBhcmF0b3I6IHN0cmluZywgbGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCk6IFNwbGl0dGVyRnVuYyB7XG4gICAgcmV0dXJuIChzZXE6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIHNlcS5zcGxpdChzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIEdldCBzcGxpdHRlciBtZXRob2QgdG8gc3BsaXQgc2VxdWVuY2VzIHRvIG1vbm9tZXJzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0c1xuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yXG4gICAqIEBwYXJhbSBsaW1pdFxuICAgKiBAcmV0dXJuIHtTcGxpdHRlckZ1bmN9XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldFNwbGl0dGVyKHVuaXRzOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nLCBsaW1pdDogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkKTogU3BsaXR0ZXJGdW5jIHtcbiAgICBpZiAodW5pdHMudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKE5PVEFUSU9OLkZBU1RBKSlcbiAgICAgIHJldHVybiBXZWJMb2dvLnNwbGl0dGVyQXNGYXN0YTtcbiAgICBlbHNlIGlmICh1bml0cy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoTk9UQVRJT04uU0VQQVJBVE9SKSlcbiAgICAgIHJldHVybiBXZWJMb2dvLmdldFNwbGl0dGVyV2l0aFNlcGFyYXRvcihzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICBlbHNlIGlmICh1bml0cy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoTk9UQVRJT04uSEVMTSkpXG4gICAgICByZXR1cm4gV2ViTG9nby5zcGxpdHRlckFzSGVsbTtcbiAgICBlbHNlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdW5pdHMgJHt1bml0c30gLmApO1xuXG4gICAgLy8gVE9ETzogU3BsaXR0ZXIgZm9yIEhFTE1cbiAgfVxuXG4gIC8qKiBHZW5lcmF0ZSBzcGxpdHRlciBmdW5jdGlvbiBmb3Igc2VxdWVuY2UgY29sdW1uXG4gICAqIEBwYXJhbSB7REcuQ29sdW1ufSBjb2xcbiAgICogQHJldHVybiB7U3BsaXR0ZXJGdW5jfSBTcGxpdHRlciBmdW5jdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRTcGxpdHRlckZvckNvbHVtbihjb2w6IERHLkNvbHVtbik6IFNwbGl0dGVyRnVuYyB7XG4gICAgaWYgKGNvbC5zZW1UeXBlICE9PSBERy5TRU1UWVBFLk1BQ1JPTU9MRUNVTEUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEdldCBzcGxpdHRlciBmb3Igc2VtVHlwZSBcIiR7REcuU0VNVFlQRS5NQUNST01PTEVDVUxFfVwiIG9ubHkuYCk7XG5cbiAgICBjb25zdCB1bml0cyA9IGNvbC5nZXRUYWcoREcuVEFHUy5VTklUUyk7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gY29sLmdldFRhZyhVbml0c0hhbmRsZXIuVEFHUy5zZXBhcmF0b3IpO1xuICAgIHJldHVybiBXZWJMb2dvLmdldFNwbGl0dGVyKHVuaXRzLCBzZXBhcmF0b3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbG9uZ01vbm9tZXJQYXJ0UmUgPSAvKFxcdyspL2c7XG5cbiAgLyoqIENvbnZlcnQgbG9uZyBtb25vbWVyIG5hbWVzIHRvIHNob3J0IG9uZXMgKi9cbiAgcHVibGljIHN0YXRpYyBtb25vbWVyVG9TaG9ydChhbWlubzogc3RyaW5nLCBtYXhMZW5ndGhPZk1vbm9tZXI6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3Qgc2hvcnRBbWlub01hdGNoOiBSZWdFeHBNYXRjaEFycmF5IHwgbnVsbCA9IGFtaW5vLm1hdGNoKFdlYkxvZ28ubG9uZ01vbm9tZXJQYXJ0UmUpO1xuICAgIGNvbnN0IG5lZWRBZGREb3RzOiBib29sZWFuID0gYW1pbm8ubGVuZ3RoID4gbWF4TGVuZ3RoT2ZNb25vbWVyIHx8IChzaG9ydEFtaW5vTWF0Y2g/Lmxlbmd0aCA/PyAwKSA+IDE7XG4gICAgY29uc3Qgc2hvcnRBbWlubyA9IHNob3J0QW1pbm9NYXRjaD8uWzBdID8/ICcgJztcbiAgICByZXR1cm4gIW5lZWRBZGREb3RzID8gc2hvcnRBbWlubyA6IHNob3J0QW1pbm8uc3Vic3RyaW5nKDAsIG1heExlbmd0aE9mTW9ub21lcikgKyAn4oCmJztcbiAgfVxufVxuIl19
|