@willbooster/agent-skills 1.17.2 → 1.17.4
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/README.md +4 -24
- package/dist/cli.js +2 -2
- package/package.json +1 -1
- package/skills/wbfy/SKILL.md +2 -2
package/README.md
CHANGED
|
@@ -7,16 +7,16 @@ A collection of agent skills for WillBooster Inc.
|
|
|
7
7
|
|
|
8
8
|
## Install
|
|
9
9
|
|
|
10
|
-
Install
|
|
10
|
+
Install all skills globally:
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
bunx
|
|
13
|
+
bunx @willbooster/agent-skills@latest install-skills
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
Install
|
|
16
|
+
Install selected skills:
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
bunx skills@latest add WillBooster/agent-skills --
|
|
19
|
+
bunx skills@latest add WillBooster/agent-skills --agent claude-code --agent codex
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
## Skills
|
|
@@ -43,23 +43,3 @@ bunx skills@latest add WillBooster/agent-skills --skill '*' --agent claude-code
|
|
|
43
43
|
## CLI
|
|
44
44
|
|
|
45
45
|
This repository also ships a Bun-powered CLI package for skill-specific commands.
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
bunx @willbooster/agent-skills@latest --help
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Install the packaged skills globally through the CLI:
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
bunx @willbooster/agent-skills@latest install-skills
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
Example:
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
bunx @willbooster/agent-skills@latest screenshot \
|
|
61
|
-
https://example.com \
|
|
62
|
-
"Pricing" \
|
|
63
|
-
"the comparison table in the main content area" \
|
|
64
|
-
--agent codex
|
|
65
|
-
```
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import{Command as n,Option as e}from"commander";import{spawn as t,spawnSync as r}from"node:child_process";import{createWriteStream as i}from"node:fs";import{mkdir as a}from"node:fs/promises";import{dirname as o}from"node:path";import{stdin as u,stderr as c}from"node:process";import{setTimeout as s}from"node:timers/promises";import{stripVTControlCharacters as l}from"node:util";import{stringify as f}from"yaml";import{fileURLToPath as p}from"node:url";function d(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,r=Array(e);t<e;t++)r[t]=n[t];return r}function h(n){var e,t,r,i=2;for("undefined"!=typeof Symbol&&(t=Symbol.asyncIterator,r=Symbol.iterator);i--;){if(t&&null!=(e=n[t]))return e.call(n);if(r&&null!=(e=n[r]))return new m(e.call(n));t="@@asyncIterator",r="@@iterator"}throw new TypeError("Object is not async iterable")}function m(n){function e(n){if(Object(n)!==n)return Promise.reject(new TypeError(n+" is not an object."));var e=n.done;return Promise.resolve(n.value).then(function(n){return{value:n,done:e}})}return m=function(n){this.s=n,this.n=n.next},m.prototype={s:null,n:null,next:function(){return e(this.n.apply(this.s,arguments))},return:function(n){var t=this.s.return;return void 0===t?Promise.resolve({value:n,done:!0}):e(t.apply(this.s,arguments))},throw:function(n){var t=this.s.return;return void 0===t?Promise.reject(n):e(t.apply(this.s,arguments))}},new m(n)}function v(n,e,t,r,i,a,o){try{var u=n[a](o),c=u.value}catch(n){return void t(n)}u.done?e(c):Promise.resolve(c).then(r,i)}function g(n){return function(){var e=this,t=arguments;return new Promise(function(r,i){var a=n.apply(e,t);function o(n){v(a,r,i,o,u,"next",n)}function u(n){v(a,r,i,o,u,"throw",n)}o(void 0)})}}function w(n,e){var t="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!t){if(Array.isArray(n)||(t=R(n))||e){t&&(n=t);var r=0,i=function(){};return{s:i,n:function(){return r>=n.length?{done:!0}:{done:!1,value:n[r++]}},e:function(n){throw n},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,u=!1;return{s:function(){t=t.call(n)},n:function(){var n=t.next();return o=n.done,n},e:function(n){u=!0,a=n},f:function(){try{o||null==t.return||t.return()}finally{if(u)throw a}}}}function y(n,e,t){return(e=function(n){var e=function(n,e){if("object"!=typeof n||!n)return n;var t=n[Symbol.toPrimitive];if(void 0!==t){var r=t.call(n,e);if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(n)}(n,"string");return"symbol"==typeof e?e:e+""}(e))in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function b(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),t.push.apply(t,r)}return t}function k(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?b(Object(t),!0).forEach(function(e){y(n,e,t[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):b(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))})}return n}function x(){
|
|
3
3
|
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
|
4
|
-
var n,e,t="function"==typeof Symbol?Symbol:{},r=t.iterator||"@@iterator",i=t.toStringTag||"@@toStringTag";function a(t,r,i,a){var c=r&&r.prototype instanceof u?r:u,s=Object.create(c.prototype);return j(s,"_invoke",function(t,r,i){var a,u,c,s=0,l=i||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return a=e,u=0,c=n,p.n=t,o}};function d(t,r){for(u=t,c=r,e=0;!f&&s&&!i&&e<l.length;e++){var i,a=l[e],d=p.p,h=a[2];t>3?(i=h===r)&&(c=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=n):a[0]<=d&&((i=t<2&&d<a[1])?(u=0,p.v=r,p.n=a[1]):d<h&&(i=t<3||a[0]>r||r>h)&&(a[4]=t,a[5]=r,p.n=h,u=0))}if(i||t>1)return o;throw f=!0,r}return function(i,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),u=l,c=h;(e=u<2?n:c)||!f;){a||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,a){if(u||(i="next"),e=a[i]){if(!(e=e.call(a,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=a.return)&&e.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+i+"' method"),u=1);a=n}else if((e=(f=p.n<0)?c:t.call(r,p))!==o)break}catch(e){a=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(t,i,a),!0),s}var o={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][r]?e(e([][r]())):(j(e={},r,function(){return this}),e),f=s.prototype=u.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,j(n,i,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,j(f,"constructor",s),j(s,"constructor",c),c.displayName="GeneratorFunction",j(s,i,"GeneratorFunction"),j(f),j(f,i,"Generator"),j(f,r,function(){return this}),j(f,"toString",function(){return"[object Generator]"}),(x=function(){return{w:a,m:p}})()}function j(n,e,t,r){var i=Object.defineProperty;try{i({},"",{})}catch(n){i=0}j=function(n,e,t,r){function a(e,t){j(n,e,function(n){return this._invoke(e,t,n)})}e?i?i(n,e,{value:t,enumerable:!r,configurable:!r,writable:!r}):n[e]=t:(a("next",0),a("throw",1),a("return",2))},j(n,e,t,r)}function S(n){if(null!=n){var e=n["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],t=0;if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length))return{next:function(){return n&&t>=n.length&&(n=void 0),{value:n&&n[t++],done:!n}}}}throw new TypeError(typeof n+" is not iterable")}function I(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var t=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=t){var r,i,a,o,u=[],c=!0,s=!1;try{if(a=(t=t.call(n)).next,0===e){if(Object(t)!==t)return;c=!1}else for(;!(c=(r=a.call(t)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(n){s=!0,i=n}finally{try{if(!c&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(s)throw i}}return u}}(n,e)||R(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function A(n){return function(n){if(Array.isArray(n))return d(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||R(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function O(n){"@babel/helpers - typeof";return O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},O(n)}function R(n,e){if(n){if("string"==typeof n)return d(n,e);var t={}.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?d(n,e):void 0}}function $(n,e){return C.apply(this,arguments)}function C(){return C=g(x().m(function n(e,r){var i,a,o,u,c,s,l,f,p;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r={}),a=t(null!=(i=e[0])?i:"",e.slice(1),{stdio:["ignore","pipe","pipe"]}),o=E(r.waitMessage,r.waitIntervalSeconds),n.n=1,N(r.logFilePath);case 1:return u=n.v,n.p=2,n.n=3,Promise.all([P(a.stdout,function(n){return u.write(n)}),P(a.stderr,function(n){return u.write(n)}),new Promise(function(n,e){a.once("error",e),a.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(c=n.v,s=I(c,3),l=s[0],f=s[1],0!==s[2]){n.n=4;break}return n.a(2,l);case 4:throw p="".concat(l).concat(f),new Error(p||"Command failed: ".concat(e.join(" ")));case 5:return n.p=5,n.n=6,u.close();case 6:return o(),n.f(5);case 7:return n.a(2)}},n,null,[[2,,5,7]])})),C.apply(this,arguments)}function P(n,e){return q.apply(this,arguments)}function q(){return(q=g(x().m(function n(e,t){var r,i,a,o,u,c,s,l,f;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],i=!1,a=!1,n.p=2,u=h(e);case 3:return n.n=4,u.next();case 4:if(!(i=!(c=n.v).done)){n.n=6;break}s=c.value,l="string"==typeof s?s:s.toString("utf8"),r.push(l),null==t||t(l);case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,f=n.v,a=!0,o=f;case 8:if(n.p=8,n.p=9,!i||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!a){n.n=11;break}throw o;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,r.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function E(n,e,t){if(void 0===e&&(e=36),void 0===t&&(t=function(n){return process.stderr.write(n)}),!n)return function(){};var r=0,i=setInterval(function(){t("."),(r+=1)<=100&&r%5==0&&t(" ".concat(r,"% done "))},1e3*e);return t("".concat(n," ").concat("It takes 1 hour and printing . per 36 secs",": ")),function(){clearInterval(i),t("\n")}}function N(n){return L.apply(this,arguments)}function L(){return L=g(x().m(function n(e){var t,r,u;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,{write:function(){},close:function(){var n=g(x().m(function n(){return x().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()});case 1:return t=function(n){process.stderr.write("Warning: Failed to write command log to ".concat(e,": ").concat(String(n),"\n"))},n.p=2,n.n=3,a(o(e),{recursive:!0});case 3:return(r=i(e,{flags:"w"})).on("error",t),n.a(2,{write:function(n){r.writable&&r.write(n)},close:function(){var n=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){r.end(function(){return n()})});case 1:return n.a(2,n.v)}},n)}));return function(){return n.apply(this,arguments)}}()});case 4:return n.p=4,u=n.v,t(u),n.a(2,{write:function(){},close:function(){var n=g(x().m(function n(){return x().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),L.apply(this,arguments)}var T="There is no concern.",_=["codex","claude","gemini"],D=new RegExp("\\b".concat("there is no concern","\\b"),"i");function G(n,e){return U.apply(this,arguments)}function U(){return(U=g(x().m(function n(e,t){var r,i,a;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={allAgentsLabel:"agents"}),n.n=1,e;case 1:return r=n.v,i=E(J(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(_.map(g(x().m(function n(e){var i,a,o,u;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,F(e,r,{waitMessage:!1});case 1:return u=n.v.trim(),n.a(2,null!=(i=null==(a=(o=t).mapOutput)?void 0:a.call(o,e,u))?i:"## ".concat(W(e),"\n\n").concat(u))}},n)}))));case 3:return a=n.v.filter(function(n){return void 0!==n}),n.a(2,a.length>0?a.join("\n\n"):T);case 4:return n.p=4,i(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function F(n,e,t){return M.apply(this,arguments)}function M(){return(M=g(x().m(function n(e,t,r){var i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r={}),i=$,a=H,o=e,n.n=1,t;case 1:return n.a(2,i(a(o,n.v),{logFilePath:B(e),waitMessage:void 0===r.waitMessage?J(W(e)):r.waitMessage}))}},n)}))).apply(this,arguments)}function H(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","exec","--dangerously-bypass-approvals-and-sandbox",e];case"claude":return["claude","--dangerously-skip-permissions","-p",e];case"gemini":return["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--model","gemini-3.1-pro-preview","-p",e]}}function W(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function J(n){return"Waiting for ".concat(n," to finish.")}function B(n){return"logs/".concat(n,"-").concat((e=new Date,t=I([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(Q),5),r=t[0],i=t[1],a=t[2],o=t[3],u=t[4],"".concat(r).concat(i,"-").concat(a).concat(o).concat(u)),".log");var e,t,r,i,a,o,u}function Q(n){return n.toString().padStart(2,"0")}var Y={blockQuote:"literal",lineWidth:0};function z(n){c.write("".concat(n,"\n"))}function K(n,e){void 0===e&&(e=1),c.write("".concat(n,"\n")),process.exit(e)}function Z(){return V.apply(this,arguments)}function V(){return(V=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:if(!u.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,wn(u);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function X(n){return nn.apply(this,arguments)}function nn(){return(nn=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,Z();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:K(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function en(n,e){return tn.apply(this,arguments)}function tn(){return tn=g(x().m(function n(e,r){var i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),a=null!=(i=r.allowedExitCodes)?i:[],o=x().m(function n(){var i,o,u,l,f,p,d,h;return x().w(function(n){for(;;)switch(n.n){case 0:return o=t(null!=(i=e[0])?i:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==r.stdinData?o.stdin.end(r.stdinData):o.stdin.end(),n.n=1,Promise.all([wn(o.stdout),wn(o.stderr),new Promise(function(n,e){o.once("error",e),o.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(u=n.v,l=I(u,3),f=l[0],p=l[1],d=l[2],h="".concat(f).concat(p),0!==d&&!a.includes(d)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(gn(e,d,h)&&c<3)){n.n=4;break}return z("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=3,s(1e3*c);case 3:return n.a(2,0);case 4:K(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(S(o()),2);case 2:if(0!==(u=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!u){n.n=4;break}return n.a(2,u.v);case 4:c+=1,n.n=1;break;case 5:K("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),tn.apply(this,arguments)}function rn(n,e){return an.apply(this,arguments)}function an(){return(an=g(x().m(function n(e,t){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,en(["gh"].concat(A(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function on(n,e,t){return un.apply(this,arguments)}function un(){return(un=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,en(["gh"].concat(A(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function cn(){return sn.apply(this,arguments)}function sn(){return(sn=g(x().m(function n(){var e,t,r,i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),t=e.split("/",2),r=I(t,2),i=r[0],a=r[1],i&&a||K("Error: could not determine current repository"),n.a(2,[i,a])}},n)}))).apply(this,arguments)}function ln(){return fn.apply(this,arguments)}function fn(){return(fn=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function pn(n,e){return dn.apply(this,arguments)}function dn(){return(dn=g(x().m(function n(e,t){var r,i,a,o,u,c,s,l,f;return x().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),r=["api","graphql","-F","query=@-"],i=0,a=Object.entries(t);case 1:if(!(i<a.length)){n.n=4;break}if(o=I(a[i],2),u=o[0],void 0!==(c=o[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:r.push("-F","".concat(u,"=").concat(c));case 3:i++,n.n=1;break;case 4:return f=JSON,n.n=5,rn(r,e);case 5:if(s=f.parse.call(f,n.v),Array.isArray(s.errors)){n.n=6;break}return n.a(2,s);case 6:l=s.errors.map(function(n){var e;return null!=(e=n.message)?e:"Unknown GraphQL error"}).join("\n"),K("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function hn(n){return f(n,Y)}function mn(n){return JSON.parse(JSON.stringify(n))}function vn(n,e){var t,i,a,o,u=r(null!=(t=n[0])?t:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(i=u.status)?i:u.error?1:0,output:"".concat(null!=(a=u.stdout)?a:"").concat(null!=(o=u.stderr)?o:"")}}function gn(n,e,t){return"gh"===n[0]&&0!==e&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(t)}function wn(n){return yn.apply(this,arguments)}function yn(){return(yn=g(x().m(function n(e){var t,r,i,a,o,u,c,s,l;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:t=[],r=new TextDecoder,i=!1,a=!1,n.p=2,u=h(e);case 3:return n.n=4,u.next();case 4:if(!(i=!(c=n.v).done)){n.n=6;break}s=c.value,t.push("string"==typeof s?s:r.decode(new Uint8Array(s),{stream:!0}));case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,a=!0,o=l;case 8:if(n.p=8,n.p=9,!i||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!a){n.n=11;break}throw o;case 11:return n.f(10);case 12:return n.f(8);case 13:return t.push(r.decode()),n.a(2,t.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}var bn=/\btest\b/i,kn=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],xn=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/,jn=0===vn(["rtk","--version"]).exitCode;function Sn(n){return In.apply(this,arguments)}function In(){return(In=g(x().m(function n(e){var t,r,i,a,o,u,c,s,l,f;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return u=["pr","checks"],e&&u.push(e),u.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),c=[],n.p=1,n.n=2,on(u,[8]);case 2:s=n.v,c=s.trim().length>0?JSON.parse(s):[],n.n=5;break;case 3:if(n.p=3,!((f=n.v)instanceof SyntaxError)){n.n=4;break}c=[],n.n=5;break;case 4:throw f;case 5:return l=c.reduce(function(n,e){var t,r,i=null!=(t=e.bucket)?t:"";return n[i]=(null!=(r=n[i])?r:0)+1,n},{}),n.a(2,{summary:{total:c.length,pass:null!=(t=l.pass)?t:0,fail:null!=(r=l.fail)?r:0,pending:null!=(i=l.pending)?i:0,skipping:null!=(a=l.skipping)?a:0,cancel:null!=(o=l.cancel)?o:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function An(n,e,t,r){return On.apply(this,arguments)}function On(){return(On=g(x().m(function n(e,t,r,i){var a,o,u,s,l,f,p,d;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=Tn),void 0===r&&(r=Sn),void 0===i&&(i=function(n){return c.write(n)}),a=0,n.n=1,r(e);case 1:o=n.v,u=function(){},n.p=2;case 3:if(s=Rn(o),l=$n(s),f=I(l,2),p=f[0],d=f[1],!(Object.keys(p).length>0||0===Object.keys(d).length)){n.n=4;break}return n.a(2,[o,a,!1]);case 4:if(!(a>=100)){n.n=5;break}return n.a(2,[o,a,!0]);case 5:return 1===(a+=1)&&(u=E("Waiting for test-related workflows to finish.",36,i)),n.n=6,t(36);case 6:return n.n=7,r(e);case 7:o=n.v;case 8:n.n=3;break;case 9:return n.p=9,u(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function Rn(n){var e=n.checks.reduce(function(n,e){var t=e.workflow||e.name||"unknown_workflow";return null!=n[t]||(n[t]=[]),n[t].push(e),n},{});return Object.fromEntries(Object.entries(e).map(function(n){var e,t=I(n,2),r=t[0],i=function(n){var e=n.reduce(function(n,e){var t=function(n){var e=Cn(n);return e?"run:".concat(e):"unknown_run"}(e),r=n.get(t);return r?(r.push(e),n):(n.set(t,[e]),n)},new Map);return Array.from(e.values()).reduce(function(n,e){return 0===n.length||Un(e)>Un(n)?e:n},[])}(t[1]),a=i[0];a||K("Error: no checks found for workflow ".concat(r));var o=null!=(e=i.reduce(function(n,e){return n?Nn(e)>Nn(n)?e:n:e},void 0))?e:a;return[r,{classification:En(i),check:o,checks:i}]}))}function $n(n){for(var e={},t={},r=0,i=Object.entries(n);r<i.length;r++){var a=I(i[r],2),o=a[0],u=a[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Ln(n)})&&(t[o]=u):e[o]=u}return[e,t]}function Cn(n){var e,t=null==n?void 0:n.link;if(t)return null==(e=t.match(/\/actions\/runs\/(\d+)/))?void 0:e[1]}function Pn(n){return qn.apply(this,arguments)}function qn(){return(qn=g(x().m(function n(e){var t,r;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,on(["run","view",e,"--json",kn.join(",")],[1]);case 2:if(0!==(t=n.v).trim().length){n.n=3;break}return n.a(2,void 0);case 3:return n.p=3,n.a(2,JSON.parse(t));case 4:if(n.p=4,!((r=n.v)instanceof SyntaxError)){n.n=5;break}return c.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(r.message,"\n")),n.a(2,void 0);case 5:throw r;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function En(n){var e=n.map(function(n){var e;return null!=(e=n.bucket)?e:""});return e.some(function(n){return!["pass","skipping","pending"].includes(n)})?"failed":e.includes("pending")?"running":"successful"}function Nn(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function Ln(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&bn.test(n)})}function Tn(n){return _n.apply(this,arguments)}function _n(){return(_n=g(x().m(function n(e){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,s(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Dn(){return Gn.apply(this,arguments)}function Gn(){return(Gn=g(x().m(function n(){var e,t,r,i,a,o,u,c,s,l,f,p;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:return e=n.v,z("Fetching latest CI results..."),n.n=2,An(e);case 2:if(t=n.v,r=I(t,3),i=r[0],a=r[1],o=r[2],u=Rn(i),c=$n(u),s=I(c,2),l=s[0],f=s[1],p={summary:mn(i.summary),waited_for_test_related_checks:a>0,test_related_check_wait_attempts:a,test_related_check_wait_timed_out:o},!(Object.keys(l).length>0)){n.n=4;break}return n.n=3,Promise.all(Object.entries(l).map(g(x().m(function n(e){var t,r,i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:return t=I(e,2),r=t[0],i=t[1],n.n=1,Fn(r,i);case 1:return a=n.v,o=k,u=k({},a),c=Jn,n.n=2,Hn(i.check);case 2:return n.a(2,o(u,c(n.v)))}},n)}))));case 3:return p.failed_workflows=n.v,n.a(2,{output:hn(p),exitCode:1});case 4:if(!(Object.keys(f).length>0)){n.n=6;break}return p.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=5,Promise.all(Object.entries(f).map(function(n){var e=I(n,2);return Fn(e[0],e[1])}));case 5:return p.running_test_related_workflows=n.v,n.a(2,{output:hn(p),exitCode:1});case 6:return n.a(2,{output:"All CI workflows passed.\n",exitCode:0})}},n)}))).apply(this,arguments)}function Un(n){return n.reduce(function(n,e){var t=Nn(e);return t>n?t:n},"")}function Fn(n,e){return Mn.apply(this,arguments)}function Mn(){return(Mn=g(x().m(function n(e,t){var r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return i=Cn(t.check),n.n=1,Pn(i);case 1:return a=n.v,o=zn(a,Yn(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:Yn(t.check.name),job_url:Yn(null==o?void 0:o.url),failed_step:Kn(o),run_id:i,run_url:null!=(r=Yn(null==a?void 0:a.url))?r:Yn(t.check.link),branch:Yn(null==a?void 0:a.headBranch),sha:Yn(null==a?void 0:a.headSha),conclusion:Yn(null==a?void 0:a.conclusion)})}},n)}))).apply(this,arguments)}function Hn(n){return Wn.apply(this,arguments)}function Wn(){return(Wn=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:if(t=Cn(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,on(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Jn(n){return{failed_log:Bn(n)}}function Bn(n){var e=Qn(l(n));if(!jn)return e;var t=vn(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?Qn(t.output):e}function Qn(n){return n.split("\n").map(function(n){return n.replace(xn,"")}).join("\n").trim()}function Yn(n){return"string"==typeof n&&n.length>0?n:void 0}function zn(n,e){var t,r;if(null!=n&&n.jobs&&0!==n.jobs.length)return null!=(t=null!=(r=n.jobs.find(function(n){return n.name===e}))?r:n.jobs.find(function(n){return"failure"===n.conclusion}))?t:n.jobs.find(function(n){return"completed"!==n.status})}function Kn(n){var e,t,r;if(null!=n&&n.steps&&0!==n.steps.length)return null!=(e=null==(t=n.steps.find(function(n){return"failure"===n.conclusion}))?void 0:t.name)?e:null==(r=n.steps.find(function(n){return"completed"!==n.status}))?void 0:r.name}function Zn(){return Vn.apply(this,arguments)}function Vn(){return(Vn=g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,Xn();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function Xn(){return ne.apply(this,arguments)}function ne(){return(ne=g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return e=ie,n.n=1,$(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return n.a(2,e(n.v.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function ee(){return te.apply(this,arguments)}function te(){return(te=g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,$(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v.trim(),n.a(2,e.length>0?e:void 0);case 2:if(n.p=2,!re(t=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw t;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function re(n){return/no pull requests? found for branch/i.test(String(n))}function ie(n,e){if(n.length>0)return n;throw new Error(e)}function ae(n){return me(n,"issue")}function oe(n){return me(n,"pull request")}function ue(n){return ce.apply(this,arguments)}function ce(){return(ce=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn();case 1:return t=n.v,r=I(t,2),i=r[0],a=r[1],n.n=2,ve(i,a,ae(e));case 2:return o=n.v,z("Fetched issue #".concat(o.number," messages.")),n.a(2,hn({issue:o}))}},n)}))).apply(this,arguments)}function se(n){return le.apply(this,arguments)}function le(){return(le=g(x().m(function n(e){var t,r,i;return x().w(function(n){for(;;)switch(n.n){case 0:if(void 0!==e){n.n=2;break}return n.n=1,ln();case 1:i=n.v,n.n=3;break;case 2:i=oe(e);case 3:return t=i,n.n=4,de(t);case 4:return r=n.v,z("Fetched pull request #".concat(r.number," messages.")),n.a(2,hn({pull_request:r}))}},n)}))).apply(this,arguments)}function fe(){return pe.apply(this,arguments)}function pe(){return(pe=g(x().m(function n(){var e,t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!re(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,de(t);case 3:return r=n.v,n.a(2,hn({pull_request:r}))}},n)}))).apply(this,arguments)}function de(n){return he.apply(this,arguments)}function he(){return(he=g(x().m(function n(e){var t,r,i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn();case 1:return t=n.v,r=I(t,2),i=r[0],a=r[1],n.n=2,we(i,a,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function me(n,e){var t=String(n).trim();if(0===t.length&&K("Error: ".concat(e," reference is required"),2),/^\d+$/.test(t))return t;var r="issue"===e?"issues":"pull",i=t.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(r,"/(\\d+)(?:/|$)")));if(null!=i&&i[1])return i[1];K("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function ve(n,e,t){return ge.apply(this,arguments)}function ge(){return(ge=g(x().m(function n(e,t,r){var i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Oe({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"issue",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.issue}});case 1:return i=n.v,n.n=2,Ie({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.issue)?void 0:e.comments},mapNode:$e});case 2:return a=n.v,n.a(2,k(k({},i),{},{messages:a}))}},n)}))).apply(this,arguments)}function we(n,e,t){return ye.apply(this,arguments)}function ye(){return(ye=g(x().m(function n(e,t,r){var i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Oe({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"pull request",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.pullRequest}});case 1:return i=n.v,n.n=2,Promise.all([ke(e,t,r),je(e,t,r)]);case 2:return a=n.v,o=I(a,2),u=o[0],c=o[1],n.a(2,k(k({},i),{},{messages:[].concat(A(u),A(c)).sort(be)}))}},n)}))).apply(this,arguments)}function be(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function ke(n,e,t){return xe.apply(this,arguments)}function xe(){return(xe=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ie({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.comments},mapNode:$e});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function je(n,e,t){return Se.apply(this,arguments)}function Se(){return(Se=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ie({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviews(first: 100, after: $cursor) {\n nodes {\n id\n body\n state\n submittedAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.reviews},mapNode:Ce});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Ie(n){return Ae.apply(this,arguments)}function Ae(){return(Ae=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:r=[];case 1:return o=e,n.n=2,pn(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:t});case 2:if(a=o.selectConnection.call(o,n.v)){n.n=3;break}return n.a(2,r);case 3:if(r.push.apply(r,A(a.nodes.map(e.mapNode).filter(Pe))),a.pageInfo.hasNextPage){n.n=4;break}return n.a(2,r);case 4:t=null!=(i=a.pageInfo.endCursor)?i:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Oe(n){return Re.apply(this,arguments)}function Re(){return(Re=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return o=e,n.n=1,pn(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(a=o.selectMetadata.call(o,n.v))||K("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:a.number,title:a.title,url:a.url,author:null!=(t=null==(r=a.author)?void 0:r.login)?t:void 0,body:null!=(i=a.body)?i:""})}},n)}))).apply(this,arguments)}function $e(n){var e,t;return{type:"comment",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,createdAt:n.createdAt,url:n.url,body:n.body}}function Ce(n){var e,t,r,i,a;return{type:"review",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,state:null!=(r=n.state)?r:void 0,createdAt:null!=(i=n.submittedAt)?i:void 0,url:n.url,body:null!=(a=n.body)?a:""}}function Pe(n){return"string"==typeof n.body&&n.body.length>0}function qe(n){return Ee.apply(this,arguments)}function Ee(){return(Ee=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,en(["git","branch","--show-current"]);case 1:return t=n.v.trim(),n.n=2,rn(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return r=n.v.trim(),t||K("Error: could not determine current branch"),r||K("Error: could not determine default branch"),t===r&&K("Error: current branch is the default branch (".concat(r,")")),i=["pr","create","--base",r,"--head",t,"--fill"],e&&e.length>0&&i.push("--body-file","-"),z("Creating pull request..."),n.n=3,rn(i,e);case 3:return a=hn,o=JSON,n.n=4,rn(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,a(o.parse.call(o,n.v)))}},n)}))).apply(this,arguments)}function Ne(n){return Le.apply(this,arguments)}function Le(){return(Le=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:return t=n.v,z("Updating pull request #".concat(t," body...")),n.n=2,De(t,["--body-file","-"],e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Te(n){return _e.apply(this,arguments)}function _e(){return(_e=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:return t=n.v,z("Updating pull request #".concat(t," title...")),n.n=2,De(t,["--title",e]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function De(n,e,t){return Ge.apply(this,arguments)}function Ge(){return(Ge=g(x().m(function n(e,t,r){var i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn(["pr","edit",e].concat(A(t)),r);case 1:return i=hn,a=JSON,n.n=2,rn(["pr","view",e,"--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author,body"]);case 2:return n.a(2,i(a.parse.call(a,n.v)))}},n)}))).apply(this,arguments)}function Ue(){return Fe.apply(this,arguments)}function Fe(){return(Fe=g(x().m(function n(){var e,t,r,i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,X("Error: JSON input is required on stdin");case 1:for(e=n.v,t=Xe(e),r={},i=0,a=Object.entries(t.replies);i<a.length;i++)o=I(a[i],2),u=o[0],"string"==typeof(c=o[1])&&c.length>0&&(r[u]=c);return n.a(2,r)}},n)}))).apply(this,arguments)}function Me(n,e,t,r,i){return He.apply(this,arguments)}function He(){return(He=g(x().m(function n(e,t,r,i,a){var o,u,c,s,l,f,p,d,h,m,v,g;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,pn(e,{owner:t,name:r,number:Number(i),cursor:o});case 1:if(m=u=n.v.data,h=null==m){n.n=2;break}h=null==(u=u.repository);case 2:if(d=h){n.n=3;break}d=null==(u=u.pullRequest);case 3:if(!d){n.n=4;break}v=void 0,n.n=5;break;case 4:v=u.reviewThreads;case 5:(s=v)||K("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=w(s.nodes),n.p=6,l.s();case 7:if((f=l.n()).done){n.n=9;break}return p=f.value,n.n=8,a(p);case 8:n.n=7;break;case 9:n.n=11;break;case 10:n.p=10,g=n.v,l.e(g);case 11:return n.p=11,l.f(),n.f(11);case 12:if(s.pageInfo.hasNextPage){n.n=13;break}return n.a(2);case 13:o=null!=(c=s.pageInfo.endCursor)?c:void 0;case 14:n.n=0;break;case 15:return n.a(2)}},n,null,[[6,10,11,12]])}))).apply(this,arguments)}function We(n,e,t){return Je.apply(this,arguments)}function Je(){return(Je=g(x().m(function n(e,t,r){var i;return x().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,Me("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,function(n){n.isResolved||i.push(n.id)});case 1:return n.a(2,i)}},n)}))).apply(this,arguments)}function Be(n,e,t){return Qe.apply(this,arguments)}function Qe(){return(Qe=g(x().m(function n(e,t,r){var i;return x().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,Me("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n isOutdated\n path\n line\n originalLine\n startLine\n originalStartLine\n comments(first: 100) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,g(x().m(function n(e){var t,r,a,o,u,c,s,l,f,p;return x().w(function(n){for(;;)switch(n.n){case 0:if(!e.isResolved){n.n=1;break}return n.a(2);case 1:r=e.comments.nodes.map(Ve),a=e.comments.pageInfo,o=null!=(t=a.endCursor)?t:void 0;case 2:if(!a.hasNextPage){n.n=7;break}return n.n=3,pn("\n query($threadId: ID!, $cursor: String) {\n node(id: $threadId) {\n ... on PullRequestReviewThread {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:e.id,cursor:o});case 3:if(f=u=n.v.data,l=null==f){n.n=4;break}l=null==(u=u.node);case 4:if(!l){n.n=5;break}p=void 0,n.n=6;break;case 5:p=u.comments;case 6:(s=p)||K("Could not find comments in GraphQL response for thread ".concat(e.id,".")),r.push.apply(r,A(s.nodes.map(Ve))),a=s.pageInfo,o=null!=(c=a.endCursor)?c:void 0,n.n=2;break;case 7:i.push({id:e.id,isResolved:e.isResolved,isOutdated:e.isOutdated,path:e.path,line:e.line,originalLine:e.originalLine,startLine:e.startLine,originalStartLine:e.originalStartLine,comments:r});case 8:return n.a(2)}},n)})));case 1:return n.a(2,i)}},n)}))).apply(this,arguments)}function Ye(){return ze.apply(this,arguments)}function ze(){return(ze=g(x().m(function n(){var e,t,r,i,a,o,u;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn();case 1:return e=n.v,t=I(e,2),r=t[0],i=t[1],n.n=2,ln();case 2:return a=n.v,z("Fetching unresolved review threads..."),o=hn,n.n=3,Be(r,i,a);case 3:return u=n.v,n.a(2,o({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Ke(n){return Ze.apply(this,arguments)}function Ze(){return(Ze=g(x().m(function n(e){var t,r,i,a,o,u,c,s,l,f,p,d,h,m,v,g,y,b,k,j;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,cn();case 1:return t=n.v,r=I(t,2),i=r[0],a=r[1],n.n=2,ln();case 2:return o=n.v,b=Set,n.n=3,We(i,a,o);case 3:k=n.v,u=new b(k),z("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=w(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(d=I(f.value,2),h=d[0],m=I(d[1],2),v=m[0],g=m[1],z("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),u.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,pn("\n mutation($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: {threadId: $threadId}) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:v,body:g});case 7:y=n.v,null!=(p=y.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?c.push(v):z("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,j=n.v,l.e(j);case 11:return n.p=11,l.f(),n.f(11);case 12:return z("Done."),n.a(2,hn({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function Ve(n){var e,t;return k(k({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(t=n.author)?void 0:t.login)?e:null})}function Xe(n){try{var e=JSON.parse(n);return function(n){if("object"!==O(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==O(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||K("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&K("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function nt(n){return et.apply(this,arguments)}function et(){return(et=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ue(e);case 1:return t=n.v,n.a(2,"\nPlan a GitHub issue by gathering context, writing a specification for software engineers, and posting or updating that specification back to the issue.\nThe target issue number is #".concat(e,". Here is the fetched issue context as YAML:\n~~~~yaml\n").concat(t.trim(),"\n~~~~\n\nFollow this workflow:\n1. Read the above issue body and timeline messages carefully.\n2. Collect enough supporting information before writing the specification:\n - Inspect the relevant code, surrounding call sites, related types, tests, configuration, recent diffs, and any other local context needed to understand the change.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the issue depends on runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - Clean up any temporary files after the experiment.\n - If the issue depends on a library, API, or language feature, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Write the specification for the issue comment.\n - Write the background based on the collected information.\n - Define a goal that clearly guides our implementation in the right direction.\n - Write a detailed specification incorporating the evidence you collected.\n - If needed, include code snippets that explain how to use libraries or APIs, along with references to their documentation.\n4. Post the specification back to issue #").concat(e,", then print the issue URL.\n - If the issue already has a specification, update the existing comment instead of posting a new one.\n\nFormat the issue comment exactly like this, but do not include the surrounding `~~~~` fences in the actual comment:\n~~~~\n## Background\n\n[Summarize the current behavior and explain the motivation behind this issue]\n\n## Goal\n\n[Define the goal we want to achieve in this issue]\n\n## Specification\n\n[Detailed specification for software engineers]\n\n## Key Technologies (ONLY if external resources are needed)\n\n[Describe what libraries or APIs we should use, including concrete versions and code snippets.]\n\n~~~~\n").trim())}},n)}))).apply(this,arguments)}function tt(n){return"git merge-base ".concat(rt("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(rt(n)," HEAD")}function rt(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function it(){return at.apply(this,arguments)}function at(){return(at=g(x().m(function n(){var e,t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Zn();case 1:return e=n.v,t=tt(e),n.n=2,fe();case 2:return r=n.v,n.a(2,"\nReview the current ".concat(r?"pull request":"branch"," against its base branch ").concat(e,' via `git diff "$(').concat(t,')"`.\nFor each finding, do the following three steps:\n1. Gather supporting evidence:\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the finding is about runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - Clean up any temporary files after the experiment.\n - If the finding depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n2. Judge whether the finding is valid:\n - Mark it valid only when the available evidence shows the reported issue is still real in the current codebase.\n - Otherwise, mark it not valid.\n3. Propose a fix without modifying the code:\n - Describe the smallest practical change that would address the finding.\n - Investigate the likely impact of that change by inspecting the affected call sites, related types, tests, configuration, and adjacent behavior, and note any follow-up changes or risks the fix would need to account for.\n\nReport only the valid findings, the evidence for each one, and the proposed fix with its likely impact. Include a brief justification for each, citing the evidence used (e.g., a failing scenario, experiment result, or official documentation). Do not modify the code.\nIf there are no valid findings, respond exactly with: `').concat(T,"`\n\n").concat(ot(r),"\n").trim())}},n)}))).apply(this,arguments)}function ot(n){return n?"Current pull request context:\n~~~~yaml\n".concat(n.trim(),"\n~~~~\n").trim():""}function ut(n,e,t){var r=t.replaceAll("\n"," ").replaceAll('"',"'");return'\nUse `playwright-cli` skill to take a screenshot of "'.concat(r,'" by navigating from ').concat(n,' to "').concat(e,'" page.\n\nFollow this workflow:\n1. Open the initial page at ').concat(n,".\n2. Navigate from that initial page until you reach the page identified as ").concat(e,'.\n - If code errors, runtime failures, or broken UI flows prevent navigation, investigate the cause in the local codebase, make the smallest practical code fix, and verify that the page can now be reached before continuing.\n - If you cannot fix the errors, report on the errors then stop.\n3. Capture a screenshot that focuses on this target: "').concat(r,'".\n4. Keep the generated image artifact and report the screenshot file path plus a brief description of what was captured. If you had to fix code first, also summarize the fix.\n').trim()}function ct(){return st.apply(this,arguments)}function st(){return(st=g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Zn();case 1:return e=n.v,t=tt(e),n.a(2,'\nSimplify the current branch against its base branch using `git diff "$('.concat(t,")\"`.\nFirst, inspect the diff and review the surrounding code for each changed area. This includes nearby functions, types, call sites, tests, configurations, and any other files that help determine if the change is truly necessary.\nLeverage this context to identify redundancies that can be safely removed or simplified. Look for duplicate logic, repeated conditionals, unnecessary abstractions, overlapping code paths, dead code, or edits made obsolete upon understanding the broader context.\n\nPrioritize simplifications that reduce the reviewer's burden, such as:\n- Removing redundant edits or dead code.\n- Eliminating or merging duplicated logic discovered by comparing the diff with related code.\n- Flattening unnecessarily complex logic introduced in the diff (e.g., using early returns to reduce nesting, simplifying boolean expressions, or removing redundant wrapper functions).\n\nCommit and push your changes. Afterward, summarize the redundancies or unnecessary complexity you have removed.\n").trim())}},n)}))).apply(this,arguments)}function lt(){return ft.apply(this,arguments)}function ft(){return(ft=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,$(["bunx","skills@latest","add",p(new URL("../..",import.meta.url)),"--global","--yes","--skill","*","--agent","claude-code","--agent","codex","--agent","gemini-cli"],{waitMessage:"Installing packaged skills globally."});case 1:return n.a(2)}},n)}))).apply(this,arguments)}var pt=new n;function dt(n){var t=pt.command(n.name).description(n.description).allowExcessArguments(!1);n.argumentName&&t.argument(n.argumentName,n.argumentDescription),t.addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).action(g(x().m(function e(){var t,r,i,a,o,u,c,s,l,f=arguments;return x().w(function(e){for(;;)switch(e.n){case 0:for(t=f.length,r=new Array(t),i=0;i<t;i++)r[i]=f[i];return a=I(r,2),o=a[0],u=a[1],c="string"==typeof o?o:"",s="string"==typeof o?u:o,l=process.stdout,e.n=1,n.run(s.agent,c);case 1:l.write.call(l,e.v);case 2:return e.a(2)}},e)})))}function ht(n,e,t){var r=pt.command(n).description(e).allowExcessArguments(!1);"function"!=typeof t?r.argument(t.argumentName,t.argumentDescription).action(g(x().m(function n(e){var r;return x().w(function(n){for(;;)switch(n.n){case 0:return r=process.stdout,n.n=1,t.run(e);case 1:r.write.call(r,n.v);case 2:return n.a(2)}},n)}))):r.action(g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return e=process.stdout,n.n=1,t();case 1:e.write.call(e,n.v);case 2:return n.a(2)}},n)})))}pt.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),pt.command("install-skills").description("Install all packaged skills globally for Claude Code, Codex, and Gemini CLI").allowExcessArguments(!1).action(g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,lt();case 1:process.stdout.write("Done\n");case 2:return n.a(2)}},n)}))),dt({name:"review",description:"Run review against the current branch with the selected agent",optionDescription:"Use a review agent",choices:["all","codex","claude","gemini"],run:function(n){return"all"===n?G(it(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return D.test(n)}(e))return"## ".concat(W(n),"\n\n").concat(e)}}):F(n,it())}}),ht("review-codex","Run Codex review against the current branch",function(){return F("codex",it())}),ht("review-claude","Run Claude Code review against the current branch",function(){return F("claude",it())}),ht("review-gemini","Run Gemini CLI review against the current branch",function(){return F("gemini",it())}),dt({name:"plan",description:"Run planning against the specified issue with the selected agent",optionDescription:"Use a planning agent",choices:["all","codex","claude","gemini"],argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return"all"===n?G(nt(ae(e)),{allAgentsLabel:"planning agents"}):F(n,nt(ae(e)))}}),ht("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return F("codex",nt(ae(n)))}}),ht("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return F("claude",nt(ae(n)))}}),ht("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return F("gemini",nt(ae(n)))}}),pt.command("screenshot").description("Take a screenshot with the selected agent via playwright-cli").argument("<initial-url>","Initial URL to open before navigating").argument("<page-name>","Page name to navigate to from the initial page").argument("<description>","Description of the part to capture in the screenshot").addOption(new e("--agent <agent>","Use a screenshot agent").choices(["codex","claude","gemini"]).makeOptionMandatory()).allowExcessArguments(!1).action(g(x().m(function n(e,t,r,i){var a;return x().w(function(n){for(;;)switch(n.n){case 0:return a=process.stdout,n.n=1,F(i.agent,ut(e,t,r));case 1:a.write.call(a,n.v);case 2:return n.a(2)}},n)}))),dt({name:"simplify",description:"Run PR simplification against the current branch with the selected agent",optionDescription:"Use a simplify agent",choices:["codex","claude","gemini"],run:function(n){return F(n,ct())}}),ht("simplify-codex","Run Codex PR simplification against the current branch",function(){return F("codex",ct())}),ht("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return F("claude",ct())}),ht("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return F("gemini",ct())}),pt.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Z();case 1:return e=n.v,n.n=2,qe(e||void 0);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),pt.command("update-pr-body").description("Update the current pull request body").allowExcessArguments(!1).action(g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,X("Error: PR body input is required on stdin");case 1:return e=n.v,n.n=2,Ne(e);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),pt.command("update-pr-title").description("Update the current pull request title").allowExcessArguments(!1).action(g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,X("Error: PR title input is required on stdin");case 1:return e=n.v,n.n=2,Te(e);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),pt.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Dn();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),pt.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ue(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),pt.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr]","GitHub pull request number or URL; defaults to the current branch pull request").allowExcessArguments(!1).action(g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,se(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),pt.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ye();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),pt.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ue();case 1:return e=n.v,n.n=2,Ke(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await pt.parseAsync(process.argv);
|
|
5
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3NoYXJlZC50cyIsIi4uL3NyYy9wci9jaS50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMvcHIvbWVzc2FnZXMudHMiLCIuLi9zcmMvcHIvcHVsbFJlcXVlc3QudHMiLCIuLi9zcmMvcHIvcmV2aWV3VGhyZWFkcy50cyIsIi4uL3NyYy9wcm9tcHRzL3BsYW5Qcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9iYXNlQnJhbmNoRGlmZkNvbW1hbmQudHMiLCIuLi9zcmMvcHJvbXB0cy9yZXZpZXdQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvc2tpbGxzL2luc3RhbGxTa2lsbHMudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbnR5cGUgUnVuQ29tbWFuZE9wdGlvbnMgPSB7XG4gIGxvZ0ZpbGVQYXRoPzogc3RyaW5nO1xuICB3YWl0TWVzc2FnZT86IHN0cmluZyB8IGZhbHNlO1xuICB3YWl0SW50ZXJ2YWxTZWNvbmRzPzogbnVtYmVyO1xufTtcblxudHlwZSBQcm9ncmVzc1dyaXRlciA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbi8vIFRoZSBvbmUtaG91ciBidWRnZXQga2VlcHMgYWdlbnRzIHdhaXRpbmcgZm9yIGxvbmctcnVubmluZyBjb21tYW5kcyB3aXRob3V0IHJlcXVpcmluZyB0aGUgcHJvY2VzcyB0byB1c2UgdGhlIGZ1bGwgaG91ci5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyA9IDM2O1xuY29uc3QgRE9UU19QRVJfUFJPR1JFU1NfUEVSQ0VOVF9TVEVQID0gNTtcbmNvbnN0IE1BWF9QUk9HUkVTU19QRVJDRU5UID0gMTAwO1xuLy8gS2VlcCB0aGUgQ0xJIHRleHQgZXhhY3RseSBhcyByZXF1ZXN0ZWQgc28gZG93bnN0cmVhbSBwcm9tcHRzIGNhbiBtYXRjaCBpdCBjb25zaXN0ZW50bHkuXG5leHBvcnQgY29uc3QgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HID0gJ0l0IHRha2VzIDEgaG91ciBhbmQgcHJpbnRpbmcgLiBwZXIgMzYgc2Vjcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10sXG4gIH0pO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAoZXhpdENvZGUgPT09IDApIHtcbiAgICAgIHJldHVybiBzdGRvdXQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgY29tbWFuZExvZ2dlci5jbG9zZSgpO1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub1RleHQoXG4gIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgb25DaHVuaz86IChjaHVuazogc3RyaW5nKSA9PiB2b2lkXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjb25zdCBjaHVua1RleHQgPSB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gY2h1bmsgOiBjaHVuay50b1N0cmluZygndXRmOCcpO1xuICAgIGNodW5rcy5wdXNoKGNodW5rVGV4dCk7XG4gICAgb25DaHVuaz8uKGNodW5rVGV4dCk7XG4gIH1cbiAgcmV0dXJuIGNodW5rcy5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdhaXRQcm9ncmVzcyhcbiAgd2FpdE1lc3NhZ2U6IHN0cmluZyB8IGZhbHNlIHwgdW5kZWZpbmVkLFxuICB3YWl0SW50ZXJ2YWxTZWNvbmRzID0gREVGQVVMVF9XQUlUX0lOVEVSVkFMX1NFQ09ORFMsXG4gIHdyaXRlUHJvZ3Jlc3M6IFByb2dyZXNzV3JpdGVyID0gKG1lc3NhZ2UpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKG1lc3NhZ2UpXG4pOiAoKSA9PiB2b2lkIHtcbiAgaWYgKCF3YWl0TWVzc2FnZSkge1xuICAgIHJldHVybiAoKSA9PiB7fTtcbiAgfVxuXG4gIGxldCBkb3RDb3VudCA9IDA7XG4gIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIHdyaXRlUHJvZ3Jlc3MoJy4nKTtcbiAgICBkb3RDb3VudCArPSAxO1xuICAgIGlmIChkb3RDb3VudCA8PSBNQVhfUFJPR1JFU1NfUEVSQ0VOVCAmJiBkb3RDb3VudCAlIERPVFNfUEVSX1BST0dSRVNTX1BFUkNFTlRfU1RFUCA9PT0gMCkge1xuICAgICAgLy8gVGhpcyB0cmFja3MgZWxhcHNlZCB3YWl0IGJ1ZGdldCwgbm90IHRoZSBjaGlsZCBwcm9jZXNzIGNvbXBsZXRpb24gcGVyY2VudGFnZS5cbiAgICAgIHdyaXRlUHJvZ3Jlc3MoYCAke2RvdENvdW50fSUgZG9uZSBgKTtcbiAgICB9XG4gIH0sIHdhaXRJbnRlcnZhbFNlY29uZHMgKiAxMDAwKTtcblxuICB3cml0ZVByb2dyZXNzKGAke3dhaXRNZXNzYWdlfSAke1dBSVRfVVBfVE9fT05FX0hPVVJfV0FSTklOR306IGApO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgd3JpdGVQcm9ncmVzcygnXFxuJyk7XG4gIH07XG59XG5cbnR5cGUgQ29tbWFuZExvZ2dlciA9IHtcbiAgd3JpdGU6IChjaHVuazogc3RyaW5nKSA9PiB2b2lkO1xuICBjbG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbW1hbmRMb2dnZXIobG9nRmlsZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8Q29tbWFuZExvZ2dlcj4ge1xuICBpZiAoIWxvZ0ZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgd2FybiA9IChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBXYXJuaW5nOiBGYWlsZWQgdG8gd3JpdGUgY29tbWFuZCBsb2cgdG8gJHtsb2dGaWxlUGF0aH06ICR7U3RyaW5nKGVycm9yKX1cXG5gKTtcbiAgfTtcblxuICB0cnkge1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUobG9nRmlsZVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBzdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShsb2dGaWxlUGF0aCwgeyBmbGFnczogJ3cnIH0pO1xuXG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIHdhcm4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoY2h1bmspID0+IHtcbiAgICAgICAgaWYgKHN0cmVhbS53cml0YWJsZSkge1xuICAgICAgICAgIHN0cmVhbS53cml0ZShjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzdHJlYW0uZW5kKCgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgd2FybihlcnJvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9QSFJBU0UgPSAndGhlcmUgaXMgbm8gY29uY2Vybic7XG5leHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9NRVNTQUdFID0gJ1RoZXJlIGlzIG5vIGNvbmNlcm4uJztcbiIsImltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5pbXBvcnQgeyBOT19DT05DRVJOX01FU1NBR0UsIE5PX0NPTkNFUk5fUEhSQVNFIH0gZnJvbSAnLi4vcmV2aWV3L25vQ29uY2Vybi5qcyc7XG5cbmV4cG9ydCBjb25zdCBBR0VOVF9OQU1FUyA9IFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddIGFzIGNvbnN0O1xuY29uc3QgQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWCA9IG5ldyBSZWdFeHAoYFxcXFxiJHtOT19DT05DRVJOX1BIUkFTRX1cXFxcYmAsICdpJyk7XG5leHBvcnQgdHlwZSBBZ2VudE5hbWUgPSAodHlwZW9mIEFHRU5UX05BTUVTKVtudW1iZXJdO1xuXG50eXBlIEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG59O1xuXG50eXBlIEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7XG4gIGFsbEFnZW50c0xhYmVsOiBzdHJpbmc7XG4gIG1hcE91dHB1dD86IChhZ2VudDogQWdlbnROYW1lLCBvdXRwdXQ6IHN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkFsbEFnZW50Q29tbWFuZHMoXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBbGxBZ2VudENvbW1hbmRPcHRpb25zID0geyBhbGxBZ2VudHNMYWJlbDogJ2FnZW50cycgfVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzb2x2ZWRQcm9tcHQgPSBhd2FpdCBwcm9tcHQ7XG4gIGNvbnN0IHN0b3BXYWl0UHJvZ3Jlc3MgPSBjcmVhdGVXYWl0UHJvZ3Jlc3Mod2FpdE1lc3NhZ2VGb3Iob3B0aW9ucy5hbGxBZ2VudHNMYWJlbCkpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qgb3V0cHV0cyA9IChcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBBR0VOVF9OQU1FUy5tYXAoYXN5bmMgKGFnZW50KSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gKFxuICAgICAgICAgICAgYXdhaXQgcnVuQWdlbnRDb21tYW5kKGFnZW50LCByZXNvbHZlZFByb21wdCwge1xuICAgICAgICAgICAgICB3YWl0TWVzc2FnZTogZmFsc2UsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICkudHJpbSgpO1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLm1hcE91dHB1dD8uKGFnZW50LCBvdXRwdXQpID8/IGAjIyAke2Rpc3BsYXlBZ2VudE5hbWUoYWdlbnQpfVxcblxcbiR7b3V0cHV0fWA7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKS5maWx0ZXIoKG91dHB1dCk6IG91dHB1dCBpcyBzdHJpbmcgPT4gb3V0cHV0ICE9PSB1bmRlZmluZWQpO1xuICAgIHJldHVybiBvdXRwdXRzLmxlbmd0aCA+IDAgPyBvdXRwdXRzLmpvaW4oJ1xcblxcbicpIDogTk9fQ09OQ0VSTl9NRVNTQUdFO1xuICB9IGZpbmFsbHkge1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWdlbnRDb21tYW5kKFxuICBhZ2VudDogQWdlbnROYW1lLFxuICBwcm9tcHQ6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPixcbiAgb3B0aW9uczogQWdlbnRDb21tYW5kT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhjcmVhdGVBZ2VudENvbW1hbmQoYWdlbnQsIGF3YWl0IHByb21wdCksIHtcbiAgICBsb2dGaWxlUGF0aDogYWdlbnRMb2dGaWxlUGF0aChhZ2VudCksXG4gICAgd2FpdE1lc3NhZ2U6IG9wdGlvbnMud2FpdE1lc3NhZ2UgPT09IHVuZGVmaW5lZCA/IHdhaXRNZXNzYWdlRm9yKGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQpKSA6IG9wdGlvbnMud2FpdE1lc3NhZ2UsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBZ2VudENvbW1hbmQoYWdlbnQ6IEFnZW50TmFtZSwgcHJvbXB0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gWyducHgnLCAnLS15ZXMnLCAnQG9wZW5haS9jb2RleEBsYXRlc3QnLCAnZXhlYycsICctLWRhbmdlcm91c2x5LWJ5cGFzcy1hcHByb3ZhbHMtYW5kLXNhbmRib3gnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2NsYXVkZSc6XG4gICAgICByZXR1cm4gWydjbGF1ZGUnLCAnLS1kYW5nZXJvdXNseS1za2lwLXBlcm1pc3Npb25zJywgJy1wJywgcHJvbXB0XTtcbiAgICBjYXNlICdnZW1pbmknOlxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgJ25weCcsXG4gICAgICAgICctLXllcycsXG4gICAgICAgICdAZ29vZ2xlL2dlbWluaS1jbGlAcHJldmlldycsXG4gICAgICAgICctLWFwcHJvdmFsLW1vZGUnLFxuICAgICAgICAneW9sbycsXG4gICAgICAgICctLW1vZGVsJyxcbiAgICAgICAgJ2dlbWluaS0zLjEtcHJvLXByZXZpZXcnLFxuICAgICAgICAnLXAnLFxuICAgICAgICBwcm9tcHQsXG4gICAgICBdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5QWdlbnROYW1lKGFnZW50OiBBZ2VudE5hbWUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOlxuICAgICAgcmV0dXJuICdDb2RleCc7XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiAnQ2xhdWRlIENvZGUnO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gJ0dlbWluaSBDTEknO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYLnRlc3Qob3V0cHV0KTtcbn1cblxuZnVuY3Rpb24gd2FpdE1lc3NhZ2VGb3IodGFyZ2V0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFdhaXRpbmcgZm9yICR7dGFyZ2V0fSB0byBmaW5pc2guYDtcbn1cblxuZnVuY3Rpb24gYWdlbnRMb2dGaWxlUGF0aChhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsb2dzLyR7YWdlbnR9LSR7dGltZXN0YW1wRm9yTG9nRmlsZSgpfS5sb2dgO1xufVxuXG5mdW5jdGlvbiB0aW1lc3RhbXBGb3JMb2dGaWxlKCk6IHN0cmluZyB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IFttb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZF0gPSBbXG4gICAgbm93LmdldE1vbnRoKCkgKyAxLFxuICAgIG5vdy5nZXREYXRlKCksXG4gICAgbm93LmdldEhvdXJzKCksXG4gICAgbm93LmdldE1pbnV0ZXMoKSxcbiAgICBub3cuZ2V0U2Vjb25kcygpLFxuICBdLm1hcCh0d29EaWdpdHMpO1xuICByZXR1cm4gYCR7bW9udGh9JHtkYXl9LSR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xufVxuXG5mdW5jdGlvbiB0d29EaWdpdHModmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG59XG4iLCIvKipcbiAqIGBibG9ja1F1b3RlOiAnbGl0ZXJhbCdgOiBVc2VzIGEgcGlwZSAoYHByb3A6IHxgKSB0byByZXByZXNlbnQgbXVsdGlsaW5lIHN0cmluZ3MuXG4gKiBgbGluZVdpZHRoOiAwYDogRGlzYWJsZXMgbGluZSB3cmFwcGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHlhbWxTdHJpbmdpZnlPcHRpb25zID0geyBibG9ja1F1b3RlOiAnbGl0ZXJhbCcsIGxpbmVXaWR0aDogMCB9IGFzIGNvbnN0O1xuIiwiaW1wb3J0IHsgc3Bhd24sIHNwYXduU3luYyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBzdGRlcnIgYXMgcHJvY2Vzc1N0ZGVyciwgc3RkaW4gYXMgcHJvY2Vzc1N0ZGluIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2xlZXAgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBzdHJpbmdpZnkgYXMgc3RyaW5naWZ5WWFtbCB9IGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgeWFtbFN0cmluZ2lmeU9wdGlvbnMgfSBmcm9tICcuLi95YW1sLmpzJztcblxuZXhwb3J0IHR5cGUgSnNvbk9iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIE1ldGFkYXRhTm9kZSA9IHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBQYWdlSW5mbyA9IHtcbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4gPSB7XG4gIG5vZGVzOiBUTm9kZVtdO1xuICBwYWdlSW5mbzogUGFnZUluZm87XG59O1xuXG50eXBlIFJ1bkNvbW1hbmRPcHRpb25zID0ge1xuICBzdGRpbkRhdGE/OiBzdHJpbmc7XG4gIGFsbG93ZWRFeGl0Q29kZXM/OiBudW1iZXJbXTtcbn07XG5cbmNvbnN0IEdIX1JFVFJZX01BWF9BVFRFTVBUUyA9IDM7XG5jb25zdCBHSF9SRVRSWV9CQVNFX0RFTEFZX01TID0gMTAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2dyZXNzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBwcm9jZXNzU3RkZXJyLndyaXRlKGAke21lc3NhZ2V9XFxuYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dChlcnJvck1lc3NhZ2UgPSAnRXJyb3I6IGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICBpZiAoaW5wdXQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBleGl0V2l0aEVycm9yKGVycm9yTWVzc2FnZSwgMik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYWxsb3dlZEV4aXRDb2RlcyA9IG9wdGlvbnMuYWxsb3dlZEV4aXRDb2RlcyA/PyBbXTtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBHSF9SRVRSWV9NQVhfQVRURU1QVFM7IGF0dGVtcHQgKz0gMSkge1xuICAgIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgICBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuICAgIGlmIChvcHRpb25zLnN0ZGluRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9jLnN0ZGluLmVuZChvcHRpb25zLnN0ZGluRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Muc3RkaW4uZW5kKCk7XG4gICAgfVxuXG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG5cbiAgICBpZiAoZXhpdENvZGUgPT09IDAgfHwgYWxsb3dlZEV4aXRDb2Rlcy5pbmNsdWRlcyhleGl0Q29kZSkpIHtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQsIGV4aXRDb2RlLCBvdXRwdXQpICYmIGF0dGVtcHQgPCBHSF9SRVRSWV9NQVhfQVRURU1QVFMpIHtcbiAgICAgIHByb2dyZXNzKGBUcmFuc2llbnQgR2l0SHViIENMSSBmYWlsdXJlOyByZXRyeWluZy4uLiAoYXR0ZW1wdCAke2F0dGVtcHR9IG9mICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTIC0gMX0pYCk7XG4gICAgICBhd2FpdCBzbGVlcChHSF9SRVRSWV9CQVNFX0RFTEFZX01TICogYXR0ZW1wdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBleGl0V2l0aEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcihgQ29tbWFuZCBmYWlsZWQgYWZ0ZXIgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFN9IGF0dGVtcHRzOiAke2NvbW1hbmQuam9pbignICcpfWApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2goYXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaEFsbG93RXhpdENvZGVzKFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgYWxsb3dlZEV4aXRDb2RlczogbnVtYmVyW10sXG4gIHN0ZGluRGF0YT86IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSwgYWxsb3dlZEV4aXRDb2RlcyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRSZXBvUGFydHMoKTogUHJvbWlzZTxbc3RyaW5nLCBzdHJpbmddPiB7XG4gIGNvbnN0IG5hbWVXaXRoT3duZXIgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ25hbWVXaXRoT3duZXInLCAnLS1qcScsICcubmFtZVdpdGhPd25lciddKSkudHJpbSgpO1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gbmFtZVdpdGhPd25lci5zcGxpdCgnLycsIDIpO1xuICBpZiAoIW93bmVyIHx8ICFuYW1lKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCByZXBvc2l0b3J5Jyk7XG4gIH1cbiAgcmV0dXJuIFtvd25lciwgbmFtZV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UHJOdW1iZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIChhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSkpLnRyaW0oKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdyYXBocWw8VCBleHRlbmRzIEpzb25PYmplY3Q+KFxuICBxdWVyeTogc3RyaW5nLFxuICB2YXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ+ID0ge31cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBhcmdzID0gWydhcGknLCAnZ3JhcGhxbCcsICctRicsICdxdWVyeT1ALSddO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJzKSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLUYnLCBgJHtrZXl9PSR7dmFsdWV9YCk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoYXdhaXQgZ2goYXJncywgcXVlcnkpKSBhcyBKc29uT2JqZWN0ICYgeyBlcnJvcnM/OiBBcnJheTx7IG1lc3NhZ2U/OiBzdHJpbmcgfT4gfTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IGVycm9yTWVzc2FnZXMgPSByZXNwb25zZS5lcnJvcnMubWFwKChlcnJvcikgPT4gZXJyb3IubWVzc2FnZSA/PyAnVW5rbm93biBHcmFwaFFMIGVycm9yJykuam9pbignXFxuJyk7XG4gIGV4aXRXaXRoRXJyb3IoYEdyYXBoUUwgQVBJIGVycm9yOlxcbiR7ZXJyb3JNZXNzYWdlc31gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHlhbWxEdW1wKGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5naWZ5WWFtbChkYXRhLCB5YW1sU3RyaW5naWZ5T3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUPihkYXRhOiBUKTogVCB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSBhcyBUO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNwYXduU3luY1NhZmUoW2NvbW1hbmQsICctLXZlcnNpb24nXSkuZXhpdENvZGUgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGF3blN5bmNTYWZlKGNvbW1hbmQ6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiB7IGV4aXRDb2RlOiBudW1iZXI7IG91dHB1dDogc3RyaW5nIH0ge1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgaW5wdXQ6IHN0ZGluRGF0YSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBleGl0Q29kZTogcmVzdWx0LnN0YXR1cyA/PyAocmVzdWx0LmVycm9yID8gMSA6IDApLFxuICAgIG91dHB1dDogYCR7cmVzdWx0LnN0ZG91dCA/PyAnJ30ke3Jlc3VsdC5zdGRlcnIgPz8gJyd9YCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZDogc3RyaW5nW10sIGV4aXRDb2RlOiBudW1iZXIsIG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChjb21tYW5kWzBdICE9PSAnZ2gnIHx8IGV4aXRDb2RlID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIC8oSFRUUCA1MFswMjM0XVxcYnxXZSBoYWQgaXNzdWVzIHByb2R1Y2luZyB0aGUgcmVzcG9uc2UgdG8geW91ciByZXF1ZXN0KS9pLnRlc3Qob3V0cHV0KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9UZXh0KHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHwgbnVsbCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY2h1bmtzLnB1c2godHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogZGVjb2Rlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoY2h1bmspLCB7IHN0cmVhbTogdHJ1ZSB9KSk7XG4gIH1cbiAgY2h1bmtzLnB1c2goZGVjb2Rlci5kZWNvZGUoKSk7XG4gIHJldHVybiBjaHVua3Muam9pbignJyk7XG59XG4iLCJpbXBvcnQgeyBzdGRlcnIgYXMgcHJvY2Vzc1N0ZGVyciB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNsZWVwIH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgc3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzIH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgREVGQVVMVF9XQUlUX0lOVEVSVkFMX1NFQ09ORFMgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHtcbiAgY29tbWFuZEF2YWlsYWJsZSxcbiAgY3VycmVudFByTnVtYmVyLFxuICBkZWVwQ29weSxcbiAgZXhpdFdpdGhFcnJvcixcbiAgZ2hBbGxvd0V4aXRDb2RlcyxcbiAgcHJvZ3Jlc3MsXG4gIHNwYXduU3luY1NhZmUsXG4gIHlhbWxEdW1wLFxufSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbmV4cG9ydCBjb25zdCBURVNUX1JFTEFURURfUEFUVEVSTiA9IC9cXGJ0ZXN0XFxiL2k7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUztcbi8vIE9uZSBodW5kcmVkIDM2LXNlY29uZCBjaGVja3MgcHJlc2VydmVzIHRoZSBtYXhpbXVtIG9uZS1ob3VyIENJIHdhaXQgYnVkZ2V0LlxuZXhwb3J0IGNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9NQVhfQVRURU1QVFMgPSAxMDA7XG5jb25zdCBURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSA9ICdXYWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuZXhwb3J0IGNvbnN0IFpFUk9fVElNRVNUQU1QID0gJzAwMDEtMDEtMDFUMDA6MDA6MDBaJztcbmV4cG9ydCBjb25zdCBXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMgPSBbXG4gICdhdHRlbXB0JyxcbiAgJ2NvbmNsdXNpb24nLFxuICAnY3JlYXRlZEF0JyxcbiAgJ2RhdGFiYXNlSWQnLFxuICAnZGlzcGxheVRpdGxlJyxcbiAgJ2V2ZW50JyxcbiAgJ2hlYWRCcmFuY2gnLFxuICAnaGVhZFNoYScsXG4gICdqb2JzJyxcbiAgJ25hbWUnLFxuICAnbnVtYmVyJyxcbiAgJ3N0YXJ0ZWRBdCcsXG4gICdzdGF0dXMnLFxuICAndXBkYXRlZEF0JyxcbiAgJ3VybCcsXG4gICd3b3JrZmxvd05hbWUnLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQ2hlY2sgPSB7XG4gIGJ1Y2tldD86IHN0cmluZztcbiAgY29tcGxldGVkQXQ/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBldmVudD86IHN0cmluZztcbiAgbGluaz86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICBzdGF0ZT86IHN0cmluZztcbiAgd29ya2Zsb3c/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBDaVJlc3VsdHMgPSB7XG4gIHN1bW1hcnk6IHtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhc3M6IG51bWJlcjtcbiAgICBmYWlsOiBudW1iZXI7XG4gICAgcGVuZGluZzogbnVtYmVyO1xuICAgIHNraXBwaW5nOiBudW1iZXI7XG4gICAgY2FuY2VsOiBudW1iZXI7XG4gIH07XG4gIGNoZWNrczogQ2hlY2tbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFdvcmtmbG93Q2xhc3NpZmljYXRpb24gPSAnZmFpbGVkJyB8ICdydW5uaW5nJyB8ICdzdWNjZXNzZnVsJztcblxuZXhwb3J0IHR5cGUgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0ID0ge1xuICBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbjtcbiAgY2hlY2s6IENoZWNrO1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG50eXBlIENvbXBhY3RXb3JrZmxvd1J1biA9IHtcbiAgYnJhbmNoPzogc3RyaW5nO1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBmYWlsZWRfc3RlcD86IHN0cmluZztcbiAgam9iPzogc3RyaW5nO1xuICBqb2JfdXJsPzogc3RyaW5nO1xuICBydW5faWQ/OiBzdHJpbmc7XG4gIHJ1bl91cmw/OiBzdHJpbmc7XG4gIHNoYT86IHN0cmluZztcbiAgd29ya2Zsb3c/OiBzdHJpbmc7XG59O1xuXG50eXBlIFdvcmtmbG93UnVuU3RlcCA9IHtcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgbnVtYmVyPzogbnVtYmVyO1xuICBzdGF0dXM/OiBzdHJpbmc7XG59O1xuXG50eXBlIFdvcmtmbG93UnVuSm9iID0ge1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBkYXRhYmFzZUlkPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIHN0ZXBzPzogV29ya2Zsb3dSdW5TdGVwW107XG4gIHVybD86IHN0cmluZztcbn07XG5cbnR5cGUgV29ya2Zsb3dSdW5EZXRhaWxzID0ge1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBoZWFkQnJhbmNoPzogc3RyaW5nO1xuICBoZWFkU2hhPzogc3RyaW5nO1xuICBqb2JzPzogV29ya2Zsb3dSdW5Kb2JbXTtcbiAgdXJsPzogc3RyaW5nO1xufTtcblxuY29uc3QgRkFJTEVEX0xPR19MSU5FX1BSRUZJWF9QQVRURVJOID0gL14uKj9cXHRVTktOT1dOIFNURVBcXHRcXGR7NH0tXFxkezJ9LVxcZHsyfVRbXlpdK1pcXHMqLztcbmNvbnN0IHJ0a0F2YWlsYWJsZSA9IGNvbW1hbmRBdmFpbGFibGUoJ3J0aycpO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF0ZXN0UHJDaVJlc3VsdHMocHJOdW1iZXI/OiBzdHJpbmcpOiBQcm9taXNlPENpUmVzdWx0cz4ge1xuICBjb25zdCBhcmdzID0gWydwcicsICdjaGVja3MnXTtcbiAgaWYgKHByTnVtYmVyKSB7XG4gICAgYXJncy5wdXNoKHByTnVtYmVyKTtcbiAgfVxuICBhcmdzLnB1c2goJy0tanNvbicsICdidWNrZXQsY29tcGxldGVkQXQsZGVzY3JpcHRpb24sZXZlbnQsbGluayxuYW1lLHN0YXJ0ZWRBdCxzdGF0ZSx3b3JrZmxvdycpO1xuXG4gIGxldCBjaGVja3M6IENoZWNrW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKGFyZ3MsIFs4XSk7XG4gICAgY2hlY2tzID0gcmF3LnRyaW0oKS5sZW5ndGggPiAwID8gKEpTT04ucGFyc2UocmF3KSBhcyBDaGVja1tdKSA6IFtdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBjaGVja3MgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3VtbWFyeSA9IGNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKGNvdW50cywgY2hlY2spID0+IHtcbiAgICBjb25zdCBidWNrZXQgPSBjaGVjay5idWNrZXQgPz8gJyc7XG4gICAgY291bnRzW2J1Y2tldF0gPSAoY291bnRzW2J1Y2tldF0gPz8gMCkgKyAxO1xuICAgIHJldHVybiBjb3VudHM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4ge1xuICAgIHN1bW1hcnk6IHtcbiAgICAgIHRvdGFsOiBjaGVja3MubGVuZ3RoLFxuICAgICAgcGFzczogc3VtbWFyeS5wYXNzID8/IDAsXG4gICAgICBmYWlsOiBzdW1tYXJ5LmZhaWwgPz8gMCxcbiAgICAgIHBlbmRpbmc6IHN1bW1hcnkucGVuZGluZyA/PyAwLFxuICAgICAgc2tpcHBpbmc6IHN1bW1hcnkuc2tpcHBpbmcgPz8gMCxcbiAgICAgIGNhbmNlbDogc3VtbWFyeS5jYW5jZWwgPz8gMCxcbiAgICB9LFxuICAgIGNoZWNrcyxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MoXG4gIHByTnVtYmVyOiBzdHJpbmcsXG4gIHNsZWVwRm46IChzZWNvbmRzOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gPSBzbGVlcFNlY29uZHMsXG4gIGxhdGVzdENpUmVzdWx0c0ZuOiAocHJOdW1iZXI/OiBzdHJpbmcpID0+IENpUmVzdWx0cyB8IFByb21pc2U8Q2lSZXN1bHRzPiA9IGxhdGVzdFByQ2lSZXN1bHRzLFxuICB3cml0ZVByb2dyZXNzRm46IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSAobWVzc2FnZSkgPT4gcHJvY2Vzc1N0ZGVyci53cml0ZShtZXNzYWdlKVxuKTogUHJvbWlzZTxbQ2lSZXN1bHRzLCBudW1iZXIsIGJvb2xlYW5dPiB7XG4gIGxldCBhdHRlbXB0cyA9IDA7XG4gIGxldCBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG4gIGxldCBzdG9wV2FpdFByb2dyZXNzID0gKCkgPT4ge307XG5cbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCBjbGFzc2lmaWVkUmVzdWx0cyA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gICAgICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRSZXN1bHRzKTtcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDAgfHwgT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIGZhbHNlXTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRlbXB0cyA+PSBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTKSB7XG4gICAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgdHJ1ZV07XG4gICAgICB9XG5cbiAgICAgIGF0dGVtcHRzICs9IDE7XG4gICAgICBpZiAoYXR0ZW1wdHMgPT09IDEpIHtcbiAgICAgICAgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyhcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSxcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgICAgICAgICB3cml0ZVByb2dyZXNzRm5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHNsZWVwRm4oVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMpO1xuICAgICAgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0czogQ2lSZXN1bHRzKTogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiB7XG4gIGNvbnN0IGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93ID0gY2lSZXN1bHRzLmNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgQ2hlY2tbXT4+KChncm91cGVkUmVzdWx0cywgY2hlY2spID0+IHtcbiAgICBjb25zdCB3b3JrZmxvd0tleSA9IGNoZWNrLndvcmtmbG93IHx8IGNoZWNrLm5hbWUgfHwgJ3Vua25vd25fd29ya2Zsb3cnO1xuICAgIGdyb3VwZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA/Pz0gW107XG4gICAgZ3JvdXBlZFJlc3VsdHNbd29ya2Zsb3dLZXldLnB1c2goY2hlY2spO1xuICAgIHJldHVybiBncm91cGVkUmVzdWx0cztcbiAgfSwge30pO1xuXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMobGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cpLm1hcCgoW3dvcmtmbG93S2V5LCBjaGVja3NdKSA9PiB7XG4gICAgICBjb25zdCBsYXRlc3RBdHRlbXB0Q2hlY2tzID0gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzKTtcbiAgICAgIGNvbnN0IGZpcnN0Q2hlY2sgPSBsYXRlc3RBdHRlbXB0Q2hlY2tzWzBdO1xuICAgICAgaWYgKCFmaXJzdENoZWNrKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBubyBjaGVja3MgZm91bmQgZm9yIHdvcmtmbG93ICR7d29ya2Zsb3dLZXl9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXRlc3RDaGVjayA9XG4gICAgICAgIGxhdGVzdEF0dGVtcHRDaGVja3MucmVkdWNlPENoZWNrIHwgdW5kZWZpbmVkPigoY3VycmVudExhdGVzdCwgY2hlY2spID0+IHtcbiAgICAgICAgICBpZiAoIWN1cnJlbnRMYXRlc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKSA+IGxhdGVzdENoZWNrVGltZXN0YW1wKGN1cnJlbnRMYXRlc3QpID8gY2hlY2sgOiBjdXJyZW50TGF0ZXN0O1xuICAgICAgICB9LCB1bmRlZmluZWQpID8/IGZpcnN0Q2hlY2s7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIHdvcmtmbG93S2V5LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NpZmljYXRpb246IHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24obGF0ZXN0QXR0ZW1wdENoZWNrcyksXG4gICAgICAgICAgY2hlY2s6IGxhdGVzdENoZWNrLFxuICAgICAgICAgIGNoZWNrczogbGF0ZXN0QXR0ZW1wdENoZWNrcyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChcbiAgY2xhc3NpZmllZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5cbik6IFtSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+LCBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XSB7XG4gIGNvbnN0IGZhaWxlZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcbiAgY29uc3QgcnVubmluZ1Jlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFt3b3JrZmxvd0tleSwgcmVzdWx0XSBvZiBPYmplY3QuZW50cmllcyhjbGFzc2lmaWVkUmVzdWx0cykpIHtcbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAnZmFpbGVkJykge1xuICAgICAgZmFpbGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3J1bm5pbmcnICYmIHJlc3VsdC5jaGVja3Muc29tZSgoY2hlY2spID0+IHRlc3RSZWxhdGVkQ2hlY2soY2hlY2spKSkge1xuICAgICAgcnVubmluZ1Jlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2s6IENoZWNrIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbGluayA9IGNoZWNrPy5saW5rO1xuICBpZiAoIWxpbmspIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBsaW5rLm1hdGNoKC9cXC9hY3Rpb25zXFwvcnVuc1xcLyhcXGQrKS8pPy5bMV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3b3JrZmxvd1J1bihydW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIXJ1bklkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHJ1bkpzb24gPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tanNvbicsIFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUy5qb2luKCcsJyldLCBbMV0pO1xuICBpZiAocnVuSnNvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocnVuSnNvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIHByb2Nlc3NTdGRlcnIud3JpdGUoYFdhcm5pbmc6IENvdWxkIG5vdCBwYXJzZSBKU09OIGZvciB3b3JrZmxvdyBydW4gJHtydW5JZH06ICR7ZXJyb3IubWVzc2FnZX1cXG5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3M6IENoZWNrW10pOiBDaGVja1tdIHtcbiAgY29uc3QgZ3JvdXBzID0gY2hlY2tzLnJlZHVjZSgoZ3JvdXBlZENoZWNrcywgY2hlY2spID0+IHtcbiAgICBjb25zdCBrZXkgPSB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2spO1xuICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBlZENoZWNrcy5nZXQoa2V5KTtcbiAgICBpZiAoZ3JvdXApIHtcbiAgICAgIGdyb3VwLnB1c2goY2hlY2spO1xuICAgICAgcmV0dXJuIGdyb3VwZWRDaGVja3M7XG4gICAgfVxuICAgIGdyb3VwZWRDaGVja3Muc2V0KGtleSwgW2NoZWNrXSk7XG4gICAgcmV0dXJuIGdyb3VwZWRDaGVja3M7XG4gIH0sIG5ldyBNYXA8c3RyaW5nLCBDaGVja1tdPigpKTtcblxuICByZXR1cm4gQXJyYXkuZnJvbShncm91cHMudmFsdWVzKCkpLnJlZHVjZTxDaGVja1tdPigobGF0ZXN0R3JvdXAsIGN1cnJlbnRHcm91cCkgPT4ge1xuICAgIGlmIChsYXRlc3RHcm91cC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBjdXJyZW50R3JvdXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhdGVzdEdyb3VwVGltZXN0YW1wKGN1cnJlbnRHcm91cCkgPiBsYXRlc3RHcm91cFRpbWVzdGFtcChsYXRlc3RHcm91cCkgPyBjdXJyZW50R3JvdXAgOiBsYXRlc3RHcm91cDtcbiAgfSwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrOiBDaGVjayk6IHN0cmluZyB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spO1xuICByZXR1cm4gcnVuSWQgPyBgcnVuOiR7cnVuSWR9YCA6ICd1bmtub3duX3J1bic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uKGNoZWNrczogQ2hlY2tbXSk6IFdvcmtmbG93Q2xhc3NpZmljYXRpb24ge1xuICBjb25zdCBidWNrZXRzID0gY2hlY2tzLm1hcCgoY2hlY2spID0+IGNoZWNrLmJ1Y2tldCA/PyAnJyk7XG4gIGlmIChidWNrZXRzLnNvbWUoKGJ1Y2tldCkgPT4gIVsncGFzcycsICdza2lwcGluZycsICdwZW5kaW5nJ10uaW5jbHVkZXMoYnVja2V0KSkpIHtcbiAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gIH1cbiAgaWYgKGJ1Y2tldHMuaW5jbHVkZXMoJ3BlbmRpbmcnKSkge1xuICAgIHJldHVybiAncnVubmluZyc7XG4gIH1cbiAgcmV0dXJuICdzdWNjZXNzZnVsJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrOiBDaGVjayk6IHN0cmluZyB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IGNoZWNrLmNvbXBsZXRlZEF0O1xuICBpZiAoIXRpbWVzdGFtcCB8fCB0aW1lc3RhbXAgPT09IFpFUk9fVElNRVNUQU1QKSB7XG4gICAgcmV0dXJuIGNoZWNrLnN0YXJ0ZWRBdCA/PyAnJztcbiAgfVxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdFJlbGF0ZWRDaGVjayhjaGVjazogQ2hlY2spOiBib29sZWFuIHtcbiAgcmV0dXJuIFtjaGVjay5uYW1lLCBjaGVjay53b3JrZmxvd10uc29tZSgodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgVEVTVF9SRUxBVEVEX1BBVFRFUk4udGVzdCh2YWx1ZSkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXBTZWNvbmRzKHNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzbGVlcChzZWNvbmRzICogMTAwMCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja1ByQ2koKTogUHJvbWlzZTx7IG91dHB1dDogc3RyaW5nOyBleGl0Q29kZTogbnVtYmVyIH0+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgbGF0ZXN0IENJIHJlc3VsdHMuLi4nKTtcbiAgY29uc3QgW2NpUmVzdWx0cywgd2FpdEF0dGVtcHRzLCB3YWl0VGltZWRPdXRdID0gYXdhaXQgd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhwck51bWJlcik7XG4gIGNvbnN0IGNsYXNzaWZpZWRMYXRlc3QgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRMYXRlc3QpO1xuXG4gIGNvbnN0IHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIHN1bW1hcnk6IGRlZXBDb3B5KGNpUmVzdWx0cy5zdW1tYXJ5KSxcbiAgICB3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3M6IHdhaXRBdHRlbXB0cyA+IDAsXG4gICAgdGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHM6IHdhaXRBdHRlbXB0cyxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQ6IHdhaXRUaW1lZE91dCxcbiAgfTtcblxuICBpZiAoT2JqZWN0LmtleXMoZmFpbGVkUmVzdWx0cykubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQuZmFpbGVkX3dvcmtmbG93cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXMoZmFpbGVkUmVzdWx0cykubWFwKGFzeW5jIChbd29ya2Zsb3dLZXksIHJlc3VsdF0pID0+IHtcbiAgICAgICAgY29uc3QgY29tcGFjdFdvcmtmbG93ID0gYXdhaXQgY29tcGFjdFdvcmtmbG93UmVzdWx0KHdvcmtmbG93S2V5LCByZXN1bHQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmNvbXBhY3RXb3JrZmxvdyxcbiAgICAgICAgICAuLi5idWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyhhd2FpdCBmYWlsZWRXb3JrZmxvd0xvZyhyZXN1bHQuY2hlY2spKSxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4geyBvdXRwdXQ6IHlhbWxEdW1wKHBheWxvYWQpLCBleGl0Q29kZTogMSB9O1xuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC50ZXN0X3dvcmtmbG93X291dHB1dCA9ICdUaW1lZCBvdXQgd2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2guJztcbiAgICBwYXlsb2FkLnJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXMocnVubmluZ1Jlc3VsdHMpLm1hcCgoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiBjb21wYWN0V29ya2Zsb3dSZXN1bHQod29ya2Zsb3dLZXksIHJlc3VsdCkpXG4gICAgKTtcbiAgICByZXR1cm4geyBvdXRwdXQ6IHlhbWxEdW1wKHBheWxvYWQpLCBleGl0Q29kZTogMSB9O1xuICB9XG5cbiAgcmV0dXJuIHsgb3V0cHV0OiAnQWxsIENJIHdvcmtmbG93cyBwYXNzZWQuXFxuJywgZXhpdENvZGU6IDAgfTtcbn1cblxuZnVuY3Rpb24gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY2hlY2tzOiBDaGVja1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNoZWNrcy5yZWR1Y2UoKGxhdGVzdCwgY2hlY2spID0+IHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjayk7XG4gICAgcmV0dXJuIHRpbWVzdGFtcCA+IGxhdGVzdCA/IHRpbWVzdGFtcCA6IGxhdGVzdDtcbiAgfSwgJycpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb21wYWN0V29ya2Zsb3dSZXN1bHQoXG4gIHdvcmtmbG93S2V5OiBzdHJpbmcsXG4gIHJlc3VsdDogQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0XG4pOiBQcm9taXNlPHsgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb24gfSAmIENvbXBhY3RXb3JrZmxvd1J1bj4ge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKHJlc3VsdC5jaGVjayk7XG4gIGNvbnN0IHJ1biA9IChhd2FpdCB3b3JrZmxvd1J1bihydW5JZCkpIGFzIFdvcmtmbG93UnVuRGV0YWlscyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZmFpbGVkSm9iID0gZmFpbGVkV29ya2Zsb3dSdW5Kb2IocnVuLCBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2submFtZSkpO1xuICByZXR1cm4ge1xuICAgIGNsYXNzaWZpY2F0aW9uOiByZXN1bHQuY2xhc3NpZmljYXRpb24sXG4gICAgd29ya2Zsb3c6IHdvcmtmbG93S2V5LFxuICAgIGpvYjogc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLm5hbWUpLFxuICAgIGpvYl91cmw6IHN0cmluZ09yVW5kZWZpbmVkKGZhaWxlZEpvYj8udXJsKSxcbiAgICBmYWlsZWRfc3RlcDogZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZShmYWlsZWRKb2IpLFxuICAgIHJ1bl9pZDogcnVuSWQsXG4gICAgcnVuX3VybDogc3RyaW5nT3JVbmRlZmluZWQocnVuPy51cmwpID8/IHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5saW5rKSxcbiAgICBicmFuY2g6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uaGVhZEJyYW5jaCksXG4gICAgc2hhOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmhlYWRTaGEpLFxuICAgIGNvbmNsdXNpb246IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uY29uY2x1c2lvbiksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93TG9nKGNoZWNrOiBDaGVjayk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgcmV0dXJuICdGYWlsZWQgbGF0ZXN0IHJlc3VsdCBoYXMgbm8gR2l0SHViIEFjdGlvbnMgcnVuIGxpbmsuJztcbiAgfVxuICByZXR1cm4gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3J1bicsICd2aWV3JywgcnVuSWQsICctLWxvZy1mYWlsZWQnXSwgWzFdKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMobG9nOiBzdHJpbmcpOiB7XG4gIGZhaWxlZF9sb2c6IHN0cmluZztcbn0ge1xuICByZXR1cm4ge1xuICAgIGZhaWxlZF9sb2c6IHJlZmluZUZhaWxlZFdvcmtmbG93TG9nKGxvZyksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlZmluZUZhaWxlZFdvcmtmbG93TG9nKGxvZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2FuaXRpemVkSW5wdXQgPSBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKHN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyhsb2cpKTtcbiAgaWYgKCFydGtBdmFpbGFibGUpIHtcbiAgICByZXR1cm4gc2FuaXRpemVkSW5wdXQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmNTYWZlKFsncnRrJywgJ2xvZyddLCBzYW5pdGl6ZWRJbnB1dCk7XG4gIHJldHVybiByZXN1bHQuZXhpdENvZGUgPT09IDAgJiYgcmVzdWx0Lm91dHB1dC50cmltKCkubGVuZ3RoID4gMFxuICAgID8gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhyZXN1bHQub3V0cHV0KVxuICAgIDogc2FuaXRpemVkSW5wdXQ7XG59XG5cbmZ1bmN0aW9uIHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2cobG9nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbG9nXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IGxpbmUucmVwbGFjZShGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4sICcnKSlcbiAgICAuam9pbignXFxuJylcbiAgICAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdPclVuZGVmaW5lZCh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmFpbGVkV29ya2Zsb3dSdW5Kb2IoXG4gIHJ1bjogV29ya2Zsb3dSdW5EZXRhaWxzIHwgdW5kZWZpbmVkLFxuICBqb2JOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IFdvcmtmbG93UnVuSm9iIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFydW4/LmpvYnMgfHwgcnVuLmpvYnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgcnVuLmpvYnMuZmluZCgoam9iKSA9PiBqb2IubmFtZSA9PT0gam9iTmFtZSkgPz9cbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5jb25jbHVzaW9uID09PSAnZmFpbHVyZScpID8/XG4gICAgcnVuLmpvYnMuZmluZCgoam9iKSA9PiBqb2Iuc3RhdHVzICE9PSAnY29tcGxldGVkJylcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZShqb2I6IFdvcmtmbG93UnVuSm9iIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFqb2I/LnN0ZXBzIHx8IGpvYi5zdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBqb2Iuc3RlcHMuZmluZCgoc3RlcCkgPT4gc3RlcC5jb25jbHVzaW9uID09PSAnZmFpbHVyZScpPy5uYW1lID8/XG4gICAgam9iLnN0ZXBzLmZpbmQoKHN0ZXApID0+IHN0ZXAuc3RhdHVzICE9PSAnY29tcGxldGVkJyk/Lm5hbWVcbiAgKTtcbn1cbiIsImltcG9ydCB7IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudEJhc2VCcmFuY2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIChhd2FpdCBjdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoKCkpID8/IChhd2FpdCBjdXJyZW50RGVmYXVsdEJyYW5jaCgpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnREZWZhdWx0QnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiByZXF1aXJlTm9uRW1wdHkoXG4gICAgKFxuICAgICAgYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhbXG4gICAgICAgICdnaCcsXG4gICAgICAgICdyZXBvJyxcbiAgICAgICAgJ3ZpZXcnLFxuICAgICAgICAnLS1qc29uJyxcbiAgICAgICAgJ2RlZmF1bHRCcmFuY2hSZWYnLFxuICAgICAgICAnLS10ZW1wbGF0ZScsXG4gICAgICAgICd7ey5kZWZhdWx0QnJhbmNoUmVmLm5hbWV9fScsXG4gICAgICBdKVxuICAgICkudHJpbSgpLFxuICAgICdFcnJvcjogY291bGQgbm90IGRldGVybWluZSB0aGUgZGVmYXVsdCBicmFuY2gnXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2goKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBiYXNlQnJhbmNoID0gKFxuICAgICAgYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhbJ2doJywgJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2Jhc2VSZWZOYW1lJywgJy0tdGVtcGxhdGUnLCAne3suYmFzZVJlZk5hbWV9fSddKVxuICAgICkudHJpbSgpO1xuICAgIHJldHVybiBiYXNlQnJhbmNoLmxlbmd0aCA+IDAgPyBiYXNlQnJhbmNoIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcoZXJyb3IpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiAvbm8gcHVsbCByZXF1ZXN0cz8gZm91bmQgZm9yIGJyYW5jaC9pLnRlc3QoU3RyaW5nKGVycm9yKSk7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVOb25FbXB0eSh2YWx1ZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCJpbXBvcnQgeyBpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcgfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuaW1wb3J0IHtcbiAgY3VycmVudFByTnVtYmVyLFxuICBjdXJyZW50UmVwb1BhcnRzLFxuICBleGl0V2l0aEVycm9yLFxuICBnaEFsbG93RXhpdENvZGVzLFxuICBncmFwaHFsLFxuICB0eXBlIEpzb25PYmplY3QsXG4gIHR5cGUgTWVzc2FnZSxcbiAgdHlwZSBNZXNzYWdlQ29ubmVjdGlvbixcbiAgdHlwZSBNZXRhZGF0YU5vZGUsXG4gIHByb2dyZXNzLFxuICB5YW1sRHVtcCxcbn0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG50eXBlIElzc3VlTWVzc2FnZUNvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIFByUmV2aWV3Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIHN0YXRlPzogc3RyaW5nIHwgbnVsbDtcbiAgc3VibWl0dGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgIGNvbW1lbnRzPzogTWVzc2FnZUNvbm5lY3Rpb248SXNzdWVNZXNzYWdlQ29tbWVudE5vZGU+O1xuICAgICAgICByZXZpZXdzPzogTWVzc2FnZUNvbm5lY3Rpb248UHJSZXZpZXdOb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgSXNzdWVNZXNzYWdlc1Jlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBpc3N1ZT86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIFB1bGxSZXF1ZXN0TWV0YWRhdGFSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgcHVsbFJlcXVlc3Q/OiBNZXRhZGF0YU5vZGU7XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgSXNzdWVNZXRhZGF0YVJlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBpc3N1ZT86IE1ldGFkYXRhTm9kZTtcbiAgICB9O1xuICB9O1xufTtcblxuY29uc3QgSVNTVUVfTUVTU0FHRVNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBJU1NVRV9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfQ09NTUVOVFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfUkVWSUVXU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld3MoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIHN1Ym1pdHRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUlzc3VlTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlLCAnaXNzdWUnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlLCAncHVsbCByZXF1ZXN0Jyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IGlzc3VlID0gYXdhaXQgaXNzdWVNZXNzYWdlcyhvd25lciwgbmFtZSwgbm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVOdW1iZXIpKTtcbiAgcHJvZ3Jlc3MoYEZldGNoZWQgaXNzdWUgIyR7aXNzdWUubnVtYmVyfSBtZXNzYWdlcy5gKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgaXNzdWUgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFByTWVzc2FnZXMocHJOdW1iZXI/OiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByTnVtYmVyID0gcHJOdW1iZXIgPT09IHVuZGVmaW5lZCA/IGF3YWl0IGN1cnJlbnRQck51bWJlcigpIDogbm9ybWFsaXplUHJOdW1iZXIocHJOdW1iZXIpO1xuICBjb25zdCBwdWxsUmVxdWVzdCA9IGF3YWl0IGN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyhyZXNvbHZlZFByTnVtYmVyKTtcbiAgcHJvZ3Jlc3MoYEZldGNoZWQgcHVsbCByZXF1ZXN0ICMke3B1bGxSZXF1ZXN0Lm51bWJlcn0gbWVzc2FnZXMuYCk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHB1bGxfcmVxdWVzdDogcHVsbFJlcXVlc3QgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcHJOdW1iZXJPdXRwdXQgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncHInLCAndmlldycsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLm51bWJlciddLCBbMV0pO1xuICBjb25zdCBwck51bWJlciA9IHByTnVtYmVyT3V0cHV0LnRyaW0oKTtcbiAgaWYgKGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhwck51bWJlck91dHB1dCkgfHwgIS9eXFxkKyQvLnRlc3QocHJOdW1iZXIpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHByTnVtYmVyKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcHVsbF9yZXF1ZXN0OiBwdWxsUmVxdWVzdCB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgcmV0dXJuIGF3YWl0IHByTWVzc2FnZXMob3duZXIsIG5hbWUsIHByTnVtYmVyKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2U6IHN0cmluZyB8IG51bWJlciwgbGFiZWw6ICdpc3N1ZScgfCAncHVsbCByZXF1ZXN0Jyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlZmVyZW5jZVRleHQgPSBTdHJpbmcocmVmZXJlbmNlKS50cmltKCk7XG4gIGlmIChyZWZlcmVuY2VUZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiAke2xhYmVsfSByZWZlcmVuY2UgaXMgcmVxdWlyZWRgLCAyKTtcbiAgfVxuXG4gIGlmICgvXlxcZCskLy50ZXN0KHJlZmVyZW5jZVRleHQpKSB7XG4gICAgcmV0dXJuIHJlZmVyZW5jZVRleHQ7XG4gIH1cblxuICBjb25zdCBraW5kU2VnbWVudCA9IGxhYmVsID09PSAnaXNzdWUnID8gJ2lzc3VlcycgOiAncHVsbCc7XG4gIGNvbnN0IG1hdGNoID0gcmVmZXJlbmNlVGV4dC5tYXRjaChcbiAgICBuZXcgUmVnRXhwKGBeaHR0cHM/Oi8vKD86d3d3XFxcXC4pP2dpdGh1YlxcXFwuY29tL1teL10rL1teL10rLyR7a2luZFNlZ21lbnR9LyhcXFxcZCspKD86L3wkKWApXG4gICk7XG4gIGlmIChtYXRjaD8uWzFdKSB7XG4gICAgcmV0dXJuIG1hdGNoWzFdO1xuICB9XG5cbiAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IGV4cGVjdGVkIGEgR2l0SHViICR7bGFiZWx9IG51bWJlciBvciBVUkwsIHJlY2VpdmVkIFwiJHtyZWZlcmVuY2VUZXh0fVwiYCwgMik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzc3VlTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IGlzc3VlID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxJc3N1ZU1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogSVNTVUVfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IGlzc3VlTnVtYmVyLFxuICAgIG5vdW46ICdpc3N1ZScsXG4gICAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8uaXNzdWUsXG4gIH0pO1xuICBjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8SXNzdWVNZXNzYWdlQ29tbWVudE5vZGUsIElzc3VlTWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9NRVNTQUdFU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZT8uY29tbWVudHMsXG4gICAgbWFwTm9kZTogY29tbWVudE1lc3NhZ2UsXG4gIH0pO1xuXG4gIHJldHVybiB7IC4uLmlzc3VlLCBtZXNzYWdlcyB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwck1lc3NhZ2VzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBwdWxsUmVxdWVzdCA9IGF3YWl0IGZldGNoTWV0YWRhdGE8UHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBub3VuOiAncHVsbCByZXF1ZXN0JyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdCxcbiAgfSk7XG4gIGNvbnN0IFtpc3N1ZUNvbW1lbnRzLCByZXZpZXdzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBwcklzc3VlQ29tbWVudHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSxcbiAgICBwclJldmlld3Mob3duZXIsIG5hbWUsIHByTnVtYmVyKSxcbiAgXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5wdWxsUmVxdWVzdCxcbiAgICBtZXNzYWdlczogWy4uLmlzc3VlQ29tbWVudHMsIC4uLnJldmlld3NdLnNvcnQoY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdChsZWZ0OiBNZXNzYWdlLCByaWdodDogTWVzc2FnZSk6IG51bWJlciB7XG4gIGNvbnN0IGxlZnRDcmVhdGVkQXQgPSB0eXBlb2YgbGVmdC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gbGVmdC5jcmVhdGVkQXQgOiAnJztcbiAgY29uc3QgcmlnaHRDcmVhdGVkQXQgPSB0eXBlb2YgcmlnaHQuY3JlYXRlZEF0ID09PSAnc3RyaW5nJyA/IHJpZ2h0LmNyZWF0ZWRBdCA6ICcnO1xuICByZXR1cm4gbGVmdENyZWF0ZWRBdC5sb2NhbGVDb21wYXJlKHJpZ2h0Q3JlYXRlZEF0KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJJc3N1ZUNvbW1lbnRzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIHJldHVybiBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfQ09NTUVOVFNfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LmNvbW1lbnRzLFxuICAgIG1hcE5vZGU6IGNvbW1lbnRNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJSZXZpZXdzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIHJldHVybiBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPFByUmV2aWV3Tm9kZSwgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX1JFVklFV1NfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld3MsXG4gICAgbWFwTm9kZTogcmV2aWV3TWVzc2FnZSxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlTWVzc2FnZXM8VE5vZGUsIFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWVzc2FnZUNvbm5lY3Rpb248VE5vZGU+IHwgdW5kZWZpbmVkO1xuICBtYXBOb2RlOiAobm9kZTogVE5vZGUpID0+IE1lc3NhZ2U7XG59KTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb25zdCBtZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25maWcuc2VsZWN0Q29ubmVjdGlvbihcbiAgICAgIGF3YWl0IGdyYXBocWw8VFJlc3BvbnNlPihjb25maWcucXVlcnksIHtcbiAgICAgICAgb3duZXI6IGNvbmZpZy5vd25lcixcbiAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICAgIG51bWJlcjogTnVtYmVyKGNvbmZpZy5udW1iZXIpLFxuICAgICAgICBjdXJzb3IsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICB9XG5cbiAgICBtZXNzYWdlcy5wdXNoKC4uLmNvbm5lY3Rpb24ubm9kZXMubWFwKGNvbmZpZy5tYXBOb2RlKS5maWx0ZXIoaGFzTWVzc2FnZUJvZHkpKTtcblxuICAgIGlmICghY29ubmVjdGlvbi5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cbiAgICBjdXJzb3IgPSBjb25uZWN0aW9uLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hNZXRhZGF0YTxUUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0Pihjb25maWc6IHtcbiAgcXVlcnk6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZyB8IG51bWJlcjtcbiAgbm91bjogc3RyaW5nO1xuICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlOiBUUmVzcG9uc2UpID0+IE1ldGFkYXRhTm9kZSB8IHVuZGVmaW5lZDtcbn0pOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBjb25maWcuc2VsZWN0TWV0YWRhdGEoXG4gICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgb3duZXI6IGNvbmZpZy5vd25lcixcbiAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgfSlcbiAgKTtcblxuICBpZiAoIW1ldGFkYXRhKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgJHtjb25maWcubm91bn0gIyR7Y29uZmlnLm51bWJlcn0gaW4gJHtjb25maWcub3duZXJ9LyR7Y29uZmlnLm5hbWV9LmApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBudW1iZXI6IG1ldGFkYXRhLm51bWJlcixcbiAgICB0aXRsZTogbWV0YWRhdGEudGl0bGUsXG4gICAgdXJsOiBtZXRhZGF0YS51cmwsXG4gICAgYXV0aG9yOiBtZXRhZGF0YS5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBib2R5OiBtZXRhZGF0YS5ib2R5ID8/ICcnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21tZW50TWVzc2FnZShjb21tZW50OiBJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSk6IE1lc3NhZ2Uge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdjb21tZW50JyxcbiAgICBhdXRob3I6IGNvbW1lbnQuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiBjb21tZW50LmNyZWF0ZWRBdCxcbiAgICB1cmw6IGNvbW1lbnQudXJsLFxuICAgIGJvZHk6IGNvbW1lbnQuYm9keSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmV2aWV3TWVzc2FnZShyZXZpZXc6IFByUmV2aWV3Tm9kZSk6IE1lc3NhZ2Uge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdyZXZpZXcnLFxuICAgIGF1dGhvcjogcmV2aWV3LmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIHN0YXRlOiByZXZpZXcuc3RhdGUgPz8gdW5kZWZpbmVkLFxuICAgIGNyZWF0ZWRBdDogcmV2aWV3LnN1Ym1pdHRlZEF0ID8/IHVuZGVmaW5lZCxcbiAgICB1cmw6IHJldmlldy51cmwsXG4gICAgYm9keTogcmV2aWV3LmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc01lc3NhZ2VCb2R5KG1lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBtZXNzYWdlLmJvZHkgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UuYm9keS5sZW5ndGggPiAwO1xufVxuIiwiaW1wb3J0IHsgY3VycmVudFByTnVtYmVyLCBleGl0V2l0aEVycm9yLCBnaCwgcHJvZ3Jlc3MsIHJ1bkNvbW1hbmQsIHlhbWxEdW1wIH0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblByKGJvZHk/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoZWFkID0gKGF3YWl0IHJ1bkNvbW1hbmQoWydnaXQnLCAnYnJhbmNoJywgJy0tc2hvdy1jdXJyZW50J10pKS50cmltKCk7XG4gIGNvbnN0IGJhc2UgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2RlZmF1bHRCcmFuY2hSZWYnLCAnLS1qcScsICcuZGVmYXVsdEJyYW5jaFJlZi5uYW1lJ10pKS50cmltKCk7XG5cbiAgaWYgKCFoZWFkKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCBicmFuY2gnKTtcbiAgfVxuICBpZiAoIWJhc2UpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBkZWZhdWx0IGJyYW5jaCcpO1xuICB9XG4gIGlmIChoZWFkID09PSBiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IGN1cnJlbnQgYnJhbmNoIGlzIHRoZSBkZWZhdWx0IGJyYW5jaCAoJHtiYXNlfSlgKTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUFyZ3MgPSBbJ3ByJywgJ2NyZWF0ZScsICctLWJhc2UnLCBiYXNlLCAnLS1oZWFkJywgaGVhZCwgJy0tZmlsbCddO1xuICBpZiAoYm9keSAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICBjcmVhdGVBcmdzLnB1c2goJy0tYm9keS1maWxlJywgJy0nKTtcbiAgfVxuXG4gIHByb2dyZXNzKCdDcmVhdGluZyBwdWxsIHJlcXVlc3QuLi4nKTtcbiAgYXdhaXQgZ2goY3JlYXRlQXJncywgYm9keSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yJ10pKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHJCb2R5KGJvZHk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoYFVwZGF0aW5nIHB1bGwgcmVxdWVzdCAjJHtwck51bWJlcn0gYm9keS4uLmApO1xuICByZXR1cm4gYXdhaXQgdXBkYXRlUHIocHJOdW1iZXIsIFsnLS1ib2R5LWZpbGUnLCAnLSddLCBib2R5KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByVGl0bGUodGl0bGU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoYFVwZGF0aW5nIHB1bGwgcmVxdWVzdCAjJHtwck51bWJlcn0gdGl0bGUuLi5gKTtcbiAgcmV0dXJuIGF3YWl0IHVwZGF0ZVByKHByTnVtYmVyLCBbJy0tdGl0bGUnLCB0aXRsZV0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVQcihwck51bWJlcjogc3RyaW5nLCBlZGl0QXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGF3YWl0IGdoKFsncHInLCAnZWRpdCcsIHByTnVtYmVyLCAuLi5lZGl0QXJnc10sIHN0ZGluRGF0YSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoXG4gICAgICBhd2FpdCBnaChbXG4gICAgICAgICdwcicsXG4gICAgICAgICd2aWV3JyxcbiAgICAgICAgcHJOdW1iZXIsXG4gICAgICAgICctLWpzb24nLFxuICAgICAgICAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvcixib2R5JyxcbiAgICAgIF0pXG4gICAgKVxuICApO1xufVxuIiwiaW1wb3J0IHtcbiAgY3VycmVudFByTnVtYmVyLFxuICBjdXJyZW50UmVwb1BhcnRzLFxuICBleGl0V2l0aEVycm9yLFxuICBncmFwaHFsLFxuICBwcm9ncmVzcyxcbiAgcmVhZFJlcXVpcmVkU3RkaW5UZXh0LFxuICB5YW1sRHVtcCxcbn0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG50eXBlIFJldmlld0NvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUmV2aWV3VGhyZWFkTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59O1xuXG5jb25zdCBSRVZJRVdfVEhSRUFEX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICBpc091dGRhdGVkXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICBvcmlnaW5hbExpbmVcbiAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDApIHtcbiAgICAgICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19DT01NRU5UX1FVRVJZID0gYFxuICBxdWVyeSgkdGhyZWFkSWQ6IElEISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgbm9kZShpZDogJHRocmVhZElkKSB7XG4gICAgICAuLi4gb24gUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWQge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVwbHlJbnB1dChpbnB1dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW3RocmVhZElkLCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkLnJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhcbiAgcXVlcnk6IHN0cmluZyxcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyLFxuICBvblRocmVhZDogKHRocmVhZDogUmV2aWV3VGhyZWFkTm9kZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IHJldmlld1RocmVhZHMgPSAoXG4gICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgZGF0YT86IHtcbiAgICAgICAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgICAgICAgIHJldmlld1RocmVhZHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld1RocmVhZE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihxdWVyeSwge1xuICAgICAgICBvd25lcixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIocHJOdW1iZXIpLFxuICAgICAgICBjdXJzb3IsXG4gICAgICB9KVxuICAgICkuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld1RocmVhZHM7XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoXG4gICAgICAgICdDb3VsZCBub3QgZmluZCByZXZpZXdUaHJlYWRzIGluIEdyYXBoUUwgcmVzcG9uc2UuIFRoZSBwdWxsIHJlcXVlc3QgbWF5IG5vdCBleGlzdCBvciB0aGVyZSB3YXMgYW4gQVBJIGVycm9yLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0aHJlYWQgb2YgcmV2aWV3VGhyZWFkcy5ub2Rlcykge1xuICAgICAgYXdhaXQgb25UaHJlYWQodGhyZWFkKTtcbiAgICB9XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3Vyc29yID0gcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgKHRocmVhZCkgPT4ge1xuICAgIGlmICghdGhyZWFkLmlzUmVzb2x2ZWQpIHtcbiAgICAgIGlkcy5wdXNoKHRocmVhZC5pZCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlkcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuICBjb25zdCB0aHJlYWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG5cbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgYXN5bmMgKHRocmVhZCkgPT4ge1xuICAgIGlmICh0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1lbnRzID0gdGhyZWFkLmNvbW1lbnRzLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKTtcbiAgICBsZXQgcGFnZUluZm8gPSB0aHJlYWQuY29tbWVudHMucGFnZUluZm87XG4gICAgbGV0IGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAocGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIGNvbnN0IGNvbW1lbnRDb25uZWN0aW9uID0gKFxuICAgICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgICBkYXRhPzoge1xuICAgICAgICAgICAgbm9kZT86IHtcbiAgICAgICAgICAgICAgY29tbWVudHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9PihSRVZJRVdfQ09NTUVOVF9RVUVSWSwgeyB0aHJlYWRJZDogdGhyZWFkLmlkLCBjdXJzb3IgfSlcbiAgICAgICkuZGF0YT8ubm9kZT8uY29tbWVudHM7XG5cbiAgICAgIGlmICghY29tbWVudENvbm5lY3Rpb24pIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgY29tbWVudHMgaW4gR3JhcGhRTCByZXNwb25zZSBmb3IgdGhyZWFkICR7dGhyZWFkLmlkfS5gKTtcbiAgICAgIH1cblxuICAgICAgY29tbWVudHMucHVzaCguLi5jb21tZW50Q29ubmVjdGlvbi5ub2Rlcy5tYXAobm9ybWFsaXplQ29tbWVudEF1dGhvcikpO1xuICAgICAgcGFnZUluZm8gPSBjb21tZW50Q29ubmVjdGlvbi5wYWdlSW5mbztcbiAgICAgIGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhyZWFkcy5wdXNoKHtcbiAgICAgIGlkOiB0aHJlYWQuaWQsXG4gICAgICBpc1Jlc29sdmVkOiB0aHJlYWQuaXNSZXNvbHZlZCxcbiAgICAgIGlzT3V0ZGF0ZWQ6IHRocmVhZC5pc091dGRhdGVkLFxuICAgICAgcGF0aDogdGhyZWFkLnBhdGgsXG4gICAgICBsaW5lOiB0aHJlYWQubGluZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdGhyZWFkLm9yaWdpbmFsTGluZSxcbiAgICAgIHN0YXJ0TGluZTogdGhyZWFkLnN0YXJ0TGluZSxcbiAgICAgIG9yaWdpbmFsU3RhcnRMaW5lOiB0aHJlYWQub3JpZ2luYWxTdGFydExpbmUsXG4gICAgICBjb21tZW50cyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRocmVhZHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHJSZXZpZXdUaHJlYWRzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMuLi4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgdW5yZXNvbHZlZF90aHJlYWRzOiBhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcbiAgY29uc3QgdW5yZXNvbHZlZElkcyA9IG5ldyBTZXQoYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpKTtcblxuICBwcm9ncmVzcyhgUmVwbHlpbmcgdG8gJHtPYmplY3Qua2V5cyhyZXBsaWVzKS5sZW5ndGh9IHJldmlldyB0aHJlYWRzLi4uYCk7XG5cbiAgY29uc3QgcmVzb2x2ZWRUaHJlYWRJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhyZXBsaWVzKTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgW3RocmVhZElkLCBib2R5XV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICBwcm9ncmVzcyhgUHJvY2Vzc2luZyAke2luZGV4ICsgMX0vJHtlbnRyaWVzLmxlbmd0aH06ICR7dGhyZWFkSWR9YCk7XG4gICAgaWYgKCF1bnJlc29sdmVkSWRzLmhhcyh0aHJlYWRJZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICBkYXRhPzoge1xuICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkPzoge1xuICAgICAgICAgIHRocmVhZD86IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0+KFxuICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkdGhyZWFkSWQ6IElEISwgJGJvZHk6IFN0cmluZyEpIHtcbiAgICAgICAgICBhZGRQdWxsUmVxdWVzdFJldmlld1RocmVhZFJlcGx5KGlucHV0OiB7cHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRJZDogJHRocmVhZElkLCBib2R5OiAkYm9keX0pIHtcbiAgICAgICAgICAgIGNvbW1lbnQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZChpbnB1dDoge3RocmVhZElkOiAkdGhyZWFkSWR9KSB7XG4gICAgICAgICAgICB0aHJlYWQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgeyB0aHJlYWRJZCwgYm9keSB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5kYXRhPy5yZXNvbHZlUmV2aWV3VGhyZWFkPy50aHJlYWQ/LmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJlc29sdmVkVGhyZWFkSWRzLnB1c2godGhyZWFkSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmVzcyhgV2FybmluZzogZmFpbGVkIHRvIHJlc29sdmUgdGhyZWFkICR7dGhyZWFkSWR9LmApO1xuICAgIH1cbiAgfVxuXG4gIHByb2dyZXNzKCdEb25lLicpO1xuICByZXR1cm4geWFtbER1bXAoeyByZXNvbHZlZF90aHJlYWRfaWRzOiByZXNvbHZlZFRocmVhZElkcyB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudEF1dGhvcihjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSk6IFJldmlld0NvbW1lbnROb2RlICYgeyBhdXRob3I/OiBzdHJpbmcgfCBudWxsIH0ge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbW1lbnQsXG4gICAgYXV0aG9yOiB0eXBlb2YgY29tbWVudC5hdXRob3IgPT09ICdzdHJpbmcnID8gY29tbWVudC5hdXRob3IgOiAoY29tbWVudC5hdXRob3I/LmxvZ2luID8/IG51bGwpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5SW5wdXQoaW5wdXQ6IHN0cmluZyk6IHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGNvbnN0IGVycm9yUHJlZml4ID0gJ0Vycm9yOiBJbnZhbGlkIGlucHV0IGZvcm1hdCBvbiBzdGRpbic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KSBhcyB1bmtub3duO1xuICAgIGlmICghaXNSZXBseUlucHV0KHBhcnNlZCkpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYCR7ZXJyb3JQcmVmaXh9OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIHN0cmluZy12YWx1ZWQgXFxgcmVwbGllc1xcYCBtYXBgLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IEludmFsaWQgSlNPTiBwcm92aWRlZCBvbiBzdGRpbjogJHtlcnJvci5tZXNzYWdlfWAsIDIpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlcGx5SW5wdXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cbiIsImltcG9ydCB7IGZldGNoSXNzdWVNZXNzYWdlcyB9IGZyb20gJy4uL3ByL3ByQ29tbWFuZHMuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRQbGFuUHJvbXB0KGlzc3VlTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpc3N1ZVlhbWwgPSBhd2FpdCBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXIpO1xuXG4gIHJldHVybiBgXG5QbGFuIGEgR2l0SHViIGlzc3VlIGJ5IGdhdGhlcmluZyBjb250ZXh0LCB3cml0aW5nIGEgc3BlY2lmaWNhdGlvbiBmb3Igc29mdHdhcmUgZW5naW5lZXJzLCBhbmQgcG9zdGluZyBvciB1cGRhdGluZyB0aGF0IHNwZWNpZmljYXRpb24gYmFjayB0byB0aGUgaXNzdWUuXG5UaGUgdGFyZ2V0IGlzc3VlIG51bWJlciBpcyAjJHtpc3N1ZU51bWJlcn0uIEhlcmUgaXMgdGhlIGZldGNoZWQgaXNzdWUgY29udGV4dCBhcyBZQU1MOlxufn5+fnlhbWxcbiR7aXNzdWVZYW1sLnRyaW0oKX1cbn5+fn5cblxuRm9sbG93IHRoaXMgd29ya2Zsb3c6XG4xLiBSZWFkIHRoZSBhYm92ZSBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBjYXJlZnVsbHkuXG4yLiBDb2xsZWN0IGVub3VnaCBzdXBwb3J0aW5nIGluZm9ybWF0aW9uIGJlZm9yZSB3cml0aW5nIHRoZSBzcGVjaWZpY2F0aW9uOlxuICAgLSBJbnNwZWN0IHRoZSByZWxldmFudCBjb2RlLCBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgcmVjZW50IGRpZmZzLCBhbmQgYW55IG90aGVyIGxvY2FsIGNvbnRleHQgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS5cbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBydW50aW1lIGJlaGF2aW9yLCByZXByb2R1Y2UgaXQgd2l0aCB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGV4cGVyaW1lbnQsIHN1Y2ggYXMgYSBmb2N1c2VkIGNvbW1hbmQsIGEgdGlueSBzY3JpcHQsIGEgdGVtcG9yYXJ5IGxvY2FsIGFzc2VydGlvbiwgb3IgYW5vdGhlciBuYXJyb3cgY2hlY2sgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuICAgICAtIENsZWFuIHVwIGFueSB0ZW1wb3JhcnkgZmlsZXMgYWZ0ZXIgdGhlIGV4cGVyaW1lbnQuXG4gICAtIElmIHRoZSBpc3N1ZSBkZXBlbmRzIG9uIGEgbGlicmFyeSwgQVBJLCBvciBsYW5ndWFnZSBmZWF0dXJlLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbjMuIFdyaXRlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgaXNzdWUgY29tbWVudC5cbiAgIC0gV3JpdGUgdGhlIGJhY2tncm91bmQgYmFzZWQgb24gdGhlIGNvbGxlY3RlZCBpbmZvcm1hdGlvbi5cbiAgIC0gRGVmaW5lIGEgZ29hbCB0aGF0IGNsZWFybHkgZ3VpZGVzIG91ciBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLlxuICAgLSBXcml0ZSBhIGRldGFpbGVkIHNwZWNpZmljYXRpb24gaW5jb3Jwb3JhdGluZyB0aGUgZXZpZGVuY2UgeW91IGNvbGxlY3RlZC5cbiAgIC0gSWYgbmVlZGVkLCBpbmNsdWRlIGNvZGUgc25pcHBldHMgdGhhdCBleHBsYWluIGhvdyB0byB1c2UgbGlicmFyaWVzIG9yIEFQSXMsIGFsb25nIHdpdGggcmVmZXJlbmNlcyB0byB0aGVpciBkb2N1bWVudGF0aW9uLlxuNC4gUG9zdCB0aGUgc3BlY2lmaWNhdGlvbiBiYWNrIHRvIGlzc3VlICMke2lzc3VlTnVtYmVyfSwgdGhlbiBwcmludCB0aGUgaXNzdWUgVVJMLlxuICAgLSBJZiB0aGUgaXNzdWUgYWxyZWFkeSBoYXMgYSBzcGVjaWZpY2F0aW9uLCB1cGRhdGUgdGhlIGV4aXN0aW5nIGNvbW1lbnQgaW5zdGVhZCBvZiBwb3N0aW5nIGEgbmV3IG9uZS5cblxuRm9ybWF0IHRoZSBpc3N1ZSBjb21tZW50IGV4YWN0bHkgbGlrZSB0aGlzLCBidXQgZG8gbm90IGluY2x1ZGUgdGhlIHN1cnJvdW5kaW5nIFxcYH5+fn5cXGAgZmVuY2VzIGluIHRoZSBhY3R1YWwgY29tbWVudDpcbn5+fn5cbiMjIEJhY2tncm91bmRcblxuW1N1bW1hcml6ZSB0aGUgY3VycmVudCBiZWhhdmlvciBhbmQgZXhwbGFpbiB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBpc3N1ZV1cblxuIyMgR29hbFxuXG5bRGVmaW5lIHRoZSBnb2FsIHdlIHdhbnQgdG8gYWNoaWV2ZSBpbiB0aGlzIGlzc3VlXVxuXG4jIyBTcGVjaWZpY2F0aW9uXG5cbltEZXRhaWxlZCBzcGVjaWZpY2F0aW9uIGZvciBzb2Z0d2FyZSBlbmdpbmVlcnNdXG5cbiMjIEtleSBUZWNobm9sb2dpZXMgKE9OTFkgaWYgZXh0ZXJuYWwgcmVzb3VyY2VzIGFyZSBuZWVkZWQpXG5cbltEZXNjcmliZSB3aGF0IGxpYnJhcmllcyBvciBBUElzIHdlIHNob3VsZCB1c2UsIGluY2x1ZGluZyBjb25jcmV0ZSB2ZXJzaW9ucyBhbmQgY29kZSBzbmlwcGV0cy5dXG5cbn5+fn5cbmAudHJpbSgpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYGdpdCBtZXJnZS1iYXNlICR7c2hlbGxRdW90ZShgb3JpZ2luLyR7YmFzZUJyYW5jaH1gKX0gSEVBRCAyPi9kZXYvbnVsbCB8fCBnaXQgbWVyZ2UtYmFzZSAke3NoZWxsUXVvdGUoYmFzZUJyYW5jaCl9IEhFQURgO1xufVxuXG5mdW5jdGlvbiBzaGVsbFF1b3RlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCcke3ZhbHVlLnJlcGxhY2VBbGwoXCInXCIsIFwiJ1xcXCInXFxcIidcIil9J2A7XG59XG4iLCJpbXBvcnQgeyBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGN1cnJlbnRCYXNlQnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuaW1wb3J0IHsgYnVpbGRNZXJnZUJhc2VDb21tYW5kIH0gZnJvbSAnLi9iYXNlQnJhbmNoRGlmZkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXZpZXdQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZUJyYW5jaCA9IGF3YWl0IGN1cnJlbnRCYXNlQnJhbmNoKCk7XG4gIGNvbnN0IG1lcmdlQmFzZUNvbW1hbmQgPSBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaCk7XG4gIGNvbnN0IHByQ29udGV4dCA9IGF3YWl0IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpO1xuICByZXR1cm4gYFxuUmV2aWV3IHRoZSBjdXJyZW50ICR7cHJDb250ZXh0ID8gJ3B1bGwgcmVxdWVzdCcgOiAnYnJhbmNoJ30gYWdhaW5zdCBpdHMgYmFzZSBicmFuY2ggJHtiYXNlQnJhbmNofSB2aWEgXFxgZ2l0IGRpZmYgXCIkKCR7bWVyZ2VCYXNlQ29tbWFuZH0pXCJcXGAuXG5Gb3IgZWFjaCBmaW5kaW5nLCBkbyB0aGUgZm9sbG93aW5nIHRocmVlIHN0ZXBzOlxuMS4gR2F0aGVyIHN1cHBvcnRpbmcgZXZpZGVuY2U6XG4gICAtIEluc3BlY3QgdGhlIHJlZmVyZW5jZWQgY29kZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgcmVjZW50IGRpZmZzIHdoZW4gdGhleSBhZmZlY3QgdGhlIGNsYWltLlxuICAgLSBJZiBjb2RlIGluc3BlY3Rpb24gaXMgZW5vdWdoLCB1c2UgdGhlIGN1cnJlbnQgY29kZWJhc2UgYXMgdGhlIHByaW1hcnkgZXZpZGVuY2UuXG4gICAtIElmIHRoZSBmaW5kaW5nIGlzIGFib3V0IHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAgIC0gQ2xlYW4gdXAgYW55IHRlbXBvcmFyeSBmaWxlcyBhZnRlciB0aGUgZXhwZXJpbWVudC5cbiAgIC0gSWYgdGhlIGZpbmRpbmcgZGVwZW5kcyBvbiBmcmFtZXdvcmssIGxpYnJhcnksIHBsYXRmb3JtLCBvciBsYW5ndWFnZSBiZWhhdmlvciwgY29uZmlybSBpdCBhZ2FpbnN0IHRoZSBsYXRlc3Qgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBhbm90aGVyIHByaW1hcnkgc291cmNlIGluc3RlYWQgb2YgcmVseWluZyBvbiBtZW1vcnkuXG4yLiBKdWRnZSB3aGV0aGVyIHRoZSBmaW5kaW5nIGlzIHZhbGlkOlxuICAgLSBNYXJrIGl0IHZhbGlkIG9ubHkgd2hlbiB0aGUgYXZhaWxhYmxlIGV2aWRlbmNlIHNob3dzIHRoZSByZXBvcnRlZCBpc3N1ZSBpcyBzdGlsbCByZWFsIGluIHRoZSBjdXJyZW50IGNvZGViYXNlLlxuICAgLSBPdGhlcndpc2UsIG1hcmsgaXQgbm90IHZhbGlkLlxuMy4gUHJvcG9zZSBhIGZpeCB3aXRob3V0IG1vZGlmeWluZyB0aGUgY29kZTpcbiAgIC0gRGVzY3JpYmUgdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBjaGFuZ2UgdGhhdCB3b3VsZCBhZGRyZXNzIHRoZSBmaW5kaW5nLlxuICAgLSBJbnZlc3RpZ2F0ZSB0aGUgbGlrZWx5IGltcGFjdCBvZiB0aGF0IGNoYW5nZSBieSBpbnNwZWN0aW5nIHRoZSBhZmZlY3RlZCBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgYW5kIGFkamFjZW50IGJlaGF2aW9yLCBhbmQgbm90ZSBhbnkgZm9sbG93LXVwIGNoYW5nZXMgb3Igcmlza3MgdGhlIGZpeCB3b3VsZCBuZWVkIHRvIGFjY291bnQgZm9yLlxuXG5SZXBvcnQgb25seSB0aGUgdmFsaWQgZmluZGluZ3MsIHRoZSBldmlkZW5jZSBmb3IgZWFjaCBvbmUsIGFuZCB0aGUgcHJvcG9zZWQgZml4IHdpdGggaXRzIGxpa2VseSBpbXBhY3QuIEluY2x1ZGUgYSBicmllZiBqdXN0aWZpY2F0aW9uIGZvciBlYWNoLCBjaXRpbmcgdGhlIGV2aWRlbmNlIHVzZWQgKGUuZy4sIGEgZmFpbGluZyBzY2VuYXJpbywgZXhwZXJpbWVudCByZXN1bHQsIG9yIG9mZmljaWFsIGRvY3VtZW50YXRpb24pLiBEbyBub3QgbW9kaWZ5IHRoZSBjb2RlLlxuSWYgdGhlcmUgYXJlIG5vIHZhbGlkIGZpbmRpbmdzLCByZXNwb25kIGV4YWN0bHkgd2l0aDogXFxgJHtOT19DT05DRVJOX01FU1NBR0V9XFxgXG5cbiR7YnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMocHJDb250ZXh0KX1cbmAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBidWlsZFByQ29udGV4dEluc3RydWN0aW9ucyhwckNvbnRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHJldHVybiBwckNvbnRleHRcbiAgICA/IGBDdXJyZW50IHB1bGwgcmVxdWVzdCBjb250ZXh0Olxufn5+fnlhbWxcbiR7cHJDb250ZXh0LnRyaW0oKX1cbn5+fn5cbmAudHJpbSgpXG4gICAgOiAnJztcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBidWlsZFNjcmVlbnNob3RQcm9tcHQoaW5pdGlhbFVybDogc3RyaW5nLCBwYWdlTmFtZTogc3RyaW5nLCBzY3JlZW5zaG90RGVzY3JpcHRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNhbml0aXplZERlc2NyaXB0aW9uID0gc2NyZWVuc2hvdERlc2NyaXB0aW9uLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgnXCInLCBcIidcIik7XG4gIHJldHVybiBgXG5Vc2UgXFxgcGxheXdyaWdodC1jbGlcXGAgc2tpbGwgdG8gdGFrZSBhIHNjcmVlbnNob3Qgb2YgXCIke3Nhbml0aXplZERlc2NyaXB0aW9ufVwiIGJ5IG5hdmlnYXRpbmcgZnJvbSAke2luaXRpYWxVcmx9IHRvIFwiJHtwYWdlTmFtZX1cIiBwYWdlLlxuXG5Gb2xsb3cgdGhpcyB3b3JrZmxvdzpcbjEuIE9wZW4gdGhlIGluaXRpYWwgcGFnZSBhdCAke2luaXRpYWxVcmx9LlxuMi4gTmF2aWdhdGUgZnJvbSB0aGF0IGluaXRpYWwgcGFnZSB1bnRpbCB5b3UgcmVhY2ggdGhlIHBhZ2UgaWRlbnRpZmllZCBhcyAke3BhZ2VOYW1lfS5cbiAgIC0gSWYgY29kZSBlcnJvcnMsIHJ1bnRpbWUgZmFpbHVyZXMsIG9yIGJyb2tlbiBVSSBmbG93cyBwcmV2ZW50IG5hdmlnYXRpb24sIGludmVzdGlnYXRlIHRoZSBjYXVzZSBpbiB0aGUgbG9jYWwgY29kZWJhc2UsIG1ha2UgdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBjb2RlIGZpeCwgYW5kIHZlcmlmeSB0aGF0IHRoZSBwYWdlIGNhbiBub3cgYmUgcmVhY2hlZCBiZWZvcmUgY29udGludWluZy5cbiAgIC0gSWYgeW91IGNhbm5vdCBmaXggdGhlIGVycm9ycywgcmVwb3J0IG9uIHRoZSBlcnJvcnMgdGhlbiBzdG9wLlxuMy4gQ2FwdHVyZSBhIHNjcmVlbnNob3QgdGhhdCBmb2N1c2VzIG9uIHRoaXMgdGFyZ2V0OiBcIiR7c2FuaXRpemVkRGVzY3JpcHRpb259XCIuXG40LiBLZWVwIHRoZSBnZW5lcmF0ZWQgaW1hZ2UgYXJ0aWZhY3QgYW5kIHJlcG9ydCB0aGUgc2NyZWVuc2hvdCBmaWxlIHBhdGggcGx1cyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHdoYXQgd2FzIGNhcHR1cmVkLiBJZiB5b3UgaGFkIHRvIGZpeCBjb2RlIGZpcnN0LCBhbHNvIHN1bW1hcml6ZSB0aGUgZml4LlxuYC50cmltKCk7XG59XG4iLCJpbXBvcnQgeyBjdXJyZW50QmFzZUJyYW5jaCB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQgeyBidWlsZE1lcmdlQmFzZUNvbW1hbmQgfSBmcm9tICcuL2Jhc2VCcmFuY2hEaWZmQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFNpbXBsaWZ5UHJvbXB0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJhc2VCcmFuY2ggPSBhd2FpdCBjdXJyZW50QmFzZUJyYW5jaCgpO1xuICBjb25zdCBtZXJnZUJhc2VDb21tYW5kID0gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2gpO1xuICByZXR1cm4gYFxuU2ltcGxpZnkgdGhlIGN1cnJlbnQgYnJhbmNoIGFnYWluc3QgaXRzIGJhc2UgYnJhbmNoIHVzaW5nIFxcYGdpdCBkaWZmIFwiJCgke21lcmdlQmFzZUNvbW1hbmR9KVwiXFxgLlxuRmlyc3QsIGluc3BlY3QgdGhlIGRpZmYgYW5kIHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgZWFjaCBjaGFuZ2VkIGFyZWEuIFRoaXMgaW5jbHVkZXMgbmVhcmJ5IGZ1bmN0aW9ucywgdHlwZXMsIGNhbGwgc2l0ZXMsIHRlc3RzLCBjb25maWd1cmF0aW9ucywgYW5kIGFueSBvdGhlciBmaWxlcyB0aGF0IGhlbHAgZGV0ZXJtaW5lIGlmIHRoZSBjaGFuZ2UgaXMgdHJ1bHkgbmVjZXNzYXJ5LlxuTGV2ZXJhZ2UgdGhpcyBjb250ZXh0IHRvIGlkZW50aWZ5IHJlZHVuZGFuY2llcyB0aGF0IGNhbiBiZSBzYWZlbHkgcmVtb3ZlZCBvciBzaW1wbGlmaWVkLiBMb29rIGZvciBkdXBsaWNhdGUgbG9naWMsIHJlcGVhdGVkIGNvbmRpdGlvbmFscywgdW5uZWNlc3NhcnkgYWJzdHJhY3Rpb25zLCBvdmVybGFwcGluZyBjb2RlIHBhdGhzLCBkZWFkIGNvZGUsIG9yIGVkaXRzIG1hZGUgb2Jzb2xldGUgdXBvbiB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cblByaW9yaXRpemUgc2ltcGxpZmljYXRpb25zIHRoYXQgcmVkdWNlIHRoZSByZXZpZXdlcidzIGJ1cmRlbiwgc3VjaCBhczpcbi0gUmVtb3ZpbmcgcmVkdW5kYW50IGVkaXRzIG9yIGRlYWQgY29kZS5cbi0gRWxpbWluYXRpbmcgb3IgbWVyZ2luZyBkdXBsaWNhdGVkIGxvZ2ljIGRpc2NvdmVyZWQgYnkgY29tcGFyaW5nIHRoZSBkaWZmIHdpdGggcmVsYXRlZCBjb2RlLlxuLSBGbGF0dGVuaW5nIHVubmVjZXNzYXJpbHkgY29tcGxleCBsb2dpYyBpbnRyb2R1Y2VkIGluIHRoZSBkaWZmIChlLmcuLCB1c2luZyBlYXJseSByZXR1cm5zIHRvIHJlZHVjZSBuZXN0aW5nLCBzaW1wbGlmeWluZyBib29sZWFuIGV4cHJlc3Npb25zLCBvciByZW1vdmluZyByZWR1bmRhbnQgd3JhcHBlciBmdW5jdGlvbnMpLlxuXG5Db21taXQgYW5kIHB1c2ggeW91ciBjaGFuZ2VzLiBBZnRlcndhcmQsIHN1bW1hcml6ZSB0aGUgcmVkdW5kYW5jaWVzIG9yIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkgeW91IGhhdmUgcmVtb3ZlZC5cbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFBhY2tlZFNraWxscygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhcbiAgICBbXG4gICAgICAnYnVueCcsXG4gICAgICAnc2tpbGxzQGxhdGVzdCcsXG4gICAgICAnYWRkJyxcbiAgICAgIGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vLi4nLCBpbXBvcnQubWV0YS51cmwpKSxcbiAgICAgICctLWdsb2JhbCcsXG4gICAgICAnLS15ZXMnLFxuICAgICAgJy0tc2tpbGwnLFxuICAgICAgJyonLFxuICAgICAgJy0tYWdlbnQnLFxuICAgICAgJ2NsYXVkZS1jb2RlJyxcbiAgICAgICctLWFnZW50JyxcbiAgICAgICdjb2RleCcsXG4gICAgICAnLS1hZ2VudCcsXG4gICAgICAnZ2VtaW5pLWNsaScsXG4gICAgXSxcbiAgICB7XG4gICAgICB3YWl0TWVzc2FnZTogJ0luc3RhbGxpbmcgcGFja2FnZWQgc2tpbGxzIGdsb2JhbGx5LicsXG4gICAgfVxuICApO1xufVxuIiwiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtcbiAgY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSxcbiAgZGlzcGxheUFnZW50TmFtZSxcbiAgcnVuQWdlbnRDb21tYW5kLFxuICBydW5BbGxBZ2VudENvbW1hbmRzLFxufSBmcm9tICcuL2FnZW50L2FnZW50Q29tbWFuZHMuanMnO1xuaW1wb3J0IHtcbiAgY2hlY2tQckNpLFxuICBmZXRjaElzc3VlTWVzc2FnZXMsXG4gIGZldGNoUHJNZXNzYWdlcyxcbiAgbGlzdFByUmV2aWV3VGhyZWFkcyxcbiAgbm9ybWFsaXplSXNzdWVOdW1iZXIsXG4gIG9wZW5QcixcbiAgcmVhZFJlcGxpZXNGcm9tU3RkaW4sXG4gIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCxcbiAgcmVhZFN0ZGluVGV4dCxcbiAgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyxcbiAgdXBkYXRlUHJCb2R5LFxuICB1cGRhdGVQclRpdGxlLFxufSBmcm9tICcuL3ByL3ByQ29tbWFuZHMuanMnO1xuaW1wb3J0IHsgYnVpbGRQbGFuUHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3BsYW5Qcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRSZXZpZXdQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcmV2aWV3UHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkU2NyZWVuc2hvdFByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkU2ltcGxpZnlQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQuanMnO1xuaW1wb3J0IHsgaW5zdGFsbFBhY2tlZFNraWxscyB9IGZyb20gJy4vc2tpbGxzL2luc3RhbGxTa2lsbHMuanMnO1xuXG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxucHJvZ3JhbS5uYW1lKCdhZ2VudC1za2lsbHMnKS5kZXNjcmlwdGlvbignQ0xJIGNvbW1hbmRzIGZvciB0aGUgc2tpbGxzIGluIHRoaXMgcmVwb3NpdG9yeScpLnNob3dIZWxwQWZ0ZXJFcnJvcigpO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdpbnN0YWxsLXNraWxscycpXG4gIC5kZXNjcmlwdGlvbignSW5zdGFsbCBhbGwgcGFja2FnZWQgc2tpbGxzIGdsb2JhbGx5IGZvciBDbGF1ZGUgQ29kZSwgQ29kZXgsIGFuZCBHZW1pbmkgQ0xJJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBpbnN0YWxsUGFja2VkU2tpbGxzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ0RvbmVcXG4nKTtcbiAgfSk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAncmV2aWV3JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSByZXZpZXcgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKG1vZGUpID0+XG4gICAgbW9kZSA9PT0gJ2FsbCdcbiAgICAgID8gcnVuQWxsQWdlbnRDb21tYW5kcyhidWlsZFJldmlld1Byb21wdCgpLCB7XG4gICAgICAgICAgYWxsQWdlbnRzTGFiZWw6ICdyZXZpZXcgYWdlbnRzJyxcbiAgICAgICAgICBtYXBPdXRwdXQ6IChhZ2VudCwgb3V0cHV0KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgYnVpbGRSZXZpZXdQcm9tcHQoKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY29kZXgnLCAnUnVuIENvZGV4IHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3BsYW4nLFxuICBkZXNjcmlwdGlvbjogJ1J1biBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUgd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHBsYW5uaW5nIGFnZW50JyxcbiAgY2hvaWNlczogWydhbGwnLCAnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAobW9kZSwgaXNzdWVSZWZlcmVuY2UpID0+XG4gICAgbW9kZSA9PT0gJ2FsbCdcbiAgICAgID8gcnVuQWxsQWdlbnRDb21tYW5kcyhidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSwge1xuICAgICAgICAgIGFsbEFnZW50c0xhYmVsOiAncGxhbm5pbmcgYWdlbnRzJyxcbiAgICAgICAgfSlcbiAgICAgIDogcnVuQWdlbnRDb21tYW5kKG1vZGUsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tY29kZXgnLCAnUnVuIENvZGV4IHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcbmFkZEFnZW50Q29tbWFuZCgncGxhbi1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3NjcmVlbnNob3QnKVxuICAuZGVzY3JpcHRpb24oJ1Rha2UgYSBzY3JlZW5zaG90IHdpdGggdGhlIHNlbGVjdGVkIGFnZW50IHZpYSBwbGF5d3JpZ2h0LWNsaScpXG4gIC5hcmd1bWVudCgnPGluaXRpYWwtdXJsPicsICdJbml0aWFsIFVSTCB0byBvcGVuIGJlZm9yZSBuYXZpZ2F0aW5nJylcbiAgLmFyZ3VtZW50KCc8cGFnZS1uYW1lPicsICdQYWdlIG5hbWUgdG8gbmF2aWdhdGUgdG8gZnJvbSB0aGUgaW5pdGlhbCBwYWdlJylcbiAgLmFyZ3VtZW50KCc8ZGVzY3JpcHRpb24+JywgJ0Rlc2NyaXB0aW9uIG9mIHRoZSBwYXJ0IHRvIGNhcHR1cmUgaW4gdGhlIHNjcmVlbnNob3QnKVxuICAuYWRkT3B0aW9uKFxuICAgIG5ldyBPcHRpb24oJy0tYWdlbnQgPGFnZW50PicsICdVc2UgYSBzY3JlZW5zaG90IGFnZW50JykuY2hvaWNlcyhbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSkubWFrZU9wdGlvbk1hbmRhdG9yeSgpXG4gIClcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKFxuICAgIGFzeW5jIChcbiAgICAgIGluaXRpYWxVcmw6IHN0cmluZyxcbiAgICAgIHBhZ2VOYW1lOiBzdHJpbmcsXG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgICAgb3B0aW9uczogeyBhZ2VudDogJ2NvZGV4JyB8ICdjbGF1ZGUnIHwgJ2dlbWluaScgfVxuICAgICkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoXG4gICAgICAgIGF3YWl0IHJ1bkFnZW50Q29tbWFuZChvcHRpb25zLmFnZW50LCBidWlsZFNjcmVlbnNob3RQcm9tcHQoaW5pdGlhbFVybCwgcGFnZU5hbWUsIGRlc2NyaXB0aW9uKSlcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3NpbXBsaWZ5JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHNpbXBsaWZ5IGFnZW50JyxcbiAgY2hvaWNlczogWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKGFnZW50KSA9PiBydW5BZ2VudENvbW1hbmQoYWdlbnQsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jb2RleCcsICdSdW4gQ29kZXggUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdvcGVuLXByJylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBwdWxsIHJlcXVlc3QgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBvcGVuUHIoYm9keSB8fCB1bmRlZmluZWQpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwZGF0ZS1wci1ib2R5JylcbiAgLmRlc2NyaXB0aW9uKCdVcGRhdGUgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0IGJvZHknKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkUmVxdWlyZWRTdGRpblRleHQoJ0Vycm9yOiBQUiBib2R5IGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgdXBkYXRlUHJCb2R5KGJvZHkpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwZGF0ZS1wci10aXRsZScpXG4gIC5kZXNjcmlwdGlvbignVXBkYXRlIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCB0aXRsZScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGl0bGUgPSBhd2FpdCByZWFkUmVxdWlyZWRTdGRpblRleHQoJ0Vycm9yOiBQUiB0aXRsZSBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHVwZGF0ZVByVGl0bGUodGl0bGUpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2NoZWNrLXByLWNpJylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IHRoZSBsYXRlc3QgdGVzdC1yZWxhdGVkIENJIHJlc3VsdHMgZm9yIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tQckNpKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUocmVzdWx0Lm91dHB1dCk7XG4gICAgcHJvY2Vzcy5leGl0KHJlc3VsdC5leGl0Q29kZSk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdmZXRjaC1pc3N1ZScpXG4gIC5kZXNjcmlwdGlvbignRmV0Y2ggYW4gaXNzdWUgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgYXMgWUFNTCcpXG4gIC5hcmd1bWVudCgnPGlzc3VlPicsICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoaXNzdWVSZWZlcmVuY2U6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZVJlZmVyZW5jZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLXByJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhIHB1bGwgcmVxdWVzdCBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MLCBleGNsdWRpbmcgaW5saW5lIGNvbW1lbnRzJylcbiAgLmFyZ3VtZW50KCdbcHJdJywgJ0dpdEh1YiBwdWxsIHJlcXVlc3QgbnVtYmVyIG9yIFVSTDsgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoIHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAocHJSZWZlcmVuY2U/OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmZXRjaFByTWVzc2FnZXMocHJSZWZlcmVuY2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdsaXN0LXByLXJldmlldy10aHJlYWRzJylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgZm9yIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbGlzdFByUmV2aWV3VGhyZWFkcygpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdyZXNvbHZlLXByLXJldmlldy10aHJlYWRzJylcbiAgLmRlc2NyaXB0aW9uKCdSZXBseSB0byB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzIGFuZCByZXNvbHZlIHRoZW0nKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlcGxpZXMgPSBhd2FpdCByZWFkUmVwbGllc0Zyb21TdGRpbigpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJlc29sdmVQclJldmlld1RocmVhZHMocmVwbGllcyk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbmF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpO1xuXG5mdW5jdGlvbiBhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kPFRNb2RlIGV4dGVuZHMgc3RyaW5nPihjb25maWc6IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBvcHRpb25EZXNjcmlwdGlvbjogc3RyaW5nO1xuICBjaG9pY2VzOiBbVE1vZGUsIC4uLlRNb2RlW11dO1xuICBhcmd1bWVudE5hbWU/OiBzdHJpbmc7XG4gIGFyZ3VtZW50RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJ1bjogKG1vZGU6IFRNb2RlLCBhcmd1bWVudDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG59KTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtLmNvbW1hbmQoY29uZmlnLm5hbWUpLmRlc2NyaXB0aW9uKGNvbmZpZy5kZXNjcmlwdGlvbikuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpO1xuICBpZiAoY29uZmlnLmFyZ3VtZW50TmFtZSkge1xuICAgIGNvbW1hbmQuYXJndW1lbnQoY29uZmlnLmFyZ3VtZW50TmFtZSwgY29uZmlnLmFyZ3VtZW50RGVzY3JpcHRpb24pO1xuICB9XG5cbiAgY29tbWFuZFxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgY29uZmlnLm9wdGlvbkRlc2NyaXB0aW9uKS5jaG9pY2VzKGNvbmZpZy5jaG9pY2VzKS5tYWtlT3B0aW9uTWFuZGF0b3J5KCkpXG4gICAgLmFjdGlvbihhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICBjb25zdCBbYXJndW1lbnRPck9wdGlvbnMsIG1heWJlT3B0aW9uc10gPSBhcmdzIGFzIFtzdHJpbmcgfCB7IGFnZW50OiBUTW9kZSB9LCB7IGFnZW50OiBUTW9kZSB9IHwgdW5kZWZpbmVkXTtcbiAgICAgIGNvbnN0IGFyZ3VtZW50ID0gdHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IGFyZ3VtZW50T3JPcHRpb25zIDogJyc7XG4gICAgICBjb25zdCBvcHRpb25zID0gKHR5cGVvZiBhcmd1bWVudE9yT3B0aW9ucyA9PT0gJ3N0cmluZycgPyBtYXliZU9wdGlvbnMgOiBhcmd1bWVudE9yT3B0aW9ucykgYXMgeyBhZ2VudDogVE1vZGUgfTtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZy5ydW4ob3B0aW9ucy5hZ2VudCwgYXJndW1lbnQpKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkQWdlbnRDb21tYW5kKFxuICBuYW1lOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIGNvbmZpZ09yUnVuOlxuICAgIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPilcbiAgICB8IHtcbiAgICAgICAgYXJndW1lbnROYW1lOiBzdHJpbmc7XG4gICAgICAgIGFyZ3VtZW50RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICAgIHJ1bjogKGFyZ3VtZW50OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgICAgIH1cbik6IHZvaWQge1xuICBjb25zdCBjb21tYW5kID0gcHJvZ3JhbS5jb21tYW5kKG5hbWUpLmRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG5cbiAgaWYgKHR5cGVvZiBjb25maWdPclJ1biA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbW1hbmQuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuKCkpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbW1hbmQuYXJndW1lbnQoY29uZmlnT3JSdW4uYXJndW1lbnROYW1lLCBjb25maWdPclJ1bi5hcmd1bWVudERlc2NyaXB0aW9uKS5hY3Rpb24oYXN5bmMgKGFyZ3VtZW50OiBzdHJpbmcpID0+IHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWdPclJ1bi5ydW4oYXJndW1lbnQpKTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsicnVuQ29tbWFuZFdpdGhQcm9ncmVzcyIsIl94IiwiX3gyIiwiX3J1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MiLCJhcHBseSIsInRoaXMiLCJhcmd1bWVudHMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvciIsIm0iLCJfY2FsbGVlIiwiY29tbWFuZCIsIm9wdGlvbnMiLCJfY29tbWFuZCQiLCJwcm9jIiwic3RvcFdhaXRQcm9ncmVzcyIsImNvbW1hbmRMb2dnZXIiLCJfeWllbGQkUHJvbWlzZSRhbGwiLCJfeWllbGQkUHJvbWlzZSRhbGwyIiwic3Rkb3V0Iiwic3RkZXJyIiwib3V0cHV0IiwidyIsIl9jb250ZXh0IiwicCIsIm4iLCJzcGF3biIsInNsaWNlIiwic3RkaW8iLCJjcmVhdGVXYWl0UHJvZ3Jlc3MiLCJ3YWl0TWVzc2FnZSIsIndhaXRJbnRlcnZhbFNlY29uZHMiLCJjcmVhdGVDb21tYW5kTG9nZ2VyIiwibG9nRmlsZVBhdGgiLCJ2IiwiUHJvbWlzZSIsImFsbCIsInN0cmVhbVRvVGV4dCIsImNodW5rIiwid3JpdGUiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25jZSIsImNvZGUiLCJfc2xpY2VkVG9BcnJheSIsImEiLCJjb25jYXQiLCJFcnJvciIsImpvaW4iLCJjbG9zZSIsImYiLCJfeDMiLCJfeDQiLCJfc3RyZWFtVG9UZXh0IiwiX2NhbGxlZTIiLCJzdHJlYW0iLCJvbkNodW5rIiwiY2h1bmtzIiwiX2l0ZXJhdG9yQWJydXB0Q29tcGxldGlvbiIsIl9kaWRJdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImNodW5rVGV4dCIsIl90IiwiX2NvbnRleHQyIiwiX2FzeW5jSXRlcmF0b3IiLCJuZXh0IiwiZG9uZSIsInZhbHVlIiwidG9TdHJpbmciLCJwdXNoIiwid3JpdGVQcm9ncmVzcyIsIm1lc3NhZ2UiLCJwcm9jZXNzIiwiZG90Q291bnQiLCJ0aW1lciIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsIl94NSIsIl9jcmVhdGVDb21tYW5kTG9nZ2VyIiwiX2NhbGxlZTYiLCJ3YXJuIiwiX3QyIiwiX2NvbnRleHQ2IiwiX2Nsb3NlIiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJlcnJvciIsIlN0cmluZyIsIm1rZGlyIiwiZGlybmFtZSIsInJlY3Vyc2l2ZSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZmxhZ3MiLCJvbiIsIndyaXRhYmxlIiwiX2Nsb3NlMiIsIl9jYWxsZWU0IiwiX2NvbnRleHQ0IiwiZW5kIiwiX2Nsb3NlMyIsIl9jYWxsZWU1IiwiX2NvbnRleHQ1IiwiTk9fQ09OQ0VSTl9NRVNTQUdFIiwiQUdFTlRfTkFNRVMiLCJDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYIiwiUmVnRXhwIiwicnVuQWxsQWdlbnRDb21tYW5kcyIsIl9ydW5BbGxBZ2VudENvbW1hbmRzIiwicHJvbXB0IiwicmVzb2x2ZWRQcm9tcHQiLCJvdXRwdXRzIiwiYWxsQWdlbnRzTGFiZWwiLCJ3YWl0TWVzc2FnZUZvciIsIm1hcCIsImFnZW50IiwiX29wdGlvbnMkbWFwT3V0cHV0IiwiX29wdGlvbnMkbWFwT3V0cHV0MiIsIl9vcHRpb25zIiwicnVuQWdlbnRDb21tYW5kIiwidHJpbSIsIm1hcE91dHB1dCIsImNhbGwiLCJkaXNwbGF5QWdlbnROYW1lIiwiZmlsdGVyIiwidW5kZWZpbmVkIiwibGVuZ3RoIiwiX3J1bkFnZW50Q29tbWFuZCIsIl90MyIsImNyZWF0ZUFnZW50Q29tbWFuZCIsImFnZW50TG9nRmlsZVBhdGgiLCJ0YXJnZXQiLCJub3ciLCJEYXRlIiwiX21hcDIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwidHdvRGlnaXRzIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwicGFkU3RhcnQiLCJ5YW1sU3RyaW5naWZ5T3B0aW9ucyIsImJsb2NrUXVvdGUiLCJsaW5lV2lkdGgiLCJwcm9ncmVzcyIsInByb2Nlc3NTdGRlcnIiLCJleGl0V2l0aEVycm9yIiwiZXhpdCIsInJlYWRTdGRpblRleHQiLCJfcmVhZFN0ZGluVGV4dCIsInByb2Nlc3NTdGRpbiIsImlzVFRZIiwicmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiX3JlYWRSZXF1aXJlZFN0ZGluVGV4dCIsImVycm9yTWVzc2FnZSIsImlucHV0IiwicnVuQ29tbWFuZCIsIl9ydW5Db21tYW5kIiwiX29wdGlvbnMkYWxsb3dlZEV4aXRDIiwiYWxsb3dlZEV4aXRDb2RlcyIsIl9sb29wIiwiX3JldCIsImF0dGVtcHQiLCJfY29tbWFuZCQyIiwiZXhpdENvZGUiLCJzdGRpbkRhdGEiLCJzdGRpbiIsImluY2x1ZGVzIiwiaXNUcmFuc2llbnRHaEZhaWx1cmUiLCJHSF9SRVRSWV9NQVhfQVRURU1QVFMiLCJzbGVlcCIsImQiLCJfcmVnZW5lcmF0b3JWYWx1ZXMiLCJnaCIsIl9naCIsImFyZ3MiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJnaEFsbG93RXhpdENvZGVzIiwiX3g2IiwiX3g3IiwiX3g4IiwiX2doQWxsb3dFeGl0Q29kZXMiLCJjdXJyZW50UmVwb1BhcnRzIiwiX2N1cnJlbnRSZXBvUGFydHMiLCJuYW1lV2l0aE93bmVyIiwiX25hbWVXaXRoT3duZXIkc3BsaXQiLCJfbmFtZVdpdGhPd25lciRzcGxpdDIiLCJvd25lciIsIm5hbWUiLCJfY29udGV4dDciLCJzcGxpdCIsImN1cnJlbnRQck51bWJlciIsIl9jdXJyZW50UHJOdW1iZXIiLCJfY2FsbGVlNyIsIl9jb250ZXh0OCIsImdyYXBocWwiLCJfeDkiLCJfeDAiLCJfZ3JhcGhxbCIsIl9jYWxsZWU4IiwicXVlcnkiLCJ2YXJzIiwiX2kiLCJfT2JqZWN0JGVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJrZXkiLCJyZXNwb25zZSIsImVycm9yTWVzc2FnZXMiLCJfY29udGV4dDkiLCJPYmplY3QiLCJlbnRyaWVzIiwiSlNPTiIsInBhcnNlIiwiQXJyYXkiLCJpc0FycmF5IiwiZXJyb3JzIiwiX2Vycm9yJG1lc3NhZ2UiLCJ5YW1sRHVtcCIsImRhdGEiLCJzdHJpbmdpZnlZYW1sIiwiZGVlcENvcHkiLCJzdHJpbmdpZnkiLCJzcGF3blN5bmNTYWZlIiwiX3Jlc3VsdCRzdGF0dXMiLCJfcmVzdWx0JHN0ZG91dCIsIl9yZXN1bHQkc3RkZXJyIiwicmVzdWx0Iiwic3Bhd25TeW5jIiwiZW5jb2RpbmciLCJzdGF0dXMiLCJ0ZXN0IiwiX3gxIiwiX2NhbGxlZTkiLCJkZWNvZGVyIiwiX2NvbnRleHQwIiwiVGV4dERlY29kZXIiLCJkZWNvZGUiLCJVaW50OEFycmF5IiwiVEVTVF9SRUxBVEVEX1BBVFRFUk4iLCJXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMiLCJGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4iLCJydGtBdmFpbGFibGUiLCJsYXRlc3RQckNpUmVzdWx0cyIsIl9sYXRlc3RQckNpUmVzdWx0cyIsInByTnVtYmVyIiwiX3N1bW1hcnkkcGFzcyIsIl9zdW1tYXJ5JGZhaWwiLCJfc3VtbWFyeSRwZW5kaW5nIiwiX3N1bW1hcnkkc2tpcHBpbmciLCJfc3VtbWFyeSRjYW5jZWwiLCJjaGVja3MiLCJyYXciLCJzdW1tYXJ5IiwiU3ludGF4RXJyb3IiLCJyZWR1Y2UiLCJjb3VudHMiLCJjaGVjayIsIl9jaGVjayRidWNrZXQyIiwiX2NvdW50cyRidWNrZXQiLCJidWNrZXQiLCJ0b3RhbCIsInBhc3MiLCJmYWlsIiwicGVuZGluZyIsInNraXBwaW5nIiwiY2FuY2VsIiwid2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl93YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwic2xlZXBGbiIsImxhdGVzdENpUmVzdWx0c0ZuIiwid3JpdGVQcm9ncmVzc0ZuIiwiYXR0ZW1wdHMiLCJjaVJlc3VsdHMiLCJjbGFzc2lmaWVkUmVzdWx0cyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDIiLCJmYWlsZWRSZXN1bHRzIiwicnVubmluZ1Jlc3VsdHMiLCJzbGVlcFNlY29uZHMiLCJjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyIsImZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZCIsImtleXMiLCJsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdyIsImdyb3VwZWRSZXN1bHRzIiwid29ya2Zsb3dLZXkiLCJ3b3JrZmxvdyIsImZyb21FbnRyaWVzIiwiX3JlZiIsIl9sYXRlc3RBdHRlbXB0Q2hlY2tzJCIsIl9yZWYyIiwibGF0ZXN0QXR0ZW1wdENoZWNrcyIsImdyb3VwcyIsImdyb3VwZWRDaGVja3MiLCJydW5JZCIsIndvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rIiwid29ya2Zsb3dBdHRlbXB0S2V5IiwiZ3JvdXAiLCJnZXQiLCJzZXQiLCJNYXAiLCJmcm9tIiwidmFsdWVzIiwibGF0ZXN0R3JvdXAiLCJjdXJyZW50R3JvdXAiLCJsYXRlc3RHcm91cFRpbWVzdGFtcCIsImxhdGVzdENoZWNrc0ZvcldvcmtmbG93IiwiZmlyc3RDaGVjayIsImxhdGVzdENoZWNrIiwiY3VycmVudExhdGVzdCIsImxhdGVzdENoZWNrVGltZXN0YW1wIiwiY2xhc3NpZmljYXRpb24iLCJ3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uIiwic29tZSIsInRlc3RSZWxhdGVkQ2hlY2siLCJfbGluayRtYXRjaCIsImxpbmsiLCJtYXRjaCIsIndvcmtmbG93UnVuIiwiX3dvcmtmbG93UnVuIiwicnVuSnNvbiIsImJ1Y2tldHMiLCJfY2hlY2skYnVja2V0IiwiX2NoZWNrJHN0YXJ0ZWRBdCIsInRpbWVzdGFtcCIsImNvbXBsZXRlZEF0Iiwic3RhcnRlZEF0IiwiX3NsZWVwU2Vjb25kcyIsInNlY29uZHMiLCJjaGVja1ByQ2kiLCJfY2hlY2tQckNpIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nMiIsIndhaXRBdHRlbXB0cyIsIndhaXRUaW1lZE91dCIsImNsYXNzaWZpZWRMYXRlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0NCIsInBheWxvYWQiLCJ3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3MiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0cyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dCIsIl9yZWY0IiwiX3JlZjYiLCJjb21wYWN0V29ya2Zsb3ciLCJfdDQiLCJfdDUiLCJjb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJfb2JqZWN0U3ByZWFkIiwiYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMiLCJmYWlsZWRXb3JrZmxvd0xvZyIsImZhaWxlZF93b3JrZmxvd3MiLCJ0ZXN0X3dvcmtmbG93X291dHB1dCIsIl9yZWY3IiwiX3JlZjgiLCJydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MiLCJsYXRlc3QiLCJfY29tcGFjdFdvcmtmbG93UmVzdWx0IiwiX3N0cmluZ09yVW5kZWZpbmVkIiwicnVuIiwiZmFpbGVkSm9iIiwiZmFpbGVkV29ya2Zsb3dSdW5Kb2IiLCJzdHJpbmdPclVuZGVmaW5lZCIsImpvYiIsImpvYl91cmwiLCJ1cmwiLCJmYWlsZWRfc3RlcCIsImZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUiLCJydW5faWQiLCJydW5fdXJsIiwiYnJhbmNoIiwiaGVhZEJyYW5jaCIsInNoYSIsImhlYWRTaGEiLCJjb25jbHVzaW9uIiwiX2ZhaWxlZFdvcmtmbG93TG9nIiwibG9nIiwiZmFpbGVkX2xvZyIsInJlZmluZUZhaWxlZFdvcmtmbG93TG9nIiwic2FuaXRpemVkSW5wdXQiLCJzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nIiwic3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzIiwibGluZSIsInJlcGxhY2UiLCJqb2JOYW1lIiwiX3JlZjMiLCJfcnVuJGpvYnMkZmluZCIsImpvYnMiLCJmaW5kIiwiX2pvYiRzdGVwcyRmaW5kJG5hbWUiLCJfam9iJHN0ZXBzJGZpbmQiLCJfam9iJHN0ZXBzJGZpbmQyIiwic3RlcHMiLCJzdGVwIiwiY3VycmVudEJhc2VCcmFuY2giLCJfY3VycmVudEJhc2VCcmFuY2giLCJfeWllbGQkY3VycmVudFB1bGxSZXEiLCJjdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoIiwiY3VycmVudERlZmF1bHRCcmFuY2giLCJfY3VycmVudERlZmF1bHRCcmFuY2giLCJyZXF1aXJlTm9uRW1wdHkiLCJfY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCIsImJhc2VCcmFuY2giLCJpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmciLCJub3JtYWxpemVJc3N1ZU51bWJlciIsInJlZmVyZW5jZSIsImV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIiLCJub3JtYWxpemVQck51bWJlciIsImZldGNoSXNzdWVNZXNzYWdlcyIsIl9mZXRjaElzc3VlTWVzc2FnZXMiLCJpc3N1ZU51bWJlciIsIl95aWVsZCRjdXJyZW50UmVwb1BhciIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjIiLCJpc3N1ZSIsImlzc3VlTWVzc2FnZXMiLCJudW1iZXIiLCJmZXRjaFByTWVzc2FnZXMiLCJfZmV0Y2hQck1lc3NhZ2VzIiwicmVzb2x2ZWRQck51bWJlciIsInB1bGxSZXF1ZXN0IiwiY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzIiwicHVsbF9yZXF1ZXN0IiwiZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIiwiX2ZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSIsInByTnVtYmVyT3V0cHV0IiwiX2N1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjMiLCJfeWllbGQkY3VycmVudFJlcG9QYXI0IiwicHJNZXNzYWdlcyIsImxhYmVsIiwicmVmZXJlbmNlVGV4dCIsImtpbmRTZWdtZW50IiwiX2lzc3VlTWVzc2FnZXMiLCJtZXNzYWdlcyIsImZldGNoTWV0YWRhdGEiLCJub3VuIiwic2VsZWN0TWV0YWRhdGEiLCJfcmVzcG9uc2UkZGF0YSIsInJlcG9zaXRvcnkiLCJwYWdpbmF0ZU1lc3NhZ2VzIiwic2VsZWN0Q29ubmVjdGlvbiIsIl9yZXNwb25zZSRkYXRhMiIsImNvbW1lbnRzIiwibWFwTm9kZSIsImNvbW1lbnRNZXNzYWdlIiwiX3ByTWVzc2FnZXMiLCJpc3N1ZUNvbW1lbnRzIiwicmV2aWV3cyIsIl9yZXNwb25zZSRkYXRhMyIsInBySXNzdWVDb21tZW50cyIsInByUmV2aWV3cyIsInNvcnQiLCJjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCIsImxlZnQiLCJyaWdodCIsImxlZnRDcmVhdGVkQXQiLCJjcmVhdGVkQXQiLCJyaWdodENyZWF0ZWRBdCIsImxvY2FsZUNvbXBhcmUiLCJfeDEwIiwiX3BySXNzdWVDb21tZW50cyIsIl9yZXNwb25zZSRkYXRhNCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl9wclJldmlld3MiLCJfcmVzcG9uc2UkZGF0YTUiLCJyZXZpZXdNZXNzYWdlIiwiX3gxNCIsIl9wYWdpbmF0ZU1lc3NhZ2VzIiwiY29uZmlnIiwiY3Vyc29yIiwiX2Nvbm5lY3Rpb24kcGFnZUluZm8kIiwiY29ubmVjdGlvbiIsIk51bWJlciIsIm5vZGVzIiwiaGFzTWVzc2FnZUJvZHkiLCJwYWdlSW5mbyIsImhhc05leHRQYWdlIiwiZW5kQ3Vyc29yIiwiX3gxNSIsIl9mZXRjaE1ldGFkYXRhIiwiX2NhbGxlZTAiLCJfbWV0YWRhdGEkYXV0aG9yJGxvZ2kiLCJfbWV0YWRhdGEkYXV0aG9yIiwiX21ldGFkYXRhJGJvZHkiLCJtZXRhZGF0YSIsInRpdGxlIiwiYXV0aG9yIiwibG9naW4iLCJib2R5IiwiY29tbWVudCIsIl9jb21tZW50JGF1dGhvciRsb2dpbiIsIl9jb21tZW50JGF1dGhvciIsInR5cGUiLCJyZXZpZXciLCJfcmV2aWV3JGF1dGhvciRsb2dpbiIsIl9yZXZpZXckYXV0aG9yIiwiX3JldmlldyRzdGF0ZSIsIl9yZXZpZXckc3VibWl0dGVkQXQiLCJfcmV2aWV3JGJvZHkiLCJzdGF0ZSIsInN1Ym1pdHRlZEF0Iiwib3BlblByIiwiX29wZW5QciIsImhlYWQiLCJiYXNlIiwiY3JlYXRlQXJncyIsInVwZGF0ZVByQm9keSIsIl91cGRhdGVQckJvZHkiLCJ1cGRhdGVQciIsInVwZGF0ZVByVGl0bGUiLCJfdXBkYXRlUHJUaXRsZSIsIl91cGRhdGVQciIsImVkaXRBcmdzIiwicmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfcmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJub3JtYWxpemVkUmVwbGllcyIsInRocmVhZElkIiwicGFyc2VSZXBseUlucHV0IiwicmVwbGllcyIsInBhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIl9wYWdpbmF0ZVJldmlld1RocmVhZHMiLCJvblRocmVhZCIsIl95aWVsZCRncmFwaHFsJGRhdGEiLCJfcmV2aWV3VGhyZWFkcyRwYWdlSW4iLCJyZXZpZXdUaHJlYWRzIiwidGhyZWFkIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJzIiwiZSIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsImlkcyIsImlzUmVzb2x2ZWQiLCJpZCIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwidGhyZWFkcyIsIl9wYWdlSW5mbyRlbmRDdXJzb3IiLCJfeWllbGQkZ3JhcGhxbCRkYXRhMiIsIl9wYWdlSW5mbyRlbmRDdXJzb3IyIiwiY29tbWVudENvbm5lY3Rpb24iLCJfdDYiLCJfdDciLCJfdDgiLCJub3JtYWxpemVDb21tZW50QXV0aG9yIiwibm9kZSIsImlzT3V0ZGF0ZWQiLCJwYXRoIiwib3JpZ2luYWxMaW5lIiwic3RhcnRMaW5lIiwib3JpZ2luYWxTdGFydExpbmUiLCJsaXN0UHJSZXZpZXdUaHJlYWRzIiwiX2xpc3RQclJldmlld1RocmVhZHMiLCJfdDkiLCJfdDAiLCJ1bnJlc29sdmVkX3RocmVhZHMiLCJyZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX3Jlc29sdmVQclJldmlld1RocmVhZHMiLCJ1bnJlc29sdmVkSWRzIiwicmVzb2x2ZWRUaHJlYWRJZHMiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiX3N0ZXAyJHZhbHVlIiwiaW5kZXgiLCJfc3RlcDIkdmFsdWUkIiwiX3QxIiwiX3QxMCIsIl90MTEiLCJTZXQiLCJoYXMiLCJyZXNvbHZlUmV2aWV3VGhyZWFkIiwicmVzb2x2ZWRfdGhyZWFkX2lkcyIsInBhcnNlZCIsIl90eXBlb2YiLCJldmVyeSIsInJlcGx5IiwiaXNSZXBseUlucHV0IiwiYnVpbGRQbGFuUHJvbXB0IiwiX2J1aWxkUGxhblByb21wdCIsImlzc3VlWWFtbCIsImJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCIsInNoZWxsUXVvdGUiLCJyZXBsYWNlQWxsIiwiYnVpbGRSZXZpZXdQcm9tcHQiLCJfYnVpbGRSZXZpZXdQcm9tcHQiLCJtZXJnZUJhc2VDb21tYW5kIiwicHJDb250ZXh0IiwiYnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMiLCJidWlsZFNjcmVlbnNob3RQcm9tcHQiLCJpbml0aWFsVXJsIiwicGFnZU5hbWUiLCJzY3JlZW5zaG90RGVzY3JpcHRpb24iLCJzYW5pdGl6ZWREZXNjcmlwdGlvbiIsImJ1aWxkU2ltcGxpZnlQcm9tcHQiLCJfYnVpbGRTaW1wbGlmeVByb21wdCIsImluc3RhbGxQYWNrZWRTa2lsbHMiLCJfaW5zdGFsbFBhY2tlZFNraWxscyIsImZpbGVVUkxUb1BhdGgiLCJVUkwiLCJwcm9ncmFtIiwiQ29tbWFuZCIsImFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQiLCJkZXNjcmlwdGlvbiIsImFsbG93RXhjZXNzQXJndW1lbnRzIiwiYXJndW1lbnROYW1lIiwiYXJndW1lbnQiLCJhcmd1bWVudERlc2NyaXB0aW9uIiwiYWRkT3B0aW9uIiwiT3B0aW9uIiwib3B0aW9uRGVzY3JpcHRpb24iLCJjaG9pY2VzIiwibWFrZU9wdGlvbk1hbmRhdG9yeSIsImFjdGlvbiIsIl9jYWxsZWUxIiwiX2xlbiIsIl9rZXkiLCJfcmVmMTEiLCJhcmd1bWVudE9yT3B0aW9ucyIsIm1heWJlT3B0aW9ucyIsIl9hcmdzMSIsIl9jb250ZXh0MSIsImFkZEFnZW50Q29tbWFuZCIsImNvbmZpZ09yUnVuIiwiX2NhbGxlZTExIiwiX2NvbnRleHQxMSIsIl9jYWxsZWUxMCIsIl9jb250ZXh0MTAiLCJzaG93SGVscEFmdGVyRXJyb3IiLCJtb2RlIiwiY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSIsImlzc3VlUmVmZXJlbmNlIiwicHJSZWZlcmVuY2UiLCJwYXJzZUFzeW5jIiwiYXJndiJdLCJtYXBwaW5ncyI6Ijs7O216SEFvQkEsU0FBc0JBLEVBQXNCQyxFQUFBQyxHQUFBLE9BQUFDLEVBQUFDLE1BQUFDLEtBQUFDLFVBQUEsQ0EyQjNDLFNBQUFILElBQUEsT0FBQUEsRUFBQUksRUFBQUMsSUFBQUMsRUEzQk0sU0FBQUMsRUFBc0NDLEVBQW1CQyxHQUEwQixJQUFBQyxFQUFBQyxF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
|
|
4
|
+
var n,e,t="function"==typeof Symbol?Symbol:{},r=t.iterator||"@@iterator",i=t.toStringTag||"@@toStringTag";function a(t,r,i,a){var c=r&&r.prototype instanceof u?r:u,s=Object.create(c.prototype);return j(s,"_invoke",function(t,r,i){var a,u,c,s=0,l=i||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return a=e,u=0,c=n,p.n=t,o}};function d(t,r){for(u=t,c=r,e=0;!f&&s&&!i&&e<l.length;e++){var i,a=l[e],d=p.p,h=a[2];t>3?(i=h===r)&&(c=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=n):a[0]<=d&&((i=t<2&&d<a[1])?(u=0,p.v=r,p.n=a[1]):d<h&&(i=t<3||a[0]>r||r>h)&&(a[4]=t,a[5]=r,p.n=h,u=0))}if(i||t>1)return o;throw f=!0,r}return function(i,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),u=l,c=h;(e=u<2?n:c)||!f;){a||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,a){if(u||(i="next"),e=a[i]){if(!(e=e.call(a,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=a.return)&&e.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+i+"' method"),u=1);a=n}else if((e=(f=p.n<0)?c:t.call(r,p))!==o)break}catch(e){a=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(t,i,a),!0),s}var o={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][r]?e(e([][r]())):(j(e={},r,function(){return this}),e),f=s.prototype=u.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,j(n,i,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,j(f,"constructor",s),j(s,"constructor",c),c.displayName="GeneratorFunction",j(s,i,"GeneratorFunction"),j(f),j(f,i,"Generator"),j(f,r,function(){return this}),j(f,"toString",function(){return"[object Generator]"}),(x=function(){return{w:a,m:p}})()}function j(n,e,t,r){var i=Object.defineProperty;try{i({},"",{})}catch(n){i=0}j=function(n,e,t,r){function a(e,t){j(n,e,function(n){return this._invoke(e,t,n)})}e?i?i(n,e,{value:t,enumerable:!r,configurable:!r,writable:!r}):n[e]=t:(a("next",0),a("throw",1),a("return",2))},j(n,e,t,r)}function S(n){if(null!=n){var e=n["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],t=0;if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length))return{next:function(){return n&&t>=n.length&&(n=void 0),{value:n&&n[t++],done:!n}}}}throw new TypeError(typeof n+" is not iterable")}function I(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var t=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=t){var r,i,a,o,u=[],c=!0,s=!1;try{if(a=(t=t.call(n)).next,0===e){if(Object(t)!==t)return;c=!1}else for(;!(c=(r=a.call(t)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(n){s=!0,i=n}finally{try{if(!c&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(s)throw i}}return u}}(n,e)||R(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function A(n){return function(n){if(Array.isArray(n))return d(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||R(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function O(n){"@babel/helpers - typeof";return O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},O(n)}function R(n,e){if(n){if("string"==typeof n)return d(n,e);var t={}.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?d(n,e):void 0}}function $(n,e){return C.apply(this,arguments)}function C(){return C=g(x().m(function n(e,r){var i,a,o,u,c,s,l,f,p;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r={}),a=t(null!=(i=e[0])?i:"",e.slice(1),{stdio:["ignore","pipe","pipe"]}),o=E(r.waitMessage,r.waitIntervalSeconds),n.n=1,N(r.logFilePath);case 1:return u=n.v,n.p=2,n.n=3,Promise.all([P(a.stdout,function(n){return u.write(n)}),P(a.stderr,function(n){return u.write(n)}),new Promise(function(n,e){a.once("error",e),a.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(c=n.v,s=I(c,3),l=s[0],f=s[1],0!==s[2]){n.n=4;break}return n.a(2,l);case 4:throw p="".concat(l).concat(f),new Error(p||"Command failed: ".concat(e.join(" ")));case 5:return n.p=5,n.n=6,u.close();case 6:return o(),n.f(5);case 7:return n.a(2)}},n,null,[[2,,5,7]])})),C.apply(this,arguments)}function P(n,e){return q.apply(this,arguments)}function q(){return(q=g(x().m(function n(e,t){var r,i,a,o,u,c,s,l,f;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],i=!1,a=!1,n.p=2,u=h(e);case 3:return n.n=4,u.next();case 4:if(!(i=!(c=n.v).done)){n.n=6;break}s=c.value,l="string"==typeof s?s:s.toString("utf8"),r.push(l),null==t||t(l);case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,f=n.v,a=!0,o=f;case 8:if(n.p=8,n.p=9,!i||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!a){n.n=11;break}throw o;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,r.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function E(n,e,t){if(void 0===e&&(e=36),void 0===t&&(t=function(n){return process.stderr.write(n)}),!n)return function(){};var r=0,i=setInterval(function(){t("."),(r+=1)<=100&&r%5==0&&t(" ".concat(r,"% done "))},1e3*e);return t("".concat(n," ").concat("This can take up to 1 hour; dots indicate progress",": ")),function(){clearInterval(i),t("\n")}}function N(n){return L.apply(this,arguments)}function L(){return L=g(x().m(function n(e){var t,r,u;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,{write:function(){},close:function(){var n=g(x().m(function n(){return x().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()});case 1:return t=function(n){process.stderr.write("Warning: Failed to write command log to ".concat(e,": ").concat(String(n),"\n"))},n.p=2,n.n=3,a(o(e),{recursive:!0});case 3:return(r=i(e,{flags:"w"})).on("error",t),n.a(2,{write:function(n){r.writable&&r.write(n)},close:function(){var n=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){r.end(function(){return n()})});case 1:return n.a(2,n.v)}},n)}));return function(){return n.apply(this,arguments)}}()});case 4:return n.p=4,u=n.v,t(u),n.a(2,{write:function(){},close:function(){var n=g(x().m(function n(){return x().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),L.apply(this,arguments)}var T="There is no concern.",_=["codex","claude","gemini"],D=new RegExp("\\b".concat("there is no concern","\\b"),"i");function G(n,e){return U.apply(this,arguments)}function U(){return(U=g(x().m(function n(e,t){var r,i,a;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={allAgentsLabel:"agents"}),n.n=1,e;case 1:return r=n.v,i=E(J(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(_.map(g(x().m(function n(e){var i,a,o,u;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,F(e,r,{waitMessage:!1});case 1:return u=n.v.trim(),n.a(2,null!=(i=null==(a=(o=t).mapOutput)?void 0:a.call(o,e,u))?i:"## ".concat(W(e),"\n\n").concat(u))}},n)}))));case 3:return a=n.v.filter(function(n){return void 0!==n}),n.a(2,a.length>0?a.join("\n\n"):T);case 4:return n.p=4,i(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function F(n,e,t){return M.apply(this,arguments)}function M(){return(M=g(x().m(function n(e,t,r){var i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r={}),i=$,a=H,o=e,n.n=1,t;case 1:return n.a(2,i(a(o,n.v),{logFilePath:B(e),waitMessage:void 0===r.waitMessage?J(W(e)):r.waitMessage}))}},n)}))).apply(this,arguments)}function H(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","exec","--dangerously-bypass-approvals-and-sandbox",e];case"claude":return["claude","--dangerously-skip-permissions","-p",e];case"gemini":return["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--model","gemini-3.1-pro-preview","-p",e]}}function W(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function J(n){return"Waiting for ".concat(n," to finish.")}function B(n){return"logs/".concat(n,"-").concat((e=new Date,t=I([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(Q),5),r=t[0],i=t[1],a=t[2],o=t[3],u=t[4],"".concat(r).concat(i,"-").concat(a).concat(o).concat(u)),".log");var e,t,r,i,a,o,u}function Q(n){return n.toString().padStart(2,"0")}var Y={blockQuote:"literal",lineWidth:0};function z(n){c.write("".concat(n,"\n"))}function K(n,e){void 0===e&&(e=1),c.write("".concat(n,"\n")),process.exit(e)}function Z(){return V.apply(this,arguments)}function V(){return(V=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:if(!u.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,wn(u);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function X(n){return nn.apply(this,arguments)}function nn(){return(nn=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,Z();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:K(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function en(n,e){return tn.apply(this,arguments)}function tn(){return tn=g(x().m(function n(e,r){var i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),a=null!=(i=r.allowedExitCodes)?i:[],o=x().m(function n(){var i,o,u,l,f,p,d,h;return x().w(function(n){for(;;)switch(n.n){case 0:return o=t(null!=(i=e[0])?i:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==r.stdinData?o.stdin.end(r.stdinData):o.stdin.end(),n.n=1,Promise.all([wn(o.stdout),wn(o.stderr),new Promise(function(n,e){o.once("error",e),o.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(u=n.v,l=I(u,3),f=l[0],p=l[1],d=l[2],h="".concat(f).concat(p),0!==d&&!a.includes(d)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(gn(e,d,h)&&c<3)){n.n=4;break}return z("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=3,s(1e3*c);case 3:return n.a(2,0);case 4:K(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(S(o()),2);case 2:if(0!==(u=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!u){n.n=4;break}return n.a(2,u.v);case 4:c+=1,n.n=1;break;case 5:K("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),tn.apply(this,arguments)}function rn(n,e){return an.apply(this,arguments)}function an(){return(an=g(x().m(function n(e,t){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,en(["gh"].concat(A(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function on(n,e,t){return un.apply(this,arguments)}function un(){return(un=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,en(["gh"].concat(A(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function cn(){return sn.apply(this,arguments)}function sn(){return(sn=g(x().m(function n(){var e,t,r,i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),t=e.split("/",2),r=I(t,2),i=r[0],a=r[1],i&&a||K("Error: could not determine current repository"),n.a(2,[i,a])}},n)}))).apply(this,arguments)}function ln(){return fn.apply(this,arguments)}function fn(){return(fn=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function pn(n,e){return dn.apply(this,arguments)}function dn(){return(dn=g(x().m(function n(e,t){var r,i,a,o,u,c,s,l,f;return x().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),r=["api","graphql","-F","query=@-"],i=0,a=Object.entries(t);case 1:if(!(i<a.length)){n.n=4;break}if(o=I(a[i],2),u=o[0],void 0!==(c=o[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:r.push("-F","".concat(u,"=").concat(c));case 3:i++,n.n=1;break;case 4:return f=JSON,n.n=5,rn(r,e);case 5:if(s=f.parse.call(f,n.v),Array.isArray(s.errors)){n.n=6;break}return n.a(2,s);case 6:l=s.errors.map(function(n){var e;return null!=(e=n.message)?e:"Unknown GraphQL error"}).join("\n"),K("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function hn(n){return f(n,Y)}function mn(n){return JSON.parse(JSON.stringify(n))}function vn(n,e){var t,i,a,o,u=r(null!=(t=n[0])?t:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(i=u.status)?i:u.error?1:0,output:"".concat(null!=(a=u.stdout)?a:"").concat(null!=(o=u.stderr)?o:"")}}function gn(n,e,t){return"gh"===n[0]&&0!==e&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(t)}function wn(n){return yn.apply(this,arguments)}function yn(){return(yn=g(x().m(function n(e){var t,r,i,a,o,u,c,s,l;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:t=[],r=new TextDecoder,i=!1,a=!1,n.p=2,u=h(e);case 3:return n.n=4,u.next();case 4:if(!(i=!(c=n.v).done)){n.n=6;break}s=c.value,t.push("string"==typeof s?s:r.decode(new Uint8Array(s),{stream:!0}));case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,a=!0,o=l;case 8:if(n.p=8,n.p=9,!i||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!a){n.n=11;break}throw o;case 11:return n.f(10);case 12:return n.f(8);case 13:return t.push(r.decode()),n.a(2,t.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}var bn=/\btest\b/i,kn=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],xn=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/,jn=0===vn(["rtk","--version"]).exitCode;function Sn(n){return In.apply(this,arguments)}function In(){return(In=g(x().m(function n(e){var t,r,i,a,o,u,c,s,l,f;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return u=["pr","checks"],e&&u.push(e),u.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),c=[],n.p=1,n.n=2,on(u,[8]);case 2:s=n.v,c=s.trim().length>0?JSON.parse(s):[],n.n=5;break;case 3:if(n.p=3,!((f=n.v)instanceof SyntaxError)){n.n=4;break}c=[],n.n=5;break;case 4:throw f;case 5:return l=c.reduce(function(n,e){var t,r,i=null!=(t=e.bucket)?t:"";return n[i]=(null!=(r=n[i])?r:0)+1,n},{}),n.a(2,{summary:{total:c.length,pass:null!=(t=l.pass)?t:0,fail:null!=(r=l.fail)?r:0,pending:null!=(i=l.pending)?i:0,skipping:null!=(a=l.skipping)?a:0,cancel:null!=(o=l.cancel)?o:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function An(n,e,t,r){return On.apply(this,arguments)}function On(){return(On=g(x().m(function n(e,t,r,i){var a,o,u,s,l,f,p,d;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=Tn),void 0===r&&(r=Sn),void 0===i&&(i=function(n){return c.write(n)}),a=0,n.n=1,r(e);case 1:o=n.v,u=function(){},n.p=2;case 3:if(s=Rn(o),l=$n(s),f=I(l,2),p=f[0],d=f[1],!(Object.keys(p).length>0||0===Object.keys(d).length)){n.n=4;break}return n.a(2,[o,a,!1]);case 4:if(!(a>=100)){n.n=5;break}return n.a(2,[o,a,!0]);case 5:return 1===(a+=1)&&(u=E("Waiting for test-related workflows to finish.",36,i)),n.n=6,t(36);case 6:return n.n=7,r(e);case 7:o=n.v;case 8:n.n=3;break;case 9:return n.p=9,u(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function Rn(n){var e=n.checks.reduce(function(n,e){var t=e.workflow||e.name||"unknown_workflow";return null!=n[t]||(n[t]=[]),n[t].push(e),n},{});return Object.fromEntries(Object.entries(e).map(function(n){var e,t=I(n,2),r=t[0],i=function(n){var e=n.reduce(function(n,e){var t=function(n){var e=Cn(n);return e?"run:".concat(e):"unknown_run"}(e),r=n.get(t);return r?(r.push(e),n):(n.set(t,[e]),n)},new Map);return Array.from(e.values()).reduce(function(n,e){return 0===n.length||Un(e)>Un(n)?e:n},[])}(t[1]),a=i[0];a||K("Error: no checks found for workflow ".concat(r));var o=null!=(e=i.reduce(function(n,e){return n?Nn(e)>Nn(n)?e:n:e},void 0))?e:a;return[r,{classification:En(i),check:o,checks:i}]}))}function $n(n){for(var e={},t={},r=0,i=Object.entries(n);r<i.length;r++){var a=I(i[r],2),o=a[0],u=a[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Ln(n)})&&(t[o]=u):e[o]=u}return[e,t]}function Cn(n){var e,t=null==n?void 0:n.link;if(t)return null==(e=t.match(/\/actions\/runs\/(\d+)/))?void 0:e[1]}function Pn(n){return qn.apply(this,arguments)}function qn(){return(qn=g(x().m(function n(e){var t,r;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,on(["run","view",e,"--json",kn.join(",")],[1]);case 2:if(0!==(t=n.v).trim().length){n.n=3;break}return n.a(2,void 0);case 3:return n.p=3,n.a(2,JSON.parse(t));case 4:if(n.p=4,!((r=n.v)instanceof SyntaxError)){n.n=5;break}return c.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(r.message,"\n")),n.a(2,void 0);case 5:throw r;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function En(n){var e=n.map(function(n){var e;return null!=(e=n.bucket)?e:""});return e.some(function(n){return!["pass","skipping","pending"].includes(n)})?"failed":e.includes("pending")?"running":"successful"}function Nn(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function Ln(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&bn.test(n)})}function Tn(n){return _n.apply(this,arguments)}function _n(){return(_n=g(x().m(function n(e){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,s(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Dn(){return Gn.apply(this,arguments)}function Gn(){return(Gn=g(x().m(function n(){var e,t,r,i,a,o,u,c,s,l,f,p;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:return e=n.v,z("Fetching latest CI results..."),n.n=2,An(e);case 2:if(t=n.v,r=I(t,3),i=r[0],a=r[1],o=r[2],u=Rn(i),c=$n(u),s=I(c,2),l=s[0],f=s[1],p={summary:mn(i.summary),waited_for_test_related_checks:a>0,test_related_check_wait_attempts:a,test_related_check_wait_timed_out:o},!(Object.keys(l).length>0)){n.n=4;break}return n.n=3,Promise.all(Object.entries(l).map(g(x().m(function n(e){var t,r,i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:return t=I(e,2),r=t[0],i=t[1],n.n=1,Fn(r,i);case 1:return a=n.v,o=k,u=k({},a),c=Jn,n.n=2,Hn(i.check);case 2:return n.a(2,o(u,c(n.v)))}},n)}))));case 3:return p.failed_workflows=n.v,n.a(2,{output:hn(p),exitCode:1});case 4:if(!(Object.keys(f).length>0)){n.n=6;break}return p.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=5,Promise.all(Object.entries(f).map(function(n){var e=I(n,2);return Fn(e[0],e[1])}));case 5:return p.running_test_related_workflows=n.v,n.a(2,{output:hn(p),exitCode:1});case 6:return n.a(2,{output:"All CI workflows passed.\n",exitCode:0})}},n)}))).apply(this,arguments)}function Un(n){return n.reduce(function(n,e){var t=Nn(e);return t>n?t:n},"")}function Fn(n,e){return Mn.apply(this,arguments)}function Mn(){return(Mn=g(x().m(function n(e,t){var r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return i=Cn(t.check),n.n=1,Pn(i);case 1:return a=n.v,o=zn(a,Yn(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:Yn(t.check.name),job_url:Yn(null==o?void 0:o.url),failed_step:Kn(o),run_id:i,run_url:null!=(r=Yn(null==a?void 0:a.url))?r:Yn(t.check.link),branch:Yn(null==a?void 0:a.headBranch),sha:Yn(null==a?void 0:a.headSha),conclusion:Yn(null==a?void 0:a.conclusion)})}},n)}))).apply(this,arguments)}function Hn(n){return Wn.apply(this,arguments)}function Wn(){return(Wn=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:if(t=Cn(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,on(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Jn(n){return{failed_log:Bn(n)}}function Bn(n){var e=Qn(l(n));if(!jn)return e;var t=vn(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?Qn(t.output):e}function Qn(n){return n.split("\n").map(function(n){return n.replace(xn,"")}).join("\n").trim()}function Yn(n){return"string"==typeof n&&n.length>0?n:void 0}function zn(n,e){var t,r;if(null!=n&&n.jobs&&0!==n.jobs.length)return null!=(t=null!=(r=n.jobs.find(function(n){return n.name===e}))?r:n.jobs.find(function(n){return"failure"===n.conclusion}))?t:n.jobs.find(function(n){return"completed"!==n.status})}function Kn(n){var e,t,r;if(null!=n&&n.steps&&0!==n.steps.length)return null!=(e=null==(t=n.steps.find(function(n){return"failure"===n.conclusion}))?void 0:t.name)?e:null==(r=n.steps.find(function(n){return"completed"!==n.status}))?void 0:r.name}function Zn(){return Vn.apply(this,arguments)}function Vn(){return(Vn=g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,Xn();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function Xn(){return ne.apply(this,arguments)}function ne(){return(ne=g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return e=ie,n.n=1,$(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return n.a(2,e(n.v.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function ee(){return te.apply(this,arguments)}function te(){return(te=g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,$(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v.trim(),n.a(2,e.length>0?e:void 0);case 2:if(n.p=2,!re(t=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw t;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function re(n){return/no pull requests? found for branch/i.test(String(n))}function ie(n,e){if(n.length>0)return n;throw new Error(e)}function ae(n){return me(n,"issue")}function oe(n){return me(n,"pull request")}function ue(n){return ce.apply(this,arguments)}function ce(){return(ce=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn();case 1:return t=n.v,r=I(t,2),i=r[0],a=r[1],n.n=2,ve(i,a,ae(e));case 2:return o=n.v,z("Fetched issue #".concat(o.number," messages.")),n.a(2,hn({issue:o}))}},n)}))).apply(this,arguments)}function se(n){return le.apply(this,arguments)}function le(){return(le=g(x().m(function n(e){var t,r,i;return x().w(function(n){for(;;)switch(n.n){case 0:if(void 0!==e){n.n=2;break}return n.n=1,ln();case 1:i=n.v,n.n=3;break;case 2:i=oe(e);case 3:return t=i,n.n=4,de(t);case 4:return r=n.v,z("Fetched pull request #".concat(r.number," messages.")),n.a(2,hn({pull_request:r}))}},n)}))).apply(this,arguments)}function fe(){return pe.apply(this,arguments)}function pe(){return(pe=g(x().m(function n(){var e,t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!re(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,de(t);case 3:return r=n.v,n.a(2,hn({pull_request:r}))}},n)}))).apply(this,arguments)}function de(n){return he.apply(this,arguments)}function he(){return(he=g(x().m(function n(e){var t,r,i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn();case 1:return t=n.v,r=I(t,2),i=r[0],a=r[1],n.n=2,we(i,a,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function me(n,e){var t=String(n).trim();if(0===t.length&&K("Error: ".concat(e," reference is required"),2),/^\d+$/.test(t))return t;var r="issue"===e?"issues":"pull",i=t.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(r,"/(\\d+)(?:/|$)")));if(null!=i&&i[1])return i[1];K("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function ve(n,e,t){return ge.apply(this,arguments)}function ge(){return(ge=g(x().m(function n(e,t,r){var i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Oe({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"issue",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.issue}});case 1:return i=n.v,n.n=2,Ie({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.issue)?void 0:e.comments},mapNode:$e});case 2:return a=n.v,n.a(2,k(k({},i),{},{messages:a}))}},n)}))).apply(this,arguments)}function we(n,e,t){return ye.apply(this,arguments)}function ye(){return(ye=g(x().m(function n(e,t,r){var i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Oe({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"pull request",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.pullRequest}});case 1:return i=n.v,n.n=2,Promise.all([ke(e,t,r),je(e,t,r)]);case 2:return a=n.v,o=I(a,2),u=o[0],c=o[1],n.a(2,k(k({},i),{},{messages:[].concat(A(u),A(c)).sort(be)}))}},n)}))).apply(this,arguments)}function be(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function ke(n,e,t){return xe.apply(this,arguments)}function xe(){return(xe=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ie({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.comments},mapNode:$e});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function je(n,e,t){return Se.apply(this,arguments)}function Se(){return(Se=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ie({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviews(first: 100, after: $cursor) {\n nodes {\n id\n body\n state\n submittedAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.reviews},mapNode:Ce});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Ie(n){return Ae.apply(this,arguments)}function Ae(){return(Ae=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:r=[];case 1:return o=e,n.n=2,pn(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:t});case 2:if(a=o.selectConnection.call(o,n.v)){n.n=3;break}return n.a(2,r);case 3:if(r.push.apply(r,A(a.nodes.map(e.mapNode).filter(Pe))),a.pageInfo.hasNextPage){n.n=4;break}return n.a(2,r);case 4:t=null!=(i=a.pageInfo.endCursor)?i:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Oe(n){return Re.apply(this,arguments)}function Re(){return(Re=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return o=e,n.n=1,pn(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(a=o.selectMetadata.call(o,n.v))||K("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:a.number,title:a.title,url:a.url,author:null!=(t=null==(r=a.author)?void 0:r.login)?t:void 0,body:null!=(i=a.body)?i:""})}},n)}))).apply(this,arguments)}function $e(n){var e,t;return{type:"comment",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,createdAt:n.createdAt,url:n.url,body:n.body}}function Ce(n){var e,t,r,i,a;return{type:"review",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,state:null!=(r=n.state)?r:void 0,createdAt:null!=(i=n.submittedAt)?i:void 0,url:n.url,body:null!=(a=n.body)?a:""}}function Pe(n){return"string"==typeof n.body&&n.body.length>0}function qe(n){return Ee.apply(this,arguments)}function Ee(){return(Ee=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,en(["git","branch","--show-current"]);case 1:return t=n.v.trim(),n.n=2,rn(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return r=n.v.trim(),t||K("Error: could not determine current branch"),r||K("Error: could not determine default branch"),t===r&&K("Error: current branch is the default branch (".concat(r,")")),i=["pr","create","--base",r,"--head",t,"--fill"],e&&e.length>0&&i.push("--body-file","-"),z("Creating pull request..."),n.n=3,rn(i,e);case 3:return a=hn,o=JSON,n.n=4,rn(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,a(o.parse.call(o,n.v)))}},n)}))).apply(this,arguments)}function Ne(n){return Le.apply(this,arguments)}function Le(){return(Le=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:return t=n.v,z("Updating pull request #".concat(t," body...")),n.n=2,De(t,["--body-file","-"],e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Te(n){return _e.apply(this,arguments)}function _e(){return(_e=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:return t=n.v,z("Updating pull request #".concat(t," title...")),n.n=2,De(t,["--title",e]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function De(n,e,t){return Ge.apply(this,arguments)}function Ge(){return(Ge=g(x().m(function n(e,t,r){var i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn(["pr","edit",e].concat(A(t)),r);case 1:return i=hn,a=JSON,n.n=2,rn(["pr","view",e,"--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author,body"]);case 2:return n.a(2,i(a.parse.call(a,n.v)))}},n)}))).apply(this,arguments)}function Ue(){return Fe.apply(this,arguments)}function Fe(){return(Fe=g(x().m(function n(){var e,t,r,i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,X("Error: JSON input is required on stdin");case 1:for(e=n.v,t=Xe(e),r={},i=0,a=Object.entries(t.replies);i<a.length;i++)o=I(a[i],2),u=o[0],"string"==typeof(c=o[1])&&c.length>0&&(r[u]=c);return n.a(2,r)}},n)}))).apply(this,arguments)}function Me(n,e,t,r,i){return He.apply(this,arguments)}function He(){return(He=g(x().m(function n(e,t,r,i,a){var o,u,c,s,l,f,p,d,h,m,v,g;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,pn(e,{owner:t,name:r,number:Number(i),cursor:o});case 1:if(m=u=n.v.data,h=null==m){n.n=2;break}h=null==(u=u.repository);case 2:if(d=h){n.n=3;break}d=null==(u=u.pullRequest);case 3:if(!d){n.n=4;break}v=void 0,n.n=5;break;case 4:v=u.reviewThreads;case 5:(s=v)||K("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=w(s.nodes),n.p=6,l.s();case 7:if((f=l.n()).done){n.n=9;break}return p=f.value,n.n=8,a(p);case 8:n.n=7;break;case 9:n.n=11;break;case 10:n.p=10,g=n.v,l.e(g);case 11:return n.p=11,l.f(),n.f(11);case 12:if(s.pageInfo.hasNextPage){n.n=13;break}return n.a(2);case 13:o=null!=(c=s.pageInfo.endCursor)?c:void 0;case 14:n.n=0;break;case 15:return n.a(2)}},n,null,[[6,10,11,12]])}))).apply(this,arguments)}function We(n,e,t){return Je.apply(this,arguments)}function Je(){return(Je=g(x().m(function n(e,t,r){var i;return x().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,Me("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,function(n){n.isResolved||i.push(n.id)});case 1:return n.a(2,i)}},n)}))).apply(this,arguments)}function Be(n,e,t){return Qe.apply(this,arguments)}function Qe(){return(Qe=g(x().m(function n(e,t,r){var i;return x().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,Me("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n isOutdated\n path\n line\n originalLine\n startLine\n originalStartLine\n comments(first: 100) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,g(x().m(function n(e){var t,r,a,o,u,c,s,l,f,p;return x().w(function(n){for(;;)switch(n.n){case 0:if(!e.isResolved){n.n=1;break}return n.a(2);case 1:r=e.comments.nodes.map(Ve),a=e.comments.pageInfo,o=null!=(t=a.endCursor)?t:void 0;case 2:if(!a.hasNextPage){n.n=7;break}return n.n=3,pn("\n query($threadId: ID!, $cursor: String) {\n node(id: $threadId) {\n ... on PullRequestReviewThread {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:e.id,cursor:o});case 3:if(f=u=n.v.data,l=null==f){n.n=4;break}l=null==(u=u.node);case 4:if(!l){n.n=5;break}p=void 0,n.n=6;break;case 5:p=u.comments;case 6:(s=p)||K("Could not find comments in GraphQL response for thread ".concat(e.id,".")),r.push.apply(r,A(s.nodes.map(Ve))),a=s.pageInfo,o=null!=(c=a.endCursor)?c:void 0,n.n=2;break;case 7:i.push({id:e.id,isResolved:e.isResolved,isOutdated:e.isOutdated,path:e.path,line:e.line,originalLine:e.originalLine,startLine:e.startLine,originalStartLine:e.originalStartLine,comments:r});case 8:return n.a(2)}},n)})));case 1:return n.a(2,i)}},n)}))).apply(this,arguments)}function Ye(){return ze.apply(this,arguments)}function ze(){return(ze=g(x().m(function n(){var e,t,r,i,a,o,u;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn();case 1:return e=n.v,t=I(e,2),r=t[0],i=t[1],n.n=2,ln();case 2:return a=n.v,z("Fetching unresolved review threads..."),o=hn,n.n=3,Be(r,i,a);case 3:return u=n.v,n.a(2,o({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Ke(n){return Ze.apply(this,arguments)}function Ze(){return(Ze=g(x().m(function n(e){var t,r,i,a,o,u,c,s,l,f,p,d,h,m,v,g,y,b,k,j;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,cn();case 1:return t=n.v,r=I(t,2),i=r[0],a=r[1],n.n=2,ln();case 2:return o=n.v,b=Set,n.n=3,We(i,a,o);case 3:k=n.v,u=new b(k),z("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=w(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(d=I(f.value,2),h=d[0],m=I(d[1],2),v=m[0],g=m[1],z("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),u.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,pn("\n mutation($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: {threadId: $threadId}) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:v,body:g});case 7:y=n.v,null!=(p=y.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?c.push(v):z("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,j=n.v,l.e(j);case 11:return n.p=11,l.f(),n.f(11);case 12:return z("Done."),n.a(2,hn({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function Ve(n){var e,t;return k(k({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(t=n.author)?void 0:t.login)?e:null})}function Xe(n){try{var e=JSON.parse(n);return function(n){if("object"!==O(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==O(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||K("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&K("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function nt(n){return et.apply(this,arguments)}function et(){return(et=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ue(e);case 1:return t=n.v,n.a(2,"\nPlan a GitHub issue by gathering context, writing a specification for software engineers, and posting or updating that specification back to the issue.\nThe target issue number is #".concat(e,". Here is the fetched issue context as YAML:\n~~~~yaml\n").concat(t.trim(),"\n~~~~\n\nFollow this workflow:\n1. Read the above issue body and timeline messages carefully.\n2. Collect enough supporting information before writing the specification:\n - Inspect the relevant code, surrounding call sites, related types, tests, configuration, recent diffs, and any other local context needed to understand the change.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the issue depends on runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - Clean up any temporary files after the experiment.\n - If the issue depends on a library, API, or language feature, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Write the specification for the issue comment.\n - Write the background based on the collected information.\n - Define a goal that clearly guides our implementation in the right direction.\n - Write a detailed specification incorporating the evidence you collected.\n - If needed, include code snippets that explain how to use libraries or APIs, along with references to their documentation.\n4. Post the specification back to issue #").concat(e,", then print the issue URL.\n - If the issue already has a specification, update the existing comment instead of posting a new one.\n\nFormat the issue comment exactly like this, but do not include the surrounding `~~~~` fences in the actual comment:\n~~~~\n## Background\n\n[Summarize the current behavior and explain the motivation behind this issue]\n\n## Goal\n\n[Define the goal we want to achieve in this issue]\n\n## Specification\n\n[Detailed specification for software engineers]\n\n## Key Technologies (ONLY if external resources are needed)\n\n[Describe what libraries or APIs we should use, including concrete versions and code snippets.]\n\n~~~~\n").trim())}},n)}))).apply(this,arguments)}function tt(n){return"git merge-base ".concat(rt("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(rt(n)," HEAD")}function rt(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function it(){return at.apply(this,arguments)}function at(){return(at=g(x().m(function n(){var e,t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Zn();case 1:return e=n.v,t=tt(e),n.n=2,fe();case 2:return r=n.v,n.a(2,"\nReview the current ".concat(r?"pull request":"branch"," against its base branch ").concat(e,' via `git diff "$(').concat(t,')"`.\nFor each finding, do the following three steps:\n1. Gather supporting evidence:\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the finding is about runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - Clean up any temporary files after the experiment.\n - If the finding depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n2. Judge whether the finding is valid:\n - Mark it valid only when the available evidence shows the reported issue is still real in the current codebase.\n - Otherwise, mark it not valid.\n3. Propose a fix without modifying the code:\n - Describe the smallest practical change that would address the finding.\n - Investigate the likely impact of that change by inspecting the affected call sites, related types, tests, configuration, and adjacent behavior, and note any follow-up changes or risks the fix would need to account for.\n\nReport only the valid findings, the evidence for each one, and the proposed fix with its likely impact. Include a brief justification for each, citing the evidence used (e.g., a failing scenario, experiment result, or official documentation). Do not modify the code.\nIf there are no valid findings, respond exactly with: `').concat(T,"`\n\n").concat(ot(r),"\n").trim())}},n)}))).apply(this,arguments)}function ot(n){return n?"Current pull request context:\n~~~~yaml\n".concat(n.trim(),"\n~~~~\n").trim():""}function ut(n,e,t){var r=t.replaceAll("\n"," ").replaceAll('"',"'");return'\nUse `playwright-cli` skill to take a screenshot of "'.concat(r,'" by navigating from ').concat(n,' to "').concat(e,'" page.\n\nFollow this workflow:\n1. Open the initial page at ').concat(n,".\n2. Navigate from that initial page until you reach the page identified as ").concat(e,'.\n - If code errors, runtime failures, or broken UI flows prevent navigation, investigate the cause in the local codebase, make the smallest practical code fix, and verify that the page can now be reached before continuing.\n - If you cannot fix the errors, report on the errors then stop.\n3. Capture a screenshot that focuses on this target: "').concat(r,'".\n4. Keep the generated image artifact and report the screenshot file path plus a brief description of what was captured. If you had to fix code first, also summarize the fix.\n').trim()}function ct(){return st.apply(this,arguments)}function st(){return(st=g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Zn();case 1:return e=n.v,t=tt(e),n.a(2,'\nSimplify the current branch against its base branch using `git diff "$('.concat(t,")\"`.\nFirst, inspect the diff and review the surrounding code for each changed area. This includes nearby functions, types, call sites, tests, configurations, and any other files that help determine if the change is truly necessary.\nLeverage this context to identify redundancies that can be safely removed or simplified. Look for duplicate logic, repeated conditionals, unnecessary abstractions, overlapping code paths, dead code, or edits made obsolete upon understanding the broader context.\n\nPrioritize simplifications that reduce the reviewer's burden, such as:\n- Removing redundant edits or dead code.\n- Eliminating or merging duplicated logic discovered by comparing the diff with related code.\n- Flattening unnecessarily complex logic introduced in the diff (e.g., using early returns to reduce nesting, simplifying boolean expressions, or removing redundant wrapper functions).\n\nCommit and push your changes. Afterward, summarize the redundancies or unnecessary complexity you have removed.\n").trim())}},n)}))).apply(this,arguments)}function lt(){return ft.apply(this,arguments)}function ft(){return(ft=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,$(["bunx","skills@latest","add",p(new URL("../..",import.meta.url)),"--global","--yes","--skill","*","--agent","claude-code","--agent","codex","--agent","gemini-cli"],{waitMessage:"Installing packaged skills globally."});case 1:return n.a(2)}},n)}))).apply(this,arguments)}var pt=new n;function dt(n){var t=pt.command(n.name).description(n.description).allowExcessArguments(!1);n.argumentName&&t.argument(n.argumentName,n.argumentDescription),t.addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).action(g(x().m(function e(){var t,r,i,a,o,u,c,s,l,f=arguments;return x().w(function(e){for(;;)switch(e.n){case 0:for(t=f.length,r=new Array(t),i=0;i<t;i++)r[i]=f[i];return a=I(r,2),o=a[0],u=a[1],c="string"==typeof o?o:"",s="string"==typeof o?u:o,l=process.stdout,e.n=1,n.run(s.agent,c);case 1:l.write.call(l,e.v);case 2:return e.a(2)}},e)})))}function ht(n,e,t){var r=pt.command(n).description(e).allowExcessArguments(!1);"function"!=typeof t?r.argument(t.argumentName,t.argumentDescription).action(g(x().m(function n(e){var r;return x().w(function(n){for(;;)switch(n.n){case 0:return r=process.stdout,n.n=1,t.run(e);case 1:r.write.call(r,n.v);case 2:return n.a(2)}},n)}))):r.action(g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return e=process.stdout,n.n=1,t();case 1:e.write.call(e,n.v);case 2:return n.a(2)}},n)})))}pt.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),pt.command("install-skills").description("Install all packaged skills globally for Claude Code, Codex, and Gemini CLI").allowExcessArguments(!1).action(g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,lt();case 1:process.stdout.write("Done\n");case 2:return n.a(2)}},n)}))),dt({name:"review",description:"Run review against the current branch with the selected agent",optionDescription:"Use a review agent",choices:["all","codex","claude","gemini"],run:function(n){return"all"===n?G(it(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return D.test(n)}(e))return"## ".concat(W(n),"\n\n").concat(e)}}):F(n,it())}}),ht("review-codex","Run Codex review against the current branch",function(){return F("codex",it())}),ht("review-claude","Run Claude Code review against the current branch",function(){return F("claude",it())}),ht("review-gemini","Run Gemini CLI review against the current branch",function(){return F("gemini",it())}),dt({name:"plan",description:"Run planning against the specified issue with the selected agent",optionDescription:"Use a planning agent",choices:["all","codex","claude","gemini"],argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return"all"===n?G(nt(ae(e)),{allAgentsLabel:"planning agents"}):F(n,nt(ae(e)))}}),ht("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return F("codex",nt(ae(n)))}}),ht("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return F("claude",nt(ae(n)))}}),ht("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return F("gemini",nt(ae(n)))}}),pt.command("screenshot").description("Take a screenshot with the selected agent via playwright-cli").argument("<initial-url>","Initial URL to open before navigating").argument("<page-name>","Page name to navigate to from the initial page").argument("<description>","Description of the part to capture in the screenshot").addOption(new e("--agent <agent>","Use a screenshot agent").choices(["codex","claude","gemini"]).makeOptionMandatory()).allowExcessArguments(!1).action(g(x().m(function n(e,t,r,i){var a;return x().w(function(n){for(;;)switch(n.n){case 0:return a=process.stdout,n.n=1,F(i.agent,ut(e,t,r));case 1:a.write.call(a,n.v);case 2:return n.a(2)}},n)}))),dt({name:"simplify",description:"Run PR simplification against the current branch with the selected agent",optionDescription:"Use a simplify agent",choices:["codex","claude","gemini"],run:function(n){return F(n,ct())}}),ht("simplify-codex","Run Codex PR simplification against the current branch",function(){return F("codex",ct())}),ht("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return F("claude",ct())}),ht("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return F("gemini",ct())}),pt.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Z();case 1:return e=n.v,n.n=2,qe(e||void 0);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),pt.command("update-pr-body").description("Update the current pull request body").allowExcessArguments(!1).action(g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,X("Error: PR body input is required on stdin");case 1:return e=n.v,n.n=2,Ne(e);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),pt.command("update-pr-title").description("Update the current pull request title").allowExcessArguments(!1).action(g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,X("Error: PR title input is required on stdin");case 1:return e=n.v,n.n=2,Te(e);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),pt.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Dn();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),pt.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ue(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),pt.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr]","GitHub pull request number or URL; defaults to the current branch pull request").allowExcessArguments(!1).action(g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,se(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),pt.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ye();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),pt.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ue();case 1:return e=n.v,n.n=2,Ke(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await pt.parseAsync(process.argv);
|
|
5
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3NoYXJlZC50cyIsIi4uL3NyYy9wci9jaS50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMvcHIvbWVzc2FnZXMudHMiLCIuLi9zcmMvcHIvcHVsbFJlcXVlc3QudHMiLCIuLi9zcmMvcHIvcmV2aWV3VGhyZWFkcy50cyIsIi4uL3NyYy9wcm9tcHRzL3BsYW5Qcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9iYXNlQnJhbmNoRGlmZkNvbW1hbmQudHMiLCIuLi9zcmMvcHJvbXB0cy9yZXZpZXdQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvc2tpbGxzL2luc3RhbGxTa2lsbHMudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbnR5cGUgUnVuQ29tbWFuZE9wdGlvbnMgPSB7XG4gIGxvZ0ZpbGVQYXRoPzogc3RyaW5nO1xuICB3YWl0TWVzc2FnZT86IHN0cmluZyB8IGZhbHNlO1xuICB3YWl0SW50ZXJ2YWxTZWNvbmRzPzogbnVtYmVyO1xufTtcblxudHlwZSBQcm9ncmVzc1dyaXRlciA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbi8vIFRoZSBvbmUtaG91ciBidWRnZXQga2VlcHMgYWdlbnRzIHdhaXRpbmcgZm9yIGxvbmctcnVubmluZyBjb21tYW5kcyB3aXRob3V0IHJlcXVpcmluZyB0aGUgcHJvY2VzcyB0byB1c2UgdGhlIGZ1bGwgaG91ci5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyA9IDM2O1xuY29uc3QgRE9UU19QRVJfUFJPR1JFU1NfUEVSQ0VOVF9TVEVQID0gNTtcbmNvbnN0IE1BWF9QUk9HUkVTU19QRVJDRU5UID0gMTAwO1xuLy8gS2VlcCB0aGUgQ0xJIHRleHQgY29uY2lzZSBzbyBkb3duc3RyZWFtIHByb21wdHMgY2FuIG1hdGNoIGl0IGNvbnNpc3RlbnRseS5cbmV4cG9ydCBjb25zdCBXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkcgPSAnVGhpcyBjYW4gdGFrZSB1cCB0byAxIGhvdXI7IGRvdHMgaW5kaWNhdGUgcHJvZ3Jlc3MnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhjb21tYW5kOiBzdHJpbmdbXSwgb3B0aW9uczogUnVuQ29tbWFuZE9wdGlvbnMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgc3RkaW86IFsnaWdub3JlJywgJ3BpcGUnLCAncGlwZSddLFxuICB9KTtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyhvcHRpb25zLndhaXRNZXNzYWdlLCBvcHRpb25zLndhaXRJbnRlcnZhbFNlY29uZHMpO1xuICBjb25zdCBjb21tYW5kTG9nZ2VyID0gYXdhaXQgY3JlYXRlQ29tbWFuZExvZ2dlcihvcHRpb25zLmxvZ0ZpbGVQYXRoKTtcblxuICB0cnkge1xuICAgIGNvbnN0IFtzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3Rkb3V0LCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZGVyciwgKGNodW5rKSA9PiBjb21tYW5kTG9nZ2VyLndyaXRlKGNodW5rKSksXG4gICAgICBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcHJvYy5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDEpKTtcbiAgICAgIH0pLFxuICAgIF0pO1xuXG4gICAgaWYgKGV4aXRDb2RlID09PSAwKSB7XG4gICAgICByZXR1cm4gc3Rkb3V0O1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IGAke3N0ZG91dH0ke3N0ZGVycn1gO1xuICAgIHRocm93IG5ldyBFcnJvcihvdXRwdXQgfHwgYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmQuam9pbignICcpfWApO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGNvbW1hbmRMb2dnZXIuY2xvc2UoKTtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9UZXh0KFxuICBzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG9uQ2h1bms/OiAoY2h1bms6IHN0cmluZykgPT4gdm9pZFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IHN0cmluZ1tdID0gW107XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY29uc3QgY2h1bmtUZXh0ID0gdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogY2h1bmsudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgICBjaHVua3MucHVzaChjaHVua1RleHQpO1xuICAgIG9uQ2h1bms/LihjaHVua1RleHQpO1xuICB9XG4gIHJldHVybiBjaHVua3Muam9pbignJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXYWl0UHJvZ3Jlc3MoXG4gIHdhaXRNZXNzYWdlOiBzdHJpbmcgfCBmYWxzZSB8IHVuZGVmaW5lZCxcbiAgd2FpdEludGVydmFsU2Vjb25kcyA9IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTLFxuICB3cml0ZVByb2dyZXNzOiBQcm9ncmVzc1dyaXRlciA9IChtZXNzYWdlKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShtZXNzYWdlKVxuKTogKCkgPT4gdm9pZCB7XG4gIGlmICghd2FpdE1lc3NhZ2UpIHtcbiAgICByZXR1cm4gKCkgPT4ge307XG4gIH1cblxuICBsZXQgZG90Q291bnQgPSAwO1xuICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICB3cml0ZVByb2dyZXNzKCcuJyk7XG4gICAgZG90Q291bnQgKz0gMTtcbiAgICBpZiAoZG90Q291bnQgPD0gTUFYX1BST0dSRVNTX1BFUkNFTlQgJiYgZG90Q291bnQgJSBET1RTX1BFUl9QUk9HUkVTU19QRVJDRU5UX1NURVAgPT09IDApIHtcbiAgICAgIC8vIFRoaXMgdHJhY2tzIGVsYXBzZWQgd2FpdCBidWRnZXQsIG5vdCB0aGUgY2hpbGQgcHJvY2VzcyBjb21wbGV0aW9uIHBlcmNlbnRhZ2UuXG4gICAgICB3cml0ZVByb2dyZXNzKGAgJHtkb3RDb3VudH0lIGRvbmUgYCk7XG4gICAgfVxuICB9LCB3YWl0SW50ZXJ2YWxTZWNvbmRzICogMTAwMCk7XG5cbiAgd3JpdGVQcm9ncmVzcyhgJHt3YWl0TWVzc2FnZX0gJHtXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkd9OiBgKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgIHdyaXRlUHJvZ3Jlc3MoJ1xcbicpO1xuICB9O1xufVxuXG50eXBlIENvbW1hbmRMb2dnZXIgPSB7XG4gIHdyaXRlOiAoY2h1bms6IHN0cmluZykgPT4gdm9pZDtcbiAgY2xvc2U6ICgpID0+IFByb21pc2U8dm9pZD47XG59O1xuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDb21tYW5kTG9nZ2VyKGxvZ0ZpbGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPENvbW1hbmRMb2dnZXI+IHtcbiAgaWYgKCFsb2dGaWxlUGF0aCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKCkgPT4ge30sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge30sXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHdhcm4gPSAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShgV2FybmluZzogRmFpbGVkIHRvIHdyaXRlIGNvbW1hbmQgbG9nIHRvICR7bG9nRmlsZVBhdGh9OiAke1N0cmluZyhlcnJvcil9XFxuYCk7XG4gIH07XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBta2RpcihkaXJuYW1lKGxvZ0ZpbGVQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgY29uc3Qgc3RyZWFtID0gY3JlYXRlV3JpdGVTdHJlYW0obG9nRmlsZVBhdGgsIHsgZmxhZ3M6ICd3JyB9KTtcblxuICAgIHN0cmVhbS5vbignZXJyb3InLCB3YXJuKTtcblxuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKGNodW5rKSA9PiB7XG4gICAgICAgIGlmIChzdHJlYW0ud3JpdGFibGUpIHtcbiAgICAgICAgICBzdHJlYW0ud3JpdGUoY2h1bmspO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgc3RyZWFtLmVuZCgoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9KSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHdhcm4oZXJyb3IpO1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogKCkgPT4ge30sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT4ge30sXG4gICAgfTtcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fUEhSQVNFID0gJ3RoZXJlIGlzIG5vIGNvbmNlcm4nO1xuZXhwb3J0IGNvbnN0IE5PX0NPTkNFUk5fTUVTU0FHRSA9ICdUaGVyZSBpcyBubyBjb25jZXJuLic7XG4iLCJpbXBvcnQgeyBjcmVhdGVXYWl0UHJvZ3Jlc3MsIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHsgTk9fQ09OQ0VSTl9NRVNTQUdFLCBOT19DT05DRVJOX1BIUkFTRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuXG5leHBvcnQgY29uc3QgQUdFTlRfTkFNRVMgPSBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSBhcyBjb25zdDtcbmNvbnN0IENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVggPSBuZXcgUmVnRXhwKGBcXFxcYiR7Tk9fQ09OQ0VSTl9QSFJBU0V9XFxcXGJgLCAnaScpO1xuZXhwb3J0IHR5cGUgQWdlbnROYW1lID0gKHR5cGVvZiBBR0VOVF9OQU1FUylbbnVtYmVyXTtcblxudHlwZSBBZ2VudENvbW1hbmRPcHRpb25zID0ge1xuICB3YWl0TWVzc2FnZT86IHN0cmluZyB8IGZhbHNlO1xufTtcblxudHlwZSBBbGxBZ2VudENvbW1hbmRPcHRpb25zID0ge1xuICBhbGxBZ2VudHNMYWJlbDogc3RyaW5nO1xuICBtYXBPdXRwdXQ/OiAoYWdlbnQ6IEFnZW50TmFtZSwgb3V0cHV0OiBzdHJpbmcpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BbGxBZ2VudENvbW1hbmRzKFxuICBwcm9tcHQ6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPixcbiAgb3B0aW9uczogQWxsQWdlbnRDb21tYW5kT3B0aW9ucyA9IHsgYWxsQWdlbnRzTGFiZWw6ICdhZ2VudHMnIH1cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc29sdmVkUHJvbXB0ID0gYXdhaXQgcHJvbXB0O1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKHdhaXRNZXNzYWdlRm9yKG9wdGlvbnMuYWxsQWdlbnRzTGFiZWwpKTtcblxuICB0cnkge1xuICAgIGNvbnN0IG91dHB1dHMgPSAoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgQUdFTlRfTkFNRVMubWFwKGFzeW5jIChhZ2VudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9IChcbiAgICAgICAgICAgIGF3YWl0IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgcmVzb2x2ZWRQcm9tcHQsIHtcbiAgICAgICAgICAgICAgd2FpdE1lc3NhZ2U6IGZhbHNlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApLnRyaW0oKTtcbiAgICAgICAgICByZXR1cm4gb3B0aW9ucy5tYXBPdXRwdXQ/LihhZ2VudCwgb3V0cHV0KSA/PyBgIyMgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX1cXG5cXG4ke291dHB1dH1gO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICkuZmlsdGVyKChvdXRwdXQpOiBvdXRwdXQgaXMgc3RyaW5nID0+IG91dHB1dCAhPT0gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gb3V0cHV0cy5sZW5ndGggPiAwID8gb3V0cHV0cy5qb2luKCdcXG5cXG4nKSA6IE5PX0NPTkNFUk5fTUVTU0FHRTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkFnZW50Q29tbWFuZChcbiAgYWdlbnQ6IEFnZW50TmFtZSxcbiAgcHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4sXG4gIG9wdGlvbnM6IEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoY3JlYXRlQWdlbnRDb21tYW5kKGFnZW50LCBhd2FpdCBwcm9tcHQpLCB7XG4gICAgbG9nRmlsZVBhdGg6IGFnZW50TG9nRmlsZVBhdGgoYWdlbnQpLFxuICAgIHdhaXRNZXNzYWdlOiBvcHRpb25zLndhaXRNZXNzYWdlID09PSB1bmRlZmluZWQgPyB3YWl0TWVzc2FnZUZvcihkaXNwbGF5QWdlbnROYW1lKGFnZW50KSkgOiBvcHRpb25zLndhaXRNZXNzYWdlLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQWdlbnRDb21tYW5kKGFnZW50OiBBZ2VudE5hbWUsIHByb21wdDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOlxuICAgICAgcmV0dXJuIFsnbnB4JywgJy0teWVzJywgJ0BvcGVuYWkvY29kZXhAbGF0ZXN0JywgJ2V4ZWMnLCAnLS1kYW5nZXJvdXNseS1ieXBhc3MtYXBwcm92YWxzLWFuZC1zYW5kYm94JywgcHJvbXB0XTtcbiAgICBjYXNlICdjbGF1ZGUnOlxuICAgICAgcmV0dXJuIFsnY2xhdWRlJywgJy0tZGFuZ2Vyb3VzbHktc2tpcC1wZXJtaXNzaW9ucycsICctcCcsIHByb21wdF07XG4gICAgY2FzZSAnZ2VtaW5pJzpcbiAgICAgIHJldHVybiBbXG4gICAgICAgICducHgnLFxuICAgICAgICAnLS15ZXMnLFxuICAgICAgICAnQGdvb2dsZS9nZW1pbmktY2xpQHByZXZpZXcnLFxuICAgICAgICAnLS1hcHByb3ZhbC1tb2RlJyxcbiAgICAgICAgJ3lvbG8nLFxuICAgICAgICAnLS1tb2RlbCcsXG4gICAgICAgICdnZW1pbmktMy4xLXByby1wcmV2aWV3JyxcbiAgICAgICAgJy1wJyxcbiAgICAgICAgcHJvbXB0LFxuICAgICAgXTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGxheUFnZW50TmFtZShhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICAgIHJldHVybiAnQ29kZXgnO1xuICAgIGNhc2UgJ2NsYXVkZSc6XG4gICAgICByZXR1cm4gJ0NsYXVkZSBDb2RlJztcbiAgICBjYXNlICdnZW1pbmknOlxuICAgICAgcmV0dXJuICdHZW1pbmkgQ0xJJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWC50ZXN0KG91dHB1dCk7XG59XG5cbmZ1bmN0aW9uIHdhaXRNZXNzYWdlRm9yKHRhcmdldDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBXYWl0aW5nIGZvciAke3RhcmdldH0gdG8gZmluaXNoLmA7XG59XG5cbmZ1bmN0aW9uIGFnZW50TG9nRmlsZVBhdGgoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHJldHVybiBgbG9ncy8ke2FnZW50fS0ke3RpbWVzdGFtcEZvckxvZ0ZpbGUoKX0ubG9nYDtcbn1cblxuZnVuY3Rpb24gdGltZXN0YW1wRm9yTG9nRmlsZSgpOiBzdHJpbmcge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCBbbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRdID0gW1xuICAgIG5vdy5nZXRNb250aCgpICsgMSxcbiAgICBub3cuZ2V0RGF0ZSgpLFxuICAgIG5vdy5nZXRIb3VycygpLFxuICAgIG5vdy5nZXRNaW51dGVzKCksXG4gICAgbm93LmdldFNlY29uZHMoKSxcbiAgXS5tYXAodHdvRGlnaXRzKTtcbiAgcmV0dXJuIGAke21vbnRofSR7ZGF5fS0ke2hvdXJ9JHttaW51dGV9JHtzZWNvbmR9YDtcbn1cblxuZnVuY3Rpb24gdHdvRGlnaXRzKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xufVxuIiwiLyoqXG4gKiBgYmxvY2tRdW90ZTogJ2xpdGVyYWwnYDogVXNlcyBhIHBpcGUgKGBwcm9wOiB8YCkgdG8gcmVwcmVzZW50IG11bHRpbGluZSBzdHJpbmdzLlxuICogYGxpbmVXaWR0aDogMGA6IERpc2FibGVzIGxpbmUgd3JhcHBpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCB5YW1sU3RyaW5naWZ5T3B0aW9ucyA9IHsgYmxvY2tRdW90ZTogJ2xpdGVyYWwnLCBsaW5lV2lkdGg6IDAgfSBhcyBjb25zdDtcbiIsImltcG9ydCB7IHNwYXduLCBzcGF3blN5bmMgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgc3RkZXJyIGFzIHByb2Nlc3NTdGRlcnIsIHN0ZGluIGFzIHByb2Nlc3NTdGRpbiB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNsZWVwIH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeVlhbWwgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCB0eXBlIEpzb25PYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBNZXRhZGF0YU5vZGUgPSB7XG4gIG51bWJlcjogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgUGFnZUluZm8gPSB7XG4gIGhhc05leHRQYWdlOiBib29sZWFuO1xuICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUNvbm5lY3Rpb248VE5vZGU+ID0ge1xuICBub2RlczogVE5vZGVbXTtcbiAgcGFnZUluZm86IFBhZ2VJbmZvO1xufTtcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59O1xuXG5jb25zdCBHSF9SRVRSWV9NQVhfQVRURU1QVFMgPSAzO1xuY29uc3QgR0hfUkVUUllfQkFTRV9ERUxBWV9NUyA9IDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhpdFdpdGhFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGNvZGUgPSAxKTogbmV2ZXIge1xuICBwcm9jZXNzU3RkZXJyLndyaXRlKGAke21lc3NhZ2V9XFxuYCk7XG4gIHByb2Nlc3MuZXhpdChjb2RlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTdGRpblRleHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKHByb2Nlc3NTdGRpbi5pc1RUWSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gYXdhaXQgc3RyZWFtVG9UZXh0KHByb2Nlc3NTdGRpbik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUmVxdWlyZWRTdGRpblRleHQoZXJyb3JNZXNzYWdlID0gJ0Vycm9yOiBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgaWYgKGlucHV0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcihlcnJvck1lc3NhZ2UsIDIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZChjb21tYW5kOiBzdHJpbmdbXSwgb3B0aW9uczogUnVuQ29tbWFuZE9wdGlvbnMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGFsbG93ZWRFeGl0Q29kZXMgPSBvcHRpb25zLmFsbG93ZWRFeGl0Q29kZXMgPz8gW107XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gR0hfUkVUUllfTUFYX0FUVEVNUFRTOyBhdHRlbXB0ICs9IDEpIHtcbiAgICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgICAgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICB9KTtcbiAgICBpZiAob3B0aW9ucy5zdGRpbkRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJvYy5zdGRpbi5lbmQob3B0aW9ucy5zdGRpbkRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jLnN0ZGluLmVuZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IFtzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3Rkb3V0KSxcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZGVyciksXG4gICAgICBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcHJvYy5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDEpKTtcbiAgICAgIH0pLFxuICAgIF0pO1xuICAgIGNvbnN0IG91dHB1dCA9IGAke3N0ZG91dH0ke3N0ZGVycn1gO1xuXG4gICAgaWYgKGV4aXRDb2RlID09PSAwIHx8IGFsbG93ZWRFeGl0Q29kZXMuaW5jbHVkZXMoZXhpdENvZGUpKSB7XG4gICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cblxuICAgIGlmIChpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kLCBleGl0Q29kZSwgb3V0cHV0KSAmJiBhdHRlbXB0IDwgR0hfUkVUUllfTUFYX0FUVEVNUFRTKSB7XG4gICAgICBwcm9ncmVzcyhgVHJhbnNpZW50IEdpdEh1YiBDTEkgZmFpbHVyZTsgcmV0cnlpbmcuLi4gKGF0dGVtcHQgJHthdHRlbXB0fSBvZiAke0dIX1JFVFJZX01BWF9BVFRFTVBUUyAtIDF9KWApO1xuICAgICAgYXdhaXQgc2xlZXAoR0hfUkVUUllfQkFTRV9ERUxBWV9NUyAqIGF0dGVtcHQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZXhpdFdpdGhFcnJvcihvdXRwdXQgfHwgYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmQuam9pbignICcpfWApO1xuICB9XG4gIGV4aXRXaXRoRXJyb3IoYENvbW1hbmQgZmFpbGVkIGFmdGVyICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTfSBhdHRlbXB0czogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoKGFyZ3M6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2hBbGxvd0V4aXRDb2RlcyhcbiAgYXJnczogc3RyaW5nW10sXG4gIGFsbG93ZWRFeGl0Q29kZXM6IG51bWJlcltdLFxuICBzdGRpbkRhdGE/OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEsIGFsbG93ZWRFeGl0Q29kZXMgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UmVwb1BhcnRzKCk6IFByb21pc2U8W3N0cmluZywgc3RyaW5nXT4ge1xuICBjb25zdCBuYW1lV2l0aE93bmVyID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICduYW1lV2l0aE93bmVyJywgJy0tanEnLCAnLm5hbWVXaXRoT3duZXInXSkpLnRyaW0oKTtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IG5hbWVXaXRoT3duZXIuc3BsaXQoJy8nLCAyKTtcbiAgaWYgKCFvd25lciB8fCAhbmFtZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgcmVwb3NpdG9yeScpO1xuICB9XG4gIHJldHVybiBbb3duZXIsIG5hbWVdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFByTnVtYmVyKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcubnVtYmVyJ10pKS50cmltKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBncmFwaHFsPFQgZXh0ZW5kcyBKc29uT2JqZWN0PihcbiAgcXVlcnk6IHN0cmluZyxcbiAgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IHt9XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgYXJncyA9IFsnYXBpJywgJ2dyYXBocWwnLCAnLUYnLCAncXVlcnk9QC0nXTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFycykpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy1GJywgYCR7a2V5fT0ke3ZhbHVlfWApO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGF3YWl0IGdoKGFyZ3MsIHF1ZXJ5KSkgYXMgSnNvbk9iamVjdCAmIHsgZXJyb3JzPzogQXJyYXk8eyBtZXNzYWdlPzogc3RyaW5nIH0+IH07XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlIGFzIFQ7XG4gIH1cblxuICBjb25zdCBlcnJvck1lc3NhZ2VzID0gcmVzcG9uc2UuZXJyb3JzLm1hcCgoZXJyb3IpID0+IGVycm9yLm1lc3NhZ2UgPz8gJ1Vua25vd24gR3JhcGhRTCBlcnJvcicpLmpvaW4oJ1xcbicpO1xuICBleGl0V2l0aEVycm9yKGBHcmFwaFFMIEFQSSBlcnJvcjpcXG4ke2Vycm9yTWVzc2FnZXN9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5YW1sRHVtcChkYXRhOiB1bmtub3duKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0cmluZ2lmeVlhbWwoZGF0YSwgeWFtbFN0cmluZ2lmeU9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVlcENvcHk8VD4oZGF0YTogVCk6IFQge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSkgYXMgVDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmRBdmFpbGFibGUoY29tbWFuZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBzcGF3blN5bmNTYWZlKFtjb21tYW5kLCAnLS12ZXJzaW9uJ10pLmV4aXRDb2RlID09PSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Bhd25TeW5jU2FmZShjb21tYW5kOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogeyBleGl0Q29kZTogbnVtYmVyOyBvdXRwdXQ6IHN0cmluZyB9IHtcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgIGlucHV0OiBzdGRpbkRhdGEsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgZXhpdENvZGU6IHJlc3VsdC5zdGF0dXMgPz8gKHJlc3VsdC5lcnJvciA/IDEgOiAwKSxcbiAgICBvdXRwdXQ6IGAke3Jlc3VsdC5zdGRvdXQgPz8gJyd9JHtyZXN1bHQuc3RkZXJyID8/ICcnfWAsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQ6IHN0cmluZ1tdLCBleGl0Q29kZTogbnVtYmVyLCBvdXRwdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoY29tbWFuZFswXSAhPT0gJ2doJyB8fCBleGl0Q29kZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAvKEhUVFAgNTBbMDIzNF1cXGJ8V2UgaGFkIGlzc3VlcyBwcm9kdWNpbmcgdGhlIHJlc3BvbnNlIHRvIHlvdXIgcmVxdWVzdCkvaS50ZXN0KG91dHB1dCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSB8IG51bGwpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHN0cmVhbSkge1xuICAgIGNodW5rcy5wdXNoKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycgPyBjaHVuayA6IGRlY29kZXIuZGVjb2RlKG5ldyBVaW50OEFycmF5KGNodW5rKSwgeyBzdHJlYW06IHRydWUgfSkpO1xuICB9XG4gIGNodW5rcy5wdXNoKGRlY29kZXIuZGVjb2RlKCkpO1xuICByZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufVxuIiwiaW1wb3J0IHsgc3RkZXJyIGFzIHByb2Nlc3NTdGRlcnIgfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcbmltcG9ydCB7IHN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgeyBjcmVhdGVXYWl0UHJvZ3Jlc3MsIERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7XG4gIGNvbW1hbmRBdmFpbGFibGUsXG4gIGN1cnJlbnRQck51bWJlcixcbiAgZGVlcENvcHksXG4gIGV4aXRXaXRoRXJyb3IsXG4gIGdoQWxsb3dFeGl0Q29kZXMsXG4gIHByb2dyZXNzLFxuICBzcGF3blN5bmNTYWZlLFxuICB5YW1sRHVtcCxcbn0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG5leHBvcnQgY29uc3QgVEVTVF9SRUxBVEVEX1BBVFRFUk4gPSAvXFxidGVzdFxcYi9pO1xuZXhwb3J0IGNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gREVGQVVMVF9XQUlUX0lOVEVSVkFMX1NFQ09ORFM7XG4vLyBPbmUgaHVuZHJlZCAzNi1zZWNvbmQgY2hlY2tzIHByZXNlcnZlcyB0aGUgbWF4aW11bSBvbmUtaG91ciBDSSB3YWl0IGJ1ZGdldC5cbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTID0gMTAwO1xuY29uc3QgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UgPSAnV2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2guJztcbmV4cG9ydCBjb25zdCBaRVJPX1RJTUVTVEFNUCA9ICcwMDAxLTAxLTAxVDAwOjAwOjAwWic7XG5leHBvcnQgY29uc3QgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTID0gW1xuICAnYXR0ZW1wdCcsXG4gICdjb25jbHVzaW9uJyxcbiAgJ2NyZWF0ZWRBdCcsXG4gICdkYXRhYmFzZUlkJyxcbiAgJ2Rpc3BsYXlUaXRsZScsXG4gICdldmVudCcsXG4gICdoZWFkQnJhbmNoJyxcbiAgJ2hlYWRTaGEnLFxuICAnam9icycsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFydGVkQXQnLFxuICAnc3RhdHVzJyxcbiAgJ3VwZGF0ZWRBdCcsXG4gICd1cmwnLFxuICAnd29ya2Zsb3dOYW1lJyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIENoZWNrID0ge1xuICBidWNrZXQ/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEF0Pzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXZlbnQ/OiBzdHJpbmc7XG4gIGxpbms/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQ2lSZXN1bHRzID0ge1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzOiBudW1iZXI7XG4gICAgZmFpbDogbnVtYmVyO1xuICAgIHBlbmRpbmc6IG51bWJlcjtcbiAgICBza2lwcGluZzogbnVtYmVyO1xuICAgIGNhbmNlbDogbnVtYmVyO1xuICB9O1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uID0gJ2ZhaWxlZCcgfCAncnVubmluZycgfCAnc3VjY2Vzc2Z1bCc7XG5cbmV4cG9ydCB0eXBlIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdCA9IHtcbiAgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb247XG4gIGNoZWNrOiBDaGVjaztcbiAgY2hlY2tzOiBDaGVja1tdO1xufTtcblxudHlwZSBDb21wYWN0V29ya2Zsb3dSdW4gPSB7XG4gIGJyYW5jaD86IHN0cmluZztcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZmFpbGVkX3N0ZXA/OiBzdHJpbmc7XG4gIGpvYj86IHN0cmluZztcbiAgam9iX3VybD86IHN0cmluZztcbiAgcnVuX2lkPzogc3RyaW5nO1xuICBydW5fdXJsPzogc3RyaW5nO1xuICBzaGE/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1blN0ZXAgPSB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG51bWJlcj86IG51bWJlcjtcbiAgc3RhdHVzPzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1bkpvYiA9IHtcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZGF0YWJhc2VJZD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBzdGVwcz86IFdvcmtmbG93UnVuU3RlcFtdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG50eXBlIFdvcmtmbG93UnVuRGV0YWlscyA9IHtcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgaGVhZEJyYW5jaD86IHN0cmluZztcbiAgaGVhZFNoYT86IHN0cmluZztcbiAgam9icz86IFdvcmtmbG93UnVuSm9iW107XG4gIHVybD86IHN0cmluZztcbn07XG5cbmNvbnN0IEZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiA9IC9eLio/XFx0VU5LTk9XTiBTVEVQXFx0XFxkezR9LVxcZHsyfS1cXGR7Mn1UW15aXStaXFxzKi87XG5jb25zdCBydGtBdmFpbGFibGUgPSBjb21tYW5kQXZhaWxhYmxlKCdydGsnKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxhdGVzdFByQ2lSZXN1bHRzKHByTnVtYmVyPzogc3RyaW5nKTogUHJvbWlzZTxDaVJlc3VsdHM+IHtcbiAgY29uc3QgYXJncyA9IFsncHInLCAnY2hlY2tzJ107XG4gIGlmIChwck51bWJlcikge1xuICAgIGFyZ3MucHVzaChwck51bWJlcik7XG4gIH1cbiAgYXJncy5wdXNoKCctLWpzb24nLCAnYnVja2V0LGNvbXBsZXRlZEF0LGRlc2NyaXB0aW9uLGV2ZW50LGxpbmssbmFtZSxzdGFydGVkQXQsc3RhdGUsd29ya2Zsb3cnKTtcblxuICBsZXQgY2hlY2tzOiBDaGVja1tdID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhhcmdzLCBbOF0pO1xuICAgIGNoZWNrcyA9IHJhdy50cmltKCkubGVuZ3RoID4gMCA/IChKU09OLnBhcnNlKHJhdykgYXMgQ2hlY2tbXSkgOiBbXTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgY2hlY2tzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN1bW1hcnkgPSBjaGVja3MucmVkdWNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+KChjb3VudHMsIGNoZWNrKSA9PiB7XG4gICAgY29uc3QgYnVja2V0ID0gY2hlY2suYnVja2V0ID8/ICcnO1xuICAgIGNvdW50c1tidWNrZXRdID0gKGNvdW50c1tidWNrZXRdID8/IDApICsgMTtcbiAgICByZXR1cm4gY291bnRzO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdW1tYXJ5OiB7XG4gICAgICB0b3RhbDogY2hlY2tzLmxlbmd0aCxcbiAgICAgIHBhc3M6IHN1bW1hcnkucGFzcyA/PyAwLFxuICAgICAgZmFpbDogc3VtbWFyeS5mYWlsID8/IDAsXG4gICAgICBwZW5kaW5nOiBzdW1tYXJ5LnBlbmRpbmcgPz8gMCxcbiAgICAgIHNraXBwaW5nOiBzdW1tYXJ5LnNraXBwaW5nID8/IDAsXG4gICAgICBjYW5jZWw6IHN1bW1hcnkuY2FuY2VsID8/IDAsXG4gICAgfSxcbiAgICBjaGVja3MsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKFxuICBwck51bWJlcjogc3RyaW5nLFxuICBzbGVlcEZuOiAoc2Vjb25kczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+ID0gc2xlZXBTZWNvbmRzLFxuICBsYXRlc3RDaVJlc3VsdHNGbjogKHByTnVtYmVyPzogc3RyaW5nKSA9PiBDaVJlc3VsdHMgfCBQcm9taXNlPENpUmVzdWx0cz4gPSBsYXRlc3RQckNpUmVzdWx0cyxcbiAgd3JpdGVQcm9ncmVzc0ZuOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkID0gKG1lc3NhZ2UpID0+IHByb2Nlc3NTdGRlcnIud3JpdGUobWVzc2FnZSlcbik6IFByb21pc2U8W0NpUmVzdWx0cywgbnVtYmVyLCBib29sZWFuXT4ge1xuICBsZXQgYXR0ZW1wdHMgPSAwO1xuICBsZXQgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICBsZXQgc3RvcFdhaXRQcm9ncmVzcyA9ICgpID0+IHt9O1xuXG4gIHRyeSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3QgY2xhc3NpZmllZFJlc3VsdHMgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICAgICAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkUmVzdWx0cyk7XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwIHx8IE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCBmYWxzZV07XG4gICAgICB9XG4gICAgICBpZiAoYXR0ZW1wdHMgPj0gVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUykge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIHRydWVdO1xuICAgICAgfVxuXG4gICAgICBhdHRlbXB0cyArPSAxO1xuICAgICAgaWYgKGF0dGVtcHRzID09PSAxKSB7XG4gICAgICAgIHN0b3BXYWl0UHJvZ3Jlc3MgPSBjcmVhdGVXYWl0UHJvZ3Jlc3MoXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UsXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMsXG4gICAgICAgICAgd3JpdGVQcm9ncmVzc0ZuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhd2FpdCBzbGVlcEZuKFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTKTtcbiAgICAgIGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHM6IENpUmVzdWx0cyk6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4ge1xuICBjb25zdCBsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdyA9IGNpUmVzdWx0cy5jaGVja3MucmVkdWNlPFJlY29yZDxzdHJpbmcsIENoZWNrW10+PigoZ3JvdXBlZFJlc3VsdHMsIGNoZWNrKSA9PiB7XG4gICAgY29uc3Qgd29ya2Zsb3dLZXkgPSBjaGVjay53b3JrZmxvdyB8fCBjaGVjay5uYW1lIHx8ICd1bmtub3duX3dvcmtmbG93JztcbiAgICBncm91cGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPz89IFtdO1xuICAgIGdyb3VwZWRSZXN1bHRzW3dvcmtmbG93S2V5XS5wdXNoKGNoZWNrKTtcbiAgICByZXR1cm4gZ3JvdXBlZFJlc3VsdHM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93KS5tYXAoKFt3b3JrZmxvd0tleSwgY2hlY2tzXSkgPT4ge1xuICAgICAgY29uc3QgbGF0ZXN0QXR0ZW1wdENoZWNrcyA9IGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrcyk7XG4gICAgICBjb25zdCBmaXJzdENoZWNrID0gbGF0ZXN0QXR0ZW1wdENoZWNrc1swXTtcbiAgICAgIGlmICghZmlyc3RDaGVjaykge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogbm8gY2hlY2tzIGZvdW5kIGZvciB3b3JrZmxvdyAke3dvcmtmbG93S2V5fWApO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF0ZXN0Q2hlY2sgPVxuICAgICAgICBsYXRlc3RBdHRlbXB0Q2hlY2tzLnJlZHVjZTxDaGVjayB8IHVuZGVmaW5lZD4oKGN1cnJlbnRMYXRlc3QsIGNoZWNrKSA9PiB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50TGF0ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjaykgPiBsYXRlc3RDaGVja1RpbWVzdGFtcChjdXJyZW50TGF0ZXN0KSA/IGNoZWNrIDogY3VycmVudExhdGVzdDtcbiAgICAgICAgfSwgdW5kZWZpbmVkKSA/PyBmaXJzdENoZWNrO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICB3b3JrZmxvd0tleSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uOiB3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uKGxhdGVzdEF0dGVtcHRDaGVja3MpLFxuICAgICAgICAgIGNoZWNrOiBsYXRlc3RDaGVjayxcbiAgICAgICAgICBjaGVja3M6IGxhdGVzdEF0dGVtcHRDaGVja3MsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoXG4gIGNsYXNzaWZpZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XG4pOiBbUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiwgUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0Pl0ge1xuICBjb25zdCBmYWlsZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+ID0ge307XG4gIGNvbnN0IHJ1bm5pbmdSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+ID0ge307XG5cbiAgZm9yIChjb25zdCBbd29ya2Zsb3dLZXksIHJlc3VsdF0gb2YgT2JqZWN0LmVudHJpZXMoY2xhc3NpZmllZFJlc3VsdHMpKSB7XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIGZhaWxlZFJlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdydW5uaW5nJyAmJiByZXN1bHQuY2hlY2tzLnNvbWUoKGNoZWNrKSA9PiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrKSkpIHtcbiAgICAgIHJ1bm5pbmdSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrOiBDaGVjayB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGxpbmsgPSBjaGVjaz8ubGluaztcbiAgaWYgKCFsaW5rKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gbGluay5tYXRjaCgvXFwvYWN0aW9uc1xcL3J1bnNcXC8oXFxkKykvKT8uWzFdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd29ya2Zsb3dSdW4ocnVuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFydW5JZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBydW5Kc29uID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3J1bicsICd2aWV3JywgcnVuSWQsICctLWpzb24nLCBXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMuam9pbignLCcpXSwgWzFdKTtcbiAgaWYgKHJ1bkpzb24udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHJ1bkpzb24pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBwcm9jZXNzU3RkZXJyLndyaXRlKGBXYXJuaW5nOiBDb3VsZCBub3QgcGFyc2UgSlNPTiBmb3Igd29ya2Zsb3cgcnVuICR7cnVuSWR9OiAke2Vycm9yLm1lc3NhZ2V9XFxuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzOiBDaGVja1tdKTogQ2hlY2tbXSB7XG4gIGNvbnN0IGdyb3VwcyA9IGNoZWNrcy5yZWR1Y2UoKGdyb3VwZWRDaGVja3MsIGNoZWNrKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrKTtcbiAgICBjb25zdCBncm91cCA9IGdyb3VwZWRDaGVja3MuZ2V0KGtleSk7XG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICBncm91cC5wdXNoKGNoZWNrKTtcbiAgICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICAgIH1cbiAgICBncm91cGVkQ2hlY2tzLnNldChrZXksIFtjaGVja10pO1xuICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICB9LCBuZXcgTWFwPHN0cmluZywgQ2hlY2tbXT4oKSk7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBzLnZhbHVlcygpKS5yZWR1Y2U8Q2hlY2tbXT4oKGxhdGVzdEdyb3VwLCBjdXJyZW50R3JvdXApID0+IHtcbiAgICBpZiAobGF0ZXN0R3JvdXAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudEdyb3VwO1xuICAgIH1cblxuICAgIHJldHVybiBsYXRlc3RHcm91cFRpbWVzdGFtcChjdXJyZW50R3JvdXApID4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAobGF0ZXN0R3JvdXApID8gY3VycmVudEdyb3VwIDogbGF0ZXN0R3JvdXA7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93QXR0ZW1wdEtleShjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKTtcbiAgcmV0dXJuIHJ1bklkID8gYHJ1bjoke3J1bklkfWAgOiAndW5rbm93bl9ydW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihjaGVja3M6IENoZWNrW10pOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uIHtcbiAgY29uc3QgYnVja2V0cyA9IGNoZWNrcy5tYXAoKGNoZWNrKSA9PiBjaGVjay5idWNrZXQgPz8gJycpO1xuICBpZiAoYnVja2V0cy5zb21lKChidWNrZXQpID0+ICFbJ3Bhc3MnLCAnc2tpcHBpbmcnLCAncGVuZGluZyddLmluY2x1ZGVzKGJ1Y2tldCkpKSB7XG4gICAgcmV0dXJuICdmYWlsZWQnO1xuICB9XG4gIGlmIChidWNrZXRzLmluY2x1ZGVzKCdwZW5kaW5nJykpIHtcbiAgICByZXR1cm4gJ3J1bm5pbmcnO1xuICB9XG4gIHJldHVybiAnc3VjY2Vzc2Z1bCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCB0aW1lc3RhbXAgPSBjaGVjay5jb21wbGV0ZWRBdDtcbiAgaWYgKCF0aW1lc3RhbXAgfHwgdGltZXN0YW1wID09PSBaRVJPX1RJTUVTVEFNUCkge1xuICAgIHJldHVybiBjaGVjay5zdGFydGVkQXQgPz8gJyc7XG4gIH1cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RSZWxhdGVkQ2hlY2soY2hlY2s6IENoZWNrKTogYm9vbGVhbiB7XG4gIHJldHVybiBbY2hlY2submFtZSwgY2hlY2sud29ya2Zsb3ddLnNvbWUoKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFRFU1RfUkVMQVRFRF9QQVRURVJOLnRlc3QodmFsdWUpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwU2Vjb25kcyhzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2xlZXAoc2Vjb25kcyAqIDEwMDApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tQckNpKCk6IFByb21pc2U8eyBvdXRwdXQ6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlciB9PiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIGxhdGVzdCBDSSByZXN1bHRzLi4uJyk7XG4gIGNvbnN0IFtjaVJlc3VsdHMsIHdhaXRBdHRlbXB0cywgd2FpdFRpbWVkT3V0XSA9IGF3YWl0IHdhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MocHJOdW1iZXIpO1xuICBjb25zdCBjbGFzc2lmaWVkTGF0ZXN0ID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkTGF0ZXN0KTtcblxuICBjb25zdCBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBzdW1tYXJ5OiBkZWVwQ29weShjaVJlc3VsdHMuc3VtbWFyeSksXG4gICAgd2FpdGVkX2Zvcl90ZXN0X3JlbGF0ZWRfY2hlY2tzOiB3YWl0QXR0ZW1wdHMgPiAwLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzOiB3YWl0QXR0ZW1wdHMsXG4gICAgdGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0OiB3YWl0VGltZWRPdXQsXG4gIH07XG5cbiAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLmZhaWxlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZhaWxlZFJlc3VsdHMpLm1hcChhc3luYyAoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBhY3RXb3JrZmxvdyA9IGF3YWl0IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb21wYWN0V29ya2Zsb3csXG4gICAgICAgICAgLi4uYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMoYXdhaXQgZmFpbGVkV29ya2Zsb3dMb2cocmVzdWx0LmNoZWNrKSksXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG4gICAgcGF5bG9hZC5ydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJ1bm5pbmdSZXN1bHRzKS5tYXAoKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4gY29tcGFjdFdvcmtmbG93UmVzdWx0KHdvcmtmbG93S2V5LCByZXN1bHQpKVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIHJldHVybiB7IG91dHB1dDogJ0FsbCBDSSB3b3JrZmxvd3MgcGFzc2VkLlxcbicsIGV4aXRDb2RlOiAwIH07XG59XG5cbmZ1bmN0aW9uIGxhdGVzdEdyb3VwVGltZXN0YW1wKGNoZWNrczogQ2hlY2tbXSk6IHN0cmluZyB7XG4gIHJldHVybiBjaGVja3MucmVkdWNlKChsYXRlc3QsIGNoZWNrKSA9PiB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spO1xuICAgIHJldHVybiB0aW1lc3RhbXAgPiBsYXRlc3QgPyB0aW1lc3RhbXAgOiBsYXRlc3Q7XG4gIH0sICcnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGFjdFdvcmtmbG93UmVzdWx0KFxuICB3b3JrZmxvd0tleTogc3RyaW5nLFxuICByZXN1bHQ6IENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdFxuKTogUHJvbWlzZTx7IGNsYXNzaWZpY2F0aW9uOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uIH0gJiBDb21wYWN0V29ya2Zsb3dSdW4+IHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhyZXN1bHQuY2hlY2spO1xuICBjb25zdCBydW4gPSAoYXdhaXQgd29ya2Zsb3dSdW4ocnVuSWQpKSBhcyBXb3JrZmxvd1J1bkRldGFpbHMgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGZhaWxlZEpvYiA9IGZhaWxlZFdvcmtmbG93UnVuSm9iKHJ1biwgc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLm5hbWUpKTtcbiAgcmV0dXJuIHtcbiAgICBjbGFzc2lmaWNhdGlvbjogcmVzdWx0LmNsYXNzaWZpY2F0aW9uLFxuICAgIHdvcmtmbG93OiB3b3JrZmxvd0tleSxcbiAgICBqb2I6IHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5uYW1lKSxcbiAgICBqb2JfdXJsOiBzdHJpbmdPclVuZGVmaW5lZChmYWlsZWRKb2I/LnVybCksXG4gICAgZmFpbGVkX3N0ZXA6IGZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUoZmFpbGVkSm9iKSxcbiAgICBydW5faWQ6IHJ1bklkLFxuICAgIHJ1bl91cmw6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8udXJsKSA/PyBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2subGluayksXG4gICAgYnJhbmNoOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmhlYWRCcmFuY2gpLFxuICAgIHNoYTogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5oZWFkU2hhKSxcbiAgICBjb25jbHVzaW9uOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmNvbmNsdXNpb24pLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmYWlsZWRXb3JrZmxvd0xvZyhjaGVjazogQ2hlY2spOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKTtcbiAgaWYgKCFydW5JZCkge1xuICAgIHJldHVybiAnRmFpbGVkIGxhdGVzdCByZXN1bHQgaGFzIG5vIEdpdEh1YiBBY3Rpb25zIHJ1biBsaW5rLic7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1sb2ctZmFpbGVkJ10sIFsxXSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzKGxvZzogc3RyaW5nKToge1xuICBmYWlsZWRfbG9nOiBzdHJpbmc7XG59IHtcbiAgcmV0dXJuIHtcbiAgICBmYWlsZWRfbG9nOiByZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyhsb2cpLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyhsb2c6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNhbml0aXplZElucHV0ID0gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMobG9nKSk7XG4gIGlmICghcnRrQXZhaWxhYmxlKSB7XG4gICAgcmV0dXJuIHNhbml0aXplZElucHV0O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jU2FmZShbJ3J0aycsICdsb2cnXSwgc2FuaXRpemVkSW5wdXQpO1xuICByZXR1cm4gcmVzdWx0LmV4aXRDb2RlID09PSAwICYmIHJlc3VsdC5vdXRwdXQudHJpbSgpLmxlbmd0aCA+IDBcbiAgICA/IHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2cocmVzdWx0Lm91dHB1dClcbiAgICA6IHNhbml0aXplZElucHV0O1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKGxvZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxvZ1xuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnJlcGxhY2UoRkFJTEVEX0xPR19MSU5FX1BSRUZJWF9QQVRURVJOLCAnJykpXG4gICAgLmpvaW4oJ1xcbicpXG4gICAgLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nT3JVbmRlZmluZWQodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93UnVuSm9iKFxuICBydW46IFdvcmtmbG93UnVuRGV0YWlscyB8IHVuZGVmaW5lZCxcbiAgam9iTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBXb3JrZmxvd1J1bkpvYiB8IHVuZGVmaW5lZCB7XG4gIGlmICghcnVuPy5qb2JzIHx8IHJ1bi5qb2JzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLm5hbWUgPT09IGpvYk5hbWUpID8/XG4gICAgcnVuLmpvYnMuZmluZCgoam9iKSA9PiBqb2IuY29uY2x1c2lvbiA9PT0gJ2ZhaWx1cmUnKSA/P1xuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUoam9iOiBXb3JrZmxvd1J1bkpvYiB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICgham9iPy5zdGVwcyB8fCBqb2Iuc3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgam9iLnN0ZXBzLmZpbmQoKHN0ZXApID0+IHN0ZXAuY29uY2x1c2lvbiA9PT0gJ2ZhaWx1cmUnKT8ubmFtZSA/P1xuICAgIGpvYi5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcpPy5uYW1lXG4gICk7XG59XG4iLCJpbXBvcnQgeyBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRCYXNlQnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCgpKSA/PyAoYXdhaXQgY3VycmVudERlZmF1bHRCcmFuY2goKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50RGVmYXVsdEJyYW5jaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gcmVxdWlyZU5vbkVtcHR5KFxuICAgIChcbiAgICAgIGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoW1xuICAgICAgICAnZ2gnLFxuICAgICAgICAncmVwbycsXG4gICAgICAgICd2aWV3JyxcbiAgICAgICAgJy0tanNvbicsXG4gICAgICAgICdkZWZhdWx0QnJhbmNoUmVmJyxcbiAgICAgICAgJy0tdGVtcGxhdGUnLFxuICAgICAgICAne3suZGVmYXVsdEJyYW5jaFJlZi5uYW1lfX0nLFxuICAgICAgXSlcbiAgICApLnRyaW0oKSxcbiAgICAnRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgYnJhbmNoJ1xuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYmFzZUJyYW5jaCA9IChcbiAgICAgIGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoWydnaCcsICdwcicsICd2aWV3JywgJy0tanNvbicsICdiYXNlUmVmTmFtZScsICctLXRlbXBsYXRlJywgJ3t7LmJhc2VSZWZOYW1lfX0nXSlcbiAgICApLnRyaW0oKTtcbiAgICByZXR1cm4gYmFzZUJyYW5jaC5sZW5ndGggPiAwID8gYmFzZUJyYW5jaCA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKGVycm9yKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gL25vIHB1bGwgcmVxdWVzdHM/IGZvdW5kIGZvciBicmFuY2gvaS50ZXN0KFN0cmluZyhlcnJvcikpO1xufVxuXG5mdW5jdGlvbiByZXF1aXJlTm9uRW1wdHkodmFsdWU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuIiwiaW1wb3J0IHsgaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7XG4gIGN1cnJlbnRQck51bWJlcixcbiAgY3VycmVudFJlcG9QYXJ0cyxcbiAgZXhpdFdpdGhFcnJvcixcbiAgZ2hBbGxvd0V4aXRDb2RlcyxcbiAgZ3JhcGhxbCxcbiAgdHlwZSBKc29uT2JqZWN0LFxuICB0eXBlIE1lc3NhZ2UsXG4gIHR5cGUgTWVzc2FnZUNvbm5lY3Rpb24sXG4gIHR5cGUgTWV0YWRhdGFOb2RlLFxuICBwcm9ncmVzcyxcbiAgeWFtbER1bXAsXG59IGZyb20gJy4vc2hhcmVkLmpzJztcblxudHlwZSBJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxudHlwZSBQclJldmlld05vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGJvZHk/OiBzdHJpbmcgfCBudWxsO1xuICBzdGF0ZT86IHN0cmluZyB8IG51bGw7XG4gIHN1Ym1pdHRlZEF0Pzogc3RyaW5nIHwgbnVsbDtcbiAgdXJsOiBzdHJpbmc7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxudHlwZSBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIHB1bGxSZXF1ZXN0Pzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgICAgcmV2aWV3cz86IE1lc3NhZ2VDb25uZWN0aW9uPFByUmV2aWV3Tm9kZT47XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWVzc2FnZXNSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiB7XG4gICAgICAgIGNvbW1lbnRzPzogTWVzc2FnZUNvbm5lY3Rpb248SXNzdWVNZXNzYWdlQ29tbWVudE5vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIHB1bGxSZXF1ZXN0PzogTWV0YWRhdGFOb2RlO1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWV0YWRhdGFSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiBNZXRhZGF0YU5vZGU7XG4gICAgfTtcbiAgfTtcbn07XG5cbmNvbnN0IElTU1VFX01FU1NBR0VTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBpc3N1ZShudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgSVNTVUVfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBpc3N1ZShudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyXG4gICAgICAgIHRpdGxlXG4gICAgICAgIHVybFxuICAgICAgICBib2R5XG4gICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX0NPTU1FTlRTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyXG4gICAgICAgIHRpdGxlXG4gICAgICAgIHVybFxuICAgICAgICBib2R5XG4gICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX1JFVklFV1NfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICBzdWJtaXR0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVJc3N1ZU51bWJlcihyZWZlcmVuY2U6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyKHJlZmVyZW5jZSwgJ2lzc3VlJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQck51bWJlcihyZWZlcmVuY2U6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyKHJlZmVyZW5jZSwgJ3B1bGwgcmVxdWVzdCcpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBpc3N1ZSA9IGF3YWl0IGlzc3VlTWVzc2FnZXMob3duZXIsIG5hbWUsIG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlTnVtYmVyKSk7XG4gIHByb2dyZXNzKGBGZXRjaGVkIGlzc3VlICMke2lzc3VlLm51bWJlcn0gbWVzc2FnZXMuYCk7XG4gIHJldHVybiB5YW1sRHVtcCh7IGlzc3VlIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQck1lc3NhZ2VzKHByTnVtYmVyPzogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzb2x2ZWRQck51bWJlciA9IHByTnVtYmVyID09PSB1bmRlZmluZWQgPyBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKSA6IG5vcm1hbGl6ZVByTnVtYmVyKHByTnVtYmVyKTtcbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocmVzb2x2ZWRQck51bWJlcik7XG4gIHByb2dyZXNzKGBGZXRjaGVkIHB1bGwgcmVxdWVzdCAjJHtwdWxsUmVxdWVzdC5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBwdWxsX3JlcXVlc3Q6IHB1bGxSZXF1ZXN0IH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHByTnVtYmVyT3V0cHV0ID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSwgWzFdKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBwck51bWJlck91dHB1dC50cmltKCk7XG4gIGlmIChpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcocHJOdW1iZXJPdXRwdXQpIHx8ICEvXlxcZCskLy50ZXN0KHByTnVtYmVyKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwdWxsUmVxdWVzdCA9IGF3YWl0IGN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyhwck51bWJlcik7XG4gIHJldHVybiB5YW1sRHVtcCh7IHB1bGxfcmVxdWVzdDogcHVsbFJlcXVlc3QgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyhwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIHJldHVybiBhd2FpdCBwck1lc3NhZ2VzKG93bmVyLCBuYW1lLCBwck51bWJlcik7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIsIGxhYmVsOiAnaXNzdWUnIHwgJ3B1bGwgcmVxdWVzdCcpOiBzdHJpbmcge1xuICBjb25zdCByZWZlcmVuY2VUZXh0ID0gU3RyaW5nKHJlZmVyZW5jZSkudHJpbSgpO1xuICBpZiAocmVmZXJlbmNlVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogJHtsYWJlbH0gcmVmZXJlbmNlIGlzIHJlcXVpcmVkYCwgMik7XG4gIH1cblxuICBpZiAoL15cXGQrJC8udGVzdChyZWZlcmVuY2VUZXh0KSkge1xuICAgIHJldHVybiByZWZlcmVuY2VUZXh0O1xuICB9XG5cbiAgY29uc3Qga2luZFNlZ21lbnQgPSBsYWJlbCA9PT0gJ2lzc3VlJyA/ICdpc3N1ZXMnIDogJ3B1bGwnO1xuICBjb25zdCBtYXRjaCA9IHJlZmVyZW5jZVRleHQubWF0Y2goXG4gICAgbmV3IFJlZ0V4cChgXmh0dHBzPzovLyg/Ond3d1xcXFwuKT9naXRodWJcXFxcLmNvbS9bXi9dKy9bXi9dKy8ke2tpbmRTZWdtZW50fS8oXFxcXGQrKSg/Oi98JClgKVxuICApO1xuICBpZiAobWF0Y2g/LlsxXSkge1xuICAgIHJldHVybiBtYXRjaFsxXTtcbiAgfVxuXG4gIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBleHBlY3RlZCBhIEdpdEh1YiAke2xhYmVsfSBudW1iZXIgb3IgVVJMLCByZWNlaXZlZCBcIiR7cmVmZXJlbmNlVGV4dH1cImAsIDIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc3N1ZU1lc3NhZ2VzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgaXNzdWVOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBpc3N1ZSA9IGF3YWl0IGZldGNoTWV0YWRhdGE8SXNzdWVNZXRhZGF0YVJlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBub3VuOiAnaXNzdWUnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlLFxuICB9KTtcbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlLCBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogSVNTVUVfTUVTU0FHRVNfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IGlzc3VlTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8uaXNzdWU/LmNvbW1lbnRzLFxuICAgIG1hcE5vZGU6IGNvbW1lbnRNZXNzYWdlLFxuICB9KTtcblxuICByZXR1cm4geyAuLi5pc3N1ZSwgbWVzc2FnZXMgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPFB1bGxSZXF1ZXN0TWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgbm91bjogJ3B1bGwgcmVxdWVzdCcsXG4gICAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3QsXG4gIH0pO1xuICBjb25zdCBbaXNzdWVDb21tZW50cywgcmV2aWV3c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgcHJJc3N1ZUNvbW1lbnRzKG93bmVyLCBuYW1lLCBwck51bWJlciksXG4gICAgcHJSZXZpZXdzKG93bmVyLCBuYW1lLCBwck51bWJlciksXG4gIF0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4ucHVsbFJlcXVlc3QsXG4gICAgbWVzc2FnZXM6IFsuLi5pc3N1ZUNvbW1lbnRzLCAuLi5yZXZpZXdzXS5zb3J0KGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQobGVmdDogTWVzc2FnZSwgcmlnaHQ6IE1lc3NhZ2UpOiBudW1iZXIge1xuICBjb25zdCBsZWZ0Q3JlYXRlZEF0ID0gdHlwZW9mIGxlZnQuY3JlYXRlZEF0ID09PSAnc3RyaW5nJyA/IGxlZnQuY3JlYXRlZEF0IDogJyc7XG4gIGNvbnN0IHJpZ2h0Q3JlYXRlZEF0ID0gdHlwZW9mIHJpZ2h0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyByaWdodC5jcmVhdGVkQXQgOiAnJztcbiAgcmV0dXJuIGxlZnRDcmVhdGVkQXQubG9jYWxlQ29tcGFyZShyaWdodENyZWF0ZWRBdCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBySXNzdWVDb21tZW50cyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICByZXR1cm4gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX0NPTU1FTlRTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByUmV2aWV3cyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICByZXR1cm4gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxQclJldmlld05vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9SRVZJRVdTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5yZXZpZXdzLFxuICAgIG1hcE5vZGU6IHJldmlld01lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYWdpbmF0ZU1lc3NhZ2VzPFROb2RlLCBUUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0Pihjb25maWc6IHtcbiAgcXVlcnk6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZyB8IG51bWJlcjtcbiAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlOiBUUmVzcG9uc2UpID0+IE1lc3NhZ2VDb25uZWN0aW9uPFROb2RlPiB8IHVuZGVmaW5lZDtcbiAgbWFwTm9kZTogKG5vZGU6IFROb2RlKSA9PiBNZXNzYWdlO1xufSk6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgbWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXG4gIGZvciAoOzspIHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gY29uZmlnLnNlbGVjdENvbm5lY3Rpb24oXG4gICAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICAgIG93bmVyOiBjb25maWcub3duZXIsXG4gICAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICAgICAgY3Vyc29yLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuXG4gICAgbWVzc2FnZXMucHVzaCguLi5jb25uZWN0aW9uLm5vZGVzLm1hcChjb25maWcubWFwTm9kZSkuZmlsdGVyKGhhc01lc3NhZ2VCb2R5KSk7XG5cbiAgICBpZiAoIWNvbm5lY3Rpb24ucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICB9XG4gICAgY3Vyc29yID0gY29ubmVjdGlvbi5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoTWV0YWRhdGE8VFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIG5vdW46IHN0cmluZztcbiAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXRhZGF0YU5vZGUgfCB1bmRlZmluZWQ7XG59KTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gY29uZmlnLnNlbGVjdE1ldGFkYXRhKFxuICAgIGF3YWl0IGdyYXBocWw8VFJlc3BvbnNlPihjb25maWcucXVlcnksIHtcbiAgICAgIG93bmVyOiBjb25maWcub3duZXIsXG4gICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgIG51bWJlcjogTnVtYmVyKGNvbmZpZy5udW1iZXIpLFxuICAgIH0pXG4gICk7XG5cbiAgaWYgKCFtZXRhZGF0YSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYENvdWxkIG5vdCBmaW5kICR7Y29uZmlnLm5vdW59ICMke2NvbmZpZy5udW1iZXJ9IGluICR7Y29uZmlnLm93bmVyfS8ke2NvbmZpZy5uYW1lfS5gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbnVtYmVyOiBtZXRhZGF0YS5udW1iZXIsXG4gICAgdGl0bGU6IG1ldGFkYXRhLnRpdGxlLFxuICAgIHVybDogbWV0YWRhdGEudXJsLFxuICAgIGF1dGhvcjogbWV0YWRhdGEuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgYm9keTogbWV0YWRhdGEuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tbWVudE1lc3NhZ2UoY29tbWVudDogSXNzdWVNZXNzYWdlQ29tbWVudE5vZGUpOiBNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnY29tbWVudCcsXG4gICAgYXV0aG9yOiBjb21tZW50LmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGNyZWF0ZWRBdDogY29tbWVudC5jcmVhdGVkQXQsXG4gICAgdXJsOiBjb21tZW50LnVybCxcbiAgICBib2R5OiBjb21tZW50LmJvZHksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJldmlld01lc3NhZ2UocmV2aWV3OiBQclJldmlld05vZGUpOiBNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAncmV2aWV3JyxcbiAgICBhdXRob3I6IHJldmlldy5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBzdGF0ZTogcmV2aWV3LnN0YXRlID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IHJldmlldy5zdWJtaXR0ZWRBdCA/PyB1bmRlZmluZWQsXG4gICAgdXJsOiByZXZpZXcudXJsLFxuICAgIGJvZHk6IHJldmlldy5ib2R5ID8/ICcnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBoYXNNZXNzYWdlQm9keShtZXNzYWdlOiBNZXNzYWdlKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgbWVzc2FnZS5ib2R5ID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLmJvZHkubGVuZ3RoID4gMDtcbn1cbiIsImltcG9ydCB7IGN1cnJlbnRQck51bWJlciwgZXhpdFdpdGhFcnJvciwgZ2gsIHByb2dyZXNzLCBydW5Db21tYW5kLCB5YW1sRHVtcCB9IGZyb20gJy4vc2hhcmVkLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Qcihib2R5Pzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGVhZCA9IChhd2FpdCBydW5Db21tYW5kKFsnZ2l0JywgJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddKSkudHJpbSgpO1xuICBjb25zdCBiYXNlID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tanEnLCAnLmRlZmF1bHRCcmFuY2hSZWYubmFtZSddKSkudHJpbSgpO1xuXG4gIGlmICghaGVhZCkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBicmFuY2gnKTtcbiAgfVxuICBpZiAoaGVhZCA9PT0gYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBjdXJyZW50IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBicmFuY2ggKCR7YmFzZX0pYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBcmdzID0gWydwcicsICdjcmVhdGUnLCAnLS1iYXNlJywgYmFzZSwgJy0taGVhZCcsIGhlYWQsICctLWZpbGwnXTtcbiAgaWYgKGJvZHkgJiYgYm9keS5sZW5ndGggPiAwKSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLWJvZHktZmlsZScsICctJyk7XG4gIH1cblxuICBwcm9ncmVzcygnQ3JlYXRpbmcgcHVsbCByZXF1ZXN0Li4uJyk7XG4gIGF3YWl0IGdoKGNyZWF0ZUFyZ3MsIGJvZHkpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvciddKSlcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByQm9keShib2R5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKGBVcGRhdGluZyBwdWxsIHJlcXVlc3QgIyR7cHJOdW1iZXJ9IGJvZHkuLi5gKTtcbiAgcmV0dXJuIGF3YWl0IHVwZGF0ZVByKHByTnVtYmVyLCBbJy0tYm9keS1maWxlJywgJy0nXSwgYm9keSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVQclRpdGxlKHRpdGxlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKGBVcGRhdGluZyBwdWxsIHJlcXVlc3QgIyR7cHJOdW1iZXJ9IHRpdGxlLi4uYCk7XG4gIHJldHVybiBhd2FpdCB1cGRhdGVQcihwck51bWJlciwgWyctLXRpdGxlJywgdGl0bGVdKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHIocHJOdW1iZXI6IHN0cmluZywgZWRpdEFyZ3M6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBhd2FpdCBnaChbJ3ByJywgJ2VkaXQnLCBwck51bWJlciwgLi4uZWRpdEFyZ3NdLCBzdGRpbkRhdGEpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKFxuICAgICAgYXdhaXQgZ2goW1xuICAgICAgICAncHInLFxuICAgICAgICAndmlldycsXG4gICAgICAgIHByTnVtYmVyLFxuICAgICAgICAnLS1qc29uJyxcbiAgICAgICAgJ2lkLG51bWJlcix0aXRsZSx1cmwsc3RhdGUsaXNEcmFmdCxiYXNlUmVmTmFtZSxoZWFkUmVmTmFtZSxhdXRob3IsYm9keScsXG4gICAgICBdKVxuICAgIClcbiAgKTtcbn1cbiIsImltcG9ydCB7XG4gIGN1cnJlbnRQck51bWJlcixcbiAgY3VycmVudFJlcG9QYXJ0cyxcbiAgZXhpdFdpdGhFcnJvcixcbiAgZ3JhcGhxbCxcbiAgcHJvZ3Jlc3MsXG4gIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCxcbiAgeWFtbER1bXAsXG59IGZyb20gJy4vc2hhcmVkLmpzJztcblxudHlwZSBSZXZpZXdDb21tZW50Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIGRpZmZIdW5rPzogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIFJldmlld1RocmVhZE5vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGlzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gIGlzT3V0ZGF0ZWQ/OiBib29sZWFuIHwgbnVsbDtcbiAgcGF0aD86IHN0cmluZyB8IG51bGw7XG4gIGxpbmU/OiBudW1iZXIgfCBudWxsO1xuICBvcmlnaW5hbExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBzdGFydExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBvcmlnaW5hbFN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIGNvbW1lbnRzOiB7XG4gICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgcGFnZUluZm86IHtcbiAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICB9O1xuICB9O1xufTtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld1RocmVhZHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgICAgaXNPdXRkYXRlZFxuICAgICAgICAgICAgcGF0aFxuICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgb3JpZ2luYWxMaW5lXG4gICAgICAgICAgICBzdGFydExpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhcnRMaW5lXG4gICAgICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwKSB7XG4gICAgICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgICAgICBkaWZmSHVua1xuICAgICAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBSRVZJRVdfQ09NTUVOVF9RVUVSWSA9IGBcbiAgcXVlcnkoJHRocmVhZElkOiBJRCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIG5vZGUoaWQ6ICR0aHJlYWRJZCkge1xuICAgICAgLi4uIG9uIFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19USFJFQURfSURTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUmVwbGllc0Zyb21TdGRpbigpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkUmVxdWlyZWRTdGRpblRleHQoJ0Vycm9yOiBKU09OIGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk7XG4gIGNvbnN0IHBheWxvYWQgPSBwYXJzZVJlcGx5SW5wdXQoaW5wdXQpO1xuICBjb25zdCBub3JtYWxpemVkUmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IFt0aHJlYWRJZCwgYm9keV0gb2YgT2JqZWN0LmVudHJpZXMocGF5bG9hZC5yZXBsaWVzKSkge1xuICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgJiYgYm9keS5sZW5ndGggPiAwKSB7XG4gICAgICBub3JtYWxpemVkUmVwbGllc1t0aHJlYWRJZF0gPSBib2R5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZFJlcGxpZXM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYWdpbmF0ZVJldmlld1RocmVhZHMoXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcixcbiAgb25UaHJlYWQ6ICh0aHJlYWQ6IFJldmlld1RocmVhZE5vZGUpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGZvciAoOzspIHtcbiAgICBjb25zdCByZXZpZXdUaHJlYWRzID0gKFxuICAgICAgYXdhaXQgZ3JhcGhxbDx7XG4gICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgcmVwb3NpdG9yeT86IHtcbiAgICAgICAgICAgIHB1bGxSZXF1ZXN0Pzoge1xuICAgICAgICAgICAgICByZXZpZXdUaHJlYWRzPzoge1xuICAgICAgICAgICAgICAgIG5vZGVzOiBSZXZpZXdUaHJlYWROb2RlW107XG4gICAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4ocXVlcnksIHtcbiAgICAgICAgb3duZXIsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG51bWJlcjogTnVtYmVyKHByTnVtYmVyKSxcbiAgICAgICAgY3Vyc29yLFxuICAgICAgfSlcbiAgICApLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5yZXZpZXdUaHJlYWRzO1xuXG4gICAgaWYgKCFyZXZpZXdUaHJlYWRzKSB7XG4gICAgICBleGl0V2l0aEVycm9yKFxuICAgICAgICAnQ291bGQgbm90IGZpbmQgcmV2aWV3VGhyZWFkcyBpbiBHcmFwaFFMIHJlc3BvbnNlLiBUaGUgcHVsbCByZXF1ZXN0IG1heSBub3QgZXhpc3Qgb3IgdGhlcmUgd2FzIGFuIEFQSSBlcnJvci4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGhyZWFkIG9mIHJldmlld1RocmVhZHMubm9kZXMpIHtcbiAgICAgIGF3YWl0IG9uVGhyZWFkKHRocmVhZCk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGN1cnNvciA9IHJldmlld1RocmVhZHMucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGlkczogc3RyaW5nW10gPSBbXTtcbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfSURTX1FVRVJZLCBvd25lciwgbmFtZSwgcHJOdW1iZXIsICh0aHJlYWQpID0+IHtcbiAgICBpZiAoIXRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICBpZHMucHVzaCh0aHJlYWQuaWQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpZHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+W10+IHtcbiAgY29uc3QgdGhyZWFkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuXG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX1FVRVJZLCBvd25lciwgbmFtZSwgcHJOdW1iZXIsIGFzeW5jICh0aHJlYWQpID0+IHtcbiAgICBpZiAodGhyZWFkLmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb21tZW50cyA9IHRocmVhZC5jb21tZW50cy5ub2Rlcy5tYXAobm9ybWFsaXplQ29tbWVudEF1dGhvcik7XG4gICAgbGV0IHBhZ2VJbmZvID0gdGhyZWFkLmNvbW1lbnRzLnBhZ2VJbmZvO1xuICAgIGxldCBjdXJzb3IgPSBwYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuXG4gICAgd2hpbGUgKHBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICBjb25zdCBjb21tZW50Q29ubmVjdGlvbiA9IChcbiAgICAgICAgYXdhaXQgZ3JhcGhxbDx7XG4gICAgICAgICAgZGF0YT86IHtcbiAgICAgICAgICAgIG5vZGU/OiB7XG4gICAgICAgICAgICAgIGNvbW1lbnRzPzoge1xuICAgICAgICAgICAgICAgIG5vZGVzOiBSZXZpZXdDb21tZW50Tm9kZVtdO1xuICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfT4oUkVWSUVXX0NPTU1FTlRfUVVFUlksIHsgdGhyZWFkSWQ6IHRocmVhZC5pZCwgY3Vyc29yIH0pXG4gICAgICApLmRhdGE/Lm5vZGU/LmNvbW1lbnRzO1xuXG4gICAgICBpZiAoIWNvbW1lbnRDb25uZWN0aW9uKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYENvdWxkIG5vdCBmaW5kIGNvbW1lbnRzIGluIEdyYXBoUUwgcmVzcG9uc2UgZm9yIHRocmVhZCAke3RocmVhZC5pZH0uYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbW1lbnRzLnB1c2goLi4uY29tbWVudENvbm5lY3Rpb24ubm9kZXMubWFwKG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IpKTtcbiAgICAgIHBhZ2VJbmZvID0gY29tbWVudENvbm5lY3Rpb24ucGFnZUluZm87XG4gICAgICBjdXJzb3IgPSBwYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRocmVhZHMucHVzaCh7XG4gICAgICBpZDogdGhyZWFkLmlkLFxuICAgICAgaXNSZXNvbHZlZDogdGhyZWFkLmlzUmVzb2x2ZWQsXG4gICAgICBpc091dGRhdGVkOiB0aHJlYWQuaXNPdXRkYXRlZCxcbiAgICAgIHBhdGg6IHRocmVhZC5wYXRoLFxuICAgICAgbGluZTogdGhyZWFkLmxpbmUsXG4gICAgICBvcmlnaW5hbExpbmU6IHRocmVhZC5vcmlnaW5hbExpbmUsXG4gICAgICBzdGFydExpbmU6IHRocmVhZC5zdGFydExpbmUsXG4gICAgICBvcmlnaW5hbFN0YXJ0TGluZTogdGhyZWFkLm9yaWdpbmFsU3RhcnRMaW5lLFxuICAgICAgY29tbWVudHMsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB0aHJlYWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFByUmV2aWV3VGhyZWFkcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzLi4uJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHVucmVzb2x2ZWRfdGhyZWFkczogYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQclJldmlld1RocmVhZHMocmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG4gIGNvbnN0IHVucmVzb2x2ZWRJZHMgPSBuZXcgU2V0KGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSk7XG5cbiAgcHJvZ3Jlc3MoYFJlcGx5aW5nIHRvICR7T2JqZWN0LmtleXMocmVwbGllcykubGVuZ3RofSByZXZpZXcgdGhyZWFkcy4uLmApO1xuXG4gIGNvbnN0IHJlc29sdmVkVGhyZWFkSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMocmVwbGllcyk7XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIFt0aHJlYWRJZCwgYm9keV1dIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG4gICAgcHJvZ3Jlc3MoYFByb2Nlc3NpbmcgJHtpbmRleCArIDF9LyR7ZW50cmllcy5sZW5ndGh9OiAke3RocmVhZElkfWApO1xuICAgIGlmICghdW5yZXNvbHZlZElkcy5oYXModGhyZWFkSWQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdyYXBocWw8e1xuICAgICAgZGF0YT86IHtcbiAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZD86IHtcbiAgICAgICAgICB0aHJlYWQ/OiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9PihcbiAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJHRocmVhZElkOiBJRCEsICRib2R5OiBTdHJpbmchKSB7XG4gICAgICAgICAgYWRkUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRSZXBseShpbnB1dDoge3B1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkSWQ6ICR0aHJlYWRJZCwgYm9keTogJGJvZHl9KSB7XG4gICAgICAgICAgICBjb21tZW50IHtcbiAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQoaW5wdXQ6IHt0aHJlYWRJZDogJHRocmVhZElkfSkge1xuICAgICAgICAgICAgdGhyZWFkIHtcbiAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgIHsgdGhyZWFkSWQsIGJvZHkgfVxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2UuZGF0YT8ucmVzb2x2ZVJldmlld1RocmVhZD8udGhyZWFkPy5pc1Jlc29sdmVkKSB7XG4gICAgICByZXNvbHZlZFRocmVhZElkcy5wdXNoKHRocmVhZElkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZ3Jlc3MoYFdhcm5pbmc6IGZhaWxlZCB0byByZXNvbHZlIHRocmVhZCAke3RocmVhZElkfS5gKTtcbiAgICB9XG4gIH1cblxuICBwcm9ncmVzcygnRG9uZS4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcmVzb2x2ZWRfdGhyZWFkX2lkczogcmVzb2x2ZWRUaHJlYWRJZHMgfSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IoY29tbWVudDogUmV2aWV3Q29tbWVudE5vZGUpOiBSZXZpZXdDb21tZW50Tm9kZSAmIHsgYXV0aG9yPzogc3RyaW5nIHwgbnVsbCB9IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5jb21tZW50LFxuICAgIGF1dGhvcjogdHlwZW9mIGNvbW1lbnQuYXV0aG9yID09PSAnc3RyaW5nJyA/IGNvbW1lbnQuYXV0aG9yIDogKGNvbW1lbnQuYXV0aG9yPy5sb2dpbiA/PyBudWxsKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VSZXBseUlucHV0KGlucHV0OiBzdHJpbmcpOiB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBjb25zdCBlcnJvclByZWZpeCA9ICdFcnJvcjogSW52YWxpZCBpbnB1dCBmb3JtYXQgb24gc3RkaW4nO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgdW5rbm93bjtcbiAgICBpZiAoIWlzUmVwbHlJbnB1dChwYXJzZWQpKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGAke2Vycm9yUHJlZml4fTogZXhwZWN0ZWQgYW4gb2JqZWN0IHdpdGggYSBzdHJpbmctdmFsdWVkIFxcYHJlcGxpZXNcXGAgbWFwYCwgMik7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBJbnZhbGlkIEpTT04gcHJvdmlkZWQgb24gc3RkaW46ICR7ZXJyb3IubWVzc2FnZX1gLCAyKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNSZXBseUlucHV0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgeyByZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiB9IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCByZXBsaWVzID0gKHZhbHVlIGFzIHsgcmVwbGllcz86IHVua25vd24gfSkucmVwbGllcztcbiAgaWYgKHR5cGVvZiByZXBsaWVzICE9PSAnb2JqZWN0JyB8fCByZXBsaWVzID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkocmVwbGllcykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZXBsaWVzKS5ldmVyeSgocmVwbHkpID0+IHJlcGx5ID09PSBudWxsIHx8IHJlcGx5ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHJlcGx5ID09PSAnc3RyaW5nJyk7XG59XG4iLCJpbXBvcnQgeyBmZXRjaElzc3VlTWVzc2FnZXMgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUGxhblByb21wdChpc3N1ZU51bWJlcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaXNzdWVZYW1sID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlTnVtYmVyKTtcblxuICByZXR1cm4gYFxuUGxhbiBhIEdpdEh1YiBpc3N1ZSBieSBnYXRoZXJpbmcgY29udGV4dCwgd3JpdGluZyBhIHNwZWNpZmljYXRpb24gZm9yIHNvZnR3YXJlIGVuZ2luZWVycywgYW5kIHBvc3Rpbmcgb3IgdXBkYXRpbmcgdGhhdCBzcGVjaWZpY2F0aW9uIGJhY2sgdG8gdGhlIGlzc3VlLlxuVGhlIHRhcmdldCBpc3N1ZSBudW1iZXIgaXMgIyR7aXNzdWVOdW1iZXJ9LiBIZXJlIGlzIHRoZSBmZXRjaGVkIGlzc3VlIGNvbnRleHQgYXMgWUFNTDpcbn5+fn55YW1sXG4ke2lzc3VlWWFtbC50cmltKCl9XG5+fn5+XG5cbkZvbGxvdyB0aGlzIHdvcmtmbG93OlxuMS4gUmVhZCB0aGUgYWJvdmUgaXNzdWUgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgY2FyZWZ1bGx5LlxuMi4gQ29sbGVjdCBlbm91Z2ggc3VwcG9ydGluZyBpbmZvcm1hdGlvbiBiZWZvcmUgd3JpdGluZyB0aGUgc3BlY2lmaWNhdGlvbjpcbiAgIC0gSW5zcGVjdCB0aGUgcmVsZXZhbnQgY29kZSwgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIHJlY2VudCBkaWZmcywgYW5kIGFueSBvdGhlciBsb2NhbCBjb250ZXh0IG5lZWRlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuXG4gICAtIElmIGNvZGUgaW5zcGVjdGlvbiBpcyBlbm91Z2gsIHVzZSB0aGUgY3VycmVudCBjb2RlYmFzZSBhcyB0aGUgcHJpbWFyeSBldmlkZW5jZS5cbiAgIC0gSWYgdGhlIGlzc3VlIGRlcGVuZHMgb24gcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgICAgLSBDbGVhbiB1cCBhbnkgdGVtcG9yYXJ5IGZpbGVzIGFmdGVyIHRoZSBleHBlcmltZW50LlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBhIGxpYnJhcnksIEFQSSwgb3IgbGFuZ3VhZ2UgZmVhdHVyZSwgY29uZmlybSBpdCBhZ2FpbnN0IHRoZSBsYXRlc3Qgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBhbm90aGVyIHByaW1hcnkgc291cmNlIGluc3RlYWQgb2YgcmVseWluZyBvbiBtZW1vcnkuXG4zLiBXcml0ZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGlzc3VlIGNvbW1lbnQuXG4gICAtIFdyaXRlIHRoZSBiYWNrZ3JvdW5kIGJhc2VkIG9uIHRoZSBjb2xsZWN0ZWQgaW5mb3JtYXRpb24uXG4gICAtIERlZmluZSBhIGdvYWwgdGhhdCBjbGVhcmx5IGd1aWRlcyBvdXIgaW1wbGVtZW50YXRpb24gaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cbiAgIC0gV3JpdGUgYSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uIGluY29ycG9yYXRpbmcgdGhlIGV2aWRlbmNlIHlvdSBjb2xsZWN0ZWQuXG4gICAtIElmIG5lZWRlZCwgaW5jbHVkZSBjb2RlIHNuaXBwZXRzIHRoYXQgZXhwbGFpbiBob3cgdG8gdXNlIGxpYnJhcmllcyBvciBBUElzLCBhbG9uZyB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlaXIgZG9jdW1lbnRhdGlvbi5cbjQuIFBvc3QgdGhlIHNwZWNpZmljYXRpb24gYmFjayB0byBpc3N1ZSAjJHtpc3N1ZU51bWJlcn0sIHRoZW4gcHJpbnQgdGhlIGlzc3VlIFVSTC5cbiAgIC0gSWYgdGhlIGlzc3VlIGFscmVhZHkgaGFzIGEgc3BlY2lmaWNhdGlvbiwgdXBkYXRlIHRoZSBleGlzdGluZyBjb21tZW50IGluc3RlYWQgb2YgcG9zdGluZyBhIG5ldyBvbmUuXG5cbkZvcm1hdCB0aGUgaXNzdWUgY29tbWVudCBleGFjdGx5IGxpa2UgdGhpcywgYnV0IGRvIG5vdCBpbmNsdWRlIHRoZSBzdXJyb3VuZGluZyBcXGB+fn5+XFxgIGZlbmNlcyBpbiB0aGUgYWN0dWFsIGNvbW1lbnQ6XG5+fn5+XG4jIyBCYWNrZ3JvdW5kXG5cbltTdW1tYXJpemUgdGhlIGN1cnJlbnQgYmVoYXZpb3IgYW5kIGV4cGxhaW4gdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoaXMgaXNzdWVdXG5cbiMjIEdvYWxcblxuW0RlZmluZSB0aGUgZ29hbCB3ZSB3YW50IHRvIGFjaGlldmUgaW4gdGhpcyBpc3N1ZV1cblxuIyMgU3BlY2lmaWNhdGlvblxuXG5bRGV0YWlsZWQgc3BlY2lmaWNhdGlvbiBmb3Igc29mdHdhcmUgZW5naW5lZXJzXVxuXG4jIyBLZXkgVGVjaG5vbG9naWVzIChPTkxZIGlmIGV4dGVybmFsIHJlc291cmNlcyBhcmUgbmVlZGVkKVxuXG5bRGVzY3JpYmUgd2hhdCBsaWJyYXJpZXMgb3IgQVBJcyB3ZSBzaG91bGQgdXNlLCBpbmNsdWRpbmcgY29uY3JldGUgdmVyc2lvbnMgYW5kIGNvZGUgc25pcHBldHMuXVxuXG5+fn5+XG5gLnRyaW0oKTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBnaXQgbWVyZ2UtYmFzZSAke3NoZWxsUXVvdGUoYG9yaWdpbi8ke2Jhc2VCcmFuY2h9YCl9IEhFQUQgMj4vZGV2L251bGwgfHwgZ2l0IG1lcmdlLWJhc2UgJHtzaGVsbFF1b3RlKGJhc2VCcmFuY2gpfSBIRUFEYDtcbn1cblxuZnVuY3Rpb24gc2hlbGxRdW90ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAnJHt2YWx1ZS5yZXBsYWNlQWxsKFwiJ1wiLCBcIidcXFwiJ1xcXCInXCIpfSdgO1xufVxuIiwiaW1wb3J0IHsgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIH0gZnJvbSAnLi4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBjdXJyZW50QmFzZUJyYW5jaCB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQgeyBOT19DT05DRVJOX01FU1NBR0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcbmltcG9ydCB7IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCB9IGZyb20gJy4vYmFzZUJyYW5jaERpZmZDb21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmV2aWV3UHJvbXB0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJhc2VCcmFuY2ggPSBhd2FpdCBjdXJyZW50QmFzZUJyYW5jaCgpO1xuICBjb25zdCBtZXJnZUJhc2VDb21tYW5kID0gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2gpO1xuICBjb25zdCBwckNvbnRleHQgPSBhd2FpdCBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUoKTtcbiAgcmV0dXJuIGBcblJldmlldyB0aGUgY3VycmVudCAke3ByQ29udGV4dCA/ICdwdWxsIHJlcXVlc3QnIDogJ2JyYW5jaCd9IGFnYWluc3QgaXRzIGJhc2UgYnJhbmNoICR7YmFzZUJyYW5jaH0gdmlhIFxcYGdpdCBkaWZmIFwiJCgke21lcmdlQmFzZUNvbW1hbmR9KVwiXFxgLlxuRm9yIGVhY2ggZmluZGluZywgZG8gdGhlIGZvbGxvd2luZyB0aHJlZSBzdGVwczpcbjEuIEdhdGhlciBzdXBwb3J0aW5nIGV2aWRlbmNlOlxuICAgLSBJbnNwZWN0IHRoZSByZWZlcmVuY2VkIGNvZGUgYW5kIHRoZSBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgYW5kIHJlY2VudCBkaWZmcyB3aGVuIHRoZXkgYWZmZWN0IHRoZSBjbGFpbS5cbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgZmluZGluZyBpcyBhYm91dCBydW50aW1lIGJlaGF2aW9yLCByZXByb2R1Y2UgaXQgd2l0aCB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGV4cGVyaW1lbnQsIHN1Y2ggYXMgYSBmb2N1c2VkIGNvbW1hbmQsIGEgdGlueSBzY3JpcHQsIGEgdGVtcG9yYXJ5IGxvY2FsIGFzc2VydGlvbiwgb3IgYW5vdGhlciBuYXJyb3cgY2hlY2sgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuICAgICAtIENsZWFuIHVwIGFueSB0ZW1wb3JhcnkgZmlsZXMgYWZ0ZXIgdGhlIGV4cGVyaW1lbnQuXG4gICAtIElmIHRoZSBmaW5kaW5nIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMi4gSnVkZ2Ugd2hldGhlciB0aGUgZmluZGluZyBpcyB2YWxpZDpcbiAgIC0gTWFyayBpdCB2YWxpZCBvbmx5IHdoZW4gdGhlIGF2YWlsYWJsZSBldmlkZW5jZSBzaG93cyB0aGUgcmVwb3J0ZWQgaXNzdWUgaXMgc3RpbGwgcmVhbCBpbiB0aGUgY3VycmVudCBjb2RlYmFzZS5cbiAgIC0gT3RoZXJ3aXNlLCBtYXJrIGl0IG5vdCB2YWxpZC5cbjMuIFByb3Bvc2UgYSBmaXggd2l0aG91dCBtb2RpZnlpbmcgdGhlIGNvZGU6XG4gICAtIERlc2NyaWJlIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgY2hhbmdlIHRoYXQgd291bGQgYWRkcmVzcyB0aGUgZmluZGluZy5cbiAgIC0gSW52ZXN0aWdhdGUgdGhlIGxpa2VseSBpbXBhY3Qgb2YgdGhhdCBjaGFuZ2UgYnkgaW5zcGVjdGluZyB0aGUgYWZmZWN0ZWQgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIGFuZCBhZGphY2VudCBiZWhhdmlvciwgYW5kIG5vdGUgYW55IGZvbGxvdy11cCBjaGFuZ2VzIG9yIHJpc2tzIHRoZSBmaXggd291bGQgbmVlZCB0byBhY2NvdW50IGZvci5cblxuUmVwb3J0IG9ubHkgdGhlIHZhbGlkIGZpbmRpbmdzLCB0aGUgZXZpZGVuY2UgZm9yIGVhY2ggb25lLCBhbmQgdGhlIHByb3Bvc2VkIGZpeCB3aXRoIGl0cyBsaWtlbHkgaW1wYWN0LiBJbmNsdWRlIGEgYnJpZWYganVzdGlmaWNhdGlvbiBmb3IgZWFjaCwgY2l0aW5nIHRoZSBldmlkZW5jZSB1c2VkIChlLmcuLCBhIGZhaWxpbmcgc2NlbmFyaW8sIGV4cGVyaW1lbnQgcmVzdWx0LCBvciBvZmZpY2lhbCBkb2N1bWVudGF0aW9uKS4gRG8gbm90IG1vZGlmeSB0aGUgY29kZS5cbklmIHRoZXJlIGFyZSBubyB2YWxpZCBmaW5kaW5ncywgcmVzcG9uZCBleGFjdGx5IHdpdGg6IFxcYCR7Tk9fQ09OQ0VSTl9NRVNTQUdFfVxcYFxuXG4ke2J1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zKHByQ29udGV4dCl9XG5gLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMocHJDb250ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICByZXR1cm4gcHJDb250ZXh0XG4gICAgPyBgQ3VycmVudCBwdWxsIHJlcXVlc3QgY29udGV4dDpcbn5+fn55YW1sXG4ke3ByQ29udGV4dC50cmltKCl9XG5+fn5+XG5gLnRyaW0oKVxuICAgIDogJyc7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRTY3JlZW5zaG90UHJvbXB0KGluaXRpYWxVcmw6IHN0cmluZywgcGFnZU5hbWU6IHN0cmluZywgc2NyZWVuc2hvdERlc2NyaXB0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYW5pdGl6ZWREZXNjcmlwdGlvbiA9IHNjcmVlbnNob3REZXNjcmlwdGlvbi5yZXBsYWNlQWxsKCdcXG4nLCAnICcpLnJlcGxhY2VBbGwoJ1wiJywgXCInXCIpO1xuICByZXR1cm4gYFxuVXNlIFxcYHBsYXl3cmlnaHQtY2xpXFxgIHNraWxsIHRvIHRha2UgYSBzY3JlZW5zaG90IG9mIFwiJHtzYW5pdGl6ZWREZXNjcmlwdGlvbn1cIiBieSBuYXZpZ2F0aW5nIGZyb20gJHtpbml0aWFsVXJsfSB0byBcIiR7cGFnZU5hbWV9XCIgcGFnZS5cblxuRm9sbG93IHRoaXMgd29ya2Zsb3c6XG4xLiBPcGVuIHRoZSBpbml0aWFsIHBhZ2UgYXQgJHtpbml0aWFsVXJsfS5cbjIuIE5hdmlnYXRlIGZyb20gdGhhdCBpbml0aWFsIHBhZ2UgdW50aWwgeW91IHJlYWNoIHRoZSBwYWdlIGlkZW50aWZpZWQgYXMgJHtwYWdlTmFtZX0uXG4gICAtIElmIGNvZGUgZXJyb3JzLCBydW50aW1lIGZhaWx1cmVzLCBvciBicm9rZW4gVUkgZmxvd3MgcHJldmVudCBuYXZpZ2F0aW9uLCBpbnZlc3RpZ2F0ZSB0aGUgY2F1c2UgaW4gdGhlIGxvY2FsIGNvZGViYXNlLCBtYWtlIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgY29kZSBmaXgsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgcGFnZSBjYW4gbm93IGJlIHJlYWNoZWQgYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAtIElmIHlvdSBjYW5ub3QgZml4IHRoZSBlcnJvcnMsIHJlcG9ydCBvbiB0aGUgZXJyb3JzIHRoZW4gc3RvcC5cbjMuIENhcHR1cmUgYSBzY3JlZW5zaG90IHRoYXQgZm9jdXNlcyBvbiB0aGlzIHRhcmdldDogXCIke3Nhbml0aXplZERlc2NyaXB0aW9ufVwiLlxuNC4gS2VlcCB0aGUgZ2VuZXJhdGVkIGltYWdlIGFydGlmYWN0IGFuZCByZXBvcnQgdGhlIHNjcmVlbnNob3QgZmlsZSBwYXRoIHBsdXMgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB3aGF0IHdhcyBjYXB0dXJlZC4gSWYgeW91IGhhZCB0byBmaXggY29kZSBmaXJzdCwgYWxzbyBzdW1tYXJpemUgdGhlIGZpeC5cbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IHsgY3VycmVudEJhc2VCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuaW1wb3J0IHsgYnVpbGRNZXJnZUJhc2VDb21tYW5kIH0gZnJvbSAnLi9iYXNlQnJhbmNoRGlmZkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRTaW1wbGlmeVByb21wdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiYXNlQnJhbmNoID0gYXdhaXQgY3VycmVudEJhc2VCcmFuY2goKTtcbiAgY29uc3QgbWVyZ2VCYXNlQ29tbWFuZCA9IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoKTtcbiAgcmV0dXJuIGBcblNpbXBsaWZ5IHRoZSBjdXJyZW50IGJyYW5jaCBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCB1c2luZyBcXGBnaXQgZGlmZiBcIiQoJHttZXJnZUJhc2VDb21tYW5kfSlcIlxcYC5cbkZpcnN0LCBpbnNwZWN0IHRoZSBkaWZmIGFuZCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2ggY2hhbmdlZCBhcmVhLiBUaGlzIGluY2x1ZGVzIG5lYXJieSBmdW5jdGlvbnMsIHR5cGVzLCBjYWxsIHNpdGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgb3RoZXIgZmlsZXMgdGhhdCBoZWxwIGRldGVybWluZSBpZiB0aGUgY2hhbmdlIGlzIHRydWx5IG5lY2Vzc2FyeS5cbkxldmVyYWdlIHRoaXMgY29udGV4dCB0byBpZGVudGlmeSByZWR1bmRhbmNpZXMgdGhhdCBjYW4gYmUgc2FmZWx5IHJlbW92ZWQgb3Igc2ltcGxpZmllZC4gTG9vayBmb3IgZHVwbGljYXRlIGxvZ2ljLCByZXBlYXRlZCBjb25kaXRpb25hbHMsIHVubmVjZXNzYXJ5IGFic3RyYWN0aW9ucywgb3ZlcmxhcHBpbmcgY29kZSBwYXRocywgZGVhZCBjb2RlLCBvciBlZGl0cyBtYWRlIG9ic29sZXRlIHVwb24gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5Qcmlvcml0aXplIHNpbXBsaWZpY2F0aW9ucyB0aGF0IHJlZHVjZSB0aGUgcmV2aWV3ZXIncyBidXJkZW4sIHN1Y2ggYXM6XG4tIFJlbW92aW5nIHJlZHVuZGFudCBlZGl0cyBvciBkZWFkIGNvZGUuXG4tIEVsaW1pbmF0aW5nIG9yIG1lcmdpbmcgZHVwbGljYXRlZCBsb2dpYyBkaXNjb3ZlcmVkIGJ5IGNvbXBhcmluZyB0aGUgZGlmZiB3aXRoIHJlbGF0ZWQgY29kZS5cbi0gRmxhdHRlbmluZyB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgaW50cm9kdWNlZCBpbiB0aGUgZGlmZiAoZS5nLiwgdXNpbmcgZWFybHkgcmV0dXJucyB0byByZWR1Y2UgbmVzdGluZywgc2ltcGxpZnlpbmcgYm9vbGVhbiBleHByZXNzaW9ucywgb3IgcmVtb3ZpbmcgcmVkdW5kYW50IHdyYXBwZXIgZnVuY3Rpb25zKS5cblxuQ29tbWl0IGFuZCBwdXNoIHlvdXIgY2hhbmdlcy4gQWZ0ZXJ3YXJkLCBzdW1tYXJpemUgdGhlIHJlZHVuZGFuY2llcyBvciB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5IHlvdSBoYXZlIHJlbW92ZWQuXG5gLnRyaW0oKTtcbn1cbiIsImltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxQYWNrZWRTa2lsbHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoXG4gICAgW1xuICAgICAgJ2J1bngnLFxuICAgICAgJ3NraWxsc0BsYXRlc3QnLFxuICAgICAgJ2FkZCcsXG4gICAgICBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4uLy4uJywgaW1wb3J0Lm1ldGEudXJsKSksXG4gICAgICAnLS1nbG9iYWwnLFxuICAgICAgJy0teWVzJyxcbiAgICAgICctLXNraWxsJyxcbiAgICAgICcqJyxcbiAgICAgICctLWFnZW50JyxcbiAgICAgICdjbGF1ZGUtY29kZScsXG4gICAgICAnLS1hZ2VudCcsXG4gICAgICAnY29kZXgnLFxuICAgICAgJy0tYWdlbnQnLFxuICAgICAgJ2dlbWluaS1jbGknLFxuICAgIF0sXG4gICAge1xuICAgICAgd2FpdE1lc3NhZ2U6ICdJbnN0YWxsaW5nIHBhY2thZ2VkIHNraWxscyBnbG9iYWxseS4nLFxuICAgIH1cbiAgKTtcbn1cbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7XG4gIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2UsXG4gIGRpc3BsYXlBZ2VudE5hbWUsXG4gIHJ1bkFnZW50Q29tbWFuZCxcbiAgcnVuQWxsQWdlbnRDb21tYW5kcyxcbn0gZnJvbSAnLi9hZ2VudC9hZ2VudENvbW1hbmRzLmpzJztcbmltcG9ydCB7XG4gIGNoZWNrUHJDaSxcbiAgZmV0Y2hJc3N1ZU1lc3NhZ2VzLFxuICBmZXRjaFByTWVzc2FnZXMsXG4gIGxpc3RQclJldmlld1RocmVhZHMsXG4gIG5vcm1hbGl6ZUlzc3VlTnVtYmVyLFxuICBvcGVuUHIsXG4gIHJlYWRSZXBsaWVzRnJvbVN0ZGluLFxuICByZWFkUmVxdWlyZWRTdGRpblRleHQsXG4gIHJlYWRTdGRpblRleHQsXG4gIHJlc29sdmVQclJldmlld1RocmVhZHMsXG4gIHVwZGF0ZVByQm9keSxcbiAgdXBkYXRlUHJUaXRsZSxcbn0gZnJvbSAnLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGJ1aWxkUGxhblByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9wbGFuUHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkUmV2aWV3UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3Jldmlld1Byb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFNjcmVlbnNob3RQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvc2NyZWVuc2hvdFByb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFNpbXBsaWZ5UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3NpbXBsaWZ5UHJvbXB0LmpzJztcbmltcG9ydCB7IGluc3RhbGxQYWNrZWRTa2lsbHMgfSBmcm9tICcuL3NraWxscy9pbnN0YWxsU2tpbGxzLmpzJztcblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW0ubmFtZSgnYWdlbnQtc2tpbGxzJykuZGVzY3JpcHRpb24oJ0NMSSBjb21tYW5kcyBmb3IgdGhlIHNraWxscyBpbiB0aGlzIHJlcG9zaXRvcnknKS5zaG93SGVscEFmdGVyRXJyb3IoKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnaW5zdGFsbC1za2lsbHMnKVxuICAuZGVzY3JpcHRpb24oJ0luc3RhbGwgYWxsIHBhY2thZ2VkIHNraWxscyBnbG9iYWxseSBmb3IgQ2xhdWRlIENvZGUsIENvZGV4LCBhbmQgR2VtaW5pIENMSScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgaW5zdGFsbFBhY2tlZFNraWxscygpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdEb25lXFxuJyk7XG4gIH0pO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3JldmlldycsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgcmV2aWV3IGFnZW50JyxcbiAgY2hvaWNlczogWydhbGwnLCAnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBydW46IChtb2RlKSA9PlxuICAgIG1vZGUgPT09ICdhbGwnXG4gICAgICA/IHJ1bkFsbEFnZW50Q29tbWFuZHMoYnVpbGRSZXZpZXdQcm9tcHQoKSwge1xuICAgICAgICAgIGFsbEFnZW50c0xhYmVsOiAncmV2aWV3IGFnZW50cycsXG4gICAgICAgICAgbWFwT3V0cHV0OiAoYWdlbnQsIG91dHB1dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0KSkge1xuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAjIyAke2Rpc3BsYXlBZ2VudE5hbWUoYWdlbnQpfVxcblxcbiR7b3V0cHV0fWA7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIDogcnVuQWdlbnRDb21tYW5kKG1vZGUsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWNvZGV4JywgJ1J1biBDb2RleCByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdwbGFuJyxcbiAgZGVzY3JpcHRpb246ICdSdW4gcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSBwbGFubmluZyBhZ2VudCcsXG4gIGNob2ljZXM6IFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKG1vZGUsIGlzc3VlUmVmZXJlbmNlKSA9PlxuICAgIG1vZGUgPT09ICdhbGwnXG4gICAgICA/IHJ1bkFsbEFnZW50Q29tbWFuZHMoYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSksIHtcbiAgICAgICAgICBhbGxBZ2VudHNMYWJlbDogJ3BsYW5uaW5nIGFnZW50cycsXG4gICAgICAgIH0pXG4gICAgICA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWNvZGV4JywgJ1J1biBDb2RleCBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdzY3JlZW5zaG90JylcbiAgLmRlc2NyaXB0aW9uKCdUYWtlIGEgc2NyZWVuc2hvdCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCB2aWEgcGxheXdyaWdodC1jbGknKVxuICAuYXJndW1lbnQoJzxpbml0aWFsLXVybD4nLCAnSW5pdGlhbCBVUkwgdG8gb3BlbiBiZWZvcmUgbmF2aWdhdGluZycpXG4gIC5hcmd1bWVudCgnPHBhZ2UtbmFtZT4nLCAnUGFnZSBuYW1lIHRvIG5hdmlnYXRlIHRvIGZyb20gdGhlIGluaXRpYWwgcGFnZScpXG4gIC5hcmd1bWVudCgnPGRlc2NyaXB0aW9uPicsICdEZXNjcmlwdGlvbiBvZiB0aGUgcGFydCB0byBjYXB0dXJlIGluIHRoZSBzY3JlZW5zaG90JylcbiAgLmFkZE9wdGlvbihcbiAgICBuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCAnVXNlIGEgc2NyZWVuc2hvdCBhZ2VudCcpLmNob2ljZXMoWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10pLm1ha2VPcHRpb25NYW5kYXRvcnkoKVxuICApXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihcbiAgICBhc3luYyAoXG4gICAgICBpbml0aWFsVXJsOiBzdHJpbmcsXG4gICAgICBwYWdlTmFtZTogc3RyaW5nLFxuICAgICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICAgIG9wdGlvbnM6IHsgYWdlbnQ6ICdjb2RleCcgfCAnY2xhdWRlJyB8ICdnZW1pbmknIH1cbiAgICApID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKFxuICAgICAgICBhd2FpdCBydW5BZ2VudENvbW1hbmQob3B0aW9ucy5hZ2VudCwgYnVpbGRTY3JlZW5zaG90UHJvbXB0KGluaXRpYWxVcmwsIHBhZ2VOYW1lLCBkZXNjcmlwdGlvbikpXG4gICAgICApO1xuICAgIH1cbiAgKTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdzaW1wbGlmeScsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSBzaW1wbGlmeSBhZ2VudCcsXG4gIGNob2ljZXM6IFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBydW46IChhZ2VudCkgPT4gcnVuQWdlbnRDb21tYW5kKGFnZW50LCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY29kZXgnLCAnUnVuIENvZGV4IFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnb3Blbi1wcicpXG4gIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgcHVsbCByZXF1ZXN0IGZvciB0aGUgY3VycmVudCBicmFuY2gnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgb3BlblByKGJvZHkgfHwgdW5kZWZpbmVkKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtvdXRwdXR9XFxuYCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd1cGRhdGUtcHItYm9keScpXG4gIC5kZXNjcmlwdGlvbignVXBkYXRlIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCBib2R5JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogUFIgYm9keSBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHVwZGF0ZVByQm9keShib2R5KTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtvdXRwdXR9XFxuYCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd1cGRhdGUtcHItdGl0bGUnKVxuICAuZGVzY3JpcHRpb24oJ1VwZGF0ZSB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QgdGl0bGUnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogUFIgdGl0bGUgaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB1cGRhdGVQclRpdGxlKHRpdGxlKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtvdXRwdXR9XFxuYCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjaGVjay1wci1jaScpXG4gIC5kZXNjcmlwdGlvbignU2hvdyB0aGUgbGF0ZXN0IHRlc3QtcmVsYXRlZCBDSSByZXN1bHRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrUHJDaSgpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHJlc3VsdC5vdXRwdXQpO1xuICAgIHByb2Nlc3MuZXhpdChyZXN1bHQuZXhpdENvZGUpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtaXNzdWUnKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGFuIGlzc3VlIGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwnKVxuICAuYXJndW1lbnQoJzxpc3N1ZT4nLCAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKGlzc3VlUmVmZXJlbmNlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVSZWZlcmVuY2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdmZXRjaC1wcicpXG4gIC5kZXNjcmlwdGlvbignRmV0Y2ggYSBwdWxsIHJlcXVlc3QgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgYXMgWUFNTCwgZXhjbHVkaW5nIGlubGluZSBjb21tZW50cycpXG4gIC5hcmd1bWVudCgnW3ByXScsICdHaXRIdWIgcHVsbCByZXF1ZXN0IG51bWJlciBvciBVUkw7IGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGJyYW5jaCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKHByUmVmZXJlbmNlPzogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hQck1lc3NhZ2VzKHByUmVmZXJlbmNlKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnbGlzdC1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGxpc3RQclJldmlld1RocmVhZHMoKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgncmVzb2x2ZS1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignUmVwbHkgdG8gdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBhbmQgcmVzb2x2ZSB0aGVtJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXBsaWVzID0gYXdhaXQgcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXMpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5hd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KTtcblxuZnVuY3Rpb24gYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZDxUTW9kZSBleHRlbmRzIHN0cmluZz4oY29uZmlnOiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgb3B0aW9uRGVzY3JpcHRpb246IHN0cmluZztcbiAgY2hvaWNlczogW1RNb2RlLCAuLi5UTW9kZVtdXTtcbiAgYXJndW1lbnROYW1lPzogc3RyaW5nO1xuICBhcmd1bWVudERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBydW46IChtb2RlOiBUTW9kZSwgYXJndW1lbnQ6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xufSk6IHZvaWQge1xuICBjb25zdCBjb21tYW5kID0gcHJvZ3JhbS5jb21tYW5kKGNvbmZpZy5uYW1lKS5kZXNjcmlwdGlvbihjb25maWcuZGVzY3JpcHRpb24pLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKTtcbiAgaWYgKGNvbmZpZy5hcmd1bWVudE5hbWUpIHtcbiAgICBjb21tYW5kLmFyZ3VtZW50KGNvbmZpZy5hcmd1bWVudE5hbWUsIGNvbmZpZy5hcmd1bWVudERlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGNvbW1hbmRcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYWdlbnQgPGFnZW50PicsIGNvbmZpZy5vcHRpb25EZXNjcmlwdGlvbikuY2hvaWNlcyhjb25maWcuY2hvaWNlcykubWFrZU9wdGlvbk1hbmRhdG9yeSgpKVxuICAgIC5hY3Rpb24oYXN5bmMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgY29uc3QgW2FyZ3VtZW50T3JPcHRpb25zLCBtYXliZU9wdGlvbnNdID0gYXJncyBhcyBbc3RyaW5nIHwgeyBhZ2VudDogVE1vZGUgfSwgeyBhZ2VudDogVE1vZGUgfSB8IHVuZGVmaW5lZF07XG4gICAgICBjb25zdCBhcmd1bWVudCA9IHR5cGVvZiBhcmd1bWVudE9yT3B0aW9ucyA9PT0gJ3N0cmluZycgPyBhcmd1bWVudE9yT3B0aW9ucyA6ICcnO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9ICh0eXBlb2YgYXJndW1lbnRPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gbWF5YmVPcHRpb25zIDogYXJndW1lbnRPck9wdGlvbnMpIGFzIHsgYWdlbnQ6IFRNb2RlIH07XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWcucnVuKG9wdGlvbnMuYWdlbnQsIGFyZ3VtZW50KSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEFnZW50Q29tbWFuZChcbiAgbmFtZTogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBjb25maWdPclJ1bjpcbiAgICB8ICgoKSA9PiBQcm9taXNlPHN0cmluZz4pXG4gICAgfCB7XG4gICAgICAgIGFyZ3VtZW50TmFtZTogc3RyaW5nO1xuICAgICAgICBhcmd1bWVudERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgICBydW46IChhcmd1bWVudDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG4gICAgICB9XG4pOiB2b2lkIHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2dyYW0uY29tbWFuZChuYW1lKS5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbikuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpO1xuXG4gIGlmICh0eXBlb2YgY29uZmlnT3JSdW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb21tYW5kLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWdPclJ1bigpKTtcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb21tYW5kLmFyZ3VtZW50KGNvbmZpZ09yUnVuLmFyZ3VtZW50TmFtZSwgY29uZmlnT3JSdW4uYXJndW1lbnREZXNjcmlwdGlvbikuYWN0aW9uKGFzeW5jIChhcmd1bWVudDogc3RyaW5nKSA9PiB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnT3JSdW4ucnVuKGFyZ3VtZW50KSk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbInJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MiLCJfeCIsIl94MiIsIl9ydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiYXBwbHkiLCJ0aGlzIiwiYXJndW1lbnRzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3IiLCJtIiwiX2NhbGxlZSIsImNvbW1hbmQiLCJvcHRpb25zIiwiX2NvbW1hbmQkIiwicHJvYyIsInN0b3BXYWl0UHJvZ3Jlc3MiLCJjb21tYW5kTG9nZ2VyIiwiX3lpZWxkJFByb21pc2UkYWxsIiwiX3lpZWxkJFByb21pc2UkYWxsMiIsInN0ZG91dCIsInN0ZGVyciIsIm91dHB1dCIsInciLCJfY29udGV4dCIsInAiLCJuIiwic3Bhd24iLCJzbGljZSIsInN0ZGlvIiwiY3JlYXRlV2FpdFByb2dyZXNzIiwid2FpdE1lc3NhZ2UiLCJ3YWl0SW50ZXJ2YWxTZWNvbmRzIiwiY3JlYXRlQ29tbWFuZExvZ2dlciIsImxvZ0ZpbGVQYXRoIiwidiIsIlByb21pc2UiLCJhbGwiLCJzdHJlYW1Ub1RleHQiLCJjaHVuayIsIndyaXRlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uY2UiLCJjb2RlIiwiX3NsaWNlZFRvQXJyYXkiLCJhIiwiY29uY2F0IiwiRXJyb3IiLCJqb2luIiwiY2xvc2UiLCJmIiwiX3gzIiwiX3g0IiwiX3N0cmVhbVRvVGV4dCIsIl9jYWxsZWUyIiwic3RyZWFtIiwib25DaHVuayIsImNodW5rcyIsIl9pdGVyYXRvckFicnVwdENvbXBsZXRpb24iLCJfZGlkSXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJjaHVua1RleHQiLCJfdCIsIl9jb250ZXh0MiIsIl9hc3luY0l0ZXJhdG9yIiwibmV4dCIsImRvbmUiLCJ2YWx1ZSIsInRvU3RyaW5nIiwicHVzaCIsIndyaXRlUHJvZ3Jlc3MiLCJtZXNzYWdlIiwicHJvY2VzcyIsImRvdENvdW50IiwidGltZXIiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJfeDUiLCJfY3JlYXRlQ29tbWFuZExvZ2dlciIsIl9jYWxsZWU2Iiwid2FybiIsIl90MiIsIl9jb250ZXh0NiIsIl9jbG9zZSIsIl9jYWxsZWUzIiwiX2NvbnRleHQzIiwiZXJyb3IiLCJTdHJpbmciLCJta2RpciIsImRpcm5hbWUiLCJyZWN1cnNpdmUiLCJjcmVhdGVXcml0ZVN0cmVhbSIsImZsYWdzIiwib24iLCJ3cml0YWJsZSIsIl9jbG9zZTIiLCJfY2FsbGVlNCIsIl9jb250ZXh0NCIsImVuZCIsIl9jbG9zZTMiLCJfY2FsbGVlNSIsIl9jb250ZXh0NSIsIk5PX0NPTkNFUk5fTUVTU0FHRSIsIkFHRU5UX05BTUVTIiwiQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWCIsIlJlZ0V4cCIsInJ1bkFsbEFnZW50Q29tbWFuZHMiLCJfcnVuQWxsQWdlbnRDb21tYW5kcyIsInByb21wdCIsInJlc29sdmVkUHJvbXB0Iiwib3V0cHV0cyIsImFsbEFnZW50c0xhYmVsIiwid2FpdE1lc3NhZ2VGb3IiLCJtYXAiLCJhZ2VudCIsIl9vcHRpb25zJG1hcE91dHB1dCIsIl9vcHRpb25zJG1hcE91dHB1dDIiLCJfb3B0aW9ucyIsInJ1bkFnZW50Q29tbWFuZCIsInRyaW0iLCJtYXBPdXRwdXQiLCJjYWxsIiwiZGlzcGxheUFnZW50TmFtZSIsImZpbHRlciIsInVuZGVmaW5lZCIsImxlbmd0aCIsIl9ydW5BZ2VudENvbW1hbmQiLCJfdDMiLCJjcmVhdGVBZ2VudENvbW1hbmQiLCJhZ2VudExvZ0ZpbGVQYXRoIiwidGFyZ2V0Iiwibm93IiwiRGF0ZSIsIl9tYXAyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsInR3b0RpZ2l0cyIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsInBhZFN0YXJ0IiwieWFtbFN0cmluZ2lmeU9wdGlvbnMiLCJibG9ja1F1b3RlIiwibGluZVdpZHRoIiwicHJvZ3Jlc3MiLCJwcm9jZXNzU3RkZXJyIiwiZXhpdFdpdGhFcnJvciIsImV4aXQiLCJyZWFkU3RkaW5UZXh0IiwiX3JlYWRTdGRpblRleHQiLCJwcm9jZXNzU3RkaW4iLCJpc1RUWSIsInJlYWRSZXF1aXJlZFN0ZGluVGV4dCIsIl9yZWFkUmVxdWlyZWRTdGRpblRleHQiLCJlcnJvck1lc3NhZ2UiLCJpbnB1dCIsInJ1bkNvbW1hbmQiLCJfcnVuQ29tbWFuZCIsIl9vcHRpb25zJGFsbG93ZWRFeGl0QyIsImFsbG93ZWRFeGl0Q29kZXMiLCJfbG9vcCIsIl9yZXQiLCJhdHRlbXB0IiwiX2NvbW1hbmQkMiIsImV4aXRDb2RlIiwic3RkaW5EYXRhIiwic3RkaW4iLCJpbmNsdWRlcyIsImlzVHJhbnNpZW50R2hGYWlsdXJlIiwiR0hfUkVUUllfTUFYX0FUVEVNUFRTIiwic2xlZXAiLCJkIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZ2giLCJfZ2giLCJhcmdzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2hBbGxvd0V4aXRDb2RlcyIsIl94NiIsIl94NyIsIl94OCIsIl9naEFsbG93RXhpdENvZGVzIiwiY3VycmVudFJlcG9QYXJ0cyIsIl9jdXJyZW50UmVwb1BhcnRzIiwibmFtZVdpdGhPd25lciIsIl9uYW1lV2l0aE93bmVyJHNwbGl0IiwiX25hbWVXaXRoT3duZXIkc3BsaXQyIiwib3duZXIiLCJuYW1lIiwiX2NvbnRleHQ3Iiwic3BsaXQiLCJjdXJyZW50UHJOdW1iZXIiLCJfY3VycmVudFByTnVtYmVyIiwiX2NhbGxlZTciLCJfY29udGV4dDgiLCJncmFwaHFsIiwiX3g5IiwiX3gwIiwiX2dyYXBocWwiLCJfY2FsbGVlOCIsInF1ZXJ5IiwidmFycyIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwia2V5IiwicmVzcG9uc2UiLCJlcnJvck1lc3NhZ2VzIiwiX2NvbnRleHQ5IiwiT2JqZWN0IiwiZW50cmllcyIsIkpTT04iLCJwYXJzZSIsIkFycmF5IiwiaXNBcnJheSIsImVycm9ycyIsIl9lcnJvciRtZXNzYWdlIiwieWFtbER1bXAiLCJkYXRhIiwic3RyaW5naWZ5WWFtbCIsImRlZXBDb3B5Iiwic3RyaW5naWZ5Iiwic3Bhd25TeW5jU2FmZSIsIl9yZXN1bHQkc3RhdHVzIiwiX3Jlc3VsdCRzdGRvdXQiLCJfcmVzdWx0JHN0ZGVyciIsInJlc3VsdCIsInNwYXduU3luYyIsImVuY29kaW5nIiwic3RhdHVzIiwidGVzdCIsIl94MSIsIl9jYWxsZWU5IiwiZGVjb2RlciIsIl9jb250ZXh0MCIsIlRleHREZWNvZGVyIiwiZGVjb2RlIiwiVWludDhBcnJheSIsIlRFU1RfUkVMQVRFRF9QQVRURVJOIiwiV09SS0ZMT1dfUlVOX0pTT05fRklFTERTIiwiRkFJTEVEX0xPR19MSU5FX1BSRUZJWF9QQVRURVJOIiwicnRrQXZhaWxhYmxlIiwibGF0ZXN0UHJDaVJlc3VsdHMiLCJfbGF0ZXN0UHJDaVJlc3VsdHMiLCJwck51bWJlciIsIl9zdW1tYXJ5JHBhc3MiLCJfc3VtbWFyeSRmYWlsIiwiX3N1bW1hcnkkcGVuZGluZyIsIl9zdW1tYXJ5JHNraXBwaW5nIiwiX3N1bW1hcnkkY2FuY2VsIiwiY2hlY2tzIiwicmF3Iiwic3VtbWFyeSIsIlN5bnRheEVycm9yIiwicmVkdWNlIiwiY291bnRzIiwiY2hlY2siLCJfY2hlY2skYnVja2V0MiIsIl9jb3VudHMkYnVja2V0IiwiYnVja2V0IiwidG90YWwiLCJwYXNzIiwiZmFpbCIsInBlbmRpbmciLCJza2lwcGluZyIsImNhbmNlbCIsIndhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJfd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsInNsZWVwRm4iLCJsYXRlc3RDaVJlc3VsdHNGbiIsIndyaXRlUHJvZ3Jlc3NGbiIsImF0dGVtcHRzIiwiY2lSZXN1bHRzIiwiY2xhc3NpZmllZFJlc3VsdHMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QyIiwiZmFpbGVkUmVzdWx0cyIsInJ1bm5pbmdSZXN1bHRzIiwic2xlZXBTZWNvbmRzIiwiY2xhc3NpZmllZExhdGVzdFJlc3VsdHMiLCJmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQiLCJrZXlzIiwibGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3ciLCJncm91cGVkUmVzdWx0cyIsIndvcmtmbG93S2V5Iiwid29ya2Zsb3ciLCJmcm9tRW50cmllcyIsIl9yZWYiLCJfbGF0ZXN0QXR0ZW1wdENoZWNrcyQiLCJfcmVmMiIsImxhdGVzdEF0dGVtcHRDaGVja3MiLCJncm91cHMiLCJncm91cGVkQ2hlY2tzIiwicnVuSWQiLCJ3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayIsIndvcmtmbG93QXR0ZW1wdEtleSIsImdyb3VwIiwiZ2V0Iiwic2V0IiwiTWFwIiwiZnJvbSIsInZhbHVlcyIsImxhdGVzdEdyb3VwIiwiY3VycmVudEdyb3VwIiwibGF0ZXN0R3JvdXBUaW1lc3RhbXAiLCJsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyIsImZpcnN0Q2hlY2siLCJsYXRlc3RDaGVjayIsImN1cnJlbnRMYXRlc3QiLCJsYXRlc3RDaGVja1RpbWVzdGFtcCIsImNsYXNzaWZpY2F0aW9uIiwid29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbiIsInNvbWUiLCJ0ZXN0UmVsYXRlZENoZWNrIiwiX2xpbmskbWF0Y2giLCJsaW5rIiwibWF0Y2giLCJ3b3JrZmxvd1J1biIsIl93b3JrZmxvd1J1biIsInJ1bkpzb24iLCJidWNrZXRzIiwiX2NoZWNrJGJ1Y2tldCIsIl9jaGVjayRzdGFydGVkQXQiLCJ0aW1lc3RhbXAiLCJjb21wbGV0ZWRBdCIsInN0YXJ0ZWRBdCIsIl9zbGVlcFNlY29uZHMiLCJzZWNvbmRzIiwiY2hlY2tQckNpIiwiX2NoZWNrUHJDaSIsIl95aWVsZCR3YWl0Rm9yUnVubmluZyIsIl95aWVsZCR3YWl0Rm9yUnVubmluZzIiLCJ3YWl0QXR0ZW1wdHMiLCJ3YWl0VGltZWRPdXQiLCJjbGFzc2lmaWVkTGF0ZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDQiLCJwYXlsb2FkIiwid2FpdGVkX2Zvcl90ZXN0X3JlbGF0ZWRfY2hlY2tzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHMiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQiLCJfcmVmNCIsIl9yZWY2IiwiY29tcGFjdFdvcmtmbG93IiwiX3Q0IiwiX3Q1IiwiY29tcGFjdFdvcmtmbG93UmVzdWx0IiwiX29iamVjdFNwcmVhZCIsImJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzIiwiZmFpbGVkV29ya2Zsb3dMb2ciLCJmYWlsZWRfd29ya2Zsb3dzIiwidGVzdF93b3JrZmxvd19vdXRwdXQiLCJfcmVmNyIsIl9yZWY4IiwicnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzIiwibGF0ZXN0IiwiX2NvbXBhY3RXb3JrZmxvd1Jlc3VsdCIsIl9zdHJpbmdPclVuZGVmaW5lZCIsInJ1biIsImZhaWxlZEpvYiIsImZhaWxlZFdvcmtmbG93UnVuSm9iIiwic3RyaW5nT3JVbmRlZmluZWQiLCJqb2IiLCJqb2JfdXJsIiwidXJsIiwiZmFpbGVkX3N0ZXAiLCJmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lIiwicnVuX2lkIiwicnVuX3VybCIsImJyYW5jaCIsImhlYWRCcmFuY2giLCJzaGEiLCJoZWFkU2hhIiwiY29uY2x1c2lvbiIsIl9mYWlsZWRXb3JrZmxvd0xvZyIsImxvZyIsImZhaWxlZF9sb2ciLCJyZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyIsInNhbml0aXplZElucHV0Iiwic2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyIsInN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyIsImxpbmUiLCJyZXBsYWNlIiwiam9iTmFtZSIsIl9yZWYzIiwiX3J1biRqb2JzJGZpbmQiLCJqb2JzIiwiZmluZCIsIl9qb2Ikc3RlcHMkZmluZCRuYW1lIiwiX2pvYiRzdGVwcyRmaW5kIiwiX2pvYiRzdGVwcyRmaW5kMiIsInN0ZXBzIiwic3RlcCIsImN1cnJlbnRCYXNlQnJhbmNoIiwiX2N1cnJlbnRCYXNlQnJhbmNoIiwiX3lpZWxkJGN1cnJlbnRQdWxsUmVxIiwiY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCIsImN1cnJlbnREZWZhdWx0QnJhbmNoIiwiX2N1cnJlbnREZWZhdWx0QnJhbmNoIiwicmVxdWlyZU5vbkVtcHR5IiwiX2N1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2giLCJiYXNlQnJhbmNoIiwiaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nIiwibm9ybWFsaXplSXNzdWVOdW1iZXIiLCJyZWZlcmVuY2UiLCJleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyIiwibm9ybWFsaXplUHJOdW1iZXIiLCJmZXRjaElzc3VlTWVzc2FnZXMiLCJfZmV0Y2hJc3N1ZU1lc3NhZ2VzIiwiaXNzdWVOdW1iZXIiLCJfeWllbGQkY3VycmVudFJlcG9QYXIiLCJfeWllbGQkY3VycmVudFJlcG9QYXIyIiwiaXNzdWUiLCJpc3N1ZU1lc3NhZ2VzIiwibnVtYmVyIiwiZmV0Y2hQck1lc3NhZ2VzIiwiX2ZldGNoUHJNZXNzYWdlcyIsInJlc29sdmVkUHJOdW1iZXIiLCJwdWxsUmVxdWVzdCIsImN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyIsInB1bGxfcmVxdWVzdCIsImZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSIsIl9mZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUiLCJwck51bWJlck91dHB1dCIsIl9jdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMiLCJfeWllbGQkY3VycmVudFJlcG9QYXIzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNCIsInByTWVzc2FnZXMiLCJsYWJlbCIsInJlZmVyZW5jZVRleHQiLCJraW5kU2VnbWVudCIsIl9pc3N1ZU1lc3NhZ2VzIiwibWVzc2FnZXMiLCJmZXRjaE1ldGFkYXRhIiwibm91biIsInNlbGVjdE1ldGFkYXRhIiwiX3Jlc3BvbnNlJGRhdGEiLCJyZXBvc2l0b3J5IiwicGFnaW5hdGVNZXNzYWdlcyIsInNlbGVjdENvbm5lY3Rpb24iLCJfcmVzcG9uc2UkZGF0YTIiLCJjb21tZW50cyIsIm1hcE5vZGUiLCJjb21tZW50TWVzc2FnZSIsIl9wck1lc3NhZ2VzIiwiaXNzdWVDb21tZW50cyIsInJldmlld3MiLCJfcmVzcG9uc2UkZGF0YTMiLCJwcklzc3VlQ29tbWVudHMiLCJwclJldmlld3MiLCJzb3J0IiwiY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQiLCJsZWZ0IiwicmlnaHQiLCJsZWZ0Q3JlYXRlZEF0IiwiY3JlYXRlZEF0IiwicmlnaHRDcmVhdGVkQXQiLCJsb2NhbGVDb21wYXJlIiwiX3gxMCIsIl9wcklzc3VlQ29tbWVudHMiLCJfcmVzcG9uc2UkZGF0YTQiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfcHJSZXZpZXdzIiwiX3Jlc3BvbnNlJGRhdGE1IiwicmV2aWV3TWVzc2FnZSIsIl94MTQiLCJfcGFnaW5hdGVNZXNzYWdlcyIsImNvbmZpZyIsImN1cnNvciIsIl9jb25uZWN0aW9uJHBhZ2VJbmZvJCIsImNvbm5lY3Rpb24iLCJOdW1iZXIiLCJub2RlcyIsImhhc01lc3NhZ2VCb2R5IiwicGFnZUluZm8iLCJoYXNOZXh0UGFnZSIsImVuZEN1cnNvciIsIl94MTUiLCJfZmV0Y2hNZXRhZGF0YSIsIl9jYWxsZWUwIiwiX21ldGFkYXRhJGF1dGhvciRsb2dpIiwiX21ldGFkYXRhJGF1dGhvciIsIl9tZXRhZGF0YSRib2R5IiwibWV0YWRhdGEiLCJ0aXRsZSIsImF1dGhvciIsImxvZ2luIiwiYm9keSIsImNvbW1lbnQiLCJfY29tbWVudCRhdXRob3IkbG9naW4iLCJfY29tbWVudCRhdXRob3IiLCJ0eXBlIiwicmV2aWV3IiwiX3JldmlldyRhdXRob3IkbG9naW4iLCJfcmV2aWV3JGF1dGhvciIsIl9yZXZpZXckc3RhdGUiLCJfcmV2aWV3JHN1Ym1pdHRlZEF0IiwiX3JldmlldyRib2R5Iiwic3RhdGUiLCJzdWJtaXR0ZWRBdCIsIm9wZW5QciIsIl9vcGVuUHIiLCJoZWFkIiwiYmFzZSIsImNyZWF0ZUFyZ3MiLCJ1cGRhdGVQckJvZHkiLCJfdXBkYXRlUHJCb2R5IiwidXBkYXRlUHIiLCJ1cGRhdGVQclRpdGxlIiwiX3VwZGF0ZVByVGl0bGUiLCJfdXBkYXRlUHIiLCJlZGl0QXJncyIsInJlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX3JlYWRSZXBsaWVzRnJvbVN0ZGluIiwibm9ybWFsaXplZFJlcGxpZXMiLCJ0aHJlYWRJZCIsInBhcnNlUmVwbHlJbnB1dCIsInJlcGxpZXMiLCJwYWdpbmF0ZVJldmlld1RocmVhZHMiLCJfcGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwib25UaHJlYWQiLCJfeWllbGQkZ3JhcGhxbCRkYXRhIiwiX3Jldmlld1RocmVhZHMkcGFnZUluIiwicmV2aWV3VGhyZWFkcyIsInRocmVhZCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwicyIsImUiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJpZHMiLCJpc1Jlc29sdmVkIiwiaWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsInRocmVhZHMiLCJfcGFnZUluZm8kZW5kQ3Vyc29yIiwiX3lpZWxkJGdyYXBocWwkZGF0YTIiLCJfcGFnZUluZm8kZW5kQ3Vyc29yMiIsImNvbW1lbnRDb25uZWN0aW9uIiwiX3Q2IiwiX3Q3IiwiX3Q4Iiwibm9ybWFsaXplQ29tbWVudEF1dGhvciIsIm5vZGUiLCJpc091dGRhdGVkIiwicGF0aCIsIm9yaWdpbmFsTGluZSIsInN0YXJ0TGluZSIsIm9yaWdpbmFsU3RhcnRMaW5lIiwibGlzdFByUmV2aWV3VGhyZWFkcyIsIl9saXN0UHJSZXZpZXdUaHJlYWRzIiwiX3Q5IiwiX3QwIiwidW5yZXNvbHZlZF90aHJlYWRzIiwicmVzb2x2ZVByUmV2aWV3VGhyZWFkcyIsIl9yZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwidW5yZXNvbHZlZElkcyIsInJlc29sdmVkVGhyZWFkSWRzIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsIl9zdGVwMiR2YWx1ZSIsImluZGV4IiwiX3N0ZXAyJHZhbHVlJCIsIl90MSIsIl90MTAiLCJfdDExIiwiU2V0IiwiaGFzIiwicmVzb2x2ZVJldmlld1RocmVhZCIsInJlc29sdmVkX3RocmVhZF9pZHMiLCJwYXJzZWQiLCJfdHlwZW9mIiwiZXZlcnkiLCJyZXBseSIsImlzUmVwbHlJbnB1dCIsImJ1aWxkUGxhblByb21wdCIsIl9idWlsZFBsYW5Qcm9tcHQiLCJpc3N1ZVlhbWwiLCJidWlsZE1lcmdlQmFzZUNvbW1hbmQiLCJzaGVsbFF1b3RlIiwicmVwbGFjZUFsbCIsImJ1aWxkUmV2aWV3UHJvbXB0IiwiX2J1aWxkUmV2aWV3UHJvbXB0IiwibWVyZ2VCYXNlQ29tbWFuZCIsInByQ29udGV4dCIsImJ1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zIiwiYnVpbGRTY3JlZW5zaG90UHJvbXB0IiwiaW5pdGlhbFVybCIsInBhZ2VOYW1lIiwic2NyZWVuc2hvdERlc2NyaXB0aW9uIiwic2FuaXRpemVkRGVzY3JpcHRpb24iLCJidWlsZFNpbXBsaWZ5UHJvbXB0IiwiX2J1aWxkU2ltcGxpZnlQcm9tcHQiLCJpbnN0YWxsUGFja2VkU2tpbGxzIiwiX2luc3RhbGxQYWNrZWRTa2lsbHMiLCJmaWxlVVJMVG9QYXRoIiwiVVJMIiwicHJvZ3JhbSIsIkNvbW1hbmQiLCJhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kIiwiZGVzY3JpcHRpb24iLCJhbGxvd0V4Y2Vzc0FyZ3VtZW50cyIsImFyZ3VtZW50TmFtZSIsImFyZ3VtZW50IiwiYXJndW1lbnREZXNjcmlwdGlvbiIsImFkZE9wdGlvbiIsIk9wdGlvbiIsIm9wdGlvbkRlc2NyaXB0aW9uIiwiY2hvaWNlcyIsIm1ha2VPcHRpb25NYW5kYXRvcnkiLCJhY3Rpb24iLCJfY2FsbGVlMSIsIl9sZW4iLCJfa2V5IiwiX3JlZjExIiwiYXJndW1lbnRPck9wdGlvbnMiLCJtYXliZU9wdGlvbnMiLCJfYXJnczEiLCJfY29udGV4dDEiLCJhZGRBZ2VudENvbW1hbmQiLCJjb25maWdPclJ1biIsIl9jYWxsZWUxMSIsIl9jb250ZXh0MTEiLCJfY2FsbGVlMTAiLCJfY29udGV4dDEwIiwic2hvd0hlbHBBZnRlckVycm9yIiwibW9kZSIsImNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2UiLCJpc3N1ZVJlZmVyZW5jZSIsInByUmVmZXJlbmNlIiwicGFyc2VBc3luYyIsImFyZ3YiXSwibWFwcGluZ3MiOiI7OzttekhBb0JBLFNBQXNCQSxFQUFzQkMsRUFBQUMsR0FBQSxPQUFBQyxFQUFBQyxNQUFBQyxLQUFBQyxVQUFBLENBMkIzQyxTQUFBSCxJQUFBLE9BQUFBLEVBQUFJLEVBQUFDLElBQUFDLEVBM0JNLFNBQUFDLEVBQXNDQyxFQUFtQkMsR0FBMEIsSUFBQUMsRUFBQUMsRUFBQUMs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
|
package/package.json
CHANGED
package/skills/wbfy/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wbfy
|
|
3
|
-
description: Apply `wbfy` to the current repository.
|
|
3
|
+
description: Apply `wbfy` to the current (target) repository.
|
|
4
4
|
allowed-tools: Bash(bun:*), Bash(gh:*), Bash(git:*), Bash(yarn:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -8,7 +8,7 @@ allowed-tools: Bash(bun:*), Bash(gh:*), Bash(git:*), Bash(yarn:*)
|
|
|
8
8
|
|
|
9
9
|
1. If the current branch is `main`, create and switch to a new branch from the latest remote `main` branch.
|
|
10
10
|
- Make sure the branch is derived from the latest remote `main` branch to avoid merge conflicts when opening a PR.
|
|
11
|
-
2. Run `yarn start <
|
|
11
|
+
2. Run `yarn start <root_path_of_target_repo>` in `~/ghq/github.com/WillBooster/wbfy`.
|
|
12
12
|
3. Run `yarn check-for-ai` or `bun check-for-ai` in the target repository (do not run this in `wbfy`).
|
|
13
13
|
4. If any checks fail, do one of the following:
|
|
14
14
|
- Fix the issues in the target repository, then return to step 2.
|